curation_concerns 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -9
  3. data/.rspec +1 -1
  4. data/.rubocop.yml +185 -0
  5. data/.travis.yml +0 -10
  6. data/CONTRIBUTING.md +117 -0
  7. data/Gemfile +5 -2
  8. data/README.md +18 -11
  9. data/Rakefile +23 -11
  10. data/VERSION +1 -1
  11. data/app/assets/images/audio.png +0 -0
  12. data/app/assets/images/loading.gif +0 -0
  13. data/app/assets/images/progressbar.gif +0 -0
  14. data/app/assets/javascripts/curation_concerns/application.js +2 -8
  15. data/app/assets/javascripts/curation_concerns/curation_concerns.js +1 -15
  16. data/app/assets/javascripts/curation_concerns/facet_mine.js +4 -10
  17. data/app/assets/javascripts/curation_concerns/fileupload.js +6 -0
  18. data/app/assets/javascripts/curation_concerns/uploader.js +183 -0
  19. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +3 -0
  20. data/app/assets/stylesheets/curation_concerns/_positioning.scss +6 -0
  21. data/app/assets/stylesheets/curation_concerns/fileupload/jquery.fileupload-ui.scss +86 -0
  22. data/app/assets/stylesheets/curation_concerns/fileupload/thumbnail-scaling.css +3 -0
  23. data/app/assets/stylesheets/curation_concerns/fileupload.scss +48 -0
  24. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +10 -0
  25. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +1 -1
  26. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +0 -10
  27. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +7 -8
  28. data/app/controllers/concerns/curation_concerns/api.rb +77 -0
  29. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +30 -12
  30. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +9 -276
  31. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +51 -40
  32. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +60 -30
  33. data/app/controllers/concerns/curation_concerns/download_behavior.rb +51 -37
  34. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +29 -29
  35. data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +198 -0
  36. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +27 -20
  37. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +2 -7
  38. data/app/controllers/concerns/curation_concerns/parent_container.rb +20 -4
  39. data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +48 -0
  40. data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +75 -0
  41. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +0 -1
  42. data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +38 -0
  43. data/app/controllers/concerns/curation_concerns/welcome_controller_behavior.rb +8 -0
  44. data/app/controllers/concerns/curation_concerns/without_namespace.rb +2 -1
  45. data/app/controllers/curation_concerns/classify_concerns_controller.rb +9 -9
  46. data/app/controllers/curation_concerns/file_sets_controller.rb +5 -0
  47. data/app/controllers/curation_concerns/permissions_controller.rb +2 -3
  48. data/app/controllers/curation_concerns/single_use_links_controller.rb +5 -0
  49. data/app/controllers/curation_concerns/single_use_links_viewer_controller.rb +21 -0
  50. data/app/controllers/downloads_controller.rb +0 -1
  51. data/app/controllers/embargoes_controller.rb +0 -2
  52. data/app/controllers/leases_controller.rb +0 -2
  53. data/app/controllers/registrations_controller.rb +1 -2
  54. data/app/controllers/upload_sets_controller.rb +3 -0
  55. data/app/controllers/welcome_controller.rb +3 -0
  56. data/app/forms/curation_concerns/forms/collection_edit_form.rb +18 -2
  57. data/app/forms/curation_concerns/forms/file_set_edit_form.rb +15 -0
  58. data/app/forms/curation_concerns/forms/work_form.rb +57 -0
  59. data/app/helpers/curation_concerns/ability_helper.rb +24 -24
  60. data/app/helpers/curation_concerns/catalog_helper.rb +9 -8
  61. data/app/helpers/curation_concerns/collections_helper.rb +9 -12
  62. data/app/helpers/curation_concerns/embargo_helper.rb +0 -2
  63. data/app/helpers/curation_concerns/file_set_helper.rb +31 -0
  64. data/app/helpers/curation_concerns/lease_helper.rb +0 -3
  65. data/app/helpers/curation_concerns/main_app_helpers.rb +1 -3
  66. data/app/helpers/curation_concerns/render_constraints_helper.rb +5 -5
  67. data/app/helpers/curation_concerns/search_paths_helper.rb +5 -7
  68. data/app/helpers/curation_concerns/title_helper.rb +3 -7
  69. data/app/helpers/curation_concerns/url_helper.rb +4 -6
  70. data/app/inputs/multifile_input.rb +8 -0
  71. data/app/jobs/visibility_copy_job.rb +22 -0
  72. data/app/presenters/curation_concerns/collection_presenter.rb +14 -32
  73. data/app/presenters/curation_concerns/embargo_presenter.rb +26 -0
  74. data/app/presenters/curation_concerns/file_set_presenter.rb +34 -0
  75. data/app/presenters/curation_concerns/lease_presenter.rb +30 -0
  76. data/app/presenters/curation_concerns/model_proxy.rb +27 -0
  77. data/app/presenters/curation_concerns/permission_badge.rb +61 -0
  78. data/app/presenters/curation_concerns/presenter_factory.rb +45 -0
  79. data/app/presenters/curation_concerns/presents_attributes.rb +25 -0
  80. data/app/presenters/curation_concerns/version_list_presenter.rb +18 -0
  81. data/app/presenters/curation_concerns/version_presenter.rb +27 -0
  82. data/app/presenters/curation_concerns/work_show_presenter.rb +33 -0
  83. data/app/renderers/curation_concerns/attribute_renderer.rb +75 -0
  84. data/app/search_builders/curation_concerns/deactivated_embargo_search_builder.rb +10 -0
  85. data/app/search_builders/curation_concerns/deactivated_lease_search_builder.rb +10 -0
  86. data/app/search_builders/curation_concerns/embargo_search_builder.rb +23 -0
  87. data/app/search_builders/curation_concerns/expired_embargo_search_builder.rb +11 -0
  88. data/app/search_builders/curation_concerns/expired_lease_search_builder.rb +11 -0
  89. data/app/search_builders/curation_concerns/lease_search_builder.rb +23 -0
  90. data/app/search_builders/curation_concerns/search_builder.rb +10 -16
  91. data/app/services/curation_concerns/curation_concern.rb +0 -5
  92. data/app/services/curation_concerns/embargo_service.rb +26 -4
  93. data/app/services/curation_concerns/lease_service.rb +14 -5
  94. data/app/services/curation_concerns/parent_service.rb +19 -0
  95. data/app/services/curation_concerns/restriction_service.rb +24 -0
  96. data/app/services/rights_service.rb +14 -0
  97. data/app/views/catalog/_action_menu_partials/_collection.html.erb +1 -1
  98. data/app/views/catalog/_action_menu_partials/_default.html.erb +5 -3
  99. data/app/views/catalog/_document_list.html.erb +1 -1
  100. data/app/views/catalog/index.html.erb +1 -35
  101. data/app/views/collections/_edit_descriptions.html.erb +3 -4
  102. data/app/views/collections/_form.html.erb +1 -1
  103. data/app/views/collections/_form_permission.html.erb +1 -1
  104. data/app/views/collections/_search_form.html.erb +10 -0
  105. data/app/views/collections/_show_actions.html.erb +3 -3
  106. data/app/views/collections/_sort_and_per_page.html.erb +2 -2
  107. data/app/views/collections/show.html.erb +6 -6
  108. data/app/views/curation_concerns/base/_attribute_rows.html.erb +7 -0
  109. data/app/views/curation_concerns/base/_attributes.html.erb +6 -13
  110. data/app/views/curation_concerns/base/_form.html.erb +4 -5
  111. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +2 -4
  112. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +3 -5
  113. data/app/views/curation_concerns/base/_form_permission.html.erb +13 -26
  114. data/app/views/curation_concerns/base/_form_permission_note.html.erb +15 -0
  115. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +2 -2
  116. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +2 -2
  117. data/app/views/curation_concerns/base/_form_representative_image.html.erb +16 -4
  118. data/app/views/curation_concerns/base/_form_rights.html.erb +17 -0
  119. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +4 -9
  120. data/app/views/curation_concerns/base/_related_files.html.erb +4 -4
  121. data/app/views/curation_concerns/base/_representative_media.html.erb +2 -4
  122. data/app/views/curation_concerns/base/_versioning.html.erb +23 -0
  123. data/app/views/curation_concerns/base/show.html.erb +13 -10
  124. data/app/views/curation_concerns/base/show.json.jbuilder +1 -0
  125. data/app/views/curation_concerns/base/versions.html.erb +6 -0
  126. data/app/views/curation_concerns/file_sets/_actions.html.erb +16 -0
  127. data/app/views/curation_concerns/file_sets/_file_set.html.erb +12 -0
  128. data/app/views/curation_concerns/{generic_files → file_sets}/_form.html.erb +7 -7
  129. data/app/views/curation_concerns/file_sets/_multiple_upload.html.erb +3 -0
  130. data/app/views/curation_concerns/{generic_files → file_sets}/edit.html.erb +0 -0
  131. data/app/views/curation_concerns/file_sets/jq_upload.json.jbuilder +8 -0
  132. data/app/views/curation_concerns/file_sets/media_display/_audio.html.erb +6 -0
  133. data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +4 -0
  134. data/app/views/curation_concerns/file_sets/media_display/_image.html.erb +8 -0
  135. data/app/views/curation_concerns/file_sets/media_display/_office_document.html.erb +7 -0
  136. data/app/views/curation_concerns/file_sets/media_display/_pdf.html.erb +7 -0
  137. data/app/views/curation_concerns/file_sets/media_display/_video.html.erb +6 -0
  138. data/app/views/curation_concerns/file_sets/show.html.erb +15 -0
  139. data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -0
  140. data/app/views/curation_concerns/file_sets/upload/_alerts.html.erb +19 -0
  141. data/app/views/curation_concerns/file_sets/upload/_form.html.erb +6 -0
  142. data/app/views/curation_concerns/file_sets/upload/_form_fields.html.erb +45 -0
  143. data/app/views/curation_concerns/file_sets/upload/_script_templates.html.erb +61 -0
  144. data/app/views/curation_concerns/single_use_links/new_download.html.erb +5 -0
  145. data/app/views/curation_concerns/single_use_links/new_show.html.erb +5 -0
  146. data/app/views/curation_concerns/single_use_links_viewer/show.html.erb +10 -0
  147. data/app/views/error/single_use_error.html.erb +19 -0
  148. data/app/views/layouts/error.html.erb +33 -0
  149. data/app/views/leases/_list_expired_active_leases.html.erb +6 -1
  150. data/app/views/records/_rights_modal.html.erb +1 -0
  151. data/app/views/records/edit_fields/_default.html.erb +5 -0
  152. data/app/views/records/show_fields/_default.html.erb +6 -0
  153. data/app/views/shared/_add_content.html.erb +2 -14
  154. data/app/views/shared/_add_works.html.erb +14 -0
  155. data/app/views/shared/_my_actions.html.erb +9 -1
  156. data/app/views/shared/_site_actions.html.erb +1 -1
  157. data/app/views/shared/_site_search.html.erb +7 -7
  158. data/app/views/upload_sets/_edit.js.erb +15 -0
  159. data/app/views/upload_sets/_metadata.html.erb +50 -0
  160. data/app/views/upload_sets/_more_metadata.html.erb +7 -0
  161. data/app/views/upload_sets/edit.html.erb +26 -0
  162. data/app/views/{catalog/_home_text.html.erb → welcome/index.html.erb} +1 -0
  163. data/config/initializers/simple_form.rb +14 -0
  164. data/config/jetty.yml +5 -0
  165. data/config/locales/curation_concerns.en.yml +25 -4
  166. data/config/routes.rb +5 -0
  167. data/curation_concerns.gemspec +4 -6
  168. data/lib/curation_concerns/callbacks/registry.rb +48 -0
  169. data/lib/curation_concerns/callbacks.rb +26 -0
  170. data/lib/curation_concerns/controller_resource.rb +4 -4
  171. data/lib/curation_concerns/engine.rb +4 -2
  172. data/lib/curation_concerns/rails/routes.rb +23 -19
  173. data/lib/curation_concerns/single_use_error.rb +3 -0
  174. data/lib/curation_concerns/spec_support.rb +0 -2
  175. data/lib/curation_concerns/version.rb +1 -1
  176. data/lib/curation_concerns.rb +1 -2
  177. data/lib/generators/curation_concerns/install_generator.rb +34 -30
  178. data/lib/generators/curation_concerns/templates/catalog_controller.rb +236 -0
  179. data/lib/generators/curation_concerns/templates/config/authorities/rights.yml +19 -0
  180. data/lib/generators/curation_concerns/templates/{curation_concerns.css.scss → curation_concerns.scss} +0 -0
  181. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +1 -1
  182. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +1 -1
  183. data/lib/generators/curation_concerns/work/templates/form.rb.erb +8 -0
  184. data/lib/generators/curation_concerns/work/templates/form_spec.rb.erb +10 -0
  185. data/lib/generators/curation_concerns/work/templates/model.rb.erb +2 -2
  186. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +1 -1
  187. data/lib/generators/curation_concerns/work/work_generator.rb +31 -26
  188. data/spec/abilities/collection_abilities_spec.rb +13 -13
  189. data/spec/abilities/embargo_and_lease_ability_spec.rb +23 -0
  190. data/spec/abilities/file_set_abilities_spec.rb +67 -0
  191. data/spec/abilities/generic_work_abilities_spec.rb +12 -12
  192. data/spec/actors/curation_concerns/embargo_actor_spec.rb +38 -0
  193. data/spec/actors/curation_concerns/file_set_actor_spec.rb +180 -0
  194. data/spec/actors/curation_concerns/lease_actor_spec.rb +39 -0
  195. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +44 -38
  196. data/spec/actors/curation_concerns/work_actor_spec.rb +121 -63
  197. data/spec/controllers/catalog_controller_spec.rb +30 -32
  198. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +2 -3
  199. data/spec/controllers/curation_concerns/collections_controller_spec.rb +93 -76
  200. data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +106 -0
  201. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +237 -0
  202. data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +85 -0
  203. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +84 -72
  204. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +8 -11
  205. data/spec/controllers/curation_concerns/single_use_links_controller_spec.rb +79 -0
  206. data/spec/controllers/curation_concerns/single_use_links_viewer_controller_spec.rb +74 -0
  207. data/spec/controllers/downloads_controller_spec.rb +49 -24
  208. data/spec/controllers/embargoes_controller_spec.rb +42 -51
  209. data/spec/controllers/leases_controller_spec.rb +53 -42
  210. data/spec/controllers/upload_sets_controller_spec.rb +76 -0
  211. data/spec/controllers/welcome_controller_spec.rb +12 -0
  212. data/spec/factories/collections.rb +5 -1
  213. data/spec/factories/{generic_files.rb → file_sets.rb} +6 -6
  214. data/spec/factories/generic_works.rb +5 -6
  215. data/spec/factories/users.rb +2 -4
  216. data/spec/features/add_file_spec.rb +11 -12
  217. data/spec/features/catalog_search_spec.rb +43 -0
  218. data/spec/features/collection_spec.rb +61 -46
  219. data/spec/features/create_work_spec.rb +26 -19
  220. data/spec/features/embargo_spec.rb +13 -12
  221. data/spec/features/lease_spec.rb +15 -16
  222. data/spec/features/update_file_spec.rb +11 -13
  223. data/spec/features/work_generator_spec.rb +34 -26
  224. data/spec/{helpers/curation_concerns/.keep → fixtures/empty_file.txt} +0 -0
  225. data/spec/fixtures/test.pdf +0 -0
  226. data/spec/forms/collection_edit_form_spec.rb +53 -9
  227. data/spec/forms/file_set_edit_form_spec.rb +53 -0
  228. data/spec/forms/work_form_spec.rb +54 -0
  229. data/spec/helpers/catalog_helper_spec.rb +9 -10
  230. data/spec/helpers/configuration_helper_spec.rb +1 -2
  231. data/spec/helpers/curation_concerns/collections_helper_spec.rb +8 -9
  232. data/spec/helpers/curation_concerns/file_set_helper_spec.rb +61 -0
  233. data/spec/helpers/render_constraints_helper_spec.rb +4 -4
  234. data/spec/helpers/url_helper_spec.rb +8 -7
  235. data/spec/indexers/collection_indexer_spec.rb +14 -0
  236. data/spec/indexers/file_set_indexing_service_spec.rb +69 -0
  237. data/spec/indexers/generic_work_indexing_service_spec.rb +22 -0
  238. data/spec/inputs/multifile_input_spec.rb +32 -0
  239. data/spec/jobs/active_fedora_id_based_job_spec.rb +10 -8
  240. data/spec/jobs/audit_job_spec.rb +28 -20
  241. data/spec/jobs/characterize_job_spec.rb +10 -15
  242. data/spec/jobs/create_derivatives_job_spec.rb +11 -9
  243. data/spec/jobs/import_url_job_spec.rb +14 -21
  244. data/spec/jobs/ingest_file_job_spec.rb +45 -0
  245. data/spec/jobs/ingest_local_file_job_spec.rb +13 -15
  246. data/spec/jobs/upload_set_update_job_spec.rb +30 -0
  247. data/spec/jobs/visibility_copy_job_spec.rb +61 -0
  248. data/spec/lib/curation_concerns/callbacks/registry_spec.rb +54 -0
  249. data/spec/lib/curation_concerns/callbacks_spec.rb +27 -0
  250. data/spec/lib/curation_concerns/messages_spec.rb +29 -30
  251. data/spec/lib/curation_concerns/readable_permissions_spec.rb +18 -20
  252. data/spec/lib/curation_concerns/writable_permissions_spec.rb +2 -4
  253. data/spec/matchers/metadata_field_matchers.rb +1 -1
  254. data/spec/matchers/response_matchers.rb +2 -2
  255. data/spec/matchers.rb +3 -2
  256. data/spec/models/checksum_audit_log_spec.rb +37 -32
  257. data/spec/models/curation_concerns/collection_behavior_spec.rb +50 -37
  258. data/spec/models/curation_concerns/file_set/derivatives_spec.rb +84 -0
  259. data/spec/models/curation_concerns/work_behavior_spec.rb +53 -0
  260. data/spec/models/file_set_spec.rb +601 -0
  261. data/spec/models/generic_work_spec.rb +15 -14
  262. data/spec/models/single_use_link_spec.rb +69 -0
  263. data/spec/models/solr_document_spec.rb +67 -0
  264. data/spec/models/upload_set_spec.rb +39 -0
  265. data/spec/models/user_spec.rb +7 -8
  266. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +8 -24
  267. data/spec/presenters/curation_concerns/file_set_presenter_spec.rb +59 -0
  268. data/spec/presenters/curation_concerns/permission_badge_spec.rb +29 -0
  269. data/spec/presenters/curation_concerns/presenter_factory_spec.rb +29 -0
  270. data/spec/presenters/curation_concerns/version_list_presenter_spec.rb +32 -0
  271. data/spec/presenters/curation_concerns/version_presenter_spec.rb +51 -0
  272. data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +35 -0
  273. data/spec/presenters/embargo_presenter_spec.rb +48 -0
  274. data/spec/presenters/lease_presenter_spec.rb +48 -0
  275. data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +14 -0
  276. data/spec/routing/curation_concerns/routes_spec.rb +38 -12
  277. data/spec/routing/route_spec.rb +38 -39
  278. data/spec/search_builders/curation_concerns/embargo_search_builder_spec.rb +17 -0
  279. data/spec/search_builders/curation_concerns/lease_search_builder_spec.rb +17 -0
  280. data/spec/search_builders/curation_concerns/search_builder_spec.rb +60 -0
  281. data/spec/services/derivative_path_spec.rb +16 -0
  282. data/spec/services/embargo_service_spec.rb +15 -14
  283. data/spec/services/file_set_audit_service_spec.rb +71 -0
  284. data/spec/services/lease_service_spec.rb +13 -13
  285. data/spec/services/lock_manager_spec.rb +12 -0
  286. data/spec/services/parent_service_spec.rb +13 -0
  287. data/spec/services/persist_derivatives_spec.rb +24 -0
  288. data/spec/services/persist_directly_contained_output_file_service_spec.rb +14 -0
  289. data/spec/services/repository_audit_service_spec.rb +8 -7
  290. data/spec/services/rights_service_spec.rb +17 -0
  291. data/spec/services/thumbnail_path_service_spec.rb +43 -0
  292. data/spec/services/versioning_service_spec.rb +8 -9
  293. data/spec/spec_helper.rb +21 -13
  294. data/spec/support/curation_concerns/factory_helpers.rb +1 -0
  295. data/spec/support/features/fixture_file_upload.rb +3 -1
  296. data/spec/support/features/session_helpers.rb +3 -4
  297. data/spec/support/features.rb +1 -4
  298. data/spec/support/input_support.rb +11 -0
  299. data/spec/support/matchers/api_responses.rb +22 -0
  300. data/spec/support/shared/shared_examples_has_dc_metadata.rb +0 -2
  301. data/spec/support/shared/shared_examples_is_embargoable.rb +1 -3
  302. data/spec/support/shared/shared_examples_with_access_rights.rb +13 -16
  303. data/spec/tasks/rake_spec.rb +9 -11
  304. data/spec/test_app_templates/Gemfile.extra +4 -1
  305. data/spec/test_app_templates/lib/generators/test_app_generator.rb +3 -35
  306. data/spec/views/catalog/index.html.erb_spec.rb +7 -10
  307. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +9 -6
  308. data/spec/views/curation_concerns/base/_form_permission.html.erb_spec.rb +13 -0
  309. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +35 -15
  310. data/spec/views/curation_concerns/base/show.json.jbuilder_spec.rb +21 -0
  311. data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +37 -0
  312. data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +21 -0
  313. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +6 -6
  314. data/spec/views/error/single_use_error.html.erb_spec.rb +8 -0
  315. data/spec/views/layouts/error.html.erb_spec.rb +8 -0
  316. data/spec/views/shared/_add_content.html.erb_spec.rb +33 -20
  317. data/spec/views/shared/_my_actions.html.erb_spec.rb +18 -6
  318. data/spec/views/single_use_links/new_download.html.erb_spec.rb +29 -0
  319. data/spec/views/single_use_links_viewer/show.html.erb_spec.rb +32 -0
  320. data/tasks/jetty.rake +1 -1
  321. data/vendor/assets/javascrips/fileupload/jquery.fileupload-process.js +175 -0
  322. data/vendor/assets/javascrips/fileupload/jquery.fileupload-ui.js +710 -0
  323. data/vendor/assets/javascrips/fileupload/jquery.fileupload-validate.js +122 -0
  324. data/vendor/assets/javascrips/fileupload/jquery.fileupload.js +1477 -0
  325. data/vendor/assets/javascrips/fileupload/locale.js +27 -0
  326. data/vendor/assets/javascrips/fileupload/tmpl.js +87 -0
  327. metadata +242 -213
  328. data/app/assets/javascripts/curation_concerns/help_modal.js +0 -36
  329. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +0 -123
  330. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +0 -126
  331. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +0 -95
  332. data/app/assets/javascripts/curation_concerns/proxy_submission.js +0 -23
  333. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +0 -20
  334. data/app/controllers/catalog_controller.rb +0 -3
  335. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +0 -149
  336. data/app/controllers/curation_concerns/generic_files_controller.rb +0 -13
  337. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +0 -57
  338. data/app/datastreams/generic_work_metadata.rb +0 -3
  339. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +0 -15
  340. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +0 -9
  341. data/app/helpers/curation_concerns/attribute_helper.rb +0 -67
  342. data/app/helpers/curation_concerns/generic_file_helper.rb +0 -19
  343. data/app/helpers/curation_concerns/thumbnail_helper.rb +0 -11
  344. data/app/presenters/curation_concerns/generic_file_presenter.rb +0 -14
  345. data/app/presenters/curation_concerns/generic_work_presenter.rb +0 -13
  346. data/app/views/catalog/_index_default.html.erb +0 -17
  347. data/app/views/collections/_form_representative_image.html.erb +0 -13
  348. data/app/views/collections/_identifier_and_action.html.erb +0 -15
  349. data/app/views/curation_concerns/base/_form_content_license.html.erb +0 -16
  350. data/app/views/curation_concerns/base/_form_editors.html.erb +0 -15
  351. data/app/views/curation_concerns/generic_files/_actions.html.erb +0 -16
  352. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +0 -12
  353. data/app/views/curation_concerns/generic_files/_media_display.html.erb +0 -19
  354. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +0 -8
  355. data/app/views/curation_concerns/generic_files/show.html.erb +0 -15
  356. data/app/workers/visibility_copy_worker.rb +0 -30
  357. data/curation_concerns-models/.gitignore +0 -17
  358. data/curation_concerns-models/Gemfile +0 -4
  359. data/curation_concerns-models/LICENSE.md +0 -177
  360. data/curation_concerns-models/README.md +0 -42
  361. data/curation_concerns-models/Rakefile +0 -1
  362. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +0 -99
  363. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +0 -90
  364. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +0 -150
  365. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +0 -88
  366. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +0 -22
  367. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +0 -6
  368. data/curation_concerns-models/app/jobs/audit_job.rb +0 -58
  369. data/curation_concerns-models/app/jobs/characterize_job.rb +0 -11
  370. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +0 -24
  371. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +0 -15
  372. data/curation_concerns-models/app/jobs/import_url_job.rb +0 -56
  373. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +0 -48
  374. data/curation_concerns-models/app/jobs/resolrize_job.rb +0 -9
  375. data/curation_concerns-models/app/models/checksum_audit_log.rb +0 -21
  376. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +0 -34
  377. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +0 -87
  378. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +0 -47
  379. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +0 -53
  380. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +0 -89
  381. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +0 -8
  382. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +0 -343
  383. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +0 -12
  384. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +0 -14
  385. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +0 -16
  386. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +0 -5
  387. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +0 -44
  388. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +0 -38
  389. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +0 -14
  390. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +0 -23
  391. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +0 -19
  392. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +0 -75
  393. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +0 -7
  394. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +0 -15
  395. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +0 -135
  396. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +0 -65
  397. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +0 -98
  398. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +0 -29
  399. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +0 -47
  400. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +0 -31
  401. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +0 -148
  402. data/curation_concerns-models/app/models/version_committer.rb +0 -2
  403. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +0 -71
  404. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +0 -38
  405. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +0 -85
  406. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +0 -14
  407. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +0 -16
  408. data/curation_concerns-models/app/services/curation_concerns/noid.rb +0 -23
  409. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +0 -9
  410. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +0 -27
  411. data/curation_concerns-models/config/locales/curation_concerns.en.yml +0 -6
  412. data/curation_concerns-models/curation_concerns-models.gemspec +0 -34
  413. data/curation_concerns-models/lib/curation_concerns/messages.rb +0 -66
  414. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +0 -61
  415. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +0 -36
  416. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +0 -22
  417. data/curation_concerns-models/lib/curation_concerns/models/version.rb +0 -5
  418. data/curation_concerns-models/lib/curation_concerns/models.rb +0 -32
  419. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +0 -30
  420. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +0 -19
  421. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +0 -28
  422. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +0 -70
  423. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +0 -4
  424. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +0 -4
  425. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +0 -1
  426. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +0 -123
  427. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +0 -6
  428. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +0 -9
  429. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +0 -32
  430. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +0 -1
  431. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +0 -10
  432. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +0 -5
  433. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +0 -19
  434. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +0 -15
  435. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +0 -75
  436. data/curation_concerns-models/lib/tasks/migrate.rake +0 -13
  437. data/curation_concerns-models/lib/tasks/resque.rake +0 -13
  438. data/curation_concerns-models/lib/tasks/solr_reindex.rake +0 -8
  439. data/lib/curation_concerns/configuration.rb +0 -74
  440. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +0 -2
  441. data/solr_conf/conf/solrconfig.xml +0 -223
  442. data/spec/abilities/generic_file_abilities_spec.rb +0 -62
  443. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +0 -116
  444. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +0 -251
  445. data/spec/forms/generic_file_edit_form_spec.rb +0 -33
  446. data/spec/helpers/thumbnail_helper_spec.rb +0 -21
  447. data/spec/jobs/copy_permissions_job_spec.rb +0 -49
  448. data/spec/jobs/curation_concerns_resque_queue_spec.rb +0 -49
  449. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +0 -88
  450. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +0 -35
  451. data/spec/models/fits_datastream_spec.rb +0 -127
  452. data/spec/models/generic_file_spec.rb +0 -619
  453. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +0 -16
  454. data/spec/services/characterization_service_spec.rb +0 -30
  455. data/spec/services/full_text_extraction_service_spec.rb +0 -5
  456. data/spec/services/generic_file_audit_service_spec.rb +0 -71
  457. data/spec/services/generic_file_indexing_service_spec.rb +0 -57
  458. data/spec/services/generic_work_indexing_service_spec.rb +0 -18
  459. data/spec/workers/visibility_copy_worker_spec.rb +0 -70
  460. data/vendor/assets/javascripts/handlebars.js +0 -2278
  461. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +0 -602
  462. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +0 -356
  463. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +0 -50
  464. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +0 -1276
  465. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +0 -610
  466. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +0 -498
  467. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +0 -528
  468. data/vendor/assets/javascripts/jquery.tokeninput.js +0 -1061
  469. data/vendor/assets/stylesheets/jquery-ui-lightness.css +0 -474
  470. data/vendor/assets/stylesheets/token-input-facebook.css +0 -122
  471. data/vendor/assets/stylesheets/token-input-mac.css +0 -204
  472. data/vendor/assets/stylesheets/token-input.css +0 -127
