hyrax 3.0.0.pre.rc4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.dassie/config/cable.yml +1 -1
  3. data/.dassie/config/environments/development.rb +2 -0
  4. data/.dassie/config/environments/production.rb +1 -1
  5. data/.dassie/config/redis.yml +1 -0
  6. data/.dassie/db/seeds.rb +8 -0
  7. data/.dockerignore +1 -0
  8. data/Dockerfile +7 -4
  9. data/app/actors/hyrax/actors/create_with_remote_files_actor.rb +27 -1
  10. data/app/actors/hyrax/actors/file_actor.rb +4 -2
  11. data/app/actors/hyrax/actors/file_set_actor.rb +8 -6
  12. data/app/controllers/concerns/hyrax/works_controller_behavior.rb +16 -5
  13. data/app/forms/hyrax/forms/resource_form.rb +15 -0
  14. data/app/helpers/hyrax/hyrax_helper_behavior.rb +8 -0
  15. data/app/indexers/hyrax/valkyrie_file_set_indexer.rb +116 -0
  16. data/app/indexers/hyrax/valkyrie_indexer.rb +6 -1
  17. data/app/indexers/hyrax/valkyrie_work_indexer.rb +2 -0
  18. data/app/jobs/embargo_expiry_job.rb +7 -5
  19. data/app/jobs/file_set_attached_event_job.rb +6 -1
  20. data/app/jobs/lease_expiry_job.rb +6 -4
  21. data/app/models/concerns/hyrax/ability.rb +11 -0
  22. data/app/models/concerns/hyrax/solr_document_behavior.rb +7 -1
  23. data/app/models/hyrax/file_set.rb +1 -0
  24. data/app/models/hyrax/work.rb +2 -0
  25. data/app/models/job_io_wrapper.rb +1 -1
  26. data/app/services/hyrax/access_control_list.rb +1 -1
  27. data/app/services/hyrax/adapters/nesting_index_adapter.rb +1 -1
  28. data/app/services/hyrax/embargo_manager.rb +1 -1
  29. data/app/services/hyrax/graph_exporter.rb +1 -1
  30. data/app/services/hyrax/listeners/metadata_index_listener.rb +18 -1
  31. data/app/services/hyrax/versioning_service.rb +1 -1
  32. data/app/services/hyrax/work_uploads_handler.rb +5 -2
  33. data/app/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb +1 -1
  34. data/app/views/hyrax/base/_form_share.html.erb +1 -5
  35. data/app/views/hyrax/base/_workflow_actions.html.erb +1 -1
  36. data/app/views/hyrax/batch_edits/edit.html.erb +2 -2
  37. data/app/views/hyrax/collections/_list_collections.html.erb +1 -1
  38. data/app/views/hyrax/collections/_search_form.html.erb +1 -1
  39. data/app/views/hyrax/stats/file.html.erb +1 -1
  40. data/app/views/hyrax/stats/work.html.erb +1 -1
  41. data/app/views/hyrax/uploads/_js_templates.html.erb +4 -4
  42. data/app/views/hyrax/uploads/_js_templates_versioning.html.erb +4 -4
  43. data/app/views/hyrax/users/_contributions.html.erb +1 -1
  44. data/app/views/hyrax/users/_profile_tabs.html.erb +2 -2
  45. data/app/views/hyrax/users/_search_form.html.erb +1 -1
  46. data/app/views/hyrax/users/_user.html.erb +1 -1
  47. data/app/views/hyrax/users/_user_info.html.erb +9 -9
  48. data/bin/db-migrate-seed.sh +3 -1
  49. data/bin/solrcloud-assign-configset.sh +27 -0
  50. data/bin/solrcloud-upload-configset.sh +31 -0
  51. data/chart/hyrax/Chart.yaml +8 -8
  52. data/chart/hyrax/README.md +42 -6
  53. data/chart/hyrax/templates/NOTES.txt +1 -1
  54. data/chart/hyrax/templates/_helpers.tpl +76 -0
  55. data/chart/hyrax/templates/configmap-env.yaml +10 -11
  56. data/chart/hyrax/templates/cron-embargo.yaml +24 -0
  57. data/chart/hyrax/templates/cron-lease.yaml +24 -0
  58. data/chart/hyrax/templates/deployment.yaml +36 -4
  59. data/chart/hyrax/templates/secrets.yaml +3 -2
  60. data/chart/hyrax/values.yaml +72 -1
  61. data/config/initializers/listeners.rb +2 -0
  62. data/documentation/developing-your-hyrax-based-app.md +3 -3
  63. data/lib/hyrax/transactions/container.rb +11 -1
  64. data/lib/hyrax/transactions/steps/delete_resource.rb +38 -0
  65. data/lib/hyrax/transactions/steps/destroy_work.rb +1 -0
  66. data/lib/hyrax/transactions/work_destroy.rb +20 -0
  67. data/lib/hyrax/version.rb +1 -1
  68. data/lib/tasks/embargo_lease.rake +27 -0
  69. data/lib/wings/active_fedora_converter/default_work.rb +4 -0
  70. data/lib/wings/attribute_transformer.rb +29 -19
  71. data/lib/wings/model_transformer.rb +4 -19
  72. data/lib/wings/orm_converter.rb +24 -21
  73. data/lib/wings/valkyrie/persister.rb +1 -0
  74. data/lib/wings/valkyrie/query_service.rb +36 -24
  75. data/template.rb +1 -1
  76. metadata +14 -20
  77. data/chart/fcrepo/.gitignore +0 -2
  78. data/chart/fcrepo/.helmignore +0 -23
  79. data/chart/fcrepo/Chart.yaml +0 -11
  80. data/chart/fcrepo/README.md +0 -50
  81. data/chart/fcrepo/templates/NOTES.txt +0 -21
  82. data/chart/fcrepo/templates/_helpers.tpl +0 -68
  83. data/chart/fcrepo/templates/configmap-env.yaml +0 -19
  84. data/chart/fcrepo/templates/deployment.yaml +0 -109
  85. data/chart/fcrepo/templates/ingress.yaml +0 -41
  86. data/chart/fcrepo/templates/pvc.yaml +0 -20
  87. data/chart/fcrepo/templates/secret.yaml +0 -12
  88. data/chart/fcrepo/templates/service.yaml +0 -15
  89. data/chart/fcrepo/templates/serviceaccount.yaml +0 -12
  90. data/chart/fcrepo/templates/tests/test-connection.yaml +0 -15
  91. data/chart/fcrepo/values.yaml +0 -79
  92. data/chart/hyrax/templates/fcrepo-secret.yaml +0 -13
