Spaces:
Sleeping
Sleeping
| defmodule ChaiWeb 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 ChaiWeb, :controller | |
| use ChaiWeb, :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. | |
| """ | |
| def static_paths, do: ~w(uploads assets fonts images favicon.svg logo.svg robots.txt) | |
| def router do | |
| quote do | |
| use Phoenix.Router, helpers: false | |
| # Import common connection and controller functions to use in pipelines | |
| import Plug.Conn | |
| import Phoenix.Controller | |
| import Phoenix.LiveView.Router | |
| end | |
| end | |
| def channel do | |
| quote do | |
| use Phoenix.Channel | |
| end | |
| end | |
| def controller do | |
| quote do | |
| use Phoenix.Controller, | |
| formats: [:html, :json], | |
| layouts: [html: ChaiWeb.Layouts] | |
| import Plug.Conn | |
| unquote(verified_routes()) | |
| end | |
| end | |
| def live_view do | |
| quote do | |
| use Phoenix.LiveView, | |
| layout: {ChaiWeb.Layouts, :app} | |
| unquote(html_helpers()) | |
| end | |
| end | |
| def live_component do | |
| quote do | |
| use Phoenix.LiveComponent | |
| unquote(html_helpers()) | |
| end | |
| end | |
| 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 | |
| # HTML escaping functionality | |
| import Phoenix.HTML | |
| # Core UI components and translation | |
| import ChaiWeb.CoreComponents | |
| # Shortcut for generating JS commands | |
| alias Phoenix.LiveView.JS | |
| # Routes generation with the ~p sigil | |
| unquote(verified_routes()) | |
| end | |
| end | |
| def verified_routes do | |
| quote do | |
| use Phoenix.VerifiedRoutes, | |
| endpoint: ChaiWeb.Endpoint, | |
| router: ChaiWeb.Router, | |
| statics: ChaiWeb.static_paths() | |
| end | |
| end | |
| @doc """ | |
| When used, dispatch to the appropriate controller/view/etc. | |
| """ | |
| defmacro __using__(which) when is_atom(which) do | |
| apply(__MODULE__, which, []) | |
| end | |
| end | |