├── .editorconfig
├── .formatter.exs
├── .github
├── release.yml
├── renovate.json
└── workflows
│ └── ci.yml
├── .gitignore
├── .tool-versions
├── LICENSE
├── README.md
├── assets
├── flagpack.eex
└── flags
│ ├── ABW.svg
│ ├── AFG.svg
│ ├── AGO.svg
│ ├── AIA.svg
│ ├── ALA.svg
│ ├── ALB.svg
│ ├── AND.svg
│ ├── ARE.svg
│ ├── ARG.svg
│ ├── ARM.svg
│ ├── ASM.svg
│ ├── ATA.svg
│ ├── ATF.svg
│ ├── ATG.svg
│ ├── AUS.svg
│ ├── AUT.svg
│ ├── AZE.svg
│ ├── BDI.svg
│ ├── BEL.svg
│ ├── BEN.svg
│ ├── BFA.svg
│ ├── BGD.svg
│ ├── BGR.svg
│ ├── BHR.svg
│ ├── BHS.svg
│ ├── BIH.svg
│ ├── BLM.svg
│ ├── BLR.svg
│ ├── BLZ.svg
│ ├── BMU.svg
│ ├── BOL.svg
│ ├── BQ-BO.svg
│ ├── BQ-SA.svg
│ ├── BQ-SE.svg
│ ├── BRA.svg
│ ├── BRB.svg
│ ├── BRN.svg
│ ├── BTN.svg
│ ├── BVT.svg
│ ├── BWA.svg
│ ├── CAF.svg
│ ├── CAN.svg
│ ├── CCK.svg
│ ├── CHE.svg
│ ├── CHL.svg
│ ├── CHN.svg
│ ├── CIV.svg
│ ├── CMR.svg
│ ├── COD.svg
│ ├── COG.svg
│ ├── COK.svg
│ ├── COL.svg
│ ├── COM.svg
│ ├── CPV.svg
│ ├── CRI.svg
│ ├── CUB.svg
│ ├── CUW.svg
│ ├── CYM.svg
│ ├── CYP.svg
│ ├── CZE.svg
│ ├── DEU.svg
│ ├── DJI.svg
│ ├── DMA.svg
│ ├── DNK.svg
│ ├── DOM.svg
│ ├── ECU.svg
│ ├── EGY.svg
│ ├── ERI.svg
│ ├── ESH.svg
│ ├── ESP.svg
│ ├── EST.svg
│ ├── ETH.svg
│ ├── FIN.svg
│ ├── FJI.svg
│ ├── FLK.svg
│ ├── FRA.svg
│ ├── FRO.svg
│ ├── FSM.svg
│ ├── GAB.svg
│ ├── GB-ENG.svg
│ ├── GB-NIR.svg
│ ├── GB-SCT.svg
│ ├── GB-UKM.svg
│ ├── GB-WLS.svg
│ ├── GBR.svg
│ ├── GEO.svg
│ ├── GGY.svg
│ ├── GHA.svg
│ ├── GIB.svg
│ ├── GIN.svg
│ ├── GLP.svg
│ ├── GMB.svg
│ ├── GNB.svg
│ ├── GNQ.svg
│ ├── GRC.svg
│ ├── GRD.svg
│ ├── GRL.svg
│ ├── GTM.svg
│ ├── GUF.svg
│ ├── GUM.svg
│ ├── GUY.svg
│ ├── HKG.svg
│ ├── HMD.svg
│ ├── HND.svg
│ ├── HRV.svg
│ ├── HTI.svg
│ ├── HUN.svg
│ ├── IDN.svg
│ ├── IMN.svg
│ ├── IND.svg
│ ├── IOT.svg
│ ├── IRL.svg
│ ├── IRN.svg
│ ├── IRQ.svg
│ ├── ISL.svg
│ ├── ISR.svg
│ ├── ITA.svg
│ ├── JAM.svg
│ ├── JEY.svg
│ ├── JOR.svg
│ ├── JPN.svg
│ ├── KAZ.svg
│ ├── KEN.svg
│ ├── KGZ.svg
│ ├── KHM.svg
│ ├── KIR.svg
│ ├── KNA.svg
│ ├── KOR.svg
│ ├── KWT.svg
│ ├── LAO.svg
│ ├── LBN.svg
│ ├── LBR.svg
│ ├── LBY.svg
│ ├── LCA.svg
│ ├── LIE.svg
│ ├── LKA.svg
│ ├── LSO.svg
│ ├── LTU.svg
│ ├── LUX.svg
│ ├── LVA.svg
│ ├── MAC.svg
│ ├── MAF.svg
│ ├── MAR.svg
│ ├── MCO .svg
│ ├── MDA.svg
│ ├── MDG.svg
│ ├── MDV.svg
│ ├── MEX.svg
│ ├── MHL.svg
│ ├── MKD.svg
│ ├── MLI.svg
│ ├── MLT.svg
│ ├── MNE.svg
│ ├── MNG.svg
│ ├── MNP.svg
│ ├── MOZ.svg
│ ├── MRT.svg
│ ├── MSR.svg
│ ├── MTQ.svg
│ ├── MUS.svg
│ ├── MWI.svg
│ ├── MYS.svg
│ ├── NAM.svg
│ ├── NCL.svg
│ ├── NER.svg
│ ├── NFK.svg
│ ├── NGA.svg
│ ├── NIC.svg
│ ├── NIU.svg
│ ├── NLD.svg
│ ├── NOR.svg
│ ├── NPL.svg
│ ├── NRU.svg
│ ├── NZL.svg
│ ├── OMN.svg
│ ├── PAK.svg
│ ├── PAN.svg
│ ├── PCN.svg
│ ├── PER.svg
│ ├── PHL.svg
│ ├── PLW.svg
│ ├── PNG.svg
│ ├── POL.svg
│ ├── PRI.svg
│ ├── PRK.svg
│ ├── PRT.svg
│ ├── PRY.svg
│ ├── PSE.svg
│ ├── PYF.svg
│ ├── QAT.svg
│ ├── REU.svg
│ ├── ROU.svg
│ ├── RUS.svg
│ ├── RWA.svg
│ ├── SAU.svg
│ ├── SDN.svg
│ ├── SEN.svg
│ ├── SGP.svg
│ ├── SGS.svg
│ ├── SHN.svg
│ ├── SJM.svg
│ ├── SLB.svg
│ ├── SLE.svg
│ ├── SLV.svg
│ ├── SMR.svg
│ ├── SOM.svg
│ ├── SPM.svg
│ ├── SRB.svg
│ ├── SSD.svg
│ ├── STP.svg
│ ├── SUR.svg
│ ├── SVK.svg
│ ├── SVN.svg
│ ├── SWE.svg
│ ├── SWZ.svg
│ ├── SXM.svg
│ ├── SYC.svg
│ ├── SYR.svg
│ ├── TCA.svg
│ ├── TCD.svg
│ ├── TGO.svg
│ ├── THA.svg
│ ├── TJK.svg
│ ├── TKM.svg
│ ├── TLS.svg
│ ├── TON.svg
│ ├── TTO.svg
│ ├── TUN.svg
│ ├── TUR.svg
│ ├── TUV.svg
│ ├── TWN.svg
│ ├── TZA.svg
│ ├── UGA.svg
│ ├── UKR.svg
│ ├── UMI.svg
│ ├── URY.svg
│ ├── USA.svg
│ ├── UZB.svg
│ ├── VAT.svg
│ ├── VCT.svg
│ ├── VEN.svg
│ ├── VGB.svg
│ ├── VIR.svg
│ ├── VNM.svg
│ ├── VUT.svg
│ ├── WLF.svg
│ ├── WSM.svg
│ ├── YEM.svg
│ ├── ZAF.svg
│ ├── ZMB.svg
│ └── ZWE.svg
├── blend.exs
├── blend
├── phoenix_live_view_v0_18
│ └── mix.lock
├── phoenix_live_view_v0_19
│ └── mix.lock
├── phoenix_live_view_v0_20
│ └── mix.lock
└── premix.exs
├── lib
├── flagpack.ex
├── helpers.ex
└── mix
│ └── tasks
│ └── build.ex
├── mix.exs
├── mix.lock
└── test
├── flagpack_test.exs
└── test_helper.exs
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_size = 2
7 | indent_style = space
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
--------------------------------------------------------------------------------
/.formatter.exs:
--------------------------------------------------------------------------------
1 | # Used by "mix format"
2 | [
3 | line_length: 120,
4 | import_deps: [:phoenix],
5 | plugins: [Phoenix.LiveView.HTMLFormatter],
6 | inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}"]
7 | ]
8 |
--------------------------------------------------------------------------------
/.github/release.yml:
--------------------------------------------------------------------------------
1 | changelog:
2 | exclude:
3 | labels:
4 | - ignore-for-release
5 | categories:
6 | - title: 🎉 New features
7 | labels:
8 | - feature
9 | - title: 🚀 Enhancements
10 | labels:
11 | - enhancement
12 | - title: 🐛 Bug fixes
13 | labels:
14 | - bug
15 | - title: 📖 Documentation
16 | labels:
17 | - documentation
18 | - title: 🔄 Dependency updates
19 | labels:
20 | - dependencies
21 | - title: Other changes
22 | labels:
23 | - "*"
24 |
--------------------------------------------------------------------------------
/.github/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "github>Flo0807/renovate-config//base",
5 | ":reviewer(Flo0807)"
6 | ],
7 | "packageRules": [
8 | {
9 | "matchManagers": [
10 | "mix"
11 | ],
12 | "rangeStrategy": "update-lockfile"
13 | },
14 | {
15 | "matchManagers": [
16 | "github-actions"
17 | ],
18 | "labels": [
19 | "ignore-for-release"
20 | ]
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | release:
6 | types: [published]
7 |
8 | jobs:
9 | ci:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
13 |
14 | - uses: erlef/setup-beam@8aa8a857c6be0daae6e97272bb299d5b942675a4 # v1.19.0
15 | id: beam
16 | with:
17 | version-file: .tool-versions
18 | version-type: strict
19 |
20 | - name: Restore the deps and _build cache
21 | uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
22 | id: restore-cache
23 | env:
24 | OTP_VERSION: ${{ steps.beam.outputs.otp-version }}
25 | ELIXIR_VERSION: ${{ steps.beam.outputs.elixir-version }}
26 | MIX_LOCK_HASH: ${{ hashFiles('**/mix.lock') }}
27 | with:
28 | path: |
29 | deps
30 | _build
31 | key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-mixlockhash-${{ env.MIX_LOCK_HASH }}
32 |
33 | - name: Install mix dependencies
34 | if: steps.restore-cache.outputs.cache-hit != 'true'
35 | run: mix deps.get
36 |
37 | - name: Compile dependencies
38 | if: steps.restore-cache.outputs.cache-hit != 'true'
39 | run: mix deps.compile
40 |
41 | - name: Compile
42 | run: mix compile --warnings-as-errors --force
43 |
44 | - name: Check Formatting
45 | run: mix format --check-formatted
46 |
47 | - name: Check unused deps
48 | run: mix deps.unlock --check-unused
49 |
50 | - name: Build docs
51 | run: mix docs --warnings-as-errors
52 |
53 | - name: Install mix dependencies for blend
54 | run: mix blend.get
55 |
56 | - name: Run Tests (Phoenix LiveView v0.18)
57 | run: BLEND=phoenix_live_view_v0_18 mix test
58 |
59 | - name: Run Tests (Phoenix LiveView v0.19)
60 | run: BLEND=phoenix_live_view_v0_19 mix test
61 |
62 | - name: Run Tests (Phoenix LiveView v0.20)
63 | run: BLEND=phoenix_live_view_v0_20 mix test
64 |
65 | - name: Run Tests
66 | run: mix test --warnings-as-errors
67 |
68 | - name: Publish package
69 | if: github.event_name == 'release'
70 | env:
71 | HEX_API_KEY: ${{ secrets.HEX_API_KEY }}
72 | run: mix hex.publish --yes
73 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # The directory Mix will write compiled artifacts to.
2 | /_build/
3 |
4 | # If you run "mix test --cover", coverage assets end up here.
5 | /cover/
6 |
7 | # The directory Mix downloads your dependencies sources to.
8 | /deps/
9 |
10 | # Where third-party dependencies like ExDoc output generated docs.
11 | /doc/
12 |
13 | # Ignore .fetch files in case you like to edit your project deps locally.
14 | /.fetch
15 |
16 | # If the VM crashes, it generates a dump, let's ignore it too.
17 | erl_crash.dump
18 |
19 | # Also ignore archive artifacts (built via "mix archive.build").
20 | *.ez
21 |
22 | # Ignore package tarball (built via "mix hex.build").
23 | flagpack-*.tar
24 |
25 | # Temporary files, for example, from tests.
26 | /tmp/
27 |
28 | .DS_Store
29 | .elixir_ls
30 |
31 | /blend/*/_build
32 | /blend/*/deps
33 |
--------------------------------------------------------------------------------
/.tool-versions:
--------------------------------------------------------------------------------
1 | elixir 1.18.4
2 | erlang 27.3.4
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Florian Arens
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flagpack
2 |
3 | [](https://github.com/Flo0807/flagpack_elixir/actions/workflows/ci.yml)
4 | [](https://hex.pm/packages/flagpack)
5 | [](https://hexdocs.pm/flagpack/Flagpack.html)
6 |
7 | Flagpack provides 4x3 country flags as `Phoenix.Component`. Based on [flagpack.xyz](https://flagpack.xyz/).
8 |
9 | The generation of the flags is inspired by [heroicons_elixir](https://github.com/mveytsman/heroicons_elixir).
10 |
11 | ## Installation
12 |
13 | The package can be installed by adding `flagpack` to your list of dependencies in `mix.exs`:
14 |
15 | ```elixir
16 | def deps do
17 | [
18 | {:flagpack, "~> 0.5.0"}
19 | ]
20 | end
21 | ```
22 |
23 | ## Usage
24 |
25 | Each component accepts an optional class attribute in order to be able to add extra classes to the component.
26 |
27 | ```eex
28 |
29 |
30 | ```
31 |
32 | You may use the `Flagpack.flag/1` function and pass a flag name. This can be useful when you want to generate the flag name dynamically.
33 |
34 | ```eex
35 |
36 |
37 | ```
38 |
39 | For additional information and list of all flags see [the docs](https://hexdocs.pm/flagpack/Flagpack.html).
40 |
41 | ## Naming
42 |
43 | The name of a function for a flag is the country's three letter code (ISO 3166-1 alpha-3) in lowercase. You may search for flags here https://flagpack.xyz/docs/flag-index/.
44 |
45 | For Andorra we use the country's two letter code (ISO 3166-1 alpha-2) `ad`, because we are not able to name the function `and`.
46 |
--------------------------------------------------------------------------------
/assets/flagpack.eex:
--------------------------------------------------------------------------------
1 | defmodule Flagpack do
2 | @moduledoc """
3 | Provides 4x3 country flags as `Phoenix.Component`. Based on [flagpack.xyz](https://flagpack.xyz/).
4 |
5 | Each component accepts an optional class attribute in order to be able to add extra classes to the component.
6 |
7 | ## Usage
8 |
9 |
10 |
11 | You may use the `Flagpack.flag/1` function and pass a flag name.
12 |
13 |
14 |
15 | """
16 | use Phoenix.Component
17 |
18 | attr :class, :string, default: nil, required: false, doc: "class to be added to the component"
19 | attr :name, :atom, required: true, doc: "the name of the flag to be rendered"
20 |
21 | @doc """
22 | Renders a flag by the given name.
23 |
24 | ## Examples
25 |
26 |
27 | """
28 | def flag(assigns) do
29 | apply(Flagpack, assigns.name, [assigns])
30 | end
31 |
32 | <%= for %{func: func, alpha: alpha, svg: svg} <- @flags do %>
33 | @doc """
34 | Renders the <%= Flagpack.Helpers.country_name_by_alpha(alpha) %> flag.
35 |
36 | ## Examples
37 | />
38 | class="w-5 h-5" />
39 | """
40 | attr :class, :string, default: nil, required: false, doc: "class to be added to the component"
41 |
42 | def <%= func %>(assigns) do
43 | ~H"""
44 |
45 | <%= svg %>
46 |
47 | """
48 | end
49 | <% end %>
50 | end
51 |
--------------------------------------------------------------------------------
/assets/flags/ABW.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ALA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ARE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ARM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ATA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ATF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ATG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/AUS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/AUT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/AZE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BDI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BEL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BEN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BFA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BGD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BGR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BHR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BHS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BIH.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BLM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BQ-BO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BQ-SA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BQ-SE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BRA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BRB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BVT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/BWA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CAF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CAN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CCK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CHE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CHL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CHN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CIV.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CMR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/COD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/COG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/COK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/COL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/COM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CPV.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CRI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CUB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CUW.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/CZE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/DEU.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/DJI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/DNK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/EGY.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ESH.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/EST.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ETH.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/FIN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/FRA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/FRO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/FSM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GAB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GB-ENG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GB-NIR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GB-SCT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GB-UKM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GBR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GEO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GGY.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GHA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GIB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GIN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GMB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GNB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GNQ.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GRC.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GRD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GRL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GUF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/GUY.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/HKG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/HMD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/HND.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/HUN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/IDN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/IMN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/IND.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/IRL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/IRQ.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ISL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ISR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ITA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/JAM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/JOR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/JPN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/KEN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/KGZ.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/KNA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/KOR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/KWT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LAO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LBN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LBR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LBY.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LCA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LSO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LTU.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LUX.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/LVA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MAC.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MAF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MAR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MCO .svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MDG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MDV.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MEX.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MHL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MKD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MLI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MLT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MNG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MOZ.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MRT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MUS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MWI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/MYS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NAM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NCL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NER.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NGA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NIC.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NLD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NOR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NPL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/NRU.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/OMN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PAK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PAN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PLW.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PNG.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/POL.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PRI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PRK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PRY.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/PSE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/QAT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/REU.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ROU.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/RUS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/RWA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SDN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SEN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SGP.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SJM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SLB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SLE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SLV.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SOM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SSD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/STP.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SUR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SVK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SWE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SYC.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/SYR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TCD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TGO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/THA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TJK.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TLS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TON.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TTO.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TUN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TUR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TUV.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TWN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/TZA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/UGA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/UKR.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/UMI.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/USA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/UZB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/VCT.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/VEN.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/VNM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/WLF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/WSM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/YEM.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ZAF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/flags/ZWE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/blend.exs:
--------------------------------------------------------------------------------
1 | %{
2 | phoenix_live_view_v0_18: [{:phoenix_live_view, "~> 0.18.0"}],
3 | phoenix_live_view_v0_19: [{:phoenix_live_view, "~> 0.19.0"}],
4 | phoenix_live_view_v0_20: [{:phoenix_live_view, "~> 0.20.0"}]
5 | }
6 |
--------------------------------------------------------------------------------
/blend/premix.exs:
--------------------------------------------------------------------------------
1 | # This file is autogenerated by blend package.
2 | #
3 | # Run `mix blend.gen.premix` to update it's contents after
4 | # each blend package version update.
5 |
6 | maybe_put_env = fn varname, value ->
7 | System.put_env(varname, System.get_env(varname, value))
8 | end
9 |
10 | existing_blend = fn name ->
11 | Code.eval_file("blend.exs")
12 | |> elem(0)
13 | |> Map.fetch!(String.to_atom(name))
14 | end
15 |
16 | blend = System.get_env("BLEND")
17 |
18 | if blend && String.length(blend) > 0 && existing_blend.(blend) do
19 | maybe_put_env.("MIX_LOCKFILE", "blend/#{blend}/mix.lock")
20 | maybe_put_env.("MIX_DEPS_PATH", "blend/#{blend}/deps")
21 | maybe_put_env.("MIX_BUILD_ROOT", "blend/#{blend}/_build")
22 | end
23 |
--------------------------------------------------------------------------------
/lib/mix/tasks/build.ex:
--------------------------------------------------------------------------------
1 | defmodule Mix.Tasks.Build do
2 | # Builds a new lib/flagpack.ex based on the flags.
3 | @moduledoc false
4 | @shortdoc false
5 | use Mix.Task
6 |
7 | @target_file Path.join("lib", "flagpack.ex")
8 |
9 | def run(_) do
10 | svg_path = svg_path()
11 |
12 | flags =
13 | svg_path
14 | |> Path.join("*.svg")
15 | |> Path.wildcard()
16 | |> Enum.map(&%{func: function_name(&1), alpha: file_root_name(&1), svg: File.read!(&1)})
17 |
18 | Mix.Generator.copy_template("assets/flagpack.eex", @target_file, flags: flags, force: true)
19 |
20 | Mix.Task.run("format")
21 | end
22 |
23 | defp file_root_name(file) do
24 | file
25 | |> Path.basename()
26 | |> Path.rootname()
27 | end
28 |
29 | defp function_name(file) do
30 | file
31 | |> file_root_name()
32 | |> String.downcase()
33 | |> do_function_name()
34 | end
35 |
36 | defp do_function_name("and"), do: "ad"
37 | defp do_function_name(rootname), do: rootname |> String.split("-") |> Enum.join("_")
38 |
39 | defp svg_path, do: Path.join("assets", "flags")
40 | end
41 |
--------------------------------------------------------------------------------
/mix.exs:
--------------------------------------------------------------------------------
1 | if File.exists?("blend/premix.exs") do
2 | Code.compile_file("blend/premix.exs")
3 | end
4 |
5 | defmodule Flagpack.MixProject do
6 | use Mix.Project
7 |
8 | @source_url "https://github.com/Flo0807/flagpack_elixir"
9 |
10 | defp description do
11 | """
12 | Provides 4x3 country flags as Phoenix.Component. Based on flagpack.
13 | """
14 | end
15 |
16 | defp package do
17 | [
18 | files: ["lib", "mix.exs", "README*", "LICENSE*"],
19 | maintainers: ["Florian Arens"],
20 | licenses: ["MIT"],
21 | links: %{"GitHub" => @source_url},
22 | name: "flagpack"
23 | ]
24 | end
25 |
26 | def project do
27 | [
28 | app: :flagpack,
29 | version: "0.5.2",
30 | elixir: "~> 1.16",
31 | start_permanent: Mix.env() == :prod,
32 | deps: deps(),
33 | description: description(),
34 | package: package(),
35 | name: "Flagpack",
36 | source_url: @source_url,
37 | docs: docs()
38 | ]
39 | |> Keyword.merge(maybe_lockfile_option())
40 | end
41 |
42 | def application do
43 | [
44 | extra_applications: [:logger]
45 | ]
46 | end
47 |
48 | defp deps do
49 | [
50 | {:phoenix_live_view, ">= 0.18.0"},
51 | {:ex_doc, "~> 0.38.0", only: :dev, runtime: false},
52 | {:blend, "~> 0.5.0", only: :dev}
53 | ]
54 | end
55 |
56 | defp docs do
57 | [
58 | main: "Flagpack",
59 | source_ref: "main",
60 | source_url_pattern: "#{@source_url}/blob/main/%{path}#L%{line}"
61 | ]
62 | end
63 |
64 | defp maybe_lockfile_option do
65 | case System.get_env("MIX_LOCKFILE") do
66 | nil -> []
67 | "" -> []
68 | lockfile -> [lockfile: lockfile]
69 | end
70 | end
71 | end
72 |
--------------------------------------------------------------------------------
/test/test_helper.exs:
--------------------------------------------------------------------------------
1 | ExUnit.start()
2 |
--------------------------------------------------------------------------------