sufia 5.0.0 → 6.0.0.beta1

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.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -8
  3. data/Gemfile +3 -12
  4. data/History.md +0 -36
  5. data/LICENSE.md +14 -0
  6. data/README.md +4 -8
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/javascripts/sufia.js +1 -17
  9. data/app/assets/javascripts/sufia/batch_edit.js +43 -28
  10. data/app/assets/javascripts/sufia/edit_metadata.js +9 -14
  11. data/app/assets/javascripts/sufia/multiForm.js +67 -0
  12. data/app/assets/javascripts/sufia/permissions.js +92 -35
  13. data/app/assets/stylesheets/sufia.css.scss +1 -6
  14. data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -8
  15. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -15
  16. data/app/assets/stylesheets/sufia/_file-listing.scss +1 -1
  17. data/app/assets/stylesheets/sufia/_settings.scss +0 -1
  18. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +3 -10
  19. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -8
  20. data/app/controllers/concerns/sufia/catalog.rb +1 -1
  21. data/app/controllers/concerns/sufia/controller.rb +3 -1
  22. data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +1 -1
  23. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  24. data/app/controllers/concerns/sufia/files_controller_behavior.rb +16 -4
  25. data/app/controllers/concerns/sufia/homepage_controller.rb +1 -1
  26. data/app/controllers/concerns/sufia/my_controller_behavior.rb +2 -2
  27. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +3 -4
  28. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -7
  29. data/app/controllers/my/collections_controller.rb +3 -4
  30. data/app/controllers/my/highlights_controller.rb +2 -2
  31. data/app/controllers/my/shares_controller.rb +3 -3
  32. data/app/controllers/single_use_links_controller.rb +5 -9
  33. data/app/controllers/single_use_links_viewer_controller.rb +4 -4
  34. data/app/helpers/generic_file_helper.rb +9 -0
  35. data/app/helpers/sufia/records_helper_behavior.rb +16 -0
  36. data/app/helpers/sufia/sufia_helper_behavior.rb +0 -11
  37. data/app/jobs/content_depositor_change_event_job.rb +1 -1
  38. data/app/jobs/ingest_local_file_job.rb +2 -1
  39. data/app/models/concerns/sufia/solr_document_behavior.rb +10 -10
  40. data/app/models/featured_work_list.rb +7 -9
  41. data/app/presenters/sufia/version_list_presenter.rb +15 -0
  42. data/app/presenters/sufia/version_presenter.rb +30 -0
  43. data/app/views/batch/_metadata.html.erb +51 -29
  44. data/app/views/batch/_more_metadata.html.erb +1 -1
  45. data/app/views/batch/edit.html.erb +10 -8
  46. data/app/views/batch_edits/edit.html.erb +13 -9
  47. data/app/views/collections/_edit_descriptions.html.erb +1 -1
  48. data/app/views/collections/_form.html.erb +4 -4
  49. data/app/views/collections/_form_for_select_collection.html.erb +1 -1
  50. data/app/views/collections/_show_document_list_menu.html.erb +7 -5
  51. data/app/views/collections/_show_document_list_row.html.erb +2 -2
  52. data/app/views/collections/edit.html.erb +0 -1
  53. data/app/views/collections/edit_fields/_description.html.erb +4 -0
  54. data/app/views/collections/edit_fields/_title.html.erb +3 -0
  55. data/app/views/collections/show.html.erb +0 -1
  56. data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
  57. data/app/views/generic_files/_descriptions.html.erb +9 -9
  58. data/app/views/generic_files/_field_form.html.erb +11 -25
  59. data/app/views/generic_files/_permission.html.erb +6 -4
  60. data/app/views/generic_files/_permission_form.html.erb +15 -17
  61. data/app/views/generic_files/_show_details.html.erb +1 -11
  62. data/app/views/generic_files/_versioning.html.erb +5 -5
  63. data/app/views/generic_files/edit.html.erb +5 -4
  64. data/app/views/generic_files/show.html.erb +6 -6
  65. data/app/views/homepage/_featured_fields.html.erb +2 -2
  66. data/app/views/homepage/_recent_document.html.erb +1 -1
  67. data/app/views/layouts/_head_tag_content.html.erb +0 -2
  68. data/app/views/layouts/error.html.erb +0 -1
  69. data/app/views/my/_index_partials/_default_group.html.erb +1 -1
  70. data/app/views/my/_index_partials/_list_files.html.erb +1 -1
  71. data/app/views/my/index.html.erb +2 -2
  72. data/app/views/records/_edit_field.html.erb +17 -19
  73. data/app/views/records/edit_fields/_default.html.erb +10 -12
  74. data/app/views/records/edit_fields/_description.html.erb +10 -3
  75. data/app/views/records/edit_fields/_resource_type.html.erb +4 -5
  76. data/app/views/records/edit_fields/_rights.html.erb +9 -2
  77. data/app/views/records/edit_fields/_suffix.html.erb +10 -0
  78. data/app/views/records/edit_fields/_type.html.erb +8 -2
  79. data/app/views/records/show_fields/_based_near.html.erb +1 -1
  80. data/app/views/records/show_fields/_creator.html.erb +1 -1
  81. data/app/views/records/show_fields/_language.html.erb +1 -1
  82. data/app/views/records/show_fields/_publisher.html.erb +1 -1
  83. data/app/views/records/show_fields/_resource_type.html.erb +1 -1
  84. data/app/views/records/show_fields/_subject.html.erb +1 -1
  85. data/app/views/records/show_fields/_tag.html.erb +1 -1
  86. data/app/views/single_use_links/new_download.html.erb +2 -2
  87. data/app/views/users/_profile.html.erb +2 -1
  88. data/app/views/users/_social_media_info.html.erb +20 -0
  89. data/app/views/users/_user_info.html.erb +3 -20
  90. data/app/views/users/edit.html.erb +2 -11
  91. data/app/views/users/show.html.erb +1 -1
  92. data/bin/audit_repository +1 -1
  93. data/config/initializers/sufia_events.rb +4 -4
  94. data/config/locales/sufia.en.yml +0 -5
  95. data/config/routes.rb +1 -1
  96. data/lib/generators/sufia/install_generator.rb +0 -4
  97. data/lib/generators/sufia/templates/catalog_controller.rb +59 -59
  98. data/lib/sufia.rb +1 -4
  99. data/lib/sufia/version.rb +1 -1
  100. data/spec/actors/generic_file/actor_spec.rb +67 -8
  101. data/spec/controllers/batch_controller_spec.rb +72 -86
  102. data/spec/controllers/batch_edits_controller_spec.rb +17 -19
  103. data/spec/controllers/catalog_controller_spec.rb +16 -24
  104. data/spec/controllers/collections_controller_spec.rb +47 -74
  105. data/spec/controllers/downloads_controller_spec.rb +40 -35
  106. data/spec/controllers/generic_files_controller_spec.rb +363 -428
  107. data/spec/controllers/homepage_controller_spec.rb +12 -9
  108. data/spec/controllers/mailbox_controller_spec.rb +1 -4
  109. data/spec/controllers/my/files_controller_spec.rb +0 -10
  110. data/spec/controllers/single_use_links_controller_spec.rb +28 -35
  111. data/spec/controllers/single_use_links_viewer_controller_spec.rb +27 -41
  112. data/spec/controllers/transfers_controller_spec.rb +6 -6
  113. data/spec/controllers/users_controller_spec.rb +121 -124
  114. data/spec/factories/generic_files.rb +9 -17
  115. data/spec/features/browse_dashboard_files_spec.rb +8 -10
  116. data/spec/features/browse_files_spec.rb +12 -25
  117. data/spec/features/catalog_search_spec.rb +49 -49
  118. data/spec/features/collection_spec.rb +18 -24
  119. data/spec/features/contact_form_spec.rb +26 -20
  120. data/spec/features/ingest_upload_files_spec.rb +8 -6
  121. data/spec/features/ownership_transfer_spec.rb +2 -6
  122. data/spec/features/proxy_spec.rb +1 -1
  123. data/spec/features/search_spec.rb +2 -3
  124. data/spec/features/single_use_links_spec.rb +1 -1
  125. data/spec/features/users_spec.rb +1 -1
  126. data/spec/helpers/records_helper_spec.rb +24 -10
  127. data/spec/jobs/active_fedora_pid_based_job_spec.rb +1 -5
  128. data/spec/jobs/audit_job_spec.rb +66 -21
  129. data/spec/jobs/batch_update_job_spec.rb +49 -36
  130. data/spec/jobs/content_depositor_change_event_job_spec.rb +2 -4
  131. data/spec/jobs/create_derivatives_job_spec.rb +18 -19
  132. data/spec/jobs/event_jobs_spec.rb +17 -21
  133. data/spec/jobs/import_url_job_spec.rb +1 -6
  134. data/spec/jobs/ingest_local_file_job_spec.rb +0 -4
  135. data/spec/lib/sufia/breadcrumbs_spec.rb +8 -46
  136. data/spec/lib/sufia/id_service_spec.rb +8 -3
  137. data/spec/lib/sufia/user_stat_importer_spec.rb +18 -25
  138. data/spec/lib/sufia/writable_permissions_spec.rb +0 -4
  139. data/spec/models/ability_spec.rb +25 -18
  140. data/spec/models/batch_spec.rb +16 -45
  141. data/spec/models/characterization_spec.rb +1 -1
  142. data/spec/models/checksum_audit_log_spec.rb +51 -29
  143. data/spec/models/collection_spec.rb +0 -5
  144. data/spec/models/featured_work_list_spec.rb +2 -4
  145. data/spec/models/file_content_datastream_spec.rb +27 -60
  146. data/spec/models/file_usage_spec.rb +16 -21
  147. data/spec/models/fits_datastream_spec.rb +47 -2
  148. data/spec/models/generic_file/web_form_spec.rb +1 -1
  149. data/spec/models/generic_file_spec.rb +238 -735
  150. data/spec/models/local_authority_spec.rb +8 -13
  151. data/spec/models/proxy_deposit_request_spec.rb +3 -7
  152. data/spec/models/single_use_link_spec.rb +12 -16
  153. data/spec/models/solr_document_spec.rb +1 -1
  154. data/spec/models/trophy_spec.rb +1 -3
  155. data/spec/models/user_spec.rb +47 -75
  156. data/spec/presenters/sufia/version_list_presenter_spec.rb +22 -0
  157. data/spec/presenters/sufia/version_presenter_spec.rb +51 -0
  158. data/spec/services/generic_file_audit_service_spec.rb +85 -0
  159. data/spec/services/repository_audit_service_spec.rb +18 -0
  160. data/spec/spec_helper.rb +26 -7
  161. data/spec/support/fixture_helpers.rb +2 -4
  162. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -4
  163. data/spec/views/batch/edit.html.erb_spec.rb +17 -7
  164. data/spec/views/catalog/index.html.erb_spec.rb +8 -6
  165. data/spec/views/collections/_form.html.erb_spec.rb +4 -2
  166. data/spec/views/collections/_show_document_list.erb_spec.rb +31 -0
  167. data/spec/views/dashboard/index_spec.rb +2 -2
  168. data/spec/views/generic_file/edit.html.erb_spec.rb +20 -6
  169. data/spec/views/generic_file/show.html.erb_spec.rb +3 -3
  170. data/spec/views/users/show.html.erb_spec.rb +1 -1
  171. data/sufia-models/app/actors/sufia/generic_file/actor.rb +8 -10
  172. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +2 -3
  173. data/sufia-models/app/jobs/audit_job.rb +46 -32
  174. data/sufia-models/app/jobs/batch_update_job.rb +9 -8
  175. data/sufia-models/app/jobs/import_url_job.rb +2 -2
  176. data/sufia-models/app/models/batch.rb +11 -12
  177. data/sufia-models/app/models/checksum_audit_log.rb +12 -10
  178. data/sufia-models/app/models/concerns/sufia/ability.rb +4 -6
  179. data/sufia-models/app/models/concerns/sufia/collection.rb +4 -5
  180. data/sufia-models/app/models/concerns/sufia/generic_file.rb +3 -86
  181. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +29 -0
  182. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
  183. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +13 -0
  184. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
  185. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +4 -0
  186. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
  187. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
  188. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
  189. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
  190. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +4 -4
  191. data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
  192. data/sufia-models/app/models/concerns/sufia/model_methods.rb +11 -9
  193. data/sufia-models/app/models/concerns/sufia/user.rb +11 -33
  194. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -1
  195. data/sufia-models/app/models/datastreams/fits_datastream.rb +1 -1
  196. data/sufia-models/app/models/file_usage.rb +3 -3
  197. data/sufia-models/app/models/local_authority.rb +2 -2
  198. data/sufia-models/app/models/proxy_deposit_request.rb +1 -1
  199. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +83 -0
  200. data/sufia-models/app/services/sufia/id_service.rb +5 -5
  201. data/sufia-models/app/services/sufia/noid.rb +10 -7
  202. data/sufia-models/app/services/sufia/repository_audit_service.rb +9 -0
  203. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
  204. data/sufia-models/lib/generators/sufia/models/install_generator.rb +31 -11
  205. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +31 -2
  206. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
  207. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
  208. data/sufia-models/lib/sufia/models/engine.rb +13 -4
  209. data/sufia-models/lib/sufia/models/file_content/versions.rb +9 -11
  210. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +5 -9
  211. data/sufia-models/lib/sufia/models/version.rb +1 -1
  212. data/sufia-models/lib/sufia/permissions/writable.rb +34 -16
  213. data/sufia-models/sufia-models.gemspec +4 -2
  214. data/sufia.gemspec +4 -5
  215. data/tasks/jetty.rake +0 -26
  216. data/tasks/sufia-dev.rake +14 -2
  217. metadata +49 -64
  218. data/LICENSE +0 -15
  219. data/app/assets/images/orcid.png +0 -0
  220. data/app/assets/javascripts/sufia/manage_repeating_fields.js +0 -74
  221. data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +0 -67
  222. data/app/inputs/multi_value_input.rb +0 -84
  223. data/app/views/records/_rights_modal.html.erb +0 -1
  224. data/config/initializers/simple_form.rb +0 -167
  225. data/config/initializers/simple_form_bootstrap.rb +0 -137
  226. data/config/locales/simple_form.en.yml +0 -31
  227. data/fedora_conf/conf/development/fedora.fcfg +0 -946
  228. data/fedora_conf/conf/test/fedora.fcfg +0 -946
  229. data/spec/models/generic_file/reload_on_save_spec.rb +0 -25
  230. data/spec/models/generic_file_rdf_datastream_spec.rb +0 -12
  231. data/spec/models/properties_datastream_spec.rb +0 -41
  232. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +0 -19
  233. data/sufia-models/app/models/concerns/sufia/generic_file/audit.rb +0 -116
  234. data/sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
  235. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
  236. data/sufia-models/app/models/datastreams/batch_rdf_datastream.rb +0 -6
  237. data/sufia-models/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
  238. data/sufia-models/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
  239. data/sufia-models/app/models/datastreams/properties_datastream.rb +0 -4
  240. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -8
  241. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  242. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  244. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2552f81e36017df0ba6561d10f4f71dd00c4e067
