defmodule MicrowavepropWeb do @moduledoc """ The entrypoint for defining your web interface, such as controllers, components, channels, and so on. This can be used in your application as: use MicrowavepropWeb, :controller use MicrowavepropWeb, :html The definitions below will be executed for every controller, component, etc, so keep them short and clean, focused on imports, uses and aliases. Do NOT define functions inside the quoted expressions below. Instead, define additional modules and import those modules here. """ @spec static_paths :: [String.t()] def static_paths, do: ~w(assets fonts images downloads favicon.ico robots.txt sitemap.xml) @spec router :: Macro.t() def router do quote do use Phoenix.Router, helpers: false import Phoenix.Controller import Phoenix.LiveView.Router # Import common connection and controller functions to use in pipelines import Plug.Conn end end @spec channel :: Macro.t() def channel do quote do use Phoenix.Channel end end @spec controller :: Macro.t() def controller do quote do use Phoenix.Controller, formats: [:html, :json] import Plug.Conn unquote(verified_routes()) end end @spec live_view :: Macro.t() def live_view do quote do use Phoenix.LiveView on_mount MicrowavepropWeb.UserAuth unquote(html_helpers()) end end @spec live_component :: Macro.t() def live_component do quote do use Phoenix.LiveComponent unquote(html_helpers()) end end @spec html :: Macro.t() def html do quote do use Phoenix.Component # Import convenience functions from controllers import Phoenix.Controller, only: [get_csrf_token: 0, view_module: 1, view_template: 1] # Include general helpers for rendering HTML unquote(html_helpers()) end end defp html_helpers do quote do import MicrowavepropWeb.CoreComponents # HTML escaping functionality import Phoenix.HTML # Core UI components alias MicrowavepropWeb.Layouts # Common modules used in templates alias Phoenix.LiveView.JS # Routes generation with the ~p sigil unquote(verified_routes()) end end @spec verified_routes :: Macro.t() def verified_routes do quote do use Phoenix.VerifiedRoutes, endpoint: MicrowavepropWeb.Endpoint, router: MicrowavepropWeb.Router, statics: MicrowavepropWeb.static_paths() end end @doc """ When used, dispatch to the appropriate controller/live_view/etc. """ defmacro __using__(which) when is_atom(which) do apply(__MODULE__, which, []) end end