@@ -30,6 +30,11 @@ class FileSetAttachedEventJob < ContentEventJob
30
30
  end
31
31
 
32
32
  def curation_concern
33
- repo_object.in_works.first
33
+ case repo_object
34
+ when ActiveFedora::Base
35
+ repo_object.in_works.first
36
+ else
37
+ Hyrax.query_service.find_parents(resource: repo_object).first
38
+ end
34
39
  end
35
40
  end
@@ -1,15 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
  class LeaseExpiryJob < Hyrax::ApplicationJob
3
3
  def perform
4
- records_with_expired_leases.each do |id|
5
- work = ActiveFedora::Base.find(id)
6
- Hyrax::Actors::LeaseActor.new(work).destroy
4
+ records_with_expired_leases.each do |resource|
5
+ Hyrax::LeaseManager.release_lease_for(resource: resource) &&
6
+ Hyrax::AccessControlList(resource).save
7
7
  end
8
8
  end
9
9
 
10
10
  ##
11
11
  # @return [Enumerator<String>] ids for all the objects that have expired active leases
12
12
  def records_with_expired_leases
13
- Hyrax::LeaseService.assets_with_expired_leases.map(&:id)
13
+ ids = Hyrax::LeaseService.assets_with_expired_leases.map(&:id)
14
+
15
+ Hyrax.query_service.find_many_by_ids(ids: ids)
14
16
  end
