bpluser 0.1.19 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +132 -158
- 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>
|