Packages
moon
2.90.5
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Retired package: Deprecated - Package no longer supported. Use moon_live_view package instead
Current section
Files
Jump to
Current section
Files
lib/moon_web/schema/link.ex
defmodule MoonWeb.Schema.Link do
@moduledoc "Some menu links listing to be used inside the site"
defstruct name: nil,
key: nil,
icon: nil
# TODO: add Old Components pages if needed. Add Homepage.
def pages() do
[
[MoonWeb.Pages.VisionPage, icon: "generic_loyalty"],
[MoonWeb.Pages.GettingStartedPage, icon: "other_rocket"],
[MoonWeb.Pages.HowToContributePage, icon: "other_lifebuoy"],
[MoonWeb.Pages.ColoursPage, icon: "software_settings"],
[MoonWeb.Pages.TokensPage, icon: "software_puzzle"],
[MoonWeb.Pages.TypographyPage, icon: "text_size"],
[MoonWeb.Pages.ComponentsPage, icon: "software_plate"],
[MoonWeb.Pages.ManifestPage, icon: "generic_trophy"],
MoonWeb.Pages.Design.AccordionPage,
MoonWeb.Pages.Design.AlertPage,
MoonWeb.Pages.Design.AvatarPage,
MoonWeb.Pages.Design.BottomSheetPage,
MoonWeb.Pages.Design.BreadcrumbPage,
MoonWeb.Pages.Design.Button.ButtonPage,
MoonWeb.Pages.Design.Button.IconButtonPage,
MoonWeb.Pages.Design.CarouselPage,
MoonWeb.Pages.Design.ChipPage,
MoonWeb.Pages.Design.DrawerPage,
MoonWeb.Pages.Design.DropdownPage,
MoonWeb.Pages.Components.IconsPage,
MoonWeb.Pages.Design.LoaderPage,
MoonWeb.Pages.Design.MenuItemPage,
MoonWeb.Pages.Design.ModalPage,
MoonWeb.Pages.Design.PaginationPage,
MoonWeb.Pages.Design.PopoverPage,
MoonWeb.Pages.Design.Progress.LinearProgressPage,
MoonWeb.Pages.Design.Progress.CircularProgressPage,
MoonWeb.Pages.Design.SearchPage,
MoonWeb.Pages.Design.SnackbarPage,
MoonWeb.Pages.Design.SwitchPage,
MoonWeb.Pages.Design.TablePage,
MoonWeb.Pages.Design.TabsPage,
MoonWeb.Pages.Design.TagPage,
MoonWeb.Pages.Design.TooltipPage,
MoonWeb.Pages.Design.Form.AuthCodePage,
MoonWeb.Pages.Design.Form.CheckboxPage,
MoonWeb.Pages.Design.Form.ComboboxPage,
MoonWeb.Pages.Design.Form.GroupPage,
MoonWeb.Pages.Design.Form.InputPage,
MoonWeb.Pages.Design.Form.InsetInputPage,
MoonWeb.Pages.Design.Form.RadioPage,
MoonWeb.Pages.Design.Form.SelectPage,
MoonWeb.Pages.Design.Form.TextAreaPage
]
end
@doc "returns flat list of pages - for search purposes"
def titles() do
pages()
|> Enum.map(fn
[page | rest] -> [{:page, page}, {:key, page_to_title(page)} | rest]
page -> [page: page, key: page_to_title(page)]
end)
end
@doc "returns structured list of pages - for menu"
def menu() do
items = titles()
items_with_icon = Enum.filter(items, fn item -> item[:icon] != nil end)
items_without_icon = Enum.filter(items, fn item -> item[:icon] == nil end)
sorted_items_without_icon =
items_without_icon
|> Enum.reduce(%{}, fn item, acc ->
group = get_group(item[:page])
acc |> Map.update(group, [item], &(&1 ++ [item]))
end)
|> Enum.map(fn {key, value} ->
if length(value) == 1 do
List.first(value)
else
[key: group_to_title(key), children: value]
end
end)
|> Enum.sort_by(& &1[:key])
sorted_items_without_icon ++ items_with_icon
end
defp get_group(page) do
page
|> to_string()
|> String.split(".")
|> Enum.slice(0..4)
|> Enum.join(".")
end
defp page_to_title(page) do
page
|> to_string()
|> String.replace(~r/.*\.([a-zA-Z]*)Page/, "\\1")
|> String.replace(~r/([a-z])([A-Z])/, "\\1 \\2")
end
defp group_to_title(group) do
group
|> to_string()
|> String.split(".")
|> List.last()
end
end