fix: Re-style sign in form

This commit is contained in:
Robert Prehn 2020-08-22 10:01:04 -05:00
parent 98e90dd32c
commit 8216060402
22 changed files with 2758 additions and 3205 deletions

2
.gitignore vendored
View file

@ -26,7 +26,7 @@ legendary-*.tar
npm-debug.log npm-debug.log
# The directory NPM downloads your dependencies sources to. # The directory NPM downloads your dependencies sources to.
/assets/node_modules/ node_modules
# Since we are building assets from assets/, # Since we are building assets from assets/,
# we ignore priv/static. You may want to comment # we ignore priv/static. You may want to comment

View file

@ -1,7 +1,7 @@
// We need to import the CSS so that webpack will load it. // We need to import the CSS so that webpack will load it.
// The MiniCssExtractPlugin is used to separate it out into // The MiniCssExtractPlugin is used to separate it out into
// its own CSS file. // its own CSS file.
import "../css/app.scss" import "../css/app.css"
// webpack automatically bundles all modules in your // webpack automatically bundles all modules in your
// entry points. Those entry points can be configured // entry points. Those entry points can be configured

View file

@ -1,7 +1,7 @@
// We need to import the CSS so that webpack will load it. // We need to import the CSS so that webpack will load it.
// The MiniCssExtractPlugin is used to separate it out into // The MiniCssExtractPlugin is used to separate it out into
// its own CSS file. // its own CSS file.
import "../css/app.scss" import "../css/app.css"
// webpack automatically bundles all modules in your // webpack automatically bundles all modules in your
// entry points. Those entry points can be configured // entry points. Those entry points can be configured

View file

@ -1,7 +1,7 @@
// We need to import the CSS so that webpack will load it. // We need to import the CSS so that webpack will load it.
// The MiniCssExtractPlugin is used to separate it out into // The MiniCssExtractPlugin is used to separate it out into
// its own CSS file. // its own CSS file.
import "../css/app.scss" import "../css/app.css"
// webpack automatically bundles all modules in your // webpack automatically bundles all modules in your
// entry points. Those entry points can be configured // entry points. Those entry points can be configured

View file

@ -1,41 +1,38 @@
<div class="ui middle aligned center aligned grid"> <section class="absolute w-full h-full">
<div class="column"> <div
<h2 class="ui teal image header"> class="absolute top-0 w-full h-full bg-gray-700"
<div class="content"> ></div>
Log-in To My Account <div class="container mx-auto px-4 h-full">
</div> <div class="flex content-center items-center justify-center h-full">
</h2> <div class="w-full lg:w-4/12 px-4">
<%= flash_block(@conn) %> <h1 class="relative text-white text-xl font-semibold text-center pb-6">Log In</h1>
<%= changeset_error_block(@changeset) %> <%= changeset_error_block(@changeset) %>
<%= form_for @changeset, @action, [as: :user, class: "ui large form"], fn f -> %> <div
<div class="ui stacked segment"> class="relative flex flex-col min-w-0 break-words w-full mb-6 shadow-lg rounded-lg bg-gray-300 border-0"
<div class="field <%= error_class(f, :password) %>"> >
<div class="ui left icon input"> <div class="flex-auto px-4 lg:px-10 py-10 pt-6">
<i class="user icon"></i> <%= form_for @changeset, @action, [as: :user, class: "ui large form"], fn f -> %>
<%= text_input f, Pow.Ecto.Schema.user_id_field(@changeset), placeholder: "E-mail address" %> <%= styled_input f, Pow.Ecto.Schema.user_id_field(@changeset), icon: "user", placeholder: "joe@example.org" %>
<%= styled_input f, :password, icon: "lock", type: "password" %>
<%= hidden_input f, :persistent_session, value: "true" %>
<div class="text-center mt-6">
<%= submit "Sign In", class: "bg-gray-900 text-white active:bg-gray-700 text-sm font-bold uppercase px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 w-full" %>
</div>
<% end %>
</div> </div>
<%= error_tag f, Pow.Ecto.Schema.user_id_field(@changeset), class: "ui error message" %>
</div> </div>
<div class="field <%= error_class(f, :password) %>"> <div class="flex flex-wrap mt-6">
<div class="ui left icon input"> <div class="w-full relative min-w-0 break-words w-full mb-6 shadow-lg rounded-lg bg-gray-500 border-0 py-4 px-4">
<i class="lock icon"></i> New to us? <span><%= link "Register", to: Routes.pow_registration_path(@conn, :new) %></span>
<%= password_input f, :password, placeholder: "Password" %>
</div> </div>
<%= error_tag f, :password, class: "ui error message" %>
</div>
<%= hidden_input f, :persistent_session, value: "true" %>
<%= submit "Login", class: "ui fluid large teal submit button" %>
</div>
<% end %>
<div class="ui message"> <%= if pow_extension_enabled?(PowResetPassword) do %>
New to us? <span><%= link "Register", to: Routes.pow_registration_path(@conn, :new) %></span> <div class="w-full relative min-w-0 break-words w-full mb-6 shadow-lg rounded-lg bg-gray-500 border-0 py-4 px-4">
Forgot your password? <span><%= link("Reset password", to: Routes.pow_reset_password_reset_password_path(@conn, :new)) %></span>
</div>
<% end %>
</div>
</div>
</div> </div>
<%= if pow_extension_enabled?(PowResetPassword) do %>
<div class="ui message">
Forgot your password? <span><%= link("Reset password", to: Routes.pow_reset_password_reset_password_path(@conn, :new)) %></span>
</div>
<% end %>
</div> </div>
</div> </section>