15
17
  end
@@ -37,6 +37,7 @@ module Hyrax
37
37
  self.registered_group_name = Hyrax.config.registered_user_group_name
38
38
  self.public_group_name = Hyrax.config.public_user_group_name
39
39
  self.ability_logic += [:admin_permissions,
40
+ :edit_resources,
40
41
  :curation_concerns_permissions,
41
42
  :operation_abilities,
42
43
  :add_to_collection,
@@ -108,6 +109,16 @@ module Hyrax
108
109
  end
109
110
  end
110
111
 
112
+ ##
113
+ # @api public
114
+ #
115
+ # Allows
116
+ def edit_resources
117
+ can [:edit, :update, :destroy], Hyrax::Resource do |resource|
118
+ test_edit(resource.id)
119
+ end
120
+ end
121
+
111
122
  ##
112
123
  # @api public
113
124
  #
@@ -74,8 +74,14 @@ module Hyrax
74
74
 
75
75
  ##
76
76
  # @api public
77
+ #
78
+ # @note uses the @model's `._to_partial_path` if implemented, otherwise
79
+ # constructs a default
77
80
  def to_partial_path
78
- @model._to_partial_path
81
+ return @model._to_partial_path if
82
+ @model.respond_to?(:_to_partial_path)
83
+
84
+ "hyrax/#{model_name.collection}/#{model_name.element}"
79
85
  end
80
86
 
81
87
  ##
@@ -7,6 +7,7 @@ module Hyrax
7
7
  # @see https://wiki.duraspace.org/display/samvera/Hydra%3A%3AWorks+Shared+Modeling
8
8
  class FileSet < Hyrax::Resource
9
9
  include Hyrax::Schema(:core_metadata)
10
+ include Hyrax::Schema(:basic_metadata)
10
11
 
11
12
  attribute :file_ids, Valkyrie::Types::Array.of(Valkyrie::Types::ID) # id for FileMetadata resources
12
13
  attribute :original_file_id, Valkyrie::Types::ID # id for FileMetadata resource
@@ -14,6 +14,8 @@ module Hyrax
14
14
  attribute :on_behalf_of, Valkyrie::Types::String
15
15
  attribute :proxy_depositor, Valkyrie::Types::String
16
16
  attribute :state, Valkyrie::Types::URI.default(Hyrax::ResourceStatus::ACTIVE)
17
+ attribute :representative_id, Valkyrie::Types::ID
18
+ attribute :thumbnail_id, Valkyrie::Types::ID
17
19
 
18
20
  ##
19
21
  # @return [Boolean] true
@@ -63,7 +63,7 @@ class JobIoWrapper < ApplicationRecord
63
63
  nil # unable to determine
64
64
  end
65
65
 
66
- def file_set(use_valkyrie: false)
66
+ def file_set(use_valkyrie: Hyrax.config.query_index_from_valkyrie)
67
67
  return FileSet.find(file_set_id) unless use_valkyrie
68
68
  Hyrax.query_service.find_by(id: Valkyrie::ID.new(file_set_id))
69
69
  end
@@ -14,7 +14,7 @@ module Hyrax
14
14
  when AccessControlList
15
15
  obj
16
16
  else
17
- AccessControlList.new(resource: obj)
17
+ obj.try(:permission_manager)&.acl || AccessControlList.new(resource: obj)
18
18
  end
19
19
  end
20
20
 
@@ -56,7 +56,7 @@ module Hyrax
56
56
  # @see Samvera::NestingIndexer.reindex_all!(extent: FULL_REINDEX)
57
57
  def self.each_perservation_document_id_and_parent_ids(&block) # rubocop:disable Lint/UnusedMethodArgument
58
58
  ActiveFedora::Base.descendant_uris(ActiveFedora.fedora.base_uri, exclude_uri: true).each do |uri|
59
- id = Hyrax::Base.uri_to_id(uri)
59
+ id = Hyrax.config.translate_uri_to_id.call(uri)
60
60
  object = ActiveFedora::Base.find(id)
61
61
  parent_ids = object.try(:member_of_collection_ids) || []
62
62
 
@@ -175,7 +175,7 @@ module Hyrax
175
175
 
176
176
  ##
177
177
  # @return [void]
178
- # @raise [NotEnforcableError] when trying to release an embargo that
178
+ # @raise [NotReleasableError] when trying to release an embargo that
179
179
  # is currently active
180
180
  def release!
181
181
  release || raise(NotReleasableError)
@@ -140,7 +140,7 @@ module Hyrax
140
140
  # This method is called once for each statement in the graph.
141
141
  def replacer
142
142
  lambda do |resource_id, _graph|
143
- parent_id = Hyrax::Base.uri_to_id(parent_url)
143
+ parent_id = Hyrax.config.translate_uri_to_id.call(parent_url)
144
144
  return parent_url + resource_id.sub(parent_id, '') if resource_id.start_with?(parent_id)
145
145
  Rails.application.routes.url_helpers.solr_document_url(resource_id, host: hostname)
146
146
  end
@@ -16,9 +16,26 @@ module Hyrax
16
16
  #
17
17
  # @param event [Dry::Event]
18
18
  def on_object_metadata_updated(event)
19
- return Hyrax.index_adapter.save(resource: event[:object]) if
19
+ log_non_resource(event) && return unless
20
20
  event[:object].is_a?(Valkyrie::Resource)
21
21
 
22
+ Hyrax.index_adapter.save(resource: event[:object])
23
+ end
24
+
25
+ ##
26
+ # Remove the resource from the index.
27
+ #
28
+ # @param event [Dry::Event]
29
+ def on_object_deleted(event)
30
+ log_non_resource(event.payload) && return unless
31
+ event.payload[:object].is_a?(Valkyrie::Resource)
32
+
33
+ Hyrax.index_adapter.delete(resource: event[:object])
34
+ end
35
+
36
+ private
37
+
38
+ def log_non_resource(event)
22
39
  Hyrax.logger.info('Skipping object reindex because the object ' \
23
40
  "#{event[:object]} was not a Valkyrie::Resource.")
24
41
  end
@@ -20,7 +20,7 @@ module Hyrax
20
20
  def versioned_file_id(file)
21
21
  versions = file.versions.all
22
22
  if versions.present?
23
- Hyrax::Base.uri_to_id(versions.last.uri)
23
+ Hyrax.config.translate_uri_to_id.call(versions.last.uri)
24
24
  else
25
25
  file.id
26
26
  end
@@ -64,7 +64,7 @@ module Hyrax
64
64
  # @note we immediately and silently discard uploads with an existing
65
65
  # file_set_uri, in a half-considered attempt at supporting idempotency
66
66
  # (for job retries). this is for legacy/AttachFilesToWorkJob
67
- # compatibility, but could stand for a roubst reimplementation.
67
+ # compatibility, but could stand for a robust reimplementation.
68
68
  #
69
69
  # @param [Enumberable<Hyrax::UploadedFile>] files files to add
70
70
  #
@@ -88,7 +88,8 @@ module Hyrax
88
88
 
89
89
  acquire_lock_for(work.id) do
90
90
  event_payloads = files.each_with_object([]) { |file, arry| arry << make_file_set_and_ingest(file) }
91
- Hyrax.persister.save(resource: work)
91
+ @persister.save(resource: work)
92
+ Hyrax.publisher.publish('object.metadata.updated', object: work, user: files.first.user)
92
93
  event_payloads.each { |payload| Hyrax.publisher.publish('file.set.attached', payload) }
93
94
  end
94
95
  end
@@ -105,7 +106,9 @@ module Hyrax
105
106
  # copy ACLs; should we also be propogating embargo/lease?
106
107
  Hyrax::AccessControlList.copy_permissions(source: target_permissions, target: file_set)
107
108
  append_to_work(file_set)
109
+
108
110
  IngestJob.perform_later(wrap_file(file, file_set))
111
+ Hyrax.publisher.publish('object.metadata.updated', object: file_set, user: file.user)
109
112
  { file_set: file_set, user: file.user }
110
113
  end
111
114
 
@@ -14,7 +14,7 @@
14
14
  <div class="media-body">
15
15
  <p class="media-heading">
16
16
  <strong><%= link_to document.title_or_label, [main_app, document], id: "src_copy_link#{id}", class: "#{'document-title' if document.title_or_label == document.label}" %></strong>
17
- <a href="#" class="small" title="Click for more details"><i id="expand_<%= id %>" class="glyphicon glyphicon-chevron-right"></i></a>
17
+ <a href="#" class="small" title="Click for more details"><span id="expand_<%= id %>" class="glyphicon glyphicon-chevron-right"></span></a>
18
18
  </p>
19
19
  <%= render_collection_links(document) %>
20
20
  </div>
@@ -18,11 +18,7 @@
18
18
  </legend>
19
19
  <div class="col-sm-9 form-inline">
20
20
  <label for="new_group_name_skel" class="sr-only"><%= t(".group") %></label>
21
- <% if current_ability.admin? %>
22
- <%= select_tag 'new_group_name_skel', options_for_select(["Select a group"] + current_user.group_service.map.keys), class: 'form-control' %>
23
- <% else %>
24
- <%= select_tag 'new_group_name_skel', options_for_select(["Select a group"] + current_user.groups), class: 'form-control' %>
25
- <% end %>
21
+ <%= select_tag 'new_group_name_skel', options_for_select(["Select a group"] + available_user_groups(ability: current_ability)), class: 'form-control' %>
26
22
  <label for="new_group_permission_skel" class="sr-only"><%= t(".access_type_to_grant") %></label>
27
23
  <%= select_tag 'new_group_permission_skel', options_for_select(configured_permission_options), class: 'form-control' %>
28
24
 
@@ -1,7 +1,7 @@
1
1
  <div id="workflow_controls" class="panel panel-workflow">
2
2
  <div class="panel-heading">
3
3
  <a data-toggle="collapse" href="#workflow_controls_collapse">
4
- <h2 class="panel-title"><%= t('.title') %> <i class="fa fa-chevron-right pull-right"></i></h2>
4
+ <h2 class="panel-title"><%= t('.title') %> <span class="fa fa-chevron-right pull-right"></span></h2>
5
5
  </a>
6
6
  </div>
7
7
  <%= form_tag main_app.hyrax_workflow_action_path(presenter), method: :put do %>
@@ -9,8 +9,8 @@
9
9
  <h3><%= t('.descriptions_title') %></h3>
10
10
  <div class="panel panel-default tabs">
11
11
  <ul class="nav nav-tabs">
12
- <li id="edit_descriptions_link" class="active"><a href="#descriptions_display" data-toggle="tab"><i class="glyphicon glyphicon-tags"></i> <%= t('.descriptions') %></a></li>
13
- <li id="edit_permissions_link"><a href="#permissions_display" data-toggle="tab"><i class="glyphicon glyphicon-lock"></i> <%= t('.permissions') %></a></li>
12
+ <li id="edit_descriptions_link" class="active"><a href="#descriptions_display" data-toggle="tab"><span class="glyphicon glyphicon-tags"></span> <%= t('.descriptions') %></a></li>
13
+ <li id="edit_permissions_link"><a href="#permissions_display" data-toggle="tab"><span class="glyphicon glyphicon-lock"></span> <%= t('.permissions') %></a></li>
14
14
  </ul>
15
15
  <div class="panel-body">
16
16
  <div class="tab-content">
@@ -11,7 +11,7 @@
11
11
  <%= collection_presenter.title_or_label %>
12
12
  <% end %>
13
13
  <a href="#" class="small" title="Click for more details">
14
- <i id="expand_<%= id %>" class="glyphicon glyphicon-chevron-right" aria-hidden="true"></i>
14
+ <span id="expand_<%= id %>" class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
15
15
  <span class="sr-only"> <%= "#{t("hyrax.dashboard.my.sr.detail_label")} #{collection_presenter.title_or_label}" %></span>
16
16
  </a>
17
17
  </div>
@@ -3,7 +3,7 @@
3
3
  <div class="input-group">
4
4
  <%= text_field_tag :cq, params[:cq], class: "collection-query form-control", placeholder: t('hyrax.collections.search_form.placeholder'), size: '30', type: "search", id: "collection_search" %>
5
5
  <div class="input-group-btn">
6
- <button type="submit" class="btn btn-primary" id="collection_submit"><i class="glyphicon glyphicon-search"></i> <%= t('hyrax.collections.search_form.button_label') %></button>
6
+ <button type="submit" class="btn btn-primary" id="collection_submit"><span class="glyphicon glyphicon-search"></span> <%= t('hyrax.collections.search_form.button_label') %></button>
7
7
  </div>
8
8
  </div>
9
9
  <%= hidden_field_tag :sort, params[:sort], id: 'collection_sort' %>
@@ -13,7 +13,7 @@
13
13
  <div class="col-sm-12">
14
14
  <%= content_tag :h2, "File Analytics" %>
15
15
  <div class="alert alert-info">
16
- <i class="glyphicon glyphicon-signal large-icon"></i>
16
+ <span class="glyphicon glyphicon-signal large-icon"></span>
17
17
  <%= content_tag :strong, @stats.total_pageviews %> views and <%= content_tag :strong, @stats.total_downloads %> downloads since <%= @stats.created.strftime("%B %-d, %Y") %>
18
18
  </div>
19
19
  <div class="stats-container">
@@ -13,7 +13,7 @@
13
13
  <div class="col-sm-12">
14
14
  <%= content_tag :h2, "Work Analytics" %>
15
15
  <div class="alert alert-info">
16
- <i class="glyphicon glyphicon-signal large-icon"></i>
16
+ <span class="glyphicon glyphicon-signal large-icon"></span>
17
17
  <%= content_tag :strong, @stats.total_pageviews %> views since <%= @stats.created.strftime("%B %-d, %Y") %>
18
18
  </div>
19
19
  <div class="stats-container">
@@ -17,13 +17,13 @@
17
17
  <td class="text-right">
18
18
  {% if (!i && !o.options.autoUpload) { %}
19
19
  <button class="btn btn-primary start" disabled>
20
- <i class="glyphicon glyphicon-upload"></i>
20
+ <span class="glyphicon glyphicon-upload"></span>
21
21
  <span><%= t('.start') %></span>
22
22
  </button>
23
23
  {% } %}
24
24
  {% if (!i) { %}
25
25
  <button class="btn btn-sm btn-warning cancel">
26
- <i class="glyphicon glyphicon-ban-circle"></i>
26
+ <span class="glyphicon glyphicon-ban-circle"></span>
27
27
  <span><%= t('helpers.action.cancel') %></span>
28
28
  </button>
29
29
  {% } %}
@@ -67,7 +67,7 @@
67
67
  {% } %}