4
- data.tar.gz: 045a5eac1f6c483ca8b22698040e2a6d9aab3184
3
+ metadata.gz: 66f52aa19e4ce45f68360e5c2dbc9bf9fd16a99b
4
+ data.tar.gz: 0e7ec679161844f502e8fd27db596005b0352d36
5
5
  SHA512:
6
- metadata.gz: b9e6e0171308860a349af41827ee30b39792bac3765da481e1746771005ca2b5d8a2afb6d526416aadf134a59077f1200066ad0b8747eec31c855731c84e42fd
7
- data.tar.gz: 3d557d4ca7e04e1dc5e6fe140428f919d32180d67d9a29edd4e38a2dd63922b3deb98510afd5e788eebebad7fa9639ae2494564ce31368114faf25c9cad218c3
6
+ metadata.gz: 59957e8d5ebeeec6fc649ad82b802bd03e97e04d7d2a8607ceeff6e2cc46eb6560fa42c437cc55518b8903c9114155839c0589b404018b1a84f1d21baf71fe66
7
+ data.tar.gz: 5009ca0eb029bd3b2caa86fae5b339e5b6a1b4af4b609d42e532595dd42b223010c2927afb5d08517cc78e1cb693ea9029a1af0f3754710c1b49cf6d5c90ff37
@@ -1,17 +1,10 @@
1
1
  language: ruby