View file

@ -1,7 +1,7 @@
// We need to import the CSS so that webpack will load it. // We need to import the CSS so that webpack will load it.
// The MiniCssExtractPlugin is used to separate it out into // The MiniCssExtractPlugin is used to separate it out into
// its own CSS file. // its own CSS file.
import "../css/app.scss" import "../css/app.css"
// webpack automatically bundles all modules in your // webpack automatically bundles all modules in your
// entry points. Those entry points can be configured // entry points. Those entry points can be configured

View file

@ -72,7 +72,7 @@ defmodule Content.PostsController do
defp try_static_post(conn, id) do defp try_static_post(conn, id) do
path = "static_pages/#{id}.html" path = "static_pages/#{id}.html"
try do try do
render(conn, path) render(conn |> put_flash(:error, "Tits!"), path)
rescue rescue
e in Phoenix.Template.UndefinedError -> e in Phoenix.Template.UndefinedError ->
case e do case e do

View file

@ -1,180 +1,700 @@
<style type="text/css"> <main>
.hidden.menu { <div
display: none; class="relative pt-16 pb-32 flex content-center items-center justify-center"
} style="min-height: 75vh;"
>
.heroic { <div
min-height: 700px; class="absolute top-0 w-full h-full bg-center bg-cover"
padding: 1em 0em; style='background-image: url("https://images.unsplash.com/photo-1557804506-669a67965ba0?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1267&amp;q=80");'
} >
.masthead .logo.item img { <span
margin-right: 1em; id="blackOverlay"
} class="w-full h-full absolute opacity-75 bg-black"
.masthead .ui.menu .ui.button { ></span>
margin-left: 0.5em;
}
.masthead h1.ui.header {
margin-top: 3em;
margin-bottom: 0em;
font-size: 4em;
font-weight: normal;
}
.masthead h2 {
font-size: 1.7em;
font-weight: normal;
}
.ui.vertical.stripe {
padding: 8em 0em;
}
.ui.vertical.stripe h3 {
font-size: 2em;
}
.ui.vertical.stripe .button + h3,
.ui.vertical.stripe p + h3 {
margin-top: 3em;
}
.ui.vertical.stripe .floated.image {
clear: both;
}
.ui.vertical.stripe p {
font-size: 1.33em;
}
.ui.vertical.stripe .horizontal.divider {
margin: 3em 0em;
}
.quote.stripe.segment {
padding: 0em;
}
.quote.stripe.segment .grid .column {
padding-top: 5em;
padding-bottom: 5em;
}
.footer.segment {
padding: 5em 0em;
}
.secondary.pointing.menu .toc.item {
display: none;
}
@media only screen and (max-width: 700px) {
.ui.fixed.menu {
display: none !important;
}
.secondary.pointing.menu .item,
.secondary.pointing.menu .menu {
display: none;
}
.secondary.pointing.menu .toc.item {
display: block;
}
.masthead.segment {
min-height: 350px;
}
.masthead h1.ui.header {
font-size: 2em;
margin-top: 1.5em;
}
.masthead h2 {
margin-top: 0.5em;
font-size: 1.5em;
}
}
</style>
<div class="pusher">
<div class="ui inverted vertical heroic masthead center aligned segment">
<div class="ui text container">
<h1 class="ui inverted header">
Imagine-a-Company
</h1>
<h2>Do whatever you want when you want to.</h2>
<div class="ui huge primary button">Get Started <i class="right arrow icon"></i></div>
</div> </div>
</div> <div class="container relative mx-auto">
</div> <div class="items-center flex flex-wrap">
<div class="w-full lg:w-6/12 px-4 ml-auto mr-auto text-center">
<div class="ui vertical stripe segment"> <div class="pr-12">
<div class="ui middle aligned stackable grid container"> <h1 class="text-white font-semibold text-5xl">
<div class="row"> Your story starts with us.
<div class="eight wide column"> </h1>
<h3 class="ui header">We Help Companies and Companions</h3> <p class="mt-4 text-lg text-gray-300">
<p>We can give your company superpowers to do things that they never thought possible. Let us delight your customers and empower your needs...through pure data analytics.</p> This is a simple example of a Landing Page you can build using
<h3 class="ui header">We Make Bananas That Can Dance</h3> Tailwind Starter Kit. It features multiple CSS components
<p>Yes that's right, you thought it was the stuff of dreams, but even bananas can be bioengineered.</p> based on the Tailwindcss design system.
</div> </p>
<div class="six wide right floated column"> </div>
<img src="/images/wireframe/white-image.png" class="ui large bordered rounded image"> </div>
</div>
</div>
<div class="row">
<div class="center aligned column">
<a class="ui huge button">Check Them Out</a>
</div>
</div>
</div>
</div>
<div class="ui vertical stripe quote segment">
<div class="ui equal width stackable internally celled grid">
<div class="center aligned row">
<div class="column">
<h3>"What a Company"</h3>
<p>That is what they all say about us</p>
</div>
<div class="column">
<h3>"I shouldn't have gone with their competitor."</h3>
<p>
<img src="/images/avatar/nan.jpg" class="ui avatar image"> <b>Nan</b> Chief Fun Officer Acme Toys
</p>
</div>
</div>
</div>
</div>
<div class="ui vertical stripe segment">
<div class="ui text container">
<h3 class="ui header">Breaking The Grid, Grabs Your Attention</h3>
<p>Instead of focusing on content creation and hard work, we have learned how to master the art of doing nothing by providing massive amounts of whitespace and generic content that can seem massive, monolithic and worth your attention.</p>
<a class="ui large button">Read More</a>
<h4 class="ui horizontal header divider">
<a href="#">Case Studies</a>
</h4>
<h3 class="ui header">Did We Tell You About Our Bananas?</h3>
<p>Yes I know you probably disregarded the earlier boasts as non-sequitur filler content, but its really true. It took years of gene splicing and combinatory DNA research, but our bananas can really dance.</p>
<a class="ui large button">I'm Still Quite Interested</a>
</div>
</div>
<div class="ui inverted vertical footer segment">
<div class="ui container">
<div class="ui stackable inverted divided equal height stackable grid">
<div class="three wide column">
<h4 class="ui inverted header">About</h4>
<div class="ui inverted link list">
<a href="#" class="item">Sitemap</a>
<a href="#" class="item">Contact Us</a>
<a href="#" class="item">Religious Ceremonies</a>
<a href="#" class="item">Gazebo Plans</a>
</div> </div>
</div> </div>
<div class="three wide column"> <div
<h4 class="ui inverted header">Services</h4> class="top-auto bottom-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden"
<div class="ui inverted link list"> style="height: 70px; transform: translateZ(0px);"
<a href="#" class="item">Banana Pre-Order</a> >
<a href="#" class="item">DNA FAQ</a> <svg
<a href="#" class="item">How To Access</a> class="absolute bottom-0 overflow-hidden"
<a href="#" class="item">Favorite X-Men</a> xmlns="http://www.w3.org/2000/svg"
</div> preserveAspectRatio="none"
</div> version="1.1"
<div class="seven wide column"> viewBox="0 0 2560 100"
<h4 class="ui inverted header">Footer Header</h4> x="0"
<p>Extra space for a call to action inside the footer that could help re-engage users.</p> y="0"
>
<polygon
class="text-gray-300 fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div> </div>
</div> </div>
</div> <section class="pb-20 bg-gray-300 -mt-24">
<div class="container mx-auto px-4">
<div class="flex flex-wrap">
<div class="lg:pt-12 pt-6 w-full md:w-4/12 px-4 text-center">
<div
class="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"
>
<div class="px-4 py-5 flex-auto">
<div
class="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-red-400"
>
<i class="fas fa-award"></i>
</div>
<h6 class="text-xl font-semibold">Awarded Agency</h6>
<p class="mt-2 mb-4 text-gray-600">
Divide details about your product or agency work into parts.
A paragraph describing a feature will be enough.
</p>
</div>
</div>
</div>
<div class="w-full md:w-4/12 px-4 text-center">
<div
class="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"
>
<div class="px-4 py-5 flex-auto">
<div
class="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-blue-400"
>
<i class="fas fa-retweet"></i>
</div>
<h6 class="text-xl font-semibold">Free Revisions</h6>
<p class="mt-2 mb-4 text-gray-600">
Keep you user engaged by providing meaningful information.
Remember that by this time, the user is curious.
</p>
</div>
</div>
</div>
<div class="pt-6 w-full md:w-4/12 px-4 text-center">
<div
class="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"
>
<div class="px-4 py-5 flex-auto">
<div
class="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-green-400"
>
<i class="fas fa-fingerprint"></i>
</div>
<h6 class="text-xl font-semibold">Verified Company</h6>
<p class="mt-2 mb-4 text-gray-600">
Write a few lines about each one. A paragraph describing a
feature will be enough. Keep you user engaged!
</p>
</div>
</div>
</div>
</div>
<div class="flex flex-wrap items-center mt-32">
<div class="w-full md:w-5/12 px-4 mr-auto ml-auto">
<div
class="text-gray-600 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-gray-100"
>
<i class="fas fa-user-friends text-xl"></i>
</div>
<h3 class="text-3xl mb-2 font-semibold leading-normal">
Working with us is a pleasure
</h3>
<p
class="text-lg font-light leading-relaxed mt-4 mb-4 text-gray-700"
>
Don't let your uses guess by attaching tooltips and popoves to
any element. Just make sure you enable them first via
JavaScript.
</p>
<p
class="text-lg font-light leading-relaxed mt-0 mb-4 text-gray-700"
>
The kit comes with three pre-built pages to help you get started
faster. You can change the text and images and you're good to
go. Just make sure you enable them first via JavaScript.
</p>
<a
href="https://www.creative-tim.com/learning-lab/tailwind-starter-kit#/presentation"
class="font-bold text-gray-800 mt-8"
>Check Tailwind Starter Kit!</a
>
</div>
<div class="w-full md:w-4/12 px-4 mr-auto ml-auto">
<div
class="relative flex flex-col min-w-0 break-words bg-white w-full mb-6 shadow-lg rounded-lg bg-pink-600"
>
<img
alt="..."
src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=1051&amp;q=80"
class="w-full align-middle rounded-t-lg"
/>
<blockquote class="relative p-8 mb-4">
<svg
preserveAspectRatio="none"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 583 95"
class="absolute left-0 w-full block"
style="height: 95px; top: -94px;"
>
<polygon
points="-30,95 583,95 583,65"
class="text-pink-600 fill-current"
></polygon>
</svg>
<h4 class="text-xl font-bold text-white">
Top Notch Services
</h4>
<p class="text-md font-light mt-2 text-white">
The Arctic Ocean freezes every winter and much of the
sea-ice then thaws every summer, and that process will
continue whatever happens.
</p>
</blockquote>
</div>
</div>
</div>
</div>
</section>
<section class="relative py-20">
<div
class="bottom-auto top-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden -mt-20"
style="height: 80px; transform: translateZ(0px);"
>
<svg
class="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
class="text-white fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
<div class="container mx-auto px-4">
<div class="items-center flex flex-wrap">
<div class="w-full md:w-4/12 ml-auto mr-auto px-4">
<img
alt="..."
class="max-w-full rounded-lg shadow-lg"
src="https://images.unsplash.com/photo-1555212697-194d092e3b8f?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=634&amp;q=80"
/>
</div>
<div class="w-full md:w-5/12 ml-auto mr-auto px-4">
<div class="md:pr-12">
<div
class="text-pink-600 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-pink-300"
>
<i class="fas fa-rocket text-xl"></i>
</div>
<h3 class="text-3xl font-semibold">A growing company</h3>
<p class="mt-4 text-lg leading-relaxed text-gray-600">
The extension comes with three pre-built pages to help you get
started faster. You can change the text and images and you're
good to go.
</p>
<ul class="list-none mt-6">
<li class="py-2">
<div class="flex items-center">
<div>
<span
class="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-pink-600 bg-pink-200 mr-3"
><i class="fas fa-fingerprint"></i
></span>
</div>
<div>
<h4 class="text-gray-600">
Carefully crafted components
</h4>
</div>
</div>
</li>
<li class="py-2">
<div class="flex items-center">
<div>
<span
class="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-pink-600 bg-pink-200 mr-3"
><i class="fab fa-html5"></i
></span>
</div>
<div>
<h4 class="text-gray-600">Amazing page examples</h4>
</div>
</div>
</li>
<li class="py-2">
<div class="flex items-center">
<div>
<span
class="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-pink-600 bg-pink-200 mr-3"
><i class="far fa-paper-plane"></i
></span>
</div>
<div>
<h4 class="text-gray-600">Dynamic components</h4>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<section class="pt-20 pb-48">
<div class="container mx-auto px-4">
<div class="flex flex-wrap justify-center text-center mb-24">
<div class="w-full lg:w-6/12 px-4">
<h2 class="text-4xl font-semibold">Here are our heroes</h2>
<p class="text-lg leading-relaxed m-4 text-gray-600">
According to the National Oceanic and Atmospheric
Administration, Ted, Scambos, NSIDClead scentist, puts the
potentially record maximum.
</p>
</div>
</div>
<div class="flex flex-wrap">
<div class="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div class="px-6">
<img
alt="..."
src="./assets/img/team-1-800x800.jpg"
class="shadow-lg rounded-full max-w-full mx-auto"
style="max-width: 120px;"
/>
<div class="pt-6 text-center">
<h5 class="text-xl font-bold">Ryan Tompson</h5>
<p class="mt-1 text-sm text-gray-500 uppercase font-semibold">
Web Developer
</p>
<div class="mt-6">
<button
class="bg-blue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-twitter"></i></button
><button
class="bg-blue-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-facebook-f"></i></button
><button
class="bg-pink-500 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-dribbble"></i>
</button>
</div>
</div>
</div>
</div>
<div class="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div class="px-6">
<img
alt="..."
src="./assets/img/team-2-800x800.jpg"
class="shadow-lg rounded-full max-w-full mx-auto"
style="max-width: 120px;"
/>
<div class="pt-6 text-center">
<h5 class="text-xl font-bold">Romina Hadid</h5>
<p class="mt-1 text-sm text-gray-500 uppercase font-semibold">
Marketing Specialist
</p>
<div class="mt-6">
<button
class="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-google"></i></button
><button
class="bg-blue-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-facebook-f"></i>
</button>
</div>
</div>
</div>
</div>
<div class="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div class="px-6">
<img
alt="..."
src="./assets/img/team-3-800x800.jpg"
class="shadow-lg rounded-full max-w-full mx-auto"
style="max-width: 120px;"
/>
<div class="pt-6 text-center">
<h5 class="text-xl font-bold">Alexa Smith</h5>
<p class="mt-1 text-sm text-gray-500 uppercase font-semibold">
UI/UX Designer
</p>
<div class="mt-6">
<button
class="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-google"></i></button
><button
class="bg-blue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-twitter"></i></button
><button
class="bg-gray-800 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-instagram"></i>
</button>
</div>
</div>
</div>
</div>
<div class="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div class="px-6">
<img
alt="..."
src="./assets/img/team-4-470x470.png"
class="shadow-lg rounded-full max-w-full mx-auto"
style="max-width: 120px;"
/>
<div class="pt-6 text-center">
<h5 class="text-xl font-bold">Jenna Kardi</h5>
<p class="mt-1 text-sm text-gray-500 uppercase font-semibold">
Founder and CEO
</p>
<div class="mt-6">
<button
class="bg-pink-500 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-dribbble"></i></button
><button
class="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-google"></i></button
><button
class="bg-blue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-twitter"></i></button
><button
class="bg-gray-800 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i class="fab fa-instagram"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="pb-20 relative block bg-gray-900">
<div
class="bottom-auto top-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden -mt-20"
style="height: 80px; transform: translateZ(0px);"
>
<svg
class="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
class="text-gray-900 fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
<div class="container mx-auto px-4 lg:pt-24 lg:pb-64">
<div class="flex flex-wrap text-center justify-center">
<div class="w-full lg:w-6/12 px-4">
<h2 class="text-4xl font-semibold text-white">Build something</h2>
<p class="text-lg leading-relaxed mt-4 mb-4 text-gray-500">
Put the potentially record low maximum sea ice extent tihs year
down to low ice. According to the National Oceanic and
Atmospheric Administration, Ted, Scambos.
</p>
</div>
</div>
<div class="flex flex-wrap mt-12 justify-center">
<div class="w-full lg:w-3/12 px-4 text-center">
<div
class="text-gray-900 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"
>
<i class="fas fa-medal text-xl"></i>
</div>
<h6 class="text-xl mt-5 font-semibold text-white">
Excelent Services
</h6>
<p class="mt-2 mb-4 text-gray-500">
Some quick example text to build on the card title and make up
the bulk of the card's content.
</p>
</div>
<div class="w-full lg:w-3/12 px-4 text-center">
<div
class="text-gray-900 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"
>
<i class="fas fa-poll text-xl"></i>
</div>
<h5 class="text-xl mt-5 font-semibold text-white">
Grow your market
</h5>
<p class="mt-2 mb-4 text-gray-500">
Some quick example text to build on the card title and make up
the bulk of the card's content.
</p>
</div>
<div class="w-full lg:w-3/12 px-4 text-center">
<div
class="text-gray-900 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"
>
<i class="fas fa-lightbulb text-xl"></i>
</div>
<h5 class="text-xl mt-5 font-semibold text-white">Launch time</h5>
<p class="mt-2 mb-4 text-gray-500">
Some quick example text to build on the card title and make up
the bulk of the card's content.
</p>
</div>
</div>
</div>
</section>
<section class="relative block py-24 lg:pt-0 bg-gray-900">
<div class="container mx-auto px-4">
<div class="flex flex-wrap justify-center lg:-mt-64 -mt-48">
<div class="w-full lg:w-6/12 px-4">
<div
class="relative flex flex-col min-w-0 break-words w-full mb-6 shadow-lg rounded-lg bg-gray-300"
>
<div class="flex-auto p-5 lg:p-10">
<h4 class="text-2xl font-semibold">Want to work with us?</h4>
<p class="leading-relaxed mt-1 mb-4 text-gray-600">
Complete this form and we will get back to you in 24 hours.
</p>
<div class="relative w-full mb-3 mt-8">
<label
class="block uppercase text-gray-700 text-xs font-bold mb-2"
for="full-name"
>Full Name</label
><input
type="text"
class="px-3 py-3 placeholder-gray-400 text-gray-700 bg-white rounded text-sm shadow focus:outline-none focus:shadow-outline w-full"
placeholder="Full Name"
style="transition: all 0.15s ease 0s;"
/>
</div>
<div class="relative w-full mb-3">
<label
class="block uppercase text-gray-700 text-xs font-bold mb-2"
for="email"
>Email</label
><input
type="email"
class="px-3 py-3 placeholder-gray-400 text-gray-700 bg-white rounded text-sm shadow focus:outline-none focus:shadow-outline w-full"
placeholder="Email"
style="transition: all 0.15s ease 0s;"
/>
</div>
<div class="relative w-full mb-3">
<label
class="block uppercase text-gray-700 text-xs font-bold mb-2"
for="message"
>Message</label
><textarea
rows="4"
cols="80"
class="px-3 py-3 placeholder-gray-400 text-gray-700 bg-white rounded text-sm shadow focus:outline-none focus:shadow-outline w-full"
placeholder="Type a message..."
></textarea>
</div>
<div class="text-center mt-6">
<button
class="bg-gray-900 text-white active:bg-gray-700 text-sm font-bold uppercase px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1"
type="button"
style="transition: all 0.15s ease 0s;"
>
Send Message
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="relative bg-gray-300 pt-8 pb-6">
<div
class="bottom-auto top-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden -mt-20"
style="height: 80px; transform: translateZ(0px);"
>
<svg
class="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
class="text-gray-300 fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
<div class="container mx-auto px-4">
<div class="flex flex-wrap">
<div class="w-full lg:w-6/12 px-4">
<h4 class="text-3xl font-semibold">Let's keep in touch!</h4>
<h5 class="text-lg mt-0 mb-2 text-gray-700">
Find us on any of these platforms, we respond 1-2 business days.
</h5>
<div class="mt-6">
<button
class="bg-white text-blue-400 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2 p-3"
type="button"
>
<i class="flex fab fa-twitter"></i></button
><button
class="bg-white text-blue-600 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2 p-3"
type="button"
>
<i class="flex fab fa-facebook-square"></i></button
><button
class="bg-white text-pink-400 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2 p-3"
type="button"
>
<i class="flex fab fa-dribbble"></i></button
><button
class="bg-white text-gray-900 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2 p-3"
type="button"
>
<i class="flex fab fa-github"></i>
</button>
</div>
</div>
<div class="w-full lg:w-6/12 px-4">
<div class="flex flex-wrap items-top mb-6">
<div class="w-full lg:w-4/12 px-4 ml-auto">
<span
class="block uppercase text-gray-600 text-sm font-semibold mb-2"
>Useful Links</span
>
<ul class="list-unstyled">
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://www.creative-tim.com/presentation"
>About Us</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://blog.creative-tim.com"
>Blog</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://www.github.com/creativetimofficial"
>Github</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://www.creative-tim.com/bootstrap-themes/free"
>Free Products</a
>
</li>
</ul>
</div>
<div class="w-full lg:w-4/12 px-4">
<span
class="block uppercase text-gray-600 text-sm font-semibold mb-2"
>Other Resources</span
>
<ul class="list-unstyled">
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://github.com/creativetimofficial/argon-design-system/blob/master/LICENSE.md"
>MIT License</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://creative-tim.com/terms"
>Terms &amp; Conditions</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://creative-tim.com/privacy"
>Privacy Policy</a
>
</li>
<li>
<a
class="text-gray-700 hover:text-gray-900 font-semibold block pb-2 text-sm"
href="https://creative-tim.com/contact-us"
>Contact Us</a
>
</li>
</ul>
</div>
</div>
</div>
</div>
<hr class="my-6 border-gray-400" />
<div
class="flex flex-wrap items-center md:justify-between justify-center"
>
<div class="w-full md:w-4/12 px-4 mx-auto text-center">
<div class="text-sm text-gray-600 font-semibold py-1">
Copyright © 2019 Tailwind Starter Kit by
<a
href="https://www.creative-tim.com"
class="text-gray-600 hover:text-gray-900"
>Creative Tim</a
>.
</div>
</div>
</div>
</div>
</footer>