68
68
  <span class="size">{%=o.formatFileSize(file.size)%}</span>
69
69
  <button class="btn btn-sm btn-danger delete pull-right" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
70
- <i class="glyphicon glyphicon-trash"></i>
70
+ <span class="glyphicon glyphicon-trash"></span>
71
71
  <span><%= t('helpers.action.delete') %></span>
72
72
  </button>
73
73
  </div>
@@ -124,7 +124,7 @@
124
124
  </td>
125
125
  <td class="text-right">
126
126
  <button class="btn btn-sm btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
127
- <i class="glyphicon glyphicon-trash"></i>
127
+ <span class="glyphicon glyphicon-trash"></span>
128
128
  <%= t('helpers.action.delete') %>
129
129
  </button>
130
130
  </td>
@@ -23,13 +23,13 @@
23
23
  <td class="text-right">
24
24
  {% if (!i && !o.options.autoUpload) { %}
25
25
  <button class="btn btn-primary start" disabled>
26
- <i class="glyphicon glyphicon-upload"></i>
26
+ <span class="glyphicon glyphicon-upload"></span>
27
27
  <span><%= t('.start') %></span>
28
28
  </button>
29
29
  {% } %}
30
30
  {% if (!i) { %}
31
31
  <button class="btn btn-sm btn-warning cancel">
32
- <i class="glyphicon glyphicon-ban-circle"></i>
32
+ <span class="glyphicon glyphicon-ban-circle"></span>
33
33
  <span><%= t('helpers.action.cancel') %></span>
34
34
  </button>
35
35
  {% } %}
