Packages
moon
2.79.4
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
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"
# 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.DropdownPage,
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