View file

@ -0,0 +1,82 @@
{
"extends": "stylelint-config-standard",
"plugins": [
"stylelint-order"
],
"rules": {
"order/properties-order": [
[
{
groupName: "display",
emptyLineBefore: "never",
properties: [
"display",
"flex-wrap",
"justify-content"
]
},
{
groupName: "positioning",
emptyLineBefore: "never",
properties: [
"position",
"top",
"right",
"bottom",
"left",
"z-index"
],
},
{
groupName: "box-model",
emptyLineBefore: "never",
properties: [
"min-width",
"width",
"max-width",
"min-height",
"height",
"max-height",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left"
],
},
{
groupName: "color-and-type",
emptyLineBefore: "never",
properties: [
"background-color",
"color",
"font-family",
"font-size",
"font-weight",
],
},
{
groupName: "decoration",
emptyLineBefore: "never",
properties: [
"border",
"border-color",
"box-shadow"
],
}
],
{
unspecified: "bottomAlphabetical"
}
]
},
"ignoreFiles": ["node_modules/**/*.css"]
}

View file

@ -0,0 +1,5 @@
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

View file

@ -1,8 +0,0 @@
// Menu buttons get a little spacing
.masthead .ui.menu .ui.button {
margin-left: 0.5em;
}
[class*="top padded"] {
padding-top: 4em;
}