2
- cache: bundler
3
- sudo: false
4
2
  rvm:
5
3
  - 2.1
4
+ - 2.0
6
5
  env:
7
6
  global:
8
7
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
9
- matrix:
10
- - "RAILS_VERSION=4.1.8"
11
- - "RAILS_VERSION=4.2.0"
12
- matrix:
13
- allow_failures:
14
- - env: "RAILS_VERSION=4.2.0"
15
8
  notifications:
16
9
  email:
17
10
  recipients:
data/Gemfile CHANGED
@@ -6,24 +6,15 @@ gemspec
6
6
  # Required for doing pagination inside an engine. See https://github.com/amatsuda/kaminari/pull/322
7
7
  gem 'kaminari', github: 'harai/kaminari', branch: 'route_prefix_prototype'
8
8
  gem 'sufia-models', path: './sufia-models'
9
- gem 'slop', '~> 3.6.0' # This just helps us generate a valid Gemfile.lock when Rails 4.2 is installed (which requires byebug which has a dependency on slop)
9
+ gem 'sass-rails', '~> 4.0.3'
10
10
 
11
11
  group :development, :test do
12
12
  gem "simplecov", require: false
13
- gem "byebug", require: false
14
- end # (leave this comment here to catch a stray line inserted by blacklight!)
13
+ gem 'byebug' unless ENV['CI']
14
+ end
15
15
 
