about summary refs log tree commit diff stats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/stylesheets/application.css139
-rw-r--r--app/controllers/application_controller.rb6
-rw-r--r--app/controllers/users/confirmations_controller.rb28
-rw-r--r--app/controllers/users/omniauth_callbacks_controller.rb28
-rw-r--r--app/controllers/users/passwords_controller.rb32
-rw-r--r--app/controllers/users/registrations_controller.rb60
-rw-r--r--app/controllers/users/sessions_controller.rb26
-rw-r--r--app/controllers/users/unlocks_controller.rb28
-rw-r--r--app/models/user.rb6
-rw-r--r--app/views/devise/confirmations/new.html.erb16
-rw-r--r--app/views/devise/mailer/confirmation_instructions.html.erb5
-rw-r--r--app/views/devise/mailer/email_changed.html.erb7
-rw-r--r--app/views/devise/mailer/password_change.html.erb3
-rw-r--r--app/views/devise/mailer/reset_password_instructions.html.erb8
-rw-r--r--app/views/devise/mailer/unlock_instructions.html.erb7
-rw-r--r--app/views/devise/passwords/edit.html.erb25
-rw-r--r--app/views/devise/passwords/new.html.erb16
-rw-r--r--app/views/devise/registrations/edit.html.erb43
-rw-r--r--app/views/devise/registrations/new.html.erb29
-rw-r--r--app/views/devise/shared/_links.html.erb25
-rw-r--r--app/views/devise/unlocks/new.html.erb16
-rw-r--r--app/views/layouts/application.html.haml18
-rw-r--r--app/views/layouts/userdata.html.haml18
-rw-r--r--app/views/users/sessions/.new.html.haml.swobin0 -> 12288 bytes
-rw-r--r--app/views/users/sessions/new.html.haml15
25 files changed, 600 insertions, 4 deletions
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 40358bb..5ddb0bb 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css
@@ -17,7 +17,7 @@
17 17
18@import url('https://fonts.googleapis.com/css?family=Inconsolata'); 18@import url('https://fonts.googleapis.com/css?family=Inconsolata');
19 19
20body { 20body#main-body {
21 background-color: #bfefff; 21 background-color: #bfefff;
22} 22}
23 23
@@ -76,3 +76,140 @@ body {
76#sidebar h2 { 76#sidebar h2 {
77 font-size: 1em; 77 font-size: 1em;
78} 78}
79
80#flash {
81 width: 100%;
82 text-align: center;
83 padding: .25em;
84 font-weight: bold
85}
86
87.flash-notice {
88 background-color: #fffde8;
89}
90
91.flash-alert {
92 background-color: #ff6a6a;
93}
94
95html {
96 height: 100%;
97}
98
99body#userdata-body {
100 background-color: #eeeeee;
101 height: 100%;
102}
103
104#userdata-container {
105 margin: 4em auto 0;
106 width: 25%;
107}
108
109#userdata-form {
110 background-color: #fefefe;
111 -webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
112 -moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
113 box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
114 border-radius: 2px 2px 2px 2px;
115 -moz-border-radius: 2px 2px 2px 2px;
116 -webkit-border-radius: 2px 2px 2px 2px;
117 padding: 1em;
118}
119
120#userdata-form .field {
121 margin-bottom: 1em;
122}
123
124#userdata-form .field label {
125 display: block;
126 margin-bottom: .25em;
127}
128
129#userdata-form input[type=text], #userdata-form input[type=password] {
130 font-size: 24px;
131 padding: 3px;
132 width: 100%;
133 box-sizing: border-box;
134 -webkit-box-shadow: inset 0px 1px 2px 0px rgba(0,0,0,0.7);
135 -moz-box-shadow: inset 0px 1px 2px 0px rgba(0,0,0,0.7);
136 box-shadow: inset 0px 1px 2px 0px rgba(0,0,0,0.7);
137 border: 1px solid #ddd;
138 outline: 0;
139 border-radius: 0;
140}
141
142.remember-me-field {
143 float: left;
144}
145
146.submit-field {
147 text-align: right;
148}
149
150.userdata-link {
151 margin: 1em;
152}
153
154.userdata-link a {
155 text-decoration: none;
156}
157
158.userdata-link a:hover {
159 text-decoration: underline;
160}
161
162#userdata-form, .userdata-link a, .userdata-link a:visited {
163 color: #555d66;
164}
165
166#userdata-form label, .userdata-link a {
167 font-size: .75em;
168}
169
170#userdata-flash {
171 color: black;
172 background-color: white;
173 padding: .75em;
174 margin-bottom: 2em;
175 font-size: .8em;
176 -webkit-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
177 -moz-box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
178 box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);
179}
180
181.userdata-flash-alert {
182 border-left: 5px solid red;
183}
184
185.userdata-flash-notice {
186 border-left: 5px solid green;
187}
188
189.userdata-flash-tag {
190 font-weight: bold;
191}
192
193.sidebar-module + .sidebar-module {
194 margin-top: 2em;
195}
196
197.sidebar-module ul {
198 padding-left: 0;
199}
200
201.sidebar-module li {
202 list-style-type: none;
203}
204
205.sidebar-module a {
206 text-decoration: none;
207}
208
209.sidebar-module a:hover {
210 text-decoration: underline;
211}
212
213.sidebar-module a:visited {
214 color: #352712;
215}
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c07694..0174cae 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb
@@ -1,3 +1,9 @@
1class ApplicationController < ActionController::Base 1class ApplicationController < ActionController::Base
2 protect_from_forgery with: :exception 2 protect_from_forgery with: :exception
3
4 private
5
6 def after_sign_out_path_for(resource)
7 new_session_path(resource)
8 end
3end 9end
diff --git a/app/controllers/users/confirmations_controller.rb b/app/controllers/users/confirmations_controller.rb new file mode 100644 index 0000000..1126e23 --- /dev/null +++ b/app/controllers/users/confirmations_controller.rb
@@ -0,0 +1,28 @@
1class Users::ConfirmationsController < Devise::ConfirmationsController
2 # GET /resource/confirmation/new
3 # def new
4 # super
5 # end
6
7 # POST /resource/confirmation
8 # def create
9 # super
10 # end
11
12 # GET /resource/confirmation?confirmation_token=abcdef
13 # def show
14 # super
15 # end
16
17 # protected
18
19 # The path used after resending confirmation instructions.
20 # def after_resending_confirmation_instructions_path_for(resource_name)
21 # super(resource_name)
22 # end
23
24 # The path used after confirmation.
25 # def after_confirmation_path_for(resource_name, resource)
26 # super(resource_name, resource)
27 # end
28end
diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb new file mode 100644 index 0000000..1907e5b --- /dev/null +++ b/app/controllers/users/omniauth_callbacks_controller.rb
@@ -0,0 +1,28 @@
1class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2 # You should configure your model like this:
3 # devise :omniauthable, omniauth_providers: [:twitter]
4
5 # You should also create an action method in this controller like this:
6 # def twitter
7 # end
8
9 # More info at:
10 # https://github.com/plataformatec/devise#omniauth
11
12 # GET|POST /resource/auth/twitter
13 # def passthru
14 # super
15 # end
16
17 # GET|POST /users/auth/twitter/callback
18 # def failure
19 # super
20 # end
21
22 # protected
23
24 # The path used when OmniAuth fails
25 # def after_omniauth_failure_path_for(scope)
26 # super(scope)
27 # end
28end
diff --git a/app/controllers/users/passwords_controller.rb b/app/controllers/users/passwords_controller.rb new file mode 100644 index 0000000..53cc34e --- /dev/null +++ b/app/controllers/users/passwords_controller.rb
@@ -0,0 +1,32 @@
1class Users::PasswordsController < Devise::PasswordsController
2 # GET /resource/password/new
3 # def new
4 # super
5 # end
6
7 # POST /resource/password
8 # def create
9 # super
10 # end
11
12 # GET /resource/password/edit?reset_password_token=abcdef
13 # def edit
14 # super
15 # end
16
17 # PUT /resource/password
18 # def update
19 # super
20 # end
21
22 # protected
23
24 # def after_resetting_password_path_for(resource)
25 # super(resource)
26 # end
27
28 # The path used after sending reset password instructions
29 # def after_sending_reset_password_instructions_path_for(resource_name)
30 # super(resource_name)
31 # end
32end
diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb new file mode 100644 index 0000000..4d6fbad --- /dev/null +++ b/app/controllers/users/registrations_controller.rb
@@ -0,0 +1,60 @@
1class Users::RegistrationsController < Devise::RegistrationsController
2 # before_action :configure_sign_up_params, only: [:create]
3 # before_action :configure_account_update_params, only: [:update]
4
5 # GET /resource/sign_up
6 # def new
7 # super
8 # end
9
10 # POST /resource
11 # def create
12 # super
13 # end
14
15 # GET /resource/edit
16 # def edit
17 # super
18 # end
19
20 # PUT /resource
21 # def update
22 # super
23 # end
24
25 # DELETE /resource
26 # def destroy
27 # super
28 # end
29
30 # GET /resource/cancel
31 # Forces the session data which is usually expired after sign
32 # in to be expired now. This is useful if the user wants to
33 # cancel oauth signing in/up in the middle of the process,
34 # removing all OAuth session data.
35 # def cancel
36 # super
37 # end
38
39 # protected
40
41 # If you have extra params to permit, append them to the sanitizer.
42 # def configure_sign_up_params
43 # devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute])
44 # end
45
46 # If you have extra params to permit, append them to the sanitizer.
47 # def configure_account_update_params
48 # devise_parameter_sanitizer.permit(:account_update, keys: [:attribute])
49 # end
50
51 # The path used after sign up.
52 # def after_sign_up_path_for(resource)
53 # super(resource)
54 # end
55
56 # The path used after sign up for inactive accounts.
57 # def after_inactive_sign_up_path_for(resource)
58 # super(resource)
59 # end
60end
diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb new file mode 100644 index 0000000..889fba5 --- /dev/null +++ b/app/controllers/users/sessions_controller.rb
@@ -0,0 +1,26 @@
1class Users::SessionsController < Devise::SessionsController
2 layout "userdata"
3 # before_action :configure_sign_in_params, only: [:create]
4
5 # GET /resource/sign_in
6 # def new
7 # super
8 # end
9
10 # POST /resource/sign_in
11 # def create
12 # super
13 # end
14
15 # DELETE /resource/sign_out
16 # def destroy
17 # super
18 # end
19
20 # protected
21
22 # If you have extra params to permit, append them to the sanitizer.
23 # def configure_sign_in_params
24 # devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
25 # end
26end
diff --git a/app/controllers/users/unlocks_controller.rb b/app/controllers/users/unlocks_controller.rb new file mode 100644 index 0000000..8b9ef86 --- /dev/null +++ b/app/controllers/users/unlocks_controller.rb
@@ -0,0 +1,28 @@
1class Users::UnlocksController < Devise::UnlocksController
2 # GET /resource/unlock/new
3 # def new
4 # super
5 # end
6
7 # POST /resource/unlock
8 # def create
9 # super
10 # end
11
12 # GET /resource/unlock?unlock_token=abcdef
13 # def show
14 # super
15 # end
16
17 # protected
18
19 # The path used after sending unlock password instructions
20 # def after_sending_unlock_instructions_path_for(resource)
21 # super(resource)
22 # end
23
24 # The path used after unlocking the resource
25 # def after_unlock_path_for(resource)
26 # super(resource)
27 # end
28end
diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..b8bdae1 --- /dev/null +++ b/app/models/user.rb
@@ -0,0 +1,6 @@
1class User < ApplicationRecord
2 # Include default devise modules. Others available are:
3 # :confirmable, :lockable, :timeoutable and :omniauthable
4 devise :database_authenticatable,
5 :recoverable, :rememberable, :trackable, :validatable
6end
diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb new file mode 100644 index 0000000..2dc668f --- /dev/null +++ b/app/views/devise/confirmations/new.html.erb
@@ -0,0 +1,16 @@
1<h2>Resend confirmation instructions</h2>
2
3<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
4 <%= devise_error_messages! %>
5
6 <div class="field">
7 <%= f.label :email %><br />
8 <%= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
9 </div>
10
11 <div class="actions">
12 <%= f.submit "Resend confirmation instructions" %>
13 </div>
14<% end %>
15
16<%= render "devise/shared/links" %>
diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb new file mode 100644 index 0000000..dc55f64 --- /dev/null +++ b/app/views/devise/mailer/confirmation_instructions.html.erb
@@ -0,0 +1,5 @@
1<p>Welcome <%= @email %>!</p>
2
3<p>You can confirm your account email through the link below:</p>
4
5<p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>
diff --git a/app/views/devise/mailer/email_changed.html.erb b/app/views/devise/mailer/email_changed.html.erb new file mode 100644 index 0000000..32f4ba8 --- /dev/null +++ b/app/views/devise/mailer/email_changed.html.erb
@@ -0,0 +1,7 @@
1<p>Hello <%= @email %>!</p>
2
3<% if @resource.try(:unconfirmed_email?) %>
4 <p>We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.</p>
5<% else %>
6 <p>We're contacting you to notify you that your email has been changed to <%= @resource.email %>.</p>
7<% end %>
diff --git a/app/views/devise/mailer/password_change.html.erb b/app/views/devise/mailer/password_change.html.erb new file mode 100644 index 0000000..b41daf4 --- /dev/null +++ b/app/views/devise/mailer/password_change.html.erb
@@ -0,0 +1,3 @@
1<p>Hello <%= @resource.email %>!</p>
2
3<p>We're contacting you to notify you that your password has been changed.</p>
diff --git a/app/views/devise/mailer/reset_password_instructions.html.erb b/app/views/devise/mailer/reset_password_instructions.html.erb new file mode 100644 index 0000000..f667dc1 --- /dev/null +++ b/app/views/devise/mailer/reset_password_instructions.html.erb
@@ -0,0 +1,8 @@
1<p>Hello <%= @resource.email %>!</p>
2
3<p>Someone has requested a link to change your password. You can do this through the link below.</p>
4
5<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
6
7<p>If you didn't request this, please ignore this email.</p>
8<p>Your password won't change until you access the link above and create a new one.</p>
diff --git a/app/views/devise/mailer/unlock_instructions.html.erb b/app/views/devise/mailer/unlock_instructions.html.erb new file mode 100644 index 0000000..41e148b --- /dev/null +++ b/app/views/devise/mailer/unlock_instructions.html.erb
@@ -0,0 +1,7 @@
1<p>Hello <%= @resource.email %>!</p>
2
3<p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
4
5<p>Click the link below to unlock your account:</p>
6
7<p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
diff --git a/app/views/devise/passwords/edit.html.erb b/app/views/devise/passwords/edit.html.erb new file mode 100644 index 0000000..6a796b0 --- /dev/null +++ b/app/views/devise/passwords/edit.html.erb
@@ -0,0 +1,25 @@
1<h2>Change your password</h2>
2
3<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
4 <%= devise_error_messages! %>
5 <%= f.hidden_field :reset_password_token %>
6
7 <div class="field">
8 <%= f.label :password, "New password" %><br />
9 <% if @minimum_password_length %>
10 <em>(<%= @minimum_password_length %> characters minimum)</em><br />
11 <% end %>
12 <%= f.password_field :password, autofocus: true, autocomplete: "off" %>
13 </div>
14
15 <div class="field">
16 <%= f.label :password_confirmation, "Confirm new password" %><br />
17 <%= f.password_field :password_confirmation, autocomplete: "off" %>
18 </div>
19
20 <div class="actions">
21 <%= f.submit "Change my password" %>
22 </div>
23<% end %>
24
25<%= render "devise/shared/links" %>
diff --git a/app/views/devise/passwords/new.html.erb b/app/views/devise/passwords/new.html.erb new file mode 100644 index 0000000..3d6d11a --- /dev/null +++ b/app/views/devise/passwords/new.html.erb
@@ -0,0 +1,16 @@
1<h2>Forgot your password?</h2>
2
3<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
4 <%= devise_error_messages! %>
5
6 <div class="field">
7 <%= f.label :email %><br />
8 <%= f.email_field :email, autofocus: true %>
9 </div>
10
11 <div class="actions">
12 <%= f.submit "Send me reset password instructions" %>
13 </div>
14<% end %>
15
16<%= render "devise/shared/links" %>
diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb new file mode 100644 index 0000000..1e66f3d --- /dev/null +++ b/app/views/devise/registrations/edit.html.erb
@@ -0,0 +1,43 @@
1<h2>Edit <%= resource_name.to_s.humanize %></h2>
2
3<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
4 <%= devise_error_messages! %>
5
6 <div class="field">
7 <%= f.label :email %><br />
8 <%= f.email_field :email, autofocus: true %>
9 </div>
10
11 <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
12 <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
13 <% end %>
14
15 <div class="field">
16 <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
17 <%= f.password_field :password, autocomplete: "off" %>
18 <% if @minimum_password_length %>
19 <br />
20 <em><%= @minimum_password_length %> characters minimum</em>
21 <% end %>
22 </div>
23
24 <div class="field">
25 <%= f.label :password_confirmation %><br />
26 <%= f.password_field :password_confirmation, autocomplete: "off" %>
27 </div>
28
29 <div class="field">
30 <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
31 <%= f.password_field :current_password, autocomplete: "off" %>
32 </div>
33
34 <div class="actions">
35 <%= f.submit "Update" %>
36 </div>
37<% end %>
38
39<h3>Cancel my account</h3>
40
41<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>
42
43<%= link_to "Back", :back %>
diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb new file mode 100644 index 0000000..5a238ce --- /dev/null +++ b/app/views/devise/registrations/new.html.erb
@@ -0,0 +1,29 @@
1<h2>Sign up</h2>
2
3<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
4 <%= devise_error_messages! %>
5
6 <div class="field">
7 <%= f.label :email %><br />
8 <%= f.email_field :email, autofocus: true %>
9 </div>
10
11 <div class="field">
12 <%= f.label :password %>
13 <% if @minimum_password_length %>
14 <em>(<%= @minimum_password_length %> characters minimum)</em>
15 <% end %><br />
16 <%= f.password_field :password, autocomplete: "off" %>
17 </div>
18
19 <div class="field">
20 <%= f.label :password_confirmation %><br />
21 <%= f.password_field :password_confirmation, autocomplete: "off" %>
22 </div>
23
24 <div class="actions">
25 <%= f.submit "Sign up" %>
26 </div>
27<% end %>
28
29<%= render "devise/shared/links" %>
diff --git a/app/views/devise/shared/_links.html.erb b/app/views/devise/shared/_links.html.erb new file mode 100644 index 0000000..e6a3e41 --- /dev/null +++ b/app/views/devise/shared/_links.html.erb
@@ -0,0 +1,25 @@
1<%- if controller_name != 'sessions' %>
2 <%= link_to "Log in", new_session_path(resource_name) %><br />
3<% end -%>
4
5<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
6 <%= link_to "Sign up", new_registration_path(resource_name) %><br />
7<% end -%>
8
9<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
10 <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
11<% end -%>
12
13<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
14 <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
15<% end -%>
16
17<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
18 <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
19<% end -%>
20
21<%- if devise_mapping.omniauthable? %>
22 <%- resource_class.omniauth_providers.each do |provider| %>
23 <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
24 <% end -%>
25<% end -%>
diff --git a/app/views/devise/unlocks/new.html.erb b/app/views/devise/unlocks/new.html.erb new file mode 100644 index 0000000..16586bc --- /dev/null +++ b/app/views/devise/unlocks/new.html.erb
@@ -0,0 +1,16 @@
1<h2>Resend unlock instructions</h2>
2
3<%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %>
4 <%= devise_error_messages! %>
5
6 <div class="field">
7 <%= f.label :email %><br />
8 <%= f.email_field :email, autofocus: true %>
9 </div>
10
11 <div class="actions">
12 <%= f.submit "Resend unlock instructions" %>
13 </div>
14<% end %>
15
16<%= render "devise/shared/links" %>
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 55d7805..e9d8dfd 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml
@@ -5,12 +5,24 @@
5 = csrf_meta_tags 5 = csrf_meta_tags
6 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' 6 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
7 = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' 7 = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
8 %body 8 %body#main-body
9 - if flash[:alert]
10 %div#flash.flash-alert= flash[:alert]
11 - if flash[:notice]
12 %div#flash.flash-notice= flash[:notice]
9 #container 13 #container
10 #banner 14 #banner
11 %h1= link_to "Thoughts", root_url 15 %h1= link_to "Thoughts", root_url
12 #main 16 #main
13 #content= yield 17 #content= yield
14 #sidebar 18 #sidebar
15 %h2 I'm Fef. 19 .sidebar-module
16 %p I'm a computer science undergrad at Carnegie Mellon University. I make a lot of things, including Twitter bots. I really like Pokémon, and I write about it a lot. 20 %h2 I'm Fef.
21 %p I'm a computer science undergrad at Carnegie Mellon University. I make a lot of things, including Twitter bots. I really like Pokémon, and I write about it a lot.
22 .sidebar-module
23 %h2 Meta
24 %ul
25 - if not user_signed_in?
26 %li= link_to "Log in", new_user_session_path
27 - if user_signed_in?
28 %li= link_to "Log out", destroy_user_session_path, method: :delete
diff --git a/app/views/layouts/userdata.html.haml b/app/views/layouts/userdata.html.haml new file mode 100644 index 0000000..f6e3b57 --- /dev/null +++ b/app/views/layouts/userdata.html.haml
@@ -0,0 +1,18 @@
1!!! 5
2%html
3 %head
4 %title Thoughts
5 = csrf_meta_tags
6 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
7 = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
8 %body#userdata-body
9 #userdata-container
10 - if flash[:alert]
11 #userdata-flash.userdata-flash-alert
12 %span.userdata-flash-tag ERROR:
13 = flash.alert
14 - if flash[:notice]
15 #userdata-flash.userdata-flash-notice
16 %span.userdata-flash-tag NOTICE:
17 = flash.notice
18 = yield
diff --git a/app/views/users/sessions/.new.html.haml.swo b/app/views/users/sessions/.new.html.haml.swo new file mode 100644 index 0000000..85950d9 --- /dev/null +++ b/app/views/users/sessions/.new.html.haml.swo
Binary files differ
diff --git a/app/views/users/sessions/new.html.haml b/app/views/users/sessions/new.html.haml new file mode 100644 index 0000000..fbdf8be --- /dev/null +++ b/app/views/users/sessions/new.html.haml
@@ -0,0 +1,15 @@
1#userdata-form
2 = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
3 .field
4 = f.label :login
5 = f.text_field :login, autofocus: true
6 .field
7 = f.label :password
8 = f.password_field :password, autocomplete: "off"
9 .remember-me-field
10 = f.check_box :remember_me
11 = f.label :remember_me
12 .submit-field
13 = f.submit "Log in"
14.userdata-link= link_to "Forgot your password?", new_password_path(resource_name)
15.userdata-link= link_to "← Back to thoughts", root_url