View file

@ -1,8 +1,7 @@
import '../semantic/src/semantic.less';
// We need to import the CSS so that webpack will load it. // We need to import the CSS so that webpack will load it.
// The MiniCssExtractPlugin is used to separate it out into // The MiniCssExtractPlugin is used to separate it out into
// its own CSS file. // its own CSS file.
import "../css/app.scss" import "../css/app.css"
// webpack automatically bundles all modules in your // webpack automatically bundles all modules in your
// entry points. Those entry points can be configured // entry points. Those entry points can be configured
@ -38,6 +37,10 @@ const toggleSidebar = (event) => {
} }
ready(() => { ready(() => {
document.getElementById('nav-toggle').onclick = function(){
document.getElementById("nav-content").classList.toggle("hidden");
}
document.querySelectorAll('.js-passwordRevealer').forEach((el) => { document.querySelectorAll('.js-passwordRevealer').forEach((el) => {
el.addEventListener('click', togglePasswordFieldVisibility) el.addEventListener('click', togglePasswordFieldVisibility)
}) })
@ -45,4 +48,10 @@ ready(() => {
document.querySelectorAll('.js-SidebarOpener').forEach((el) => { document.querySelectorAll('.js-SidebarOpener').forEach((el) => {
el.addEventListener('click', toggleSidebar) el.addEventListener('click', toggleSidebar)
}) })
document.querySelectorAll('.js-flash-closer').forEach((el) => {
el.addEventListener('click', () => {
el.closest('.js-flash').remove()
})
})
}) })

File diff suppressed because it is too large Load diff

View file

@ -9,10 +9,15 @@
"profile": "webpack --mode development --plugin webpack/lib/debug/ProfilingPlugin" "profile": "webpack --mode development --plugin webpack/lib/debug/ProfilingPlugin"
}, },
"dependencies": { "dependencies": {
"autoprefixer": "^9.8.6",
"csswring": "^7.0.0",
"gulp": "^4.0.2", "gulp": "^4.0.2",
"phoenix": "file:../deps/phoenix", "phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html", "phoenix_html": "file:../deps/phoenix_html",
"simplemde": "^1.11.2" "postcss-color-function": "^4.1.0",
"simplemde": "^1.11.2",
"stylelint": "^13.6.1",
"tailwindcss": "^1.7.3"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.0.0", "@babel/core": "^7.0.0",
@ -22,15 +27,19 @@
"css-loader": "^3.4.2", "css-loader": "^3.4.2",
"extract-text-webpack-plugin": "^3.0.2", "extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^6.0.0", "file-loader": "^6.0.0",
"fomantic-ui": "^2.8.6",
"image-webpack-loader": "^6.0.0", "image-webpack-loader": "^6.0.0",
"less": "^3.11.3", "less": "^3.11.3",
"less-loader": "^6.2.0", "less-loader": "^6.2.0",
"mini-css-extract-plugin": "^0.9.0", "mini-css-extract-plugin": "^0.9.0",
"node-sass": "^4.13.1", "node-sass": "^4.13.1",
"optimize-css-assets-webpack-plugin": "^5.0.1", "optimize-css-assets-webpack-plugin": "^5.0.1",
"postcss-css-variables": "^0.17.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"sass-loader": "^8.0.2", "sass-loader": "^8.0.2",
"style-loader": "^1.2.1", "style-loader": "^1.2.1",
"stylelint-config-standard": "^20.0.0",
"stylelint-order": "^4.1.0",
"terser-webpack-plugin": "^2.3.2", "terser-webpack-plugin": "^2.3.2",
"webpack": "4.41.5", "webpack": "4.41.5",
"webpack-cli": "^3.3.2" "webpack-cli": "^3.3.2"

View file

@ -0,0 +1,10 @@
module.exports = {
plugins: [
require('postcss-import')(),
require('stylelint')(),
require('tailwindcss'),
require('autoprefixer'),
require('csswring')(),
require('postcss-color-function')()
],
}

View file

@ -0,0 +1,11 @@
module.exports = {
future: {
removeDeprecatedGapUtilities: true,
},
purge: [],
theme: {
extend: {},
},
variants: {},
plugins: [],
}

View file

@ -17,16 +17,16 @@ module.exports = (env, options) => {
new OptimizeCSSAssetsPlugin({}) new OptimizeCSSAssetsPlugin({})
] ]
}, },
mode: options.mode,
devtool: devMode ? 'source-map' : undefined,
entry: { entry: {
'app': glob.sync('./vendor/**/*.js').concat(['./js/app.js']), 'app': glob.sync('./vendor/**/*.js').concat(['./js/app.js']),
'content-editor': ['./js/content-editor.js'], 'content-editor': ['./js/content-editor.js'],
}, },
output: { output: {
filename: '[name].js', filename: 'js/[name].js',
path: path.resolve(__dirname, '../priv/static/js'), path: path.resolve(__dirname, '../priv/static/')
publicPath: '/js/'
}, },
devtool: devMode ? 'source-map' : undefined,
module: { module: {
rules: [ rules: [
// For images and fonts found in our scss files // For images and fonts found in our scss files
@ -55,24 +55,11 @@ module.exports = (env, options) => {
} }
}, },
{ {
test: /\.[s]?css$/, test: /\.css$/,
use: [ use: [
MiniCssExtractPlugin.loader, {loader: MiniCssExtractPlugin.loader, options: {sourceMap: true}},
'css-loader',
'sass-loader',
],
},
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
{loader: 'css-loader', options: {sourceMap: true}}, {loader: 'css-loader', options: {sourceMap: true}},
{ {loader: 'postcss-loader', options: {sourceMap: true}},
loader: 'less-loader',
options: {
sourceMap: true,
},
},
], ],
}, },
] ]
@ -82,13 +69,12 @@ module.exports = (env, options) => {
filename: 'css/[name].css', filename: 'css/[name].css',
chunkFilename: '[id].css', chunkFilename: '[id].css',
}), }),
new CopyWebpackPlugin([{ from: 'static/', to: '../' }]) new CopyWebpackPlugin([
{
from: path.resolve(__dirname, 'static'),
to: path.resolve(__dirname, '../priv/static'),
},
]),
], ],
resolve: {
alias: {
"../../theme.config$": path.join(__dirname, "/semantic-ui/theme.config"),
"../semantic-ui/site": path.join(__dirname, "/semantic-ui/site")
}
},
} }
}; };