@@ -76,7 +76,7 @@
76
76
  data-type="{%=file.deleteType%}"
77
77
  data-url="{%=file.deleteUrl%}"
78
78
  {% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
79
- <i class="glyphicon glyphicon-trash"></i>
79
+ <span class="glyphicon glyphicon-trash"></span>
80
80
  <span><%= t('helpers.action.delete') %></span>
81
81
  </button>
82
82
  </div>
@@ -169,4 +169,4 @@
169
169
  minFileSize: '<%= t(".options.messages.min_file_size") %>',
170
170
  }});
171
171
  });
172
- </script>
172
+ </script>
@@ -12,7 +12,7 @@
12
12
  <%= link_to t.to_s, [main_app, t] %>
13
13
  <% if presenter.current_user? %>
14
14
  <%= display_trophy_link current_user, t.id, class: 'glyphicon glyphicon-star', data: { removerow: true } do %>
15
- <i class='trophy-on glyphicon glyphicon-remove'></i>
15
+ <span class='trophy-on glyphicon glyphicon-remove'></span>
16
16
  <% end %>
17
17
  <% end %>
18
18
  </td>
@@ -1,6 +1,6 @@
1
1
  <ul class="nav nav-tabs" id="myTab">
2
- <li class="active"><a href="#contributions"><i class="glyphicon glyphicon-star"></i> <%= I18n.t('hyrax.user_profile.tab_highlighted') %></a></li>
3
- <li><a href="#activity_log"><i class="glyphicon glyphicon-calendar"></i> <%= I18n.t('hyrax.user_profile.tab_activity') %></a></li>
2
+ <li class="active"><a href="#contributions"><span class="glyphicon glyphicon-star"></span> <%= I18n.t('hyrax.user_profile.tab_highlighted') %></a></li>
3
+ <li><a href="#activity_log"><span class="glyphicon glyphicon-calendar"></span> <%= I18n.t('hyrax.user_profile.tab_activity') %></a></li>
4
4
  </ul>