@@ -1,610 +0,0 @@
1
- /*!
2
- * jQuery UI Menu @VERSION
3
- * http://jqueryui.com
4
- *
5
- * Copyright 2012 jQuery Foundation and other contributors
6
- * Released under the MIT license.
7
- * http://jquery.org/license
8
- *
9
- * http://api.jqueryui.com/menu/
10
- *
11
- * Depends:
12
- * jquery.ui.core.js
13
- * jquery.ui.widget.js
14
- * jquery.ui.position.js
15
- */
16
- (function( $, undefined ) {
17
-
18
- var mouseHandled = false;
19
-
20
- $.widget( "ui.menu", {
21
- version: "@VERSION",
22
- defaultElement: "<ul>",
23
- delay: 300,
24
- options: {
25
- icons: {
26
- submenu: "ui-icon-carat-1-e"
27
- },
28
- menus: "ul",
29
- position: {
30
- my: "left top",
31
- at: "right top"
32
- },
33
- role: "menu",
34
-
35
- // callbacks
36
- blur: null,
37
- focus: null,
38
- select: null
39
- },
40
-
41
- _create: function() {
42
- this.activeMenu = this.element;
43
- this.element
44
- .uniqueId()
45
- .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
46
- .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
47
- .attr({
48
- role: this.options.role,
49
- tabIndex: 0
50
- })
51
- // need to catch all clicks on disabled menu
52
- // not possible through _on
53
- .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
54
- if ( this.options.disabled ) {
55
- event.preventDefault();
56
- }
57
- }, this ));
58
-
59
- if ( this.options.disabled ) {
60
- this.element
61
- .addClass( "ui-state-disabled" )
62
- .attr( "aria-disabled", "true" );
63
- }
64
-
65
- this._on({
66
- // Prevent focus from sticking to links inside menu after clicking
67
- // them (focus should always stay on UL during navigation).
68
- "mousedown .ui-menu-item > a": function( event ) {
69
- event.preventDefault();
70
- },
71
- "click .ui-state-disabled > a": function( event ) {
72
- event.preventDefault();
73
- },
74
- "click .ui-menu-item:has(a)": function( event ) {
75
- var target = $( event.target ).closest( ".ui-menu-item" );
76
- if ( !mouseHandled && target.not( ".ui-state-disabled" ).length ) {
77
- mouseHandled = true;
78
-
79
- this.select( event );
80
- // Open submenu on click
81
- if ( target.has( ".ui-menu" ).length ) {
82
- this.expand( event );
83
- } else if ( !this.element.is( ":focus" ) ) {
84
- // Redirect focus to the menu
85
- this.element.trigger( "focus", [ true ] );
86
-
87
- // If the active item is on the top level, let it stay active.
88
- // Otherwise, blur the active item since it is no longer visible.
89
- if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
90
- clearTimeout( this.timer );
91
- }
92
- }
93
- }
94
- },
95
- "mouseenter .ui-menu-item": function( event ) {
96
- var target = $( event.currentTarget );
97
- // Remove ui-state-active class from siblings of the newly focused menu item
98
- // to avoid a jump caused by adjacent elements both having a class with a border
99
- target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
100
- this.focus( event, target );
101
- },
102
- mouseleave: "collapseAll",
103
- "mouseleave .ui-menu": "collapseAll",
104
- focus: function( event, keepActiveItem ) {
105
- // If there's already an active item, keep it active
106
- // If not, activate the first item
107
- var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
108
-
109
- if ( !keepActiveItem ) {
110
- this.focus( event, item );
111
- }
112
- },
113
- blur: function( event ) {
114
- this._delay(function() {
115
- if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
116
- this.collapseAll( event );
117
- }
118
- });
119
- },
120
- keydown: "_keydown"
121
- });
122
-
123
- this.refresh();
124
-
125
- // Clicks outside of a menu collapse any open menus
126
- this._on( this.document, {
127
- click: function( event ) {
128
- if ( !$( event.target ).closest( ".ui-menu" ).length ) {
129
- this.collapseAll( event );
130
- }
131
-
132
- // Reset the mouseHandled flag
133
- mouseHandled = false;
134
- }
135
- });
136
- },
137
-
138
- _destroy: function() {
139
- // Destroy (sub)menus
140
- this.element
141
- .removeAttr( "aria-activedescendant" )
142
- .find( ".ui-menu" ).andSelf()
143
- .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
144
- .removeAttr( "role" )
145
- .removeAttr( "tabIndex" )
146
- .removeAttr( "aria-labelledby" )
147
- .removeAttr( "aria-expanded" )
148
- .removeAttr( "aria-hidden" )
149
- .removeAttr( "aria-disabled" )
150
- .removeUniqueId()
151
- .show();
152
-
153
- // Destroy menu items
154
- this.element.find( ".ui-menu-item" )
155
- .removeClass( "ui-menu-item" )
156
- .removeAttr( "role" )
157
- .removeAttr( "aria-disabled" )
158
- .children( "a" )
159
- .removeUniqueId()
160
- .removeClass( "ui-corner-all ui-state-hover" )
161
- .removeAttr( "tabIndex" )
162
- .removeAttr( "role" )
163
- .removeAttr( "aria-haspopup" )
164
- .children().each( function() {
165
- var elem = $( this );
166
- if ( elem.data( "ui-menu-submenu-carat" ) ) {
167
- elem.remove();
168
- }
169
- });
170
-
171
- // Destroy menu dividers
172
- this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
173
- },
174
-
175
- _keydown: function( event ) {
176
- var match, prev, character, skip, regex,
177
- preventDefault = true;
178
-
179
- function escape( value ) {
180
- return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
181
- }
182
-
183
- switch ( event.keyCode ) {
184
- case $.ui.keyCode.PAGE_UP:
185
- this.previousPage( event );
186
- break;
187
- case $.ui.keyCode.PAGE_DOWN:
188
- this.nextPage( event );
189
- break;
190
- case $.ui.keyCode.HOME:
191
- this._move( "first", "first", event );
192
- break;
193
- case $.ui.keyCode.END:
194
- this._move( "last", "last", event );
195
- break;
196
- case $.ui.keyCode.UP:
197
- this.previous( event );
198
- break;
199
- case $.ui.keyCode.DOWN:
200
- this.next( event );
201
- break;
202
- case $.ui.keyCode.LEFT:
203
- this.collapse( event );
204
- break;
205
- case $.ui.keyCode.RIGHT:
206
- if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
207
- this.expand( event );
208
- }
209
- break;
210
- case $.ui.keyCode.ENTER:
211
- case $.ui.keyCode.SPACE:
212
- this._activate( event );
213
- break;
214
- case $.ui.keyCode.ESCAPE:
215
- this.collapse( event );
216
- break;
217
- default:
218
- preventDefault = false;
219
- prev = this.previousFilter || "";
220
- character = String.fromCharCode( event.keyCode );
221
- skip = false;
222
-
223
- clearTimeout( this.filterTimer );
224
-
225
- if ( character === prev ) {
226
- skip = true;
227
- } else {
228
- character = prev + character;
229
- }
230
-
231
- regex = new RegExp( "^" + escape( character ), "i" );
232
- match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
233
- return regex.test( $( this ).children( "a" ).text() );
234
- });
235
- match = skip && match.index( this.active.next() ) !== -1 ?
236
- this.active.nextAll( ".ui-menu-item" ) :
237
- match;
238
-
239
- // If no matches on the current filter, reset to the last character pressed
240
- // to move down the menu to the first item that starts with that character
241
- if ( !match.length ) {
242
- character = String.fromCharCode( event.keyCode );
243
- regex = new RegExp( "^" + escape( character ), "i" );
244
- match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
245
- return regex.test( $( this ).children( "a" ).text() );
246
- });
247
- }
248
-
249
- if ( match.length ) {
250
- this.focus( event, match );
251
- if ( match.length > 1 ) {
252
- this.previousFilter = character;
253
- this.filterTimer = this._delay(function() {
254
- delete this.previousFilter;
255
- }, 1000 );
256
- } else {
257
- delete this.previousFilter;
258
- }
259
- } else {
260
- delete this.previousFilter;
261
- }
262
- }
263
-
264
- if ( preventDefault ) {
265
- event.preventDefault();
266
- }
267
- },
268
-
269
- _activate: function( event ) {
270
- if ( !this.active.is( ".ui-state-disabled" ) ) {
271
- if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
272
- this.expand( event );
273
- } else {
274
- this.select( event );
275
- }
276
- }
277
- },
278
-
279
- refresh: function() {
280
- var menus,
281
- icon = this.options.icons.submenu,
282
- submenus = this.element.find( this.options.menus );
283
-
284
- // Initialize nested menus
285
- submenus.filter( ":not(.ui-menu)" )
286
- .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
287
- .hide()
288
- .attr({
289
- role: this.options.role,
290
- "aria-hidden": "true",
291
- "aria-expanded": "false"
292
- })
293
- .each(function() {
294
- var menu = $( this ),
295
- item = menu.prev( "a" ),
296
- submenuCarat = $( "<span>" )
297
- .addClass( "ui-menu-icon ui-icon " + icon )
298
- .data( "ui-menu-submenu-carat", true );
299
-
300
- item
301
- .attr( "aria-haspopup", "true" )
302
- .prepend( submenuCarat );
303
- menu.attr( "aria-labelledby", item.attr( "id" ) );
304
- });
305
-
306
- menus = submenus.add( this.element );
307
-
308
- // Don't refresh list items that are already adapted
309
- menus.children( ":not(.ui-menu-item):has(a)" )
310
- .addClass( "ui-menu-item" )
311
- .attr( "role", "presentation" )
312
- .children( "a" )
313
- .uniqueId()
314
- .addClass( "ui-corner-all" )
315
- .attr({
316
- tabIndex: -1,
317
- role: this._itemRole()
318
- });
319
-
320
- // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
321
- menus.children( ":not(.ui-menu-item)" ).each(function() {
322
- var item = $( this );
323
- // hyphen, em dash, en dash
324
- if ( !/[^\-—–\s]/.test( item.text() ) ) {
325
- item.addClass( "ui-widget-content ui-menu-divider" );
326
- }
327
- });
328
-
329
- // Add aria-disabled attribute to any disabled menu item
330
- menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
331
-
332
- // If the active item has been removed, blur the menu
333
- if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
334
- this.blur();
335
- }
336
- },
337
-
338
- _itemRole: function() {
339
- return {
340
- menu: "menuitem",
341
- listbox: "option"
342
- }[ this.options.role ];
343
- },
344
-
345
- focus: function( event, item ) {
346
- var nested, focused;
347
- this.blur( event, event && event.type === "focus" );
348
-
349
- this._scrollIntoView( item );
350
-
351
- this.active = item.first();
352
- focused = this.active.children( "a" ).addClass( "ui-state-focus" );
353
- // Only update aria-activedescendant if there's a role
354
- // otherwise we assume focus is managed elsewhere
355
- if ( this.options.role ) {
356
- this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
357
- }
358
-
359
- // Highlight active parent menu item, if any
360
- this.active
361
- .parent()
362
- .closest( ".ui-menu-item" )
363
- .children( "a:first" )
364
- .addClass( "ui-state-active" );
365
-
366
- if ( event && event.type === "keydown" ) {
367
- this._close();
368
- } else {
369
- this.timer = this._delay(function() {
370
- this._close();
371
- }, this.delay );
372
- }
373
-
374
- nested = item.children( ".ui-menu" );
375
- if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
376
- this._startOpening(nested);
377
- }
378
- this.activeMenu = item.parent();
379
-
380
- this._trigger( "focus", event, { item: item } );
381
- },
382
-
383
- _scrollIntoView: function( item ) {
384
- var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
385
- if ( this._hasScroll() ) {
386
- borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
387
- paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
388
- offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
389
- scroll = this.activeMenu.scrollTop();
390
- elementHeight = this.activeMenu.height();
391
- itemHeight = item.height();
392
-
393
- if ( offset < 0 ) {
394
- this.activeMenu.scrollTop( scroll + offset );
395
- } else if ( offset + itemHeight > elementHeight ) {
396
- this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
397
- }
398
- }
399
- },
400
-
401
- blur: function( event, fromFocus ) {
402
- if ( !fromFocus ) {
403
- clearTimeout( this.timer );
404
- }
405
-
406
- if ( !this.active ) {
407
- return;
408
- }
409
-
410
- this.active.children( "a" ).removeClass( "ui-state-focus" );
411
- this.active = null;
412
-
413
- this._trigger( "blur", event, { item: this.active } );
414
- },
415
-
416
- _startOpening: function( submenu ) {
417
- clearTimeout( this.timer );
418
-
419
- // Don't open if already open fixes a Firefox bug that caused a .5 pixel
420
- // shift in the submenu position when mousing over the carat icon
421
- if ( submenu.attr( "aria-hidden" ) !== "true" ) {
422
- return;
423
- }
424
-
425
- this.timer = this._delay(function() {
426
- this._close();
427
- this._open( submenu );
428
- }, this.delay );
429
- },
430
-
431
- _open: function( submenu ) {
432
- var position = $.extend({
433
- of: this.active
434
- }, this.options.position );
435
-
436
- clearTimeout( this.timer );
437
- this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
438
- .hide()
439
- .attr( "aria-hidden", "true" );
440
-
441
- submenu
442
- .show()
443
- .removeAttr( "aria-hidden" )
444
- .attr( "aria-expanded", "true" )
445
- .position( position );
446
- },
447
-
448
- collapseAll: function( event, all ) {
449
- clearTimeout( this.timer );
450
- this.timer = this._delay(function() {
451
- // If we were passed an event, look for the submenu that contains the event
452
- var currentMenu = all ? this.element :
453
- $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
454
-
455
- // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
456
- if ( !currentMenu.length ) {
457
- currentMenu = this.element;
458
- }
459
-
460
- this._close( currentMenu );
461
-
462
- this.blur( event );
463
- this.activeMenu = currentMenu;
464
- }, this.delay );
465
- },
466
-
467
- // With no arguments, closes the currently active menu - if nothing is active
468
- // it closes all menus. If passed an argument, it will search for menus BELOW
469
- _close: function( startMenu ) {
470
- if ( !startMenu ) {
471
- startMenu = this.active ? this.active.parent() : this.element;
472
- }
473
-
474
- startMenu
475
- .find( ".ui-menu" )
476
- .hide()
477
- .attr( "aria-hidden", "true" )
478
- .attr( "aria-expanded", "false" )
479
- .end()
480
- .find( "a.ui-state-active" )
481
- .removeClass( "ui-state-active" );
482
- },
483
-
484
- collapse: function( event ) {
485
- var newItem = this.active &&
486
- this.active.parent().closest( ".ui-menu-item", this.element );
487
- if ( newItem && newItem.length ) {
488
- this._close();
489
- this.focus( event, newItem );
490
- }
491
- },
492
-
493
- expand: function( event ) {
494
- var newItem = this.active &&
495
- this.active
496
- .children( ".ui-menu " )
497
- .children( ".ui-menu-item" )
498
- .first();
499
-
500
- if ( newItem && newItem.length ) {
501
- this._open( newItem.parent() );
502
-
503
- // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
504
- this._delay(function() {
505
- this.focus( event, newItem );
506
- });
507
- }
508
- },
509
-
510
- next: function( event ) {
511
- this._move( "next", "first", event );
512
- },
513
-
514
- previous: function( event ) {
515
- this._move( "prev", "last", event );
516
- },
517
-
518
- isFirstItem: function() {
519
- return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
520
- },
521
-
522
- isLastItem: function() {
523
- return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
524
- },
525
-
526
- _move: function( direction, filter, event ) {
527
- var next;
528
- if ( this.active ) {
529
- if ( direction === "first" || direction === "last" ) {
530
- next = this.active
531
- [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
532
- .eq( -1 );
533
- } else {
534
- next = this.active
535
- [ direction + "All" ]( ".ui-menu-item" )
536
- .eq( 0 );
537
- }
538
- }
539
- if ( !next || !next.length || !this.active ) {
540
- next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
541
- }
542
-
543
- this.focus( event, next );
544
- },
545
-
546
- nextPage: function( event ) {
547
- var item, base, height;
548
-
549
- if ( !this.active ) {
550
- this.next( event );
551
- return;
552
- }
553
- if ( this.isLastItem() ) {
554
- return;
555
- }
556
- if ( this._hasScroll() ) {
557
- base = this.active.offset().top;
558
- height = this.element.height();
559
- this.active.nextAll( ".ui-menu-item" ).each(function() {
560
- item = $( this );
561
- return item.offset().top - base - height < 0;
562
- });
563
-
564
- this.focus( event, item );
565
- } else {
566
- this.focus( event, this.activeMenu.children( ".ui-menu-item" )
567
- [ !this.active ? "first" : "last" ]() );
568
- }
569
- },
570
-
571
- previousPage: function( event ) {
572
- var item, base, height;
573
- if ( !this.active ) {
574
- this.next( event );
575
- return;
576
- }
577
- if ( this.isFirstItem() ) {
578
- return;
579
- }
580
- if ( this._hasScroll() ) {
581
- base = this.active.offset().top;
582
- height = this.element.height();
583
- this.active.prevAll( ".ui-menu-item" ).each(function() {
584
- item = $( this );
585
- return item.offset().top - base + height > 0;
586
- });
587
-
588
- this.focus( event, item );
589
- } else {
590
- this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
591
- }
592
- },
593
-
594
- _hasScroll: function() {
595
- return this.element.outerHeight() < this.element.prop( "scrollHeight" );
596
- },
597
-
598
- select: function( event ) {
599
- // TODO: It should never be possible to not have an active item at this
600
- // point, but the tests don't trigger mouseenter before click.
601
- this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
602
- var ui = { item: this.active };
603
- if ( !this.active.has( ".ui-menu" ).length ) {
604
- this.collapseAll( event, true );
605
- }
606
- this._trigger( "select", event, ui );
607
- }
608
- });
609
-
610
- }( jQuery ));