View file

@ -1,23 +1,39 @@
<div class="ui container"> <nav class="flex items-center justify-between flex-wrap bg-grey-dark p-6 fixed w-full z-10 pin-t">
<div class="ui large secondary inverted pointing menu"> <div class="flex items-center flex-no-shrink text-white mr-6">
<a class="toc item js-SidebarOpener"> <a class="text-white no-underline hover:text-white hover:no-underline" href="/">
<i class="sidebar icon"></i> <span class="text-2xl pl-2"><i class="em em-grinning"></i> <%= I18n.t! "en", "site.title" %></span>
</a> </a>
<a class="item" href="/">Home</a>
<%= if has_role?(@conn, :admin) do %>
<a class="item" href="/admin">Admin</a>
<% end %>
<div class="right item">
<%= if Pow.Plug.current_user(@conn) do %>
<%= link "Sign out", to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :delete), method: :delete, class: "ui inverted button" %>
<% else %>
<%= link to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :new), class: "ui inverted button" do %>
Log in
<% end %>
<%= link to: AuthWeb.Router.Helpers.pow_registration_path(%URI{path: "/auth"}, :new), class: "ui inverted button" do %>
Sign Up
<% end %>
<% end %>
</div>
</div> </div>
</div>
<div class="block lg:hidden">
<button id="nav-toggle" class="flex items-center px-3 py-2 border rounded text-white border-grey-dark hover:text-white hover:border-white">
<svg class="fill-current h-3 w-3" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><title>Menu</title><path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"/></svg>
</button>
</div>
<div class="w-full flex-grow lg:flex lg:items-center lg:w-auto hidden lg:block pt-6 lg:pt-0" id="nav-content">
<ul class="list-reset lg:flex justify-end flex-1 items-center">
<%= if has_role?(@conn, :admin) do %>
<li class="mr-3">
<a class="inline-block py-2 px-4 text-white no-underline" href="/admin">Admin</a>
</li>
<% end %>
<%= if Pow.Plug.current_user(@conn) do %>
<li class="mr-3">
<%= link "Sign Out", to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :delete), method: :delete, class: "inline-block text-white no-underline hover:text-white hover:text-underline py-2 px-4" %>
</li>
<% else %>
<li class="mr-3">
<%= link to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :new), class: "inline-block text-white no-underline hover:text-white hover:text-underline py-2 px-4" do %>
Log In
<% end %>
</li>
<li class="mr-3">
<%= link to: AuthWeb.Router.Helpers.pow_registration_path(%URI{path: "/auth"}, :new), class: "inline-block text-white no-underline hover:text-white hover:text-underline py-2 px-4" do %>
Sign Up
<% end %>
</li>
<% end %>
</ul>
</div>
</nav>