5
5
 
6
6
  <div class="tab-content panel-body">
@@ -6,7 +6,7 @@
6
6
  <%= hidden_field_tag :sort, params[:sort], id: 'user_sort' %>
7
7
  <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:uq, :sort, :qt, :page, :utf8)) %>
8
8
  <button type="submit" class="btn btn-primary" id="user_submit">
9
- <i class="glyphicon glyphicon-search"></i><%= t('.go') %>
9
+ <span class="glyphicon glyphicon-search"></span><%= t('.go') %>
10
10
  </button>
11
11
  <% end %>
12
12
  </div>
@@ -17,7 +17,7 @@
17
17
  <div class="panel-footer clearfix">
18
18
  <% if can? :edit, user %>
19
19
  <%= link_to hyrax.edit_dashboard_profile_path(user), class: "btn btn-default pull-right" do %>
20
- <i class="glyphicon glyphicon-edit"></i> <%= t("hyrax.edit_profile") %>
20
+ <span class="glyphicon glyphicon-edit"></span> <%= t("hyrax.edit_profile") %>
21
21
  <% end %>
22
22
  <% end %>
23
23
  </div>
@@ -11,35 +11,35 @@
11
11
  <% end %>
12
12
 
13
13
  <% if user.facebook_handle.present? %>
