Packages
pow
1.0.25
1.0.39
1.0.38
1.0.37
1.0.36
1.0.35
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.0-rc.1
0.1.0-alpha.8
0.1.0-alpha.7
retired
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Robust user authentication solution
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/pow/phoenix/html/form_template.ex
defmodule Pow.Phoenix.HTML.FormTemplate do
@moduledoc """
Module that can build user form templates for Phoenix.
For Phoenix 1.3, or bootstrap templates, `Pow.Phoenix.HTML.Bootstrap` can be
used.
"""
alias Pow.Phoenix.HTML.Bootstrap
@template EEx.compile_string(
"""
<%%= form_for @changeset, @action, [as: :user], fn f -> %>
<%%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below.</p>
</div>
<%% end %>
<%= for {label, input, error} <- inputs, input do %>
<%= label %>
<%= input %>
<%= error %>
<% end %>
<div>
<%%= submit <%= inspect button_label %> %>
</div>
<%% end %>
""")
@doc """
Renders a form.
## Options
* `:button_label` - the submit button label, defaults to "Submit".
* `:bootstrap` - to render form as bootstrap, defaults to false with
phoenix 1.4 and true with phoenix 1.3.
"""
@spec render(list(), Keyword.t()) :: Macro.t()
def render(inputs, opts \\ []) do
button_label = Keyword.get(opts, :button_label, "Submit")
case bootstrap?(opts) do
true -> Bootstrap.render_form(inputs, button_label)
_any -> render_form(inputs, button_label)
end
end
# TODO: Remove bootstrap support by 1.1.0 and only support Phoenix 1.4.0
defp bootstrap?(opts) do
bootstrap = Pow.dependency_vsn_match?(:phoenix, "~> 1.3.0")
Keyword.get(opts, :bootstrap, bootstrap)
end
defp render_form(inputs, button_label) do
inputs = for {type, key} <- inputs, do: input(type, key)
unquote(@template)
end
defp input(:text, key) do
{label(key), ~s(<%= text_input f, #{inspect_key(key)} %>), error(key)}
end
defp input(:password, key) do
{label(key), ~s(<%= password_input f, #{inspect_key(key)} %>), error(key)}
end
defp label(key) do
~s(<%= label f, #{inspect_key(key)} %>)
end
defp error(key) do
~s(<%= error_tag f, #{inspect_key(key)} %>)
end
@doc false
@spec inspect_key(any()) :: binary()
def inspect_key({:changeset, :pow_user_id_field}), do: "Pow.Ecto.Schema.user_id_field(@changeset)"
def inspect_key(key), do: inspect(key)
end