View file

@ -1,16 +0,0 @@
<div class="ui vertical inverted left sidebar menu">
<a class="item" href="/">Home</a>
<%= if has_role?(@conn, :admin) do %>
<a class="item" href="/admin">Admin</a>
<% end %>
<%= if Pow.Plug.current_user(@conn) do %>
<%= link "Sign out", to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :delete), method: :delete, class: "item" %>
<% else %>
<%= link to: AuthWeb.Router.Helpers.pow_session_path(%URI{path: "/auth"}, :new), class: "item" do %>
Log in
<% end %>
<%= link to: AuthWeb.Router.Helpers.pow_registration_path(%URI{path: "/auth"}, :new), class: "item" do %>
Sign Up
<% end %>
<% end %>
</div>

View file

@ -9,10 +9,8 @@
<%= feed_tag(@conn, @view_module, @view_template, assigns) %> <%= feed_tag(@conn, @view_module, @view_template, assigns) %>
<script defer type="text/javascript" src="<%= Routes.static_path(@conn, "/js/app.js") %>"></script> <script defer type="text/javascript" src="<%= Routes.static_path(@conn, "/js/app.js") %>"></script>
</head> </head>
<body> <body class="text-gray-800 antialiased">
<main role="main" class="container"> <main role="main">
<%= render "_side_menu.html", assigns %>
<!-- Page Contents --> <!-- Page Contents -->
<div class="pusher"> <div class="pusher">
<div class="ui inverted vertical masthead center aligned segment"> <div class="ui inverted vertical masthead center aligned segment">