14
- <dt><i class="fa fa-facebook" aria-hidden="true"></i> Facebook Handle</dt>
14
+ <dt><span class="fa fa-facebook" aria-hidden="true"></span> Facebook Handle</dt>
15
15
  <dd><%= link_to user.facebook_handle, "http://facebook.com/#{user.facebook_handle}", {target:'_blank'} %></dd>
16
16
  <% end %>
17
17
 
18
18
  <% if user.twitter_handle.present? %>
19
- <dt><i class="fa fa-twitter" aria-hidden="true"></i> Twitter Handle</dt>
19
+ <dt><span class="fa fa-twitter" aria-hidden="true"></span> Twitter Handle</dt>
20
20
  <dd><%= link_to user.twitter_handle, "http://twitter.com/#{user.twitter_handle}", {target:'_blank'} %></dd>
21
21
  <% end %>
22
22
 
23
23
  <% if user.googleplus_handle.present? %>
24
- <dt><i class="fa fa-google-plus" aria-hidden="true"></i> Google+ Handle</dt>
24
+ <dt><span class="fa fa-google-plus" aria-hidden="true"></span> Google+ Handle</dt>
25
25
  <dd><%= link_to user.googleplus_handle, "http://google.com/+#{user.googleplus_handle}", {target:'_blank'} %></dd>
