bpluser 0.1.18 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +33 -0
- data/Rakefile +34 -3
- data/app/assets/config/bpluser_manifest.js +1 -0
- data/app/assets/javascripts/bpluser/folder_tools.js +26 -0
- data/app/controllers/bookmarks_controller.rb +50 -0
- data/app/controllers/concerns/bpluser/folders_verify_user.rb +20 -0
- data/app/controllers/concerns/bpluser/omniauth_callbacks.rb +27 -0
- data/app/controllers/concerns/bpluser/registrations.rb +35 -0
- data/app/controllers/concerns/bpluser/saved_searches.rb +62 -0
- data/app/controllers/folder_items_actions_controller.rb +77 -0
- data/app/controllers/folder_items_controller.rb +97 -0
- data/app/controllers/folders_controller.rb +100 -0
- data/app/controllers/saved_searches_controller.rb +5 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +7 -0
- data/app/controllers/users/registrations_controller.rb +7 -0
- data/app/controllers/users/sessions_controller.rb +6 -0
- data/app/controllers/users_controller.rb +25 -0
- data/app/helpers/bpluser/folders_helper_behavior.rb +11 -0
- data/app/helpers/folders_helper.rb +5 -0
- data/app/models/bpluser/folder.rb +21 -10
- data/app/models/bpluser/folder_item.rb +5 -7
- data/app/models/concerns/bpluser/users.rb +71 -0
- data/app/models/concerns/bpluser/validatable.rb +34 -0
- data/app/views/bookmarks/index.html.erb +58 -0
- data/app/views/bookmarks/update.js.erb +1 -0
- data/app/views/bpluser/folders/_folder.html.erb +36 -0
- data/app/views/catalog/_constraints.html.erb +14 -0
- data/app/views/catalog/_folder_item_control.html.erb +52 -0
- data/app/views/catalog/_save_search.html.erb +8 -0
- data/app/views/devise/confirmations/new.html.erb +14 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +13 -0
- data/app/views/devise/passwords/edit.html.erb +32 -0
- data/app/views/devise/passwords/new.html.erb +30 -0
- data/app/views/devise/registrations/edit.html.erb +82 -0
- data/app/views/devise/registrations/new.html.erb +45 -0
- data/app/views/devise/sessions/new.html.erb +72 -0
- data/app/views/devise/shared/_links.erb +29 -0
- data/app/views/folder_items/create.js.erb +1 -0
- data/app/views/folder_items/destroy.js.erb +1 -0
- data/app/views/folder_items/item_actions.js.erb +2 -0
- data/app/views/folder_items/update.js.erb +1 -0
- data/app/views/folders/_in_folder.html.erb +3 -0
- data/app/views/folders/_new_edit_form_fields.html.erb +36 -0
- data/app/views/folders/edit.html.erb +25 -0
- data/app/views/folders/index.html.erb +67 -0
- data/app/views/folders/new.html.erb +26 -0
- data/app/views/folders/public_list.html.erb +41 -0
- data/app/views/folders/show.html.erb +82 -0
- data/app/views/saved_searches/index.html.erb +55 -0
- data/app/views/search_history/index.html.erb +57 -0
- data/app/views/shared/_folder_item_actions.html.erb +54 -0
- data/app/views/shared/_folder_tools.html.erb +4 -0
- data/app/views/shared/_tools.html.erb +16 -0
- data/app/views/shared/_user_util_links.html.erb +42 -0
- data/app/views/users/show.html.erb +33 -0
- data/config/locales/bpluser.en.yml +129 -0
- data/config/routes.rb +23 -2
- data/lib/bpluser/controller.rb +61 -0
- data/lib/bpluser/devise_guests_override.rb +21 -0
- data/lib/bpluser/engine.rb +27 -1
- data/lib/bpluser/version.rb +3 -1
- data/lib/bpluser.rb +21 -15
- data/lib/generators/bpluser/controller_generator.rb +29 -0
- data/lib/generators/bpluser/devise_generator.rb +40 -0
- data/lib/generators/bpluser/install_generator.rb +62 -0
- data/lib/generators/bpluser/templates/config/initializers/{devise.rb → devise.rb.bak} +0 -0
- data/lib/generators/bpluser/templates/config/locales/devise.en.yml +53 -0
- data/lib/generators/bpluser/templates/config/omniauth-polaris.yml +10 -15
- data/lib/generators/bpluser/templates/models/user.rb +3 -4
- data/lib/generators/bpluser/user_generator.rb +23 -0
- data/lib/tasks/bpluser_tasks.rake +27 -0
- metadata +131 -163
- data/app/controllers/bpluser/api_controller.rb +0 -8
- data/app/controllers/bpluser/users/omniauth_callbacks_controller.rb +0 -48
- data/app/controllers/bpluser/users/registrations_controller.rb +0 -35
- data/app/controllers/bpluser/users/sessions_controller.rb +0 -23
- data/app/models/bpluser/ability.rb +0 -22
- data/app/models/bpluser/application_record.rb +0 -5
- data/app/models/bpluser/concerns/users.rb +0 -190
- data/app/models/bpluser/concerns/validatable.rb +0 -47
- data/app/models/bpluser/user.rb~ +0 -213
- data/app/models/bpluser/user_institution.rb +0 -6
- data/app/models/bpluser/validatable.rb~ +0 -65
- data/lib/bpluser/routes.rb +0 -37
- data/lib/generators/bpluser/bpluser_generator.rb +0 -183
- data/lib/generators/bpluser/templates/config/hydra-ldap.yml +0 -33
- data/lib/generators/bpluser/templates/config/omniauth-facebook.yml +0 -14
- data/lib/generators/bpluser/templates/controllers/users/omniauth_callbacks_controller.rb +0 -3
- data/lib/generators/bpluser/templates/controllers/users/registrations_controller.rb +0 -3
- data/lib/generators/bpluser/templates/controllers/users/sessions_controller.rb +0 -3
- data/lib/generators/bpluser/templates/migrations/add_fields_to_user.rb +0 -22
- data/lib/generators/bpluser/templates/migrations/add_folder_items_to_folder.rb +0 -18
- data/lib/generators/bpluser/templates/migrations/add_folders_to_user.rb +0 -14
- data/lib/generators/bpluser/templates/migrations/create_institutions_for_users.rb +0 -16
- data/lib/generators/bpluser/templates/models/ability.rb +0 -4
- data/lib/generators/bpluser/templates/views/devise/registrations/edit.html.erb +0 -0
- data/lib/generators/bpluser/templates/views/devise/registrations/new.html.erb +0 -24
- data/lib/generators/bpluser/templates/views/devise/sessions/new.html.erb +0 -17
@@ -1,20 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bpluser
|
2
4
|
class Folder < ApplicationRecord
|
5
|
+
MAX_TITLE_LENGTH = 65
|
6
|
+
MAX_DESC_LENGTH = 250
|
7
|
+
VALID_VISIBILITY_OPTS = %w[public private].freeze
|
8
|
+
|
9
|
+
belongs_to :user, inverse_of: :folders, class_name: '::User'
|
10
|
+
has_many :folder_items, inverse_of: :folder, dependent: :destroy, class_name: 'Bpluser::FolderItem'
|
3
11
|
|
4
|
-
|
5
|
-
|
12
|
+
scope :with_folder_items, -> { includes(:folder_items) }
|
13
|
+
scope :public_list, -> { with_folder_items.where(visibility: 'public').order(updated_at: :desc) }
|
6
14
|
|
7
|
-
validates :
|
8
|
-
|
9
|
-
validates :
|
10
|
-
validates :description, :length => {:maximum => 250}
|
11
|
-
validates :visibility, :inclusion => {:in => %w(public private)}
|
15
|
+
validates :title, presence: true, length: { maximum: MAX_TITLE_LENGTH }
|
16
|
+
validates :description, length: { maximum: MAX_DESC_LENGTH }
|
17
|
+
validates :visibility, presence: true, inclusion: { in: VALID_VISIBILITY_OPTS }
|
12
18
|
|
13
|
-
|
19
|
+
def folder_item?(document_id)
|
20
|
+
folder_items.exists?(document_id: document_id)
|
21
|
+
end
|
14
22
|
|
15
|
-
def
|
16
|
-
|
23
|
+
def public?
|
24
|
+
visibility == 'public'
|
17
25
|
end
|
18
26
|
|
27
|
+
def private?
|
28
|
+
visibility == 'private'
|
29
|
+
end
|
19
30
|
end
|
20
31
|
end
|
@@ -1,15 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bpluser
|
2
4
|
class FolderItem < ApplicationRecord
|
3
|
-
|
4
|
-
|
5
|
-
belongs_to :folder, inverse_of: :folder_items, :class_name => "Bpluser::Folder"
|
5
|
+
belongs_to :folder, inverse_of: :folder_items, class_name: 'Bpluser::Folder', touch: true
|
6
6
|
|
7
|
-
validates :
|
8
|
-
validates :document_id, :presence => true
|
7
|
+
validates :document_id, presence: true
|
9
8
|
|
10
9
|
def document
|
11
|
-
SolrDocument.new
|
10
|
+
SolrDocument.new(SolrDocument.unique_key => document_id) if document_id
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
13
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bpluser
|
4
|
+
module Users
|
5
|
+
# Changed this to a concern so the modules can resolve better
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
include InstanceMethods
|
10
|
+
include Bpluser::Validatable
|
11
|
+
|
12
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :trackable, :omniauthable, omniauth_providers: [:polaris]
|
13
|
+
|
14
|
+
has_many :folders, inverse_of: :user, dependent: :destroy, class_name: 'Bpluser::Folder'
|
15
|
+
has_many :folder_items, through: :folders, class_name: 'Bpluser::FolderItem'
|
16
|
+
|
17
|
+
before_create :set_default_display_name
|
18
|
+
end
|
19
|
+
|
20
|
+
module InstanceMethods
|
21
|
+
# BEGIN INSTANCE METHODS
|
22
|
+
def name
|
23
|
+
email || username || display_name.to_s.titleize
|
24
|
+
end
|
25
|
+
|
26
|
+
alias to_s name
|
27
|
+
|
28
|
+
def user_key
|
29
|
+
send(Devise.authentication_keys.first)
|
30
|
+
end
|
31
|
+
|
32
|
+
def existing_folder_item_for(document_id)
|
33
|
+
get_folder_item(document_id)
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_folder_item(document_id)
|
37
|
+
folder_items.where(document_id: document_id).first if folder_items.exists?(document_id: document_id)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def set_default_display_name
|
43
|
+
return if display_name.present?
|
44
|
+
|
45
|
+
return if first_name.blank? && last_name.blank?
|
46
|
+
|
47
|
+
self.display_name = "#{first_name} #{last_name}".strip
|
48
|
+
end
|
49
|
+
# END INSTANCE METHODS
|
50
|
+
end
|
51
|
+
|
52
|
+
# BEGIN CLASS METHODS
|
53
|
+
class_methods do
|
54
|
+
def find_for_polaris_oauth(auth_response)
|
55
|
+
polaris_info_details = auth_response[:info]
|
56
|
+
|
57
|
+
where(provider: auth_response.provider, uid: auth_response.uid).first_or_create do |user|
|
58
|
+
user.provider = auth_response.provider
|
59
|
+
user.uid = auth_response.uid
|
60
|
+
user.username = polaris_info_details[:first_name]
|
61
|
+
user.email = polaris_info_details[:email].presence || ''
|
62
|
+
user.password = Devise.friendly_token[0, 20]
|
63
|
+
user.display_name = "#{polaris_info_details[:first_name]} #{polaris_info_details[:last_name]}"
|
64
|
+
user.first_name = polaris_info_details[:first_name]
|
65
|
+
user.last_name = polaris_info_details[:last_name]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
# END CLASS METHODS
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bpluser
|
4
|
+
module Validatable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
include InstanceMethods
|
9
|
+
|
10
|
+
validates :uid, presence: true, uniqueness: { scope: :provider, allow_blank: true }, if: :uid_required?
|
11
|
+
end
|
12
|
+
|
13
|
+
# Overrides devise mthods used for validations
|
14
|
+
module InstanceMethods
|
15
|
+
protected
|
16
|
+
|
17
|
+
def uid_required?
|
18
|
+
provider == 'polaris'
|
19
|
+
end
|
20
|
+
|
21
|
+
def email_required?
|
22
|
+
return false if provider == 'polaris'
|
23
|
+
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def password_required?
|
28
|
+
return false if provider == 'polaris'
|
29
|
+
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<% @page_title = t('blacklight.bookmarks.page_title', application_name: application_name) %>
|
2
|
+
|
3
|
+
<%= javascript_include_tag 'bpluser/folder_tools' %>
|
4
|
+
|
5
|
+
<div id="content" class="folder_show_container col-sm-9">
|
6
|
+
|
7
|
+
<div id="breadcrumb">
|
8
|
+
<ul class="breadcrumb">
|
9
|
+
<% if current_user %>
|
10
|
+
<li class="breadcrumb-item">
|
11
|
+
<%= link_to(t('blacklight.users.account_heading'), current_user) %>
|
12
|
+
<span class="divider"><%= t('blacklight.breadcrumb.separator') %></span>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
15
|
+
<li class="breadcrumb-item">
|
16
|
+
<%= link_to(t('blacklight.folders.list_title'), folders_path) %>
|
17
|
+
<span class="divider"><%= t('blacklight.breadcrumb.separator') %></span>
|
18
|
+
</li>
|
19
|
+
<li class="active breadcrumb-item">
|
20
|
+
<%= t('blacklight.bookmarks.title') %>
|
21
|
+
</li>
|
22
|
+
</ul>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<h2><%= t('blacklight.bookmarks.title') %>
|
26
|
+
<% unless !current_or_guest_user || @document_list.blank? %>
|
27
|
+
<small id="folder_tools">
|
28
|
+
</small>
|
29
|
+
<% end %>
|
30
|
+
</h2>
|
31
|
+
|
32
|
+
<div id="folder_description">
|
33
|
+
<%= t('blacklight.bookmarks.description') %>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<%- if current_or_guest_user.blank? -%>
|
37
|
+
<div id="empty_folder" class="well">
|
38
|
+
<h5><%= t('blacklight.bookmarks.need_login') %></h5>
|
39
|
+
</div>
|
40
|
+
<%- elsif @document_list.blank? -%>
|
41
|
+
<div id="empty_folder" class="well">
|
42
|
+
<h4><%= t('blacklight.bookmarks.no_bookmarks') %></h4>
|
43
|
+
<p><%= t('blacklight.folders.help.add_items') %></p>
|
44
|
+
</div>
|
45
|
+
<% else %>
|
46
|
+
|
47
|
+
<%= render 'sort_and_per_page' %>
|
48
|
+
|
49
|
+
<%= form_tag selected_bookmarks_actions_path, :method => :put, :id => "item_actions_form" do %>
|
50
|
+
|
51
|
+
<%= render :partial => 'shared/folder_item_actions' %>
|
52
|
+
|
53
|
+
<%= render_document_index %>
|
54
|
+
|
55
|
+
<% end %>
|
56
|
+
<%= render 'results_pagination' %>
|
57
|
+
<% end %>
|
58
|
+
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
$('#folder_item_toggle').replaceWith("<%= escape_javascript(render(partial: 'folders/in_folder')) %>")
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<li class="folders_index_list_item">
|
2
|
+
<h4>
|
3
|
+
<%= link_to folder.title, folder, :class => "folder_title" %>
|
4
|
+
<small class="folder_visibility">
|
5
|
+
<% if folder.public? %>
|
6
|
+
<%= icon('fas', 'eye', class: 'folder-icon', aria: { hidden: true }) %>
|
7
|
+
<span class="visibility_public"><%= folder.visibility %></span>
|
8
|
+
<% else %>
|
9
|
+
<%= icon('fas', 'lock', class: 'folder-icon', aria: { hidden: true }) %>
|
10
|
+
<span class="visibility_private"><%= folder.visibility %></span>
|
11
|
+
<% end %>
|
12
|
+
</small>
|
13
|
+
</h4>
|
14
|
+
<% if current_user %>
|
15
|
+
<!--
|
16
|
+
<div class="delete_folder">
|
17
|
+
<%# link_to icon('fas', 'trash-alt', aria: { hidden: true }),
|
18
|
+
folder,
|
19
|
+
method: :delete,
|
20
|
+
data: { confirm: t('blacklight.folders.delete.confirm') },
|
21
|
+
title: "delete this folder" %>
|
22
|
+
</div>
|
23
|
+
-->
|
24
|
+
<% end %>
|
25
|
+
<div class="folder_status">
|
26
|
+
<span class="folder_item_count">
|
27
|
+
<%= pluralize(folder.folder_items.length.to_s,'item') %>
|
28
|
+
</span>
|
29
|
+
<span class="folder_updated_at">
|
30
|
+
updated <%= time_ago_in_words(folder.updated_at) %> ago
|
31
|
+
</span>
|
32
|
+
</div>
|
33
|
+
<% if folder.description %>
|
34
|
+
<%= folder.description %>
|
35
|
+
<% end %>
|
36
|
+
</li>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%# override so we can add save_search partial from Bpluser %>
|
2
|
+
<% if Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) { query_has_constraints? } %>
|
3
|
+
<div id="appliedParams" class="clearfix constraints-container card bg-light">
|
4
|
+
<div class="card-body">
|
5
|
+
<h2 class="sr-only"><%= t('blacklight.search.search_constraints_header') %></h2>
|
6
|
+
<div id="start_over_wrapper">
|
7
|
+
<%= render 'start_over' %>
|
8
|
+
<%= render 'save_search' if current_or_guest_user %>
|
9
|
+
</div>
|
10
|
+
<span class="constraints-label"><%= t('blacklight.search.filters.title') %></span>
|
11
|
+
<%= render_constraints(controller.params != params ? params : search_state) %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<% if current_or_guest_user %>
|
2
|
+
<div class="documentFunctions">
|
3
|
+
<div id="folder_item_toggle">
|
4
|
+
<% if current_user %>
|
5
|
+
<% existing_folders = current_user.folders %>
|
6
|
+
<% existing_folder_item = current_user.existing_folder_item_for(document.id) %>
|
7
|
+
<% else %>
|
8
|
+
<% existing_folders = [] %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% unless bookmarked? document || existing_folder_item %>
|
12
|
+
<% if existing_folders.empty? %>
|
13
|
+
<%= form_tag( bookmark_path( document ), method: :put, remote: true) do %>
|
14
|
+
<button class="btn btn-outline-secondary" type="submit">
|
15
|
+
<%= icon('fas', 'folder-plus', class: 'show-tools-icon', aria: { hidden: true }) + ' ' + t('blacklight.folder_items.add.button') %>
|
16
|
+
</button>
|
17
|
+
<% end %>
|
18
|
+
<% else %>
|
19
|
+
<%= form_tag(bookmark_path(document), method: :put, remote: true) do %>
|
20
|
+
|
21
|
+
<div class="btn-group folder-item-control">
|
22
|
+
<button class="btn btn-outline-secondary" type="submit">
|
23
|
+
<%= icon('fas', 'folder-plus', class: 'show-tools-icon', aria: { hidden: true }) + ' ' + t('blacklight.folder_items.add.button') %>
|
24
|
+
</button>
|
25
|
+
<button id="folder_add_dropdown" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
26
|
+
<span class="sr-only">Toggle Dropdown</span>
|
27
|
+
</button>
|
28
|
+
<div class="dropdown-menu" aria-labelledby="folder_add_dropdown">
|
29
|
+
<%= link_to t('blacklight.bookmarks.title'),
|
30
|
+
bookmark_path(document),
|
31
|
+
method: :put,
|
32
|
+
class: 'folder_item_add dropdown-item',
|
33
|
+
remote: true %>
|
34
|
+
|
35
|
+
<% existing_folders.each do |folder| %>
|
36
|
+
<%= link_to folder.title,
|
37
|
+
folder_item_path(document, folder_id: folder.id),
|
38
|
+
method: :put,
|
39
|
+
class: 'folder_item_add dropdown-item',
|
40
|
+
remote: true %>
|
41
|
+
|
42
|
+
<% end %>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
<% end %>
|
46
|
+
<% end %>
|
47
|
+
<% else %>
|
48
|
+
<%= render partial: 'folders/in_folder' %>
|
49
|
+
<% end %>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%# if current_user %>
|
2
|
+
<% if current_or_guest_user %>
|
3
|
+
<%= link_to t('blacklight.saved_searches.save'),
|
4
|
+
save_search_path(session[:history].first),
|
5
|
+
method: :put,
|
6
|
+
id: 'saveSearchLink',
|
7
|
+
class: 'catalog_saveSearchLink btn btn-sm btn-outline-secondary' %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="col-sm-12">
|
2
|
+
<h2>Resend confirmation instructions</h2>
|
3
|
+
|
4
|
+
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
|
5
|
+
<%= devise_error_messages! %>
|
6
|
+
|
7
|
+
<div><%= f.label :email %><br />
|
8
|
+
<%= f.email_field :email, autofocus: true %></div>
|
9
|
+
|
10
|
+
<div><%= f.submit "Resend confirmation instructions" %></div>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= render "devise/shared/links" %>
|
14
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<p>Hello <%= @resource.email %>!</p>
|
2
|
+
|
3
|
+
<p>We recently received a request to change your password. Click the link below to get started:</p>
|
4
|
+
|
5
|
+
<p><%= link_to 'Change my password', edit_user_password_url(reset_password_token: @token) %></p>
|
6
|
+
|
7
|
+
<p>If you did not request a password change, then please ignore this email.</p>
|
8
|
+
<p>(Your password won't be changed until you click the link above and create a new one.)</p>
|
9
|
+
<p>If you have any questions, please <%= link_to t('blacklight.pages.contact.title'), feedback_url %>.</p>
|
10
|
+
<p>Thanks,<br/>
|
11
|
+
Digital Commonwealth<br/>
|
12
|
+
<%= link_to 'https://www.digitalcommonwealth.org/', 'https://www.digitalcommonwealth.org/' %>
|
13
|
+
</p>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="col-sm-9">
|
2
|
+
<h2>Change your password</h2>
|
3
|
+
|
4
|
+
<%= form_for(resource,
|
5
|
+
as: resource_name,
|
6
|
+
url: user_password_path,
|
7
|
+
html: { method: :put, id: 'password_edit', role: 'form' }) do |f| %>
|
8
|
+
<%= render partial: 'devise/shared/error_messages', resource: resource %>
|
9
|
+
<%= f.hidden_field :reset_password_token %>
|
10
|
+
|
11
|
+
<div class="form-group row">
|
12
|
+
<label class="col-sm-2 col-form-label" for="inputPassword">New password</label>
|
13
|
+
<div class="col-sm-4">
|
14
|
+
<%= f.password_field :password, autofocus: true, autocomplete: 'off', class: 'form-control' %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="form-group row">
|
18
|
+
<label class="col-sm-2 col-form-label" for="inputPassword">Confirm new password</label>
|
19
|
+
<div class="col-sm-4">
|
20
|
+
<%= f.password_field :password_confirmation, autocomplete: 'off', class: 'form-control' %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="form-group row">
|
24
|
+
<div class="offset-sm-2 col-sm-6">
|
25
|
+
<%= f.submit 'Change password', class: 'btn btn-primary' %>
|
26
|
+
<%= link_to 'Cancel', root_path, class: 'btn btn-secondary' %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<%# render "devise/shared/links" %>
|
32
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="col-sm-9">
|
2
|
+
<h2>Forgot your password?</h2>
|
3
|
+
|
4
|
+
<p>Enter your email address below and we'll send you a message with instructions on how to reset your password.</p>
|
5
|
+
|
6
|
+
<%= form_for(resource,
|
7
|
+
as: resource_name,
|
8
|
+
url: user_password_path,
|
9
|
+
html: { method: :post,
|
10
|
+
id: 'password_reset_request',
|
11
|
+
role: 'form' }) do |f| %>
|
12
|
+
<%= render partial: 'devise/shared/error_messages', resource: resource %>
|
13
|
+
|
14
|
+
<div class="form-group row">
|
15
|
+
<label class="col-sm-2 col-form-label" for="inputEmail">Email</label>
|
16
|
+
<div class="col-sm-4">
|
17
|
+
<%= f.text_field :email, autofocus: true, class: 'form-control' %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="form-group row">
|
22
|
+
<div class="offset-sm-2 col-sm-4">
|
23
|
+
<%= f.submit 'Send password reset instructions', :class => 'btn btn-primary' %>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
<%# render "devise/shared/links" %>
|
30
|
+
</div>
|
@@ -0,0 +1,82 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-sm-9">
|
3
|
+
|
4
|
+
<div id="breadcrumb">
|
5
|
+
<ul class="breadcrumb">
|
6
|
+
<li class="breadcrumb-item">
|
7
|
+
<%= link_to(t('blacklight.users.account_heading'), current_user) %>
|
8
|
+
<span class="divider"><%= t('blacklight.breadcrumb.separator') %></span>
|
9
|
+
</li>
|
10
|
+
<li class="active breadcrumb-item">
|
11
|
+
<%= t('devise.registrations.edit') %>
|
12
|
+
</li>
|
13
|
+
</ul>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<h2><%= t('devise.registrations.edit') %></h2>
|
17
|
+
|
18
|
+
<div id="edit_account_wrapper">
|
19
|
+
|
20
|
+
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, role: 'form' }) do |f| %>
|
21
|
+
<%= render partial: 'devise/shared/error_messages', resource: resource %>
|
22
|
+
<div class="form-group row">
|
23
|
+
<%= f.label 'First Name', class: 'col-form-label col-sm-2' %>
|
24
|
+
<div class="col-sm-4">
|
25
|
+
<%= f.text_field :first_name, autofocus: true, class: 'form-control' %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<div class="form-group row">
|
29
|
+
<%= f.label 'Last Name', class: 'col-form-label col-sm-2' %>
|
30
|
+
<div class="col-sm-4">
|
31
|
+
<%= f.text_field :last_name, class: 'form-control' %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="form-group row">
|
35
|
+
<%= f.label :email, class: 'col-form-label col-sm-2' %>
|
36
|
+
<div class="col-sm-4">
|
37
|
+
<%= f.email_field :email, class: 'form-control' %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<div class="form-group row">
|
41
|
+
<%= f.label t('devise.registrations.password.new'), class: 'col-form-label col-sm-2' %>
|
42
|
+
<div class="col-sm-4">
|
43
|
+
<%= f.password_field :password, class: 'form-control', autocomplete: 'off' %>
|
44
|
+
<span class="form-text">(leave blank if you don't want to change your password)</span>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<div class="form-group row">
|
48
|
+
<%= f.label t('devise.registrations.password.new_confirm'), class: 'col-form-label col-sm-2' %>
|
49
|
+
<div class="col-sm-4">
|
50
|
+
<%= f.password_field :password_confirmation, class: 'form-control', autocomplete: 'off' %>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
<div class="form-group row">
|
54
|
+
<%= f.label t('devise.registrations.password.old'), class: 'col-form-label col-sm-2' %>
|
55
|
+
<div class="col-sm-4">
|
56
|
+
<%= f.password_field :current_password, class: 'form-control', autocomplete: 'off' %>
|
57
|
+
<span class="form-text">(we need your current password to confirm your changes)</span>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="form-group row">
|
61
|
+
<div class="offset-sm-2 col-sm-6">
|
62
|
+
<%= f.submit 'Update my account', class: 'btn btn-primary' %>
|
63
|
+
<%= link_to 'Cancel changes', current_user, class: 'btn btn-secondary' %>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
<% end %>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
<div class="col-sm-3 sidebar-right">
|
70
|
+
<div id="cancel_account">
|
71
|
+
<h5>Actually, I want to cancel my account...</h5>
|
72
|
+
<ul>
|
73
|
+
<li>
|
74
|
+
<%= link_to "Cancel my account",
|
75
|
+
user_registration_path(resource),
|
76
|
+
data: { confirm: 'Are you sure? Any bookmarks, folders, or searches you have created will be deleted.' },
|
77
|
+
method: :delete %>
|
78
|
+
</li>
|
79
|
+
</ul>
|
80
|
+
</div>
|
81
|
+
</div>
|
82
|
+
</div>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<div class="col-sm-12">
|
2
|
+
<h2>Sign up</h2>
|
3
|
+
|
4
|
+
<div id="signup_wrapper">
|
5
|
+
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :post, role: 'form' }) do |f| %>
|
6
|
+
<%= render partial: 'devise/shared/error_messages', resource: resource %>
|
7
|
+
<div class="form-group row">
|
8
|
+
<label class="col-sm-2 col-form-label" for="inputFirstName">First name</label>
|
9
|
+
<div class="col-sm-4">
|
10
|
+
<%= f.text_field :first_name, autofocus: true, class: 'form-control' %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<div class="form-group row">
|
14
|
+
<label class="col-sm-2 col-form-label" for="inputLastName">Last name</label>
|
15
|
+
<div class="col-sm-4">
|
16
|
+
<%= f.text_field :last_name, class: 'form-control' %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<div class="form-group row">
|
20
|
+
<label class="col-sm-2 col-form-label" for="inputEmail">Email</label>
|
21
|
+
<div class="col-sm-4">
|
22
|
+
<%= f.text_field :email, class: 'form-control' %>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<div class="form-group row">
|
26
|
+
<label class="col-sm-2 col-form-label" for="inputPassword">Password</label>
|
27
|
+
<div class="col-sm-4">
|
28
|
+
<%= f.password_field :password, autocomplete: 'off', class: 'form-control' %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<div class="form-group row">
|
32
|
+
<label class="col-sm-2 col-form-label" for="inputPassword">Re-enter password</label>
|
33
|
+
<div class="col-sm-4">
|
34
|
+
<%= f.password_field :password_confirmation, autocomplete: 'off', class: 'form-control' %>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div class="form-group row">
|
38
|
+
<div class="offset-sm-2 col-sm-4">
|
39
|
+
<%= f.submit 'Sign up', class: 'btn btn-primary' %>
|
40
|
+
<%= link_to 'Cancel', root_path, class: 'btn btn-secondary' %>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
45
|
+
</div>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<div class="col-sm-9">
|
3
|
+
<h2>Sign in</h2>
|
4
|
+
|
5
|
+
<div id="signin_wrapper">
|
6
|
+
|
7
|
+
<%= form_for(resource,
|
8
|
+
as: resource_name,
|
9
|
+
url: user_session_path,
|
10
|
+
html: { method: :post, role: 'form' }) do |f| %>
|
11
|
+
|
12
|
+
<div class="form-group row">
|
13
|
+
<label class="col-sm-2 col-form-label" for="user_uid">Email</label>
|
14
|
+
<div class="col-sm-4">
|
15
|
+
<%= f.text_field :email, class: 'form-control' %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="form-group row">
|
19
|
+
<label class="col-sm-2 col-form-label" for="user_password">Password</label>
|
20
|
+
<div class="col-sm-4">
|
21
|
+
<%= f.password_field :password, class: 'form-control' %>
|
22
|
+
<span class="form-text">
|
23
|
+
<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
|
24
|
+
<%= link_to 'Forgot your password?', new_password_path(resource_name) %>
|
25
|
+
<% end -%>
|
26
|
+
</span>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<% if devise_mapping.rememberable? -%>
|
30
|
+
<div class="form-group row">
|
31
|
+
<div class="form-check offset-sm-2 col-sm-6">
|
32
|
+
<%= f.check_box :remember_me, class: 'form-check-input' %>
|
33
|
+
<label id="remember_me" class="form-check-label">
|
34
|
+
Remember me on this device
|
35
|
+
</label>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<% end -%>
|
40
|
+
<div class="form-group row">
|
41
|
+
<div class="offset-sm-2 col-sm-4">
|
42
|
+
<%# f.submit "Sign in" %>
|
43
|
+
<button type="submit" class="btn btn-primary">
|
44
|
+
<span>Sign in</span>
|
45
|
+
</button>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
<div id="alt_signins">
|
52
|
+
<%= link_to(image_tag('commonwealth-vlr-engine/bplLoginButton.png',
|
53
|
+
alt: 'Log in with your BPL library card',
|
54
|
+
class: 'alt_signin_btn'),
|
55
|
+
user_polaris_omniauth_authorize_path, method: :post) %>
|
56
|
+
</div>
|
57
|
+
|
58
|
+
<%= render 'devise/shared/links' %>
|
59
|
+
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
<div class="col-sm-3">
|
63
|
+
<div id="why_log_in">
|
64
|
+
<h5>Why sign in?</h5>
|
65
|
+
<ul>
|
66
|
+
<li>Create customized collections of your favorite items</li>
|
67
|
+
<li>Save important searches</li>
|
68
|
+
<li>Keep track of your search history</li>
|
69
|
+
</ul>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
</div>
|