View file

@ -25,11 +25,24 @@ defmodule CoreWeb.Helpers do
def flash_block(conn) do def flash_block(conn) do
~E""" ~E"""
<%= [info: "info", error: "negative"] |> Enum.map(fn {level, class} -> %> <div class="fixed w-full z-50 mt-20">
<%= if get_flash(conn, level) do %> <%= [info: "grey", error: "red"] |> Enum.map(fn {level, color} -> %>
<p class="ui <%= class %> message" role="alert"><%= get_flash(conn, level) %></p> <%= if get_flash(conn, level) do %>
<% end %> <div class="relative bg-<%= color %>-100 p-5 w-1/2 object-right rounded shadow-xl m-auto mb-5 js-flash">
<% end) %> <div class="flex justify-between text-<%= color %>-700">
<div class="flex space-x-3">
<div class="flex-1 leading-tight text-sm font-medium">
<%= get_flash(conn, level) %>
</div>
</div>
<div class="flex-none js-flash-closer">
&times;
</div>
</div>
</div>
<% end %>
<% end) %>
</div>
""" """
end end
@ -41,26 +54,25 @@ defmodule CoreWeb.Helpers do
def styled_input(f, field, opts, options, do: content) do def styled_input(f, field, opts, options, do: content) do
{icon, rest_opts} = Keyword.pop(opts, :icon, "") {icon, rest_opts} = Keyword.pop(opts, :icon, "")
{classes, rest_opts} = Keyword.pop(rest_opts, :class, "") {classes, rest_opts} = Keyword.pop(rest_opts, :class, "px-3 py-3 placeholder-gray-400 text-gray-700 bg-white rounded text-sm shadow focus:outline-none focus:shadow-outline w-full")
{label_text, rest_opts} = Keyword.pop(rest_opts, :label) {label_text, rest_opts} = Keyword.pop(rest_opts, :label)
{input_helper, rest_opts} = Keyword.pop(rest_opts, :input_helper, :text_input) {input_helper, rest_opts} = Keyword.pop(rest_opts, :input_helper, :text_input)
~E""" ~E"""
<div class="field <%= error_class(f, field) %>"> <div class="relative w-full mb-3 <%= error_class(f, field) %>">
<%= if label_text do %> <%= if label_text do %>
<%= label f, field, label_text %> <%= label f, field, label_text, class: "block uppercase text-gray-700 text-xs font-bold mb-2" %>
<% else %> <% else %>
<%= label f, field %> <%= label f, field, class: "block uppercase text-gray-700 text-xs font-bold mb-2" %>
<% end %> <% end %>
<div class="ui left icon <%= classes %> input"> <i class="<%= icon %> icon"></i>
<i class="<%= icon %> icon"></i> <%= if options == nil do %>
<%= if options == nil do %> <%= apply(Phoenix.HTML.Form, input_helper, [f, field, rest_opts ++ [class: classes]]) %>
<%= apply(Phoenix.HTML.Form, input_helper, [f, field, rest_opts]) %> <% else %>
<% else %> <%= apply(Phoenix.HTML.Form, input_helper, [f, field, options, rest_opts ++ [class: classes]]) %>
<%= apply(Phoenix.HTML.Form, input_helper, [f, field, options, rest_opts]) %> <% end %>
<% end %> <%= content %>
<%= content %>
</div>
<%= error_tag f, field, class: "ui pointing red basic label" %> <%= error_tag f, field, class: "ui pointing red basic label" %>
</div> </div>
""" """

View file

@ -43,7 +43,7 @@ config :auth_web,
config :auth_web, :pow, config :auth_web, :pow,
user: Auth.User, user: Auth.User,
repo: Auth.Repo, repo: Auth.Repo,
extensions: [PowEmailConfirmation, PowPersistentSession], extensions: [PowEmailConfirmation, PowPersistentSession, PowResetPassword],
controller_callbacks: Pow.Extension.Phoenix.ControllerCallbacks, controller_callbacks: Pow.Extension.Phoenix.ControllerCallbacks,
mailer_backend: AuthWeb.Pow.Mailer, mailer_backend: AuthWeb.Pow.Mailer,
web_mailer_module: AuthWeb, web_mailer_module: AuthWeb,