defmodule <%= @web_module %> do
@moduledoc """
The entrypoint for defining your web interface, such as controllers,
components, channels, and so on. JobyKit-flavored: imports
`JobyKit.CoreComponents` so `<.button>`, `<.input>`, `<.icon>`, etc.
resolve to the kit-shipped wrappers.
"""
def static_paths, do: ~w(assets fonts images favicon.ico robots.txt)
def router do
quote do
use Phoenix.Router, helpers: false
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: <%= @web_module %>.Layouts]
import Plug.Conn
unquote(verified_routes())
end
end
def live_view do
quote do
use Phoenix.LiveView
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 Phoenix.Controller, only: [get_csrf_token: 0, view_module: 1, view_template: 1]
unquote(html_helpers())
end
end
defp html_helpers do
quote do
import Phoenix.HTML
# JobyKit-shipped wrappers: <.button>, <.card>, <.icon>, <.input>,
# <.flash>, <.flash_group>, <.header>, <.list>, <.table>.
import JobyKit.CoreComponents
# Common modules used in templates
alias Phoenix.LiveView.JS
alias <%= @web_module %>.Layouts
unquote(verified_routes())
end
end
def verified_routes do
quote do
use Phoenix.VerifiedRoutes,
endpoint: <%= @web_module %>.Endpoint,
router: <%= @web_module %>.Router,
statics: <%= @web_module %>.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