16
16
  file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path("../spec/internal", __FILE__))
17
17
  if File.exists?(file)
18
18
  puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
19
19
  instance_eval File.read(file)
20
- else
21
- gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
22
-
23
- if ENV['RAILS_VERSION'] and ENV['RAILS_VERSION'] !~ /^4.2/
24
- gem 'sass-rails', "< 5.0"
25
- else
26
- gem 'responders', "~> 2.0"
27
- gem 'sass-rails', ">= 5.0"
28
- end
29
20
  end
data/History.md CHANGED
@@ -1,40 +1,5 @@
1
1
  # History of Sufia releases
2
2
 
3
- ## 5.0.0
4
-
5
- * Prevent Sufia from picking up Blacklight version 5.10 [Hector Correa]
6
- * Update README to be more specific about dependency versions [Michael J. Giarlo]
7
- * Pulled in code from curate to manage add/remove fields on edit forms. Also story #3978 [Carolyn Cole]
8
- * Changing the file query to be a solr query for loading the file id, so we do not wait large file content to load. This speed up the runs significantly on systems with large file. [Carolyn Cole]
9
- * Users controller should not call an undefined method. Fixes #532. [Michael J. Giarlo]
10
- * Fix problem where batch edit forms weren't expanding. Fixes #820 [Carolyn Cole]
11
- * Update and rename LICENSE.md to LICENSE per community convention. [Michael J. Giarlo]
12
- * Brings some of the fixes in fedora-4/master into master. [Michael J. Giarlo]
13
- * Adds condition to make the version of sass-rails dependent on the value of RAILS_VERSION [Michael J. Giarlo]
14
- * Merge travis config change to speed up the build [Michael J. Giarlo]
15
- * Adding the browse view link into the bread crumbs so it shows on both the edit and the stats page. [Carolyn Cole]
16
-
17
-
18
- ## 4.3.1
19
-
20
- * Adds an ORCID field to the user model. [Michael J. Giarlo]
21
- * Styles count for views and downloads, refs #9672 [Michael Tribone]
22
- * Merge pull request #787 from projecthydra/update_master_to_bl-5.8 [Justin Coyne]
23
- * More facets modal defaults to numerical sort [Adam Wead]
24
- * Upgrade to Blacklight 5.8 [Adam Wead]
25
- * Adding select2 name look up to permissions form for GenericFile and Batch. [Carolyn Cole]
26
- * Adding blacklight gallery default views to catalog controller to match with the new installer.
27
- * Display file stats for user. Feature #9305 [Valerie Maher]
28
- * Making sure the modal is actually sorted numerically and allow some files to be on the second p
29
- * Fixing a bug that the home page crashes when a featured work has been destroyed [Carolyn Cole]
30
- * Fixes button size and alignment issues with metadata and upload forms, refs #9569 [Michael Tribone]
31
- * Updated dev notes [Valerie Maher]
32
- * Disable check all instead of making it disappear. User testing indicated this was confusing [Carolyn Cole]
33
- * Views should not use the invalid Agent schema.org class [Michael J. Giarlo]
34
- * README should not implicitly suggest an outdated version of Sufia. (Inspired by #719 -- thx, @mistydemeo!) [Michael J. Giarlo]
35
-
36
- ## 4.3.0 - YANKED
37
-
38
3
  ## 4.2.0
39
4
 
40
5
  * Caches google analytics data in the database so we do not have to retrieve them each time the page is loaded [Carolyn Cole]
@@ -207,7 +172,6 @@ This release contains bug fixes and css fixes found after the Sufia 4.0 release.
207
172
  * changing to bootstrap 3 danger from important to get the red background for permissions, and fixing collection detail spacing when there is no description [Carolyn Cole]
208
173
  * Upgrade to rspec 3. Fixes #493 [Carolyn Cole]
209
174
  * Removed extraneous colons preceding key names. Fixes #516 [kerchner]
210
-
211
175
  ## 4.0.0.rc1
212
176
 
213
177
  * Use the bootstrap_form helpers (bootstrap_forms is no longer available) [Justin Coyne]
@@ -0,0 +1,14 @@
1
+ Copyright 2012 Penn State University
2
+ Additional copyright may be held by others, as reflected in the commit history.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
data/README.md CHANGED
@@ -48,8 +48,7 @@ We'd love to accept your contributions. Please see our guide to [contributing t
48
48
  1. A SQL RDBMS (MySQL, SQLite)
49
49
  1. [Redis](http://redis.io/) key-value store
50
50
  1. [ImageMagick](http://www.imagemagick.org/)
51
- 1. Ruby (*latest 2.1 recommended*)
52
- 2. Rails (*latest 4.1 recommended*)
51
+ 1. Ruby
53
52
 
54
53
  #### !! Ensure that you have all of the above components installed before you continue. !!
55
54
 
@@ -61,15 +60,12 @@ If you have questions or need help, please email [the Hydra community developmen
61
60
 
62
61
  ### Generate base Rails install
63
62
 
64
- ```
65
- gem install rails -v 4.1.8
66
- rails new my_app
67
- ```
63
+ ```rails new my_app```
68
64
 
69
65
  ### Add gems to Gemfile
70
66
 
71
67
  ```
72
- gem 'sufia', '4.3.1'
68
+ gem 'sufia'
73
69
  gem 'kaminari', github: 'harai/kaminari', branch: 'route_prefix_prototype' # required to handle pagination properly in dashboard. See https://github.com/amatsuda/kaminari/pull/322
74
70
  ```
75
71
 
@@ -236,7 +232,7 @@ configure_blacklight do |config|
236
232
 
237
233
  # Specify which field to use in the tag cloud on the homepage.
238
234
  # To disable the tag cloud, comment out this line.
239
- config.tag_cloud_field_name = Solrizer.solr_name("desc_metadata__tag", :facetable)
235
+ config.tag_cloud_field_name = Solrizer.solr_name("tag", :facetable)
240
236
  end
241
237
  ```
242
238
 
@@ -1 +1 @@
1
- 5.0.0
1
+ 6.0.0.beta1
@@ -35,7 +35,7 @@
35
35
  //= require sufia/trophy
36
36
  //= require sufia/featured_works
37
37
  //= require sufia/batch_select_all
38
- //= require sufia/manage_repeating_fields
38
+ //= require sufia/multiForm
39
39
  //= require sufia/edit_metadata
40
40
  //= require sufia/single_use_link
41
41
  //= require sufia/audio
@@ -82,22 +82,6 @@ function notify_update_link() {
82
82
  }
83
83
 
84
84
  Blacklight.onLoad(function() {
85
- // Multi-value fields on forms
86
- $('body').on('keypress', '.multi-text-field', function(event) {
87
- var $activeField = $(event.target).parents('.field-wrapper'),
88
- $activeFieldControls = $activeField.children('.field-controls'),
89
- $addControl=$activeFieldControls.children('.add'),
90
- $removeControl=$activeFieldControls.children('.remove');
91
-
92
- // If user hits the "Enter" key (keyCode 13), it should add another input for the multi-value field.
93
- // Unless it's a textarea field (since users might want multi-line input in a textarea).
94
- if (event.keyCode == 13 && !($activeField.context.type == "textarea")) {
95
- event.preventDefault();
96
- $addControl.click()
97
- $removeControl.click()
98
- }
99
- });
100
- $('.multi_value.form-group').manage_fields();
101
85
 
102
86
  // set up global batch edit options to override the ones in the gem
103
87
  window.batch_edits_options = { checked_label: "",unchecked_label: "",progress_label: "",status_label: "",css_class: "batch_toggle"};
@@ -3,6 +3,17 @@ function batch_edit_init () {
3
3
  // initialize popover helpers
4
4
  $("a[rel=popover]").popover({ html: true });
5
5
 
6
+ $("tr.expandable").click(function () {
7
+ $(this).next("ul").slideToggle();
8
+
9
+ $(this).find('i.toggle').toggleClass("glyphicon glyphicon-chevron-down");
10
+ });
11
+
12
+ $("tr.expandable_new").click(function () {
13
+ $(this).find('i').toggleClass("glyphicon glyphicon-chevron-down");
14
+ });
15
+
16
+
6
17
  function deserialize(Params) {
7
18
  var Data = Params.split("&");
8
19
  var i = Data.length;
@@ -105,45 +116,31 @@ function batch_edit_init () {
105
116
 
106
117
  ajaxManager.run();
107
118
 
108
- function formButtons(form_id) {
109
- return $('#' + form_id + ' .btn')
110
- }
111
-
112
- function formFields(form_id) {
113
- return $('#' + form_id + ' .form-group > *')
114
- }
115
-
116
- function formRightPanel(form_id) {
117
- return $('#' + form_id + ' .form-group')
118
- }
119
-
120
- function disableForm(form_id) {
121
- formButtons(form_id).attr("disabled", "disabled");
122
- formRightPanel(form_id).addClass("loading");
123
- formFields(form_id).addClass('invisible')
124
- }
125
-
126
- function enableForm(form_id) {
127
- formButtons(form_id).removeAttr("disabled");
128
- formRightPanel(form_id).removeClass("loading");
129
- formFields(form_id).removeClass('invisible')
130
- }
131
-
132
119
  function after_ajax(form_id) {
133
120
  var key = form_id.replace("form_", "");
121
+ var save_button = "#" + key + "_save";
122
+ var outer_div = "#detail_" + key;
134
123
  $("#status_" + key).html("Changes Saved");
135
- enableForm(form_id);
124
+ $(save_button).removeAttr("disabled");
125
+ $(outer_div).removeClass("loading");
126
+ $('#' + form_id).children([".form-group"]).removeClass('hidden')
136
127
  }
137
128
 
138
129
  function before_ajax(form_id) {
139
- disableForm(form_id);
130
+ var key = form_id.replace("form_", "");
131
+ var save_button = "#" + key + "_save";
132
+ var outer_div = "#detail_" + key;
133
+ $(save_button).attr("disabled", "disabled");
134
+ $(outer_div).addClass("loading");
135
+ $('#' + form_id).children([".form-group"]).addClass('hidden')
140
136
  }
141
137
 
138
+
142
139
  function runSave(e) {
143
140
  e.preventDefault();
144
141
  var button = $(this);
145
- var form = button.closest('form');
146
- var form_id = form[0].id;
142
+ var form = $(button.parent().parent()[0]);
143
+ var form_id = form[0].id
147
144
  before_ajax(form_id);
148
145
 
149
146
  ajaxManager.addReq({
@@ -165,8 +162,26 @@ function batch_edit_init () {
165
162
  setTimeout(ajaxManager.runNow(), 100);
166
163
  }
167
164
 
165
+ function enable_show_hide_links() {
166
+ // Show/hide field details when clicking on a link with ID "expand_link_XXX".
167
+ // We expect to find an element named detail_XXX in addition to the expand_link_XXX.
168
+ // The "detail_XXX" element has the chevron icon.
169
+ $('.glyphicon-chevron-right-helper').on('click', function() {
170
+ var array = this.id.split("expand_link_");
171
+ if (array.length > 1) {
172
+ var docId = array[1];
173
+ $("#detail_" + docId + " .expanded-details").slideToggle();
174
+ var button = $("#expand_" + docId);
175
+ button.toggleClass('glyphicon-chevron-right glyphicon-chevron-down');
176
+ }
177
+ return false;
178
+ });
179
+ }
180
+
168
181
  $("#permissions_save").click(runSave);
169
182
  $(".field-save").click(runSave);
183
+ enable_show_hide_links();
184
+
170
185
  }
171
186
 
172
187
 
@@ -58,8 +58,8 @@ Blacklight.onLoad(function() {
58
58
  for (var i=0; i < autocomplete_vocab.url_var.length; i++) {
59
59
  autocomplete_vocab.field_name.push('generic_file_' + autocomplete_vocab.url_var[i]);
60
60
  autocomplete_vocab.add_btn_id.push('additional_' + autocomplete_vocab.url_var[i] + '_submit');
61
- // add autocompletes to all inputs created
62
- $(".form-group.multi_value." + autocomplete_vocab.field_name[i]).find('input[type=text]')
61
+ // autocompletes
62
+ $("#" + autocomplete_vocab.field_name[i])
63
63
  // don't navigate away from the field on tab when selecting an item
64
64
  .bind( "keydown", function( event ) {
65
65
  if ( event.keyCode === $.ui.keyCode.TAB &&
@@ -72,20 +72,15 @@ Blacklight.onLoad(function() {
72
72
  }
73
73
 
74
74
 
75
- function setup_autocomplete(event) {
76
- var class_name = $.grep(event.target.className.split(" "),function( c ) {
77
- return c.indexOf('generic_file') == 0;
78
- })[0];
79
- // attach auto complete for location
80
- if (class_name == 'generic_file_based_near') {
81
- $(event.target).find('input[type=text]').autocomplete(get_autocomplete_opts("location"));
75
+ function setup_autocomplete(obj, cloneElem) {
76
+ // should we attach an auto complete based on the input
77
+ if (obj.id == 'additional_based_near_submit') {
78
+ cloneElem.find('input[type=text]').autocomplete(cities_autocomplete_opts);
82
79
  }
83
- // attach other auto completes
84
- else if ( (index = $.inArray(class_name, autocomplete_vocab.field_name)) != -1 ) {
85
- $(event.target).find('input[type=text]').autocomplete(get_autocomplete_opts(autocomplete_vocab.url_var[index]));
80
+ else if ( (index = $.inArray(obj.id, autocomplete_vocab.add_btn_id)) != -1 ) {
81
+ cloneElem.find('input[type=text]').autocomplete(get_autocomplete_opts(autocomplete_vocab.url_var[index]));
86
82
  }
87
83
  }
88
84
 
89
- // add setup for autocompletes to multi value forms
90
- $('.multi_value.form-group').manage_fields({ add: setup_autocomplete });
85
+ $('form').multiForm({afterAdd: setup_autocomplete});
91
86
  });
@@ -0,0 +1,67 @@
1
+ (function( $ ){
2
+
3
+ $.fn.multiForm = function( options ) {
4
+
5
+ // Create some defaults, extending them with any options that were provided
6
+ var settings = $.extend( { }, options);
7
+
8
+ function addField() {
9
+ count = $(this).closest('.form-group').find('input').size();
10
+ var cloneId = this.id.replace("submit", "clone");
11
+ var newId = this.id.replace("submit", "elements");
12
+ var cloneElem = $('#'+cloneId).clone();
13
+ // change the add button to a remove button
14
+ var plusbttn = cloneElem.find('#'+this.id);
15
+ var sr_hidden = '<span aria-hidden="true"><i class="glyphicon glyphicon-remove"></i></span>';
16
+ var sr_only = '<span class="sr-only">remove this ' + this.name.replace("_", " ") + '</span>';
17
+ var remove_button = sr_hidden + sr_only;
18
+ plusbttn.html(remove_button);
19
+ plusbttn.on('click',removeField);
20
+
21
+
22
+ // remove the help tag on subsequent added fields
23
+ cloneElem.find('.formHelp').remove();
24
+ cloneElem.find('.modal-div').remove();
25
+
26
+ //clear out the value for the element being appended
27
+ //so the new element has a blank value
28
+ // Note: there may be more than one input field. Example:
29
+ // creator_name
30
+ // creator_role
31
+ textFields = cloneElem.find('input[type=text]')
32
+ $.each(textFields, function(n, tf) {
33
+ newName = $(tf).attr('name').replace('[0]', '['+count+']');
34
+ $(tf).attr('name', newName).val('').attr("required", false)
35
+ })
36
+
37
+ if (settings.afterAdd) {
38
+ settings.afterAdd(this, cloneElem)
39
+ }
40
+
41
+ $('#'+newId).append(cloneElem);
42
+ cloneElem.find('input[type=text]').focus();
43
+ return false;
44
+ }
45
+
46
+ function removeField () {
47
+ // get parent and remove it
48
+ $(this).closest('.input-group').remove();
49
+ return false;
50
+ }
51
+
52
+ return this.each(function() {
53
+
54
+ // Tooltip plugin code here
55
+ /*
56
+ * adds additional metadata elements
57
+ */
58
+ $('.adder', this).click(addField);
59
+
60
+ $('.remover', this).click(removeField);
61
+
62
+
63
+ });
64
+
65
+ };
66
+ })( jQuery );
67
+
@@ -9,9 +9,33 @@
9
9
  */
10
10
 
11
11
  Blacklight.onLoad(function() {
12
+ // input for uids - attach function to verify uid
13
+ $('#new_user_name_skel').on('blur', function() {
14
+ // clear out any existing messages
15
+ $('#directory_user_result').html('');
16
+ var un = $('#new_user_name_skel').val();
17
+ var perm = $('#new_user_permission_skel').val();
18
+ if ( $.trim(un).length == 0 ) {
19
+ return;
20
+ }
21
+ $.ajax( {
22
+ url: "/directory/user/" + un,
23
+ success: function( data ) {
24
+ if (data != null) {
25
+ if (!data.length) {
26
+ $('#directory_user_result').html('User id ('+un+ ') does not exist.');
27
+ $('#new_user_name_skel').select();
28
+ $('#new_user_permission_skel').val('none');
29
+ return;
30
+ }
31
+ else {
32
+ $('#new_user_permission_skel').focus();
33
+ }
34
+ }
35
+ }
36
+ });
12
37
 
13
- // Attach the user search select2 box to the permission form
14
- $("#new_user_name_skel").userSearch();
38
+ });
15
39
 
16
40
  // add button for new user
17
41
  $('#add_new_user_skel').on('click', function() {
@@ -37,14 +61,14 @@ Blacklight.onLoad(function() {
37
61
  $('#permissions_error').html();
38
62
  $('#permissions_error').addClass('hidden');
39
63
 
40
- var un = $('#new_user_name_skel').val();
41
- var perm_form = $('#new_user_permission_skel').val();
42
- var perm = $('#new_user_permission_skel :selected').text();
64
+ var user_name = $('#new_user_name_skel').val();
65
+ var access = $('#new_user_permission_skel').val();
66
+ var access_label = $('#new_user_permission_skel :selected').text();
43
67
  // clear out the elements to add more
44
68
  $('#new_user_name_skel').val('');
45
69
  $('#new_user_permission_skel').val('none');
46
70
 
47
- addPerm(un, perm_form, perm, 'new_user_name');
71
+ addPerm(user_name, access, access_label, 'user');
48
72
  return false;
49
73
  });
50
74
 
@@ -54,9 +78,9 @@ Blacklight.onLoad(function() {
54
78
  $('#new_group_name_skel').focus();
55
79
  return false;
56
80
  }
57
- var cn = $('#new_group_name_skel').val();
58
- var perm_form = $('#new_group_permission_skel').val();
59
- var perm = $('#new_group_permission_skel :selected').text();
81
+ var group_name = $('#new_group_name_skel').val();
82
+ var access = $('#new_group_permission_skel').val();
83
+ var access_label = $('#new_group_permission_skel :selected').text();
60
84
 
61
85
  if (!is_permission_duplicate($('#new_group_name_skel').val())) {
62
86
  $('#permissions_error_text').html("This group already has a permission.");
@@ -70,7 +94,7 @@ Blacklight.onLoad(function() {
70
94
  $('#new_group_name_skel').val('');
71
95
  $('#new_group_permission_skel').val('none');
72
96
 
73
- addPerm(cn, perm_form, perm, 'new_group_name');
97
+ addPerm(group_name, access, access_label, 'group');
74
98
  return false;
75
99
  });
76
100
 
@@ -87,50 +111,84 @@ Blacklight.onLoad(function() {
87
111
 
88
112
  });
89
113
 
90
- function addPerm(un, perm_form, perm, perm_type)
114
+ function addPerm(agent_name, access, access_label, agent_type)
91
115
  {
116
+ showPermissionNote();
117
+
118
+ var tr = createPermissionRow(agent_name, access_label);
119
+ addHiddenPermField(tr, agent_type, agent_name, access);
120
+ $('#file_permissions').after(tr);
121
+ tr.effect("highlight", {}, 3000);
122
+ }
123
+
124
+ function createPermissionRow(agent_name, access_label) {
92
125
  var tr = $(document.createElement('tr'));
93
126
  var td1 = $(document.createElement('td'));
94
127
  var td2 = $(document.createElement('td'));
95
- var remove = $('<button class="btn close">X</button>');
96
-
97
- $('#save_perm_note').removeClass('hidden');
128
+ var remove_button = $('<button class="btn close">X</button>');
98
129
 
99
- $('#new_perms').append(td1);
100
- $('#new_perms').append(td2);
101
-
102
- td1.html('<label class="control-label">'+un+'</label>');
103
- td2.html(perm);
104
- td2.append(remove);
105
- remove.click(function () {
130
+ td1.html('<label class="control-label">' + agent_name + '</label>');
131
+ td2.html(access_label);
132
+ td2.append(remove_button);
133
+ remove_button.click(function () {
106
134
  tr.remove();
107
135
  });
108
136
 
137
+ return tr.append(td1).append(td2);
138
+ }
139
+
140
+ function addHiddenPermField(element, type, name, access) {
141
+ var prefix = 'generic_file[permissions_attributes][' + nextIndex() + ']';
109
142
  $('<input>').attr({
110
143
  type: 'hidden',
111
- name: 'generic_file[permissions]['+perm_type+']['+un+']',
112
- value: perm_form
113
- }).appendTo(td2);
114
- tr.append(td1);
115
- tr.append(td2);
116
- $('#file_permissions').after(tr);
117
- tr.effect("highlight", {}, 3000);
144
+ name: prefix + '[type]',
145
+ value: type
146
+ }).appendTo(element);
147
+ $('<input>').attr({
148
+ type: 'hidden',
149
+ name: prefix + '[name]',
150
+ value: name
151
+ }).appendTo(element);
152
+ $('<input>').attr({
153
+ type: 'hidden',
154
+ name: prefix + '[access]',
155
+ value: access
156
+ }).appendTo(element);
157
+ }
158
+
159
+ function nextIndex() {
160
+ return $('#file_permissions').parent().children().size() - 1;
118
161
  }
119
162
 
120
163
  $('.remove_perm').on('click', function() {
121
164
  var top = $(this).parent().parent();
122
165
  top.addClass('hidden'); // do not show the block
123
- top.find('.select_perm')[0].options[0].selected= true; // select the first otion which is none
124
- $('#save_perm_note').removeClass('hidden');
166
+ addDestroyField(top);
167
+ showPermissionNote();
125
168
  return false;
126
-
127
169
  });
128
170
 
171
+ function showPermissionNote() {
172
+ $('#save_perm_note').removeClass('hidden');
173
+ }
174
+
175
+ function addDestroyField(element) {
176
+ $('<input>').attr({
177
+ type: 'hidden',
178
+ name: 'generic_file[permissions_attributes][' + indexOf(element) + '][_destroy]',
179
+ value: 'true'
180
+ }).appendTo(element);
181
+ }
182
+
183
+ function indexOf(element) {
184
+ return $('#file_permissions').parent().children().index(element) - 1;
185
+ }
186
+
129
187
  });
130
188
 
131
189
  // return the files visibility level (institution, open, restricted);
132
- function get_visibility(){
133
- return $("input[name='visibility']:checked").val()
190
+ function get_visibility() {
191
+ return $("input[name='visibility']:checked").val();
134
192
  }
135
193
 
136
194
  /*
@@ -138,8 +196,7 @@ function get_visibility(){
138
196
  * set other users/groups to 'read' (it would be over ruled by the
139
197
  * visibility of Open or Institution) so disable the Read option
140
198
  */
141
- function set_access_levels()
142
- {
199
+ function set_access_levels() {
143
200
  var vis = get_visibility();
144
201
  var enabled_disabled = false;
145
202
  if (vis == "open" || vis == "psu") {