26
26
  <% end %>
27
27
 
28
28
  <% if user.linkedin_handle.present? %>
29
- <dt><i class="fa fa-linkedin" aria-hidden="true"></i> LinkedIn</dt>
29
+ <dt><span class="fa fa-linkedin" aria-hidden="true"></span> LinkedIn</dt>
30
30
  <dd><%= link_to "#{@linkedInUrl}", "#{@linkedInUrl}", { target: '_blank' } %></dd>
31
31
  <% end %>
32
32
 
33
- <dt><i class="fa fa-envelope" aria-hidden="true"></i> Email</dt>
33
+ <dt><span class="fa fa-envelope" aria-hidden="true"></span> Email</dt>
34
34
  <dd><%= mail_to user.email %></dd>
35
35
 
36
36
  <% if user.chat_id %>
37
- <dt><i class="glyphicon glyphicon-bullhorn" aria-hidden="true"></i> Chat ID</dt>
37
+ <dt><span class="glyphicon glyphicon-bullhorn" aria-hidden="true"></span> Chat ID</dt>
38
38
  <dd><%= user.chat_id %></dd>
39
39
  <% end %>
40
40
 
41
41
  <% if user.website %>
42
- <dt><i class="glyphicon glyphicon-globe" aria-hidden="true"></i> Website(s)</dt>
42
+ <dt><span class="glyphicon glyphicon-globe" aria-hidden="true"></span> Website(s)</dt>
43
43
  <dd><%= iconify_auto_link(user.website) %></dd>
44
44
  <% end %>
45
45
 
@@ -64,7 +64,7 @@
64
64
  <% end %>
65
65
 
66
66
  <% if user.address %>
67
- <dt><i class="glyphicon glyphicon-map-marker" aria-hidden="true"></i> Address</dt>
67
+ <dt><span class="glyphicon glyphicon-map-marker" aria-hidden="true"></span> Address</dt>
68
68
  <dd><%= user.address %></dd>
69
69
  <% end %>
70
70
 
@@ -74,7 +74,7 @@
74
74
  <% end %>
75
75
 
76
76
  <% if user.telephone %>
77
- <dt><i class="glyphicon glyphicon-earphone" aria-hidden="true"></i> Telephone</dt>
77
+ <dt><span class="glyphicon glyphicon-earphone" aria-hidden="true"></span> Telephone</dt>
78
78
  <dd><%= link_to_telephone(user) %></dd>
79
79
  <% end %>
80
80