curation_concerns 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +15 -0
  7. data/README.md +46 -0
  8. data/RELEASING.md +2 -0
  9. data/Rakefile +26 -0
  10. data/VERSION +1 -0
  11. data/app/assets/images/default.png +0 -0
  12. data/app/assets/images/nope.png +0 -0
  13. data/app/assets/javascripts/.gitkeep +0 -0
  14. data/app/assets/javascripts/curation_concerns/.gitkeep +0 -0
  15. data/app/assets/javascripts/curation_concerns/application.js +18 -0
  16. data/app/assets/javascripts/curation_concerns/browse_everything_implement.js +7 -0
  17. data/app/assets/javascripts/curation_concerns/curation_concerns.js +28 -0
  18. data/app/assets/javascripts/curation_concerns/embargoes.js +17 -0
  19. data/app/assets/javascripts/curation_concerns/facet_mine.js +22 -0
  20. data/app/assets/javascripts/curation_concerns/help_modal.js +36 -0
  21. data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +123 -0
  22. data/app/assets/javascripts/curation_concerns/link_users.js.coffee +126 -0
  23. data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +95 -0
  24. data/app/assets/javascripts/curation_concerns/proxy_submission.js +23 -0
  25. data/app/assets/javascripts/curation_concerns/select_works.js.coffee +20 -0
  26. data/app/assets/javascripts/modernizr.js +3 -0
  27. data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +9 -0
  28. data/app/assets/stylesheets/curation_concerns/_global-variables.scss +5 -0
  29. data/app/assets/stylesheets/curation_concerns/_modules.scss +13 -0
  30. data/app/assets/stylesheets/curation_concerns/_positioning.scss +138 -0
  31. data/app/assets/stylesheets/curation_concerns/_theme.scss +46 -0
  32. data/app/assets/stylesheets/curation_concerns/_typography.scss +137 -0
  33. data/app/assets/stylesheets/curation_concerns/_variables_bootstrap.scss +7 -0
  34. data/app/assets/stylesheets/curation_concerns/downloads.scss +3 -0
  35. data/app/assets/stylesheets/curation_concerns/help_requests.scss +3 -0
  36. data/app/assets/stylesheets/curation_concerns/modules/accessibility.scss +50 -0
  37. data/app/assets/stylesheets/curation_concerns/modules/accordion.scss +33 -0
  38. data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +31 -0
  39. data/app/assets/stylesheets/curation_concerns/modules/classify_work.scss +100 -0
  40. data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +15 -0
  41. data/app/assets/stylesheets/curation_concerns/modules/emphatic_action_area.scss +14 -0
  42. data/app/assets/stylesheets/curation_concerns/modules/forms.scss +116 -0
  43. data/app/assets/stylesheets/curation_concerns/modules/multi_value_fields.scss +52 -0
  44. data/app/assets/stylesheets/curation_concerns/modules/pagination.scss +4 -0
  45. data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +55 -0
  46. data/app/assets/stylesheets/curation_concerns/modules/site_actions.scss +53 -0
  47. data/app/assets/stylesheets/curation_concerns/modules/site_search.scss +46 -0
  48. data/app/controllers/catalog_controller.rb +3 -0
  49. data/app/controllers/collections_controller.rb +3 -0
  50. data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +28 -0
  51. data/app/controllers/concerns/curation_concerns/catalog_controller.rb +321 -0
  52. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +76 -0
  53. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +125 -0
  54. data/app/controllers/concerns/curation_concerns/download_behavior.rb +60 -0
  55. data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +44 -0
  56. data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +149 -0
  57. data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +36 -0
  58. data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +26 -0
  59. data/app/controllers/concerns/curation_concerns/parent_container.rb +33 -0
  60. data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +31 -0
  61. data/app/controllers/concerns/curation_concerns/without_namespace.rb +15 -0
  62. data/app/controllers/curation_concerns/application_controller.rb +7 -0
  63. data/app/controllers/curation_concerns/classify_concerns_controller.rb +35 -0
  64. data/app/controllers/curation_concerns/generic_files_controller.rb +13 -0
  65. data/app/controllers/curation_concerns/permissions_controller.rb +19 -0
  66. data/app/controllers/downloads_controller.rb +4 -0
  67. data/app/controllers/embargoes_controller.rb +5 -0
  68. data/app/controllers/leases_controller.rb +5 -0
  69. data/app/controllers/registrations_controller.rb +20 -0
  70. data/app/controllers/sessions_controller.rb +4 -0
  71. data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +57 -0
  72. data/app/datastreams/generic_work_metadata.rb +3 -0
  73. data/app/forms/curation_concerns/forms/collection_edit_form.rb +17 -0
  74. data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +15 -0
  75. data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +9 -0
  76. data/app/helpers/curation_concerns/ability_helper.rb +46 -0
  77. data/app/helpers/curation_concerns/attribute_helper.rb +67 -0
  78. data/app/helpers/curation_concerns/catalog_helper.rb +38 -0
  79. data/app/helpers/curation_concerns/collections_helper.rb +63 -0
  80. data/app/helpers/curation_concerns/embargo_helper.rb +17 -0
  81. data/app/helpers/curation_concerns/generic_file_helper.rb +19 -0
  82. data/app/helpers/curation_concerns/lease_helper.rb +18 -0
  83. data/app/helpers/curation_concerns/main_app_helpers.rb +13 -0
  84. data/app/helpers/curation_concerns/render_constraints_helper.rb +42 -0
  85. data/app/helpers/curation_concerns/search_paths_helper.rb +13 -0
  86. data/app/helpers/curation_concerns/thumbnail_helper.rb +11 -0
  87. data/app/helpers/curation_concerns/title_helper.rb +23 -0
  88. data/app/helpers/curation_concerns/url_helper.rb +29 -0
  89. data/app/presenters/curation_concerns/collection_presenter.rb +40 -0
  90. data/app/presenters/curation_concerns/generic_file_presenter.rb +14 -0
  91. data/app/presenters/curation_concerns/generic_work_presenter.rb +13 -0
  92. data/app/search_builders/curation_concerns/search_builder.rb +49 -0
  93. data/app/services/curation_concerns/curation_concern.rb +14 -0
  94. data/app/services/curation_concerns/embargo_service.rb +26 -0
  95. data/app/services/curation_concerns/lease_service.rb +23 -0
  96. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  97. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  98. data/app/views/catalog/_document.html.erb +3 -0
  99. data/app/views/catalog/_document_list.html.erb +5 -0
  100. data/app/views/catalog/_home_text.html.erb +8 -0
  101. data/app/views/catalog/_index_default.html.erb +17 -0
  102. data/app/views/catalog/_index_header_list_default.html.erb +8 -0
  103. data/app/views/catalog/_navbar.html.erb +12 -0
  104. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  105. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  106. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  107. data/app/views/catalog/index.html.erb +47 -0
  108. data/app/views/collections/_add_to_collection_modal.html.erb +15 -0
  109. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  110. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  111. data/app/views/collections/_collection.html.erb +1 -0
  112. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  113. data/app/views/collections/_document_list.html.erb +7 -0
  114. data/app/views/collections/_edit_actions.html.erb +5 -0
  115. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  116. data/app/views/collections/_form.html.erb +26 -0
  117. data/app/views/collections/_form_additional_information.html.erb +6 -0
  118. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  119. data/app/views/collections/_form_permission.html.erb +36 -0
  120. data/app/views/collections/_form_representative_image.html.erb +13 -0
  121. data/app/views/collections/_form_required_information.html.erb +11 -0
  122. data/app/views/collections/_form_to_add_member.html.erb +21 -0
  123. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  124. data/app/views/collections/_media_display.html.erb +1 -0
  125. data/app/views/collections/_paginate.html.erb +6 -0
  126. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  127. data/app/views/collections/_show_actions.html.erb +8 -0
  128. data/app/views/collections/_show_descriptions.html.erb +10 -0
  129. data/app/views/collections/_show_fields.html.erb +0 -0
  130. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  131. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  132. data/app/views/collections/_view_type_group.html.erb +13 -0
  133. data/app/views/collections/edit.html.erb +17 -0
  134. data/app/views/collections/show.html.erb +24 -0
  135. data/app/views/curation_concerns/base/_attributes.html.erb +25 -0
  136. data/app/views/curation_concerns/base/_collections.html.erb +26 -0
  137. data/app/views/curation_concerns/base/_form.html.erb +25 -0
  138. data/app/views/curation_concerns/base/_form_additional_information.html.erb +7 -0
  139. data/app/views/curation_concerns/base/_form_content_license.html.erb +16 -0
  140. data/app/views/curation_concerns/base/_form_descriptive_fields.erb +11 -0
  141. data/app/views/curation_concerns/base/_form_editors.html.erb +15 -0
  142. data/app/views/curation_concerns/base/_form_files_and_links.html.erb +23 -0
  143. data/app/views/curation_concerns/base/_form_permission.html.erb +52 -0
  144. data/app/views/curation_concerns/base/_form_permission_embargo.html.erb +6 -0
  145. data/app/views/curation_concerns/base/_form_permission_lease.html.erb +6 -0
  146. data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +16 -0
  147. data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +18 -0
  148. data/app/views/curation_concerns/base/_form_representative_image.html.erb +13 -0
  149. data/app/views/curation_concerns/base/_form_required_information.html.erb +11 -0
  150. data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +15 -0
  151. data/app/views/curation_concerns/base/_legally_binding_text.html.erb +33 -0
  152. data/app/views/curation_concerns/base/_related_files.html.erb +24 -0
  153. data/app/views/curation_concerns/base/_representative_media.html.erb +8 -0
  154. data/app/views/curation_concerns/base/edit.html.erb +13 -0
  155. data/app/views/curation_concerns/base/new.html.erb +12 -0
  156. data/app/views/curation_concerns/base/show.html.erb +21 -0
  157. data/app/views/curation_concerns/base/unauthorized.html.erb +3 -0
  158. data/app/views/curation_concerns/classify_concerns/new.html.erb +25 -0
  159. data/app/views/curation_concerns/collections/_form_additional_information.html.erb +6 -0
  160. data/app/views/curation_concerns/generic_files/_actions.html.erb +16 -0
  161. data/app/views/curation_concerns/generic_files/_form.html.erb +35 -0
  162. data/app/views/curation_concerns/generic_files/_generic_file.html.erb +12 -0
  163. data/app/views/curation_concerns/generic_files/_media_display.html.erb +19 -0
  164. data/app/views/curation_concerns/generic_files/edit.html.erb +5 -0
  165. data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +8 -0
  166. data/app/views/curation_concerns/generic_files/show.html.erb +15 -0
  167. data/app/views/curation_concerns/permissions/confirm.html.erb +21 -0
  168. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  169. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  170. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  171. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  172. data/app/views/embargoes/edit.html.erb +43 -0
  173. data/app/views/embargoes/index.html.erb +18 -0
  174. data/app/views/layouts/boilerplate.html.erb +22 -0
  175. data/app/views/layouts/curation_concerns/1_column.html.erb +11 -0
  176. data/app/views/layouts/curation_concerns/catalog.html.erb +37 -0
  177. data/app/views/layouts/curation_concerns.html.erb +22 -0
  178. data/app/views/leases/_lease_history.html.erb +7 -0
  179. data/app/views/leases/_list_active_leases.html.erb +16 -0
  180. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  181. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  182. data/app/views/leases/edit.html.erb +43 -0
  183. data/app/views/leases/index.html.erb +18 -0
  184. data/app/views/shared/_add_content.html.erb +32 -0
  185. data/app/views/shared/_brand_bar.html.erb +10 -0
  186. data/app/views/shared/_flash_message.html.erb +17 -0
  187. data/app/views/shared/_footer.html.erb +10 -0
  188. data/app/views/shared/_ga.html.erb +6 -0
  189. data/app/views/shared/_header.html.erb +12 -0
  190. data/app/views/shared/_my_actions.html.erb +21 -0
  191. data/app/views/shared/_site_actions.html.erb +7 -0
  192. data/app/views/shared/_site_search.html.erb +12 -0
  193. data/app/views/shared/_title_bar.html.erb +16 -0
  194. data/app/workers/visibility_copy_worker.rb +30 -0
  195. data/config/initializers/simple_form.rb +31 -0
  196. data/config/locales/curation_concerns.en.yml +96 -0
  197. data/config/routes.rb +4 -0
  198. data/curation_concerns-models/.gitignore +17 -0
  199. data/curation_concerns-models/Gemfile +4 -0
  200. data/curation_concerns-models/LICENSE.md +177 -0
  201. data/curation_concerns-models/README.md +42 -0
  202. data/curation_concerns-models/Rakefile +1 -0
  203. data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +99 -0
  204. data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +90 -0
  205. data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +150 -0
  206. data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +88 -0
  207. data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +22 -0
  208. data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +6 -0
  209. data/curation_concerns-models/app/jobs/audit_job.rb +58 -0
  210. data/curation_concerns-models/app/jobs/characterize_job.rb +11 -0
  211. data/curation_concerns-models/app/jobs/copy_permissions_job.rb +24 -0
  212. data/curation_concerns-models/app/jobs/create_derivatives_job.rb +15 -0
  213. data/curation_concerns-models/app/jobs/import_url_job.rb +56 -0
  214. data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +48 -0
  215. data/curation_concerns-models/app/jobs/resolrize_job.rb +9 -0
  216. data/curation_concerns-models/app/models/checksum_audit_log.rb +21 -0
  217. data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +34 -0
  218. data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +87 -0
  219. data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +47 -0
  220. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +53 -0
  221. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +89 -0
  222. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +8 -0
  223. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +343 -0
  224. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +12 -0
  225. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +14 -0
  226. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +16 -0
  227. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +5 -0
  228. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +44 -0
  229. data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +38 -0
  230. data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +14 -0
  231. data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +23 -0
  232. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +19 -0
  233. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +75 -0
  234. data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +7 -0
  235. data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +15 -0
  236. data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +135 -0
  237. data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +65 -0
  238. data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +98 -0
  239. data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +29 -0
  240. data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +47 -0
  241. data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +31 -0
  242. data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +148 -0
  243. data/curation_concerns-models/app/models/version_committer.rb +2 -0
  244. data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +71 -0
  245. data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +38 -0
  246. data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +85 -0
  247. data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +14 -0
  248. data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +16 -0
  249. data/curation_concerns-models/app/services/curation_concerns/noid.rb +23 -0
  250. data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +9 -0
  251. data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +27 -0
  252. data/curation_concerns-models/config/locales/curation_concerns.en.yml +6 -0
  253. data/curation_concerns-models/curation_concerns-models.gemspec +34 -0
  254. data/curation_concerns-models/lib/curation_concerns/messages.rb +66 -0
  255. data/curation_concerns-models/lib/curation_concerns/models/engine.rb +61 -0
  256. data/curation_concerns-models/lib/curation_concerns/models/resque.rb +36 -0
  257. data/curation_concerns-models/lib/curation_concerns/models/utils.rb +22 -0
  258. data/curation_concerns-models/lib/curation_concerns/models/version.rb +5 -0
  259. data/curation_concerns-models/lib/curation_concerns/models.rb +32 -0
  260. data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +30 -0
  261. data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +19 -0
  262. data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +28 -0
  263. data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +70 -0
  264. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +4 -0
  265. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +4 -0
  266. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +1 -0
  267. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +123 -0
  268. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +6 -0
  269. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +9 -0
  270. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +32 -0
  271. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +1 -0
  272. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +10 -0
  273. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +5 -0
  274. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +19 -0
  275. data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +15 -0
  276. data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +75 -0
  277. data/curation_concerns-models/lib/tasks/migrate.rake +13 -0
  278. data/curation_concerns-models/lib/tasks/resque.rake +13 -0
  279. data/curation_concerns-models/lib/tasks/solr_reindex.rake +8 -0
  280. data/curation_concerns.gemspec +46 -0
  281. data/lib/curation_concerns/configuration.rb +74 -0
  282. data/lib/curation_concerns/controller_resource.rb +10 -0
  283. data/lib/curation_concerns/engine.rb +20 -0
  284. data/lib/curation_concerns/rails/routes.rb +76 -0
  285. data/lib/curation_concerns/spec_support.rb +10 -0
  286. data/lib/curation_concerns/version.rb +3 -0
  287. data/lib/curation_concerns.rb +8 -0
  288. data/lib/generators/curation_concerns/install_generator.rb +103 -0
  289. data/lib/generators/curation_concerns/templates/curation_concerns.css.scss +3 -0
  290. data/lib/generators/curation_concerns/templates/curation_concerns.js +1 -0
  291. data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +2 -0
  292. data/lib/generators/curation_concerns/templates/curation_concerns_helper.rb +4 -0
  293. data/lib/generators/curation_concerns/work/USAGE +19 -0
  294. data/lib/generators/curation_concerns/work/templates/README +13 -0
  295. data/lib/generators/curation_concerns/work/templates/actor.rb.erb +7 -0
  296. data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +9 -0
  297. data/lib/generators/curation_concerns/work/templates/controller.rb.erb +7 -0
  298. data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +9 -0
  299. data/lib/generators/curation_concerns/work/templates/model.rb.erb +7 -0
  300. data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +9 -0
  301. data/lib/generators/curation_concerns/work/work_generator.rb +78 -0
  302. data/solr_conf/conf/solrconfig.xml +223 -0
  303. data/spec/abilities/collection_abilities_spec.rb +48 -0
  304. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  305. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  306. data/spec/actors/curation_concerns/generic_file_actor_spec.rb +116 -0
  307. data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +95 -0
  308. data/spec/actors/curation_concerns/work_actor_spec.rb +203 -0
  309. data/spec/controllers/catalog_controller_spec.rb +115 -0
  310. data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +43 -0
  311. data/spec/controllers/curation_concerns/collections_controller_spec.rb +171 -0
  312. data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +251 -0
  313. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +167 -0
  314. data/spec/controllers/curation_concerns/permissions_controller_spec.rb +29 -0
  315. data/spec/controllers/downloads_controller_spec.rb +51 -0
  316. data/spec/controllers/embargoes_controller_spec.rb +114 -0
  317. data/spec/controllers/leases_controller_spec.rb +94 -0
  318. data/spec/factories/collections.rb +15 -0
  319. data/spec/factories/create_curation_concern.rb +3 -0
  320. data/spec/factories/generic_files.rb +31 -0
  321. data/spec/factories/generic_works.rb +54 -0
  322. data/spec/factories/users.rb +28 -0
  323. data/spec/features/add_file_spec.rb +30 -0
  324. data/spec/features/collection_spec.rb +222 -0
  325. data/spec/features/create_work_spec.rb +43 -0
  326. data/spec/features/embargo_spec.rb +51 -0
  327. data/spec/features/lease_spec.rb +49 -0
  328. data/spec/features/update_file_spec.rb +32 -0
  329. data/spec/features/work_generator_spec.rb +58 -0
  330. data/spec/fixtures/Example.ogg +0 -0
  331. data/spec/fixtures/charter.docx +0 -0
  332. data/spec/fixtures/countdown.avi +0 -0
  333. data/spec/fixtures/curation_concerns_generic_stub.txt +1 -0
  334. data/spec/fixtures/files/image.png +0 -0
  335. data/spec/fixtures/image.jp2 +0 -0
  336. data/spec/fixtures/image.jpg +0 -0
  337. data/spec/fixtures/piano_note.wav +0 -0
  338. data/spec/fixtures/sample_mpeg4.mp4 +0 -0
  339. data/spec/fixtures/small_file.txt +1 -0
  340. data/spec/fixtures/spoken-text.m4a +0 -0
  341. data/spec/fixtures/test4.pdf +0 -0
  342. data/spec/fixtures/test5.mp3 +0 -0
  343. data/spec/fixtures/world.png +0 -0
  344. data/spec/forms/collection_edit_form_spec.rb +20 -0
  345. data/spec/forms/generic_file_edit_form_spec.rb +33 -0
  346. data/spec/helpers/catalog_helper_spec.rb +58 -0
  347. data/spec/helpers/configuration_helper_spec.rb +13 -0
  348. data/spec/helpers/curation_concerns/.keep +0 -0
  349. data/spec/helpers/curation_concerns/collections_helper_spec.rb +49 -0
  350. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  351. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  352. data/spec/helpers/url_helper_spec.rb +22 -0
  353. data/spec/jobs/active_fedora_id_based_job_spec.rb +14 -0
  354. data/spec/jobs/audit_job_spec.rb +53 -0
  355. data/spec/jobs/characterize_job_spec.rb +23 -0
  356. data/spec/jobs/copy_permissions_job_spec.rb +49 -0
  357. data/spec/jobs/create_derivatives_job_spec.rb +23 -0
  358. data/spec/jobs/curation_concerns_resque_queue_spec.rb +49 -0
  359. data/spec/jobs/import_url_job_spec.rb +45 -0
  360. data/spec/jobs/ingest_local_file_job_spec.rb +25 -0
  361. data/spec/lib/curation_concerns/messages_spec.rb +70 -0
  362. data/spec/lib/curation_concerns/readable_permissions_spec.rb +56 -0
  363. data/spec/lib/curation_concerns/writable_permissions_spec.rb +16 -0
  364. data/spec/matchers/metadata_field_matchers.rb +28 -0
  365. data/spec/matchers/response_matchers.rb +7 -0
  366. data/spec/matchers.rb +24 -0
  367. data/spec/models/checksum_audit_log_spec.rb +66 -0
  368. data/spec/models/curation_concerns/collection_behavior_spec.rb +107 -0
  369. data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +88 -0
  370. data/spec/models/curation_concerns/generic_work_behavior_spec.rb +35 -0
  371. data/spec/models/fits_datastream_spec.rb +127 -0
  372. data/spec/models/generic_file_spec.rb +619 -0
  373. data/spec/models/generic_work_spec.rb +43 -0
  374. data/spec/models/user_spec.rb +23 -0
  375. data/spec/presenters/curation_concerns/collection_presenter_spec.rb +34 -0
  376. data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +16 -0
  377. data/spec/routing/curation_concerns/routes_spec.rb +36 -0
  378. data/spec/routing/route_spec.rb +86 -0
  379. data/spec/services/characterization_service_spec.rb +30 -0
  380. data/spec/services/embargo_service_spec.rb +38 -0
  381. data/spec/services/full_text_extraction_service_spec.rb +5 -0
  382. data/spec/services/generic_file_audit_service_spec.rb +71 -0
  383. data/spec/services/generic_file_indexing_service_spec.rb +57 -0
  384. data/spec/services/generic_work_indexing_service_spec.rb +18 -0
  385. data/spec/services/lease_service_spec.rb +53 -0
  386. data/spec/services/repository_audit_service_spec.rb +18 -0
  387. data/spec/services/versioning_service_spec.rb +32 -0
  388. data/spec/spec_helper.rb +94 -0
  389. data/spec/support/controllers/engine_helpers.rb +7 -0
  390. data/spec/support/curation_concerns/factory_helpers.rb +14 -0
  391. data/spec/support/features/fixture_file_upload.rb +14 -0
  392. data/spec/support/features/session_helpers.rb +41 -0
  393. data/spec/support/features.rb +19 -0
  394. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  395. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  396. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  397. data/spec/tasks/rake_spec.rb +24 -0
  398. data/spec/test_app_templates/Gemfile.extra +1 -0
  399. data/spec/test_app_templates/lib/generators/test_app_generator.rb +55 -0
  400. data/spec/views/catalog/index.html.erb_spec.rb +59 -0
  401. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +25 -0
  402. data/spec/views/curation_concerns/base/show.html.erb_spec.rb +29 -0
  403. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +33 -0
  404. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  405. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  406. data/spec/workers/visibility_copy_worker_spec.rb +70 -0
  407. data/tasks/jetty.rake +15 -0
  408. data/tasks/release.rake +93 -0
  409. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  410. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  411. data/vendor/assets/javascripts/handlebars.js +2278 -0
  412. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  413. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  414. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  415. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  416. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  417. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  418. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  419. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  420. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  421. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  422. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  423. data/vendor/assets/stylesheets/token-input.css +127 -0
  424. metadata +888 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 89dd4ec9b6787f7448fa599e2d5ea3cd9ebc898f
4
+ data.tar.gz: 714d172c38c6b1201fe0f63bad2ce359f61073f4
5
+ SHA512:
6
+ metadata.gz: 9658ecf651db9a338b058255881c6d536732bc9b4850574f94c9ee525e7e29df3b797d7e28d54aea6902836158e66ed0b95592fd38e17b220422dd6e7f29f4d1
7
+ data.tar.gz: 0e99bc7eaa29b260ceef72c541a75cd3ef72663f3152c290874ed2951d43e2f519fdc9bfd72f75bf2d21b215091ecc1a78262b126c8090d50100ddd9caf1fceb
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ Gemfile.lock
5
+ coverage
6
+ pkg
7
+ tmp
8
+ *.bundle
9
+ spec/internal
10
+ jetty
11
+ .rvmrc
12
+ .ruby-*
13
+ ./spec/internal
14
+ .DS_store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ cache: bundler
3
+ sudo: false
4
+ rvm:
5
+ - 2.2
6
+ env:
7
+ global:
8
+ - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
9
+ notifications:
10
+ email:
11
+ recipients:
12
+ - "eliotj@princeton.edu"
13
+ - "kr2@princeton.edu"
14
+ - "jstroop@princeton.edu"
15
+ on_success: "change"
16
+ on_failure: "always"
17
+ template:
18
+ - "%{repository}//%{branch}@%{commit} by %{author}: %{message} - %{build_url}"
data/Gemfile ADDED
@@ -0,0 +1,31 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in curation_concerns.gemspec
4
+ gemspec
5
+
6
+ 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)
7
+
8
+ gem 'curation_concerns-models', path: './curation_concerns-models'
9
+
10
+ group :test do
11
+ gem 'simplecov', '~> 0.9', require: false
12
+ gem 'coveralls', require: false
13
+ gem 'poltergeist'
14
+ end
15
+
16
+ file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path("../spec/internal", __FILE__))
17
+ if File.exists?(file)
18
+ puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
19
+ instance_eval File.read(file)
20
+ else
21
+ gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
22
+ if ENV['RAILS_VERSION'] and ENV['RAILS_VERSION'] !~ /^4.2/
23
+ gem 'sass-rails', "< 5.0"
24
+ else
25
+ gem 'responders', "~> 2.0"
26
+ gem 'sass-rails', ">= 5.0"
27
+ end
28
+
29
+ extra_file = File.expand_path("../spec/test_app_templates/Gemfile.extra", __FILE__)
30
+ instance_eval File.read(extra_file)
31
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,15 @@
1
+ ##########################################################################
2
+ # Copyright 2014 Data Curation Experts
3
+ # Additional copyright may be held by others, as reflected in the commit log
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # Curation Concern
2
+ [![Build Status](https://travis-ci.org/projecthydra-labs/curation_concerns.svg?branch=master)](https://travis-ci.org/projecthydra-labs/curation_concerns)
3
+ [![Coverage Status](https://coveralls.io/repos/projecthydra-labs/curation_concerns/badge.svg?branch=master)](https://coveralls.io/r/projecthydra-labs/curation_concerns?branch=master)
4
+
5
+ A Hydra-based Rails Engine that extends an application, adding the ability to Create, Read, Update and Destroy (CRUD) CurationConcern objects (a.k.a. "Works") and provides a generator for defining new CurationConcern types with custom workflow, views, access controls, etc.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'curation_concerns'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Then:
18
+
19
+ $ rails generate curation_concerns:install
20
+ $ rake db:migrate
21
+
22
+ # Usage
23
+
24
+ ## Generator
25
+
26
+ To generate a new CurationConcern type, use the `curation_concerns:work` rails generator. Follow the Usage instructions provided on the command line when you run:
27
+
28
+ rails generate curation_concerns:work
29
+
30
+ ## Virus Detection
31
+
32
+ To turn on virus detection, install clamav on your system and add the `clamav` gem to your Gemfile
33
+
34
+ gem 'clamav'
35
+
36
+ ## Testing
37
+
38
+ If you are modifying the curation_concerns gem and want to run the test suite, follow these steps to set up the test environment.
39
+
40
+ ```
41
+ $ rake engine_cart:generate
42
+ $ rake jetty:clean
43
+ $ rake curation_concerns:jetty:config
44
+ $ rake jetty:start
45
+ $ rake spec
46
+ ```
data/RELEASING.md ADDED
@@ -0,0 +1,2 @@
1
+ * Bump version number in VERSION
2
+ * Release the gem to rubygems.org: rake all:release
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ require "bundler/gem_tasks"
2
+ require 'bundler/setup'
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ Dir.glob('tasks/*.rake').each { |r| import r }
7
+
8
+ require 'jettywrapper'
9
+ require 'engine_cart/rake_task'
10
+ Jettywrapper.hydra_jetty_version = "v8.3.1"
11
+
12
+ # This makes it possible to run curation_concerns:jetty:config from here.
13
+ import 'curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake'
14
+
15
+ task ci: ['engine_cart:generate', 'jetty:clean'] do
16
+ jetty_params = Jettywrapper.load_config
17
+ jetty_params[:startup_wait]= 90
18
+
19
+ Jettywrapper.wrap(jetty_params) do
20
+ # run the tests
21
+ Rake::Task["spec"].invoke
22
+ end
23
+ end
24
+
25
+ task clean: 'engine_cart:clean'
26
+ task default: :ci
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
Binary file
Binary file
File without changes
File without changes
@@ -0,0 +1,18 @@
1
+ //= require jquery-ui-1.9.2/jquery.ui.widget
2
+ //= require jquery-ui-1.9.2/jquery.ui.core
3
+ //= require jquery-ui-1.9.2/jquery.ui.menu
4
+ //= require jquery-ui-1.9.2/jquery.ui.position
5
+ //= require jquery-ui-1.9.2/jquery.ui.autocomplete
6
+ //
7
+ //= require blacklight/blacklight
8
+ //
9
+ //= require bootstrap/dropdown
10
+ //= require bootstrap/button
11
+ //= require bootstrap/collapse
12
+ //= require bootstrap/tooltip
13
+ //= require bootstrap/popover
14
+ //= require bootstrap/tab
15
+ //
16
+ //= require handlebars
17
+ //= require jquery.tokeninput
18
+ //= require curation_concerns/curation_concerns
@@ -0,0 +1,7 @@
1
+ $(document).on('page:change', function() {
2
+ $('#browse').browseEverything()
3
+ .done(function(data) {
4
+ $('#status').html(data.length.toString() + " items selected")
5
+ })
6
+ .cancel(function() { window.alert('Canceled!') });
7
+ });
@@ -0,0 +1,28 @@
1
+ //= require hydra-editor/hydra-editor
2
+ //= require curation_concerns/help_modal
3
+ //= require curation_concerns/select_works
4
+ //= require curation_concerns/link_users
5
+ //= require curation_concerns/link_groups
6
+ //= require curation_concerns/proxy_rights
7
+ //= require curation_concerns/facet_mine
8
+ //= require curation_concerns/proxy_submission
9
+ //= require curation_concerns/embargoes
10
+
11
+
12
+ // Initialize plugins and Bootstrap dropdowns on jQuery's ready event as well as
13
+ // Turbolinks's page change event.
14
+ Blacklight.onLoad(function() {
15
+ $('abbr').tooltip();
16
+ $('.link-users').linkUsers();
17
+ $('.link-groups').linkGroups();
18
+ $('.proxy-rights').proxyRights();
19
+
20
+
21
+ // $('#set-access-controls .datepicker').datepicker({
22
+ // format: 'yyyy-mm-dd',
23
+ // startDate: '+1d'
24
+ // });
25
+
26
+ $("[data-toggle='dropdown']").dropdown();
27
+
28
+ });
@@ -0,0 +1,17 @@
1
+ Blacklight.onLoad(function () {
2
+ $("[data-behavior=\"extra\"]").hide()
3
+ function reveal(id) {
4
+ $("[data-behavior=\"extra\"][data-id=\"" + id + "\"]").show();
5
+ }
6
+
7
+ function hide(id) {
8
+ $("[data-behavior=\"extra\"][data-id=\"" + id + "\"]").hide();
9
+ }
10
+ $(".batch_document_selector").click(function() {
11
+ if (this.checked) {
12
+ reveal($(this).attr('value'));
13
+ } else {
14
+ hide($(this).attr('value'));
15
+ }
16
+ })
17
+ });
@@ -0,0 +1,22 @@
1
+ //= require blacklight/core
2
+ (function($) {
3
+ var facet_mine_behavior = function() {
4
+ $('#aux-search-submit-header').hide();
5
+
6
+ $('input[name="works"]').on("change", function(e) {
7
+ $(this).closest('form').submit();
8
+ });
9
+
10
+ };
11
+
12
+
13
+ // TODO when we upgrade blacklight to 4.4+, we can use Blacklight.onLoad()
14
+ if (typeof Turbolinks !== "undefined") {
15
+ $(document).on('page:load', function() {
16
+ facet_mine_behavior();
17
+ });
18
+ }
19
+ $(document).ready(function() {
20
+ facet_mine_behavior();
21
+ });
22
+ })(jQuery);
@@ -0,0 +1,36 @@
1
+ $(function(){
2
+ var $window = $(window),
3
+ $modal = $('#ajax-modal'),
4
+ resolution = screen.width + 'x' + screen.height,
5
+ viewport = $window.width() + 'x' + $window.height(),
6
+ current_url = document.location.href;
7
+
8
+ function populateHelpForm(){
9
+ // Removing the "NOT" portion
10
+ $('#help-js strong').remove();
11
+ $('#help_request_javascript_enabled').val(1);
12
+
13
+ $('#help-resolution').text(resolution);
14
+ $('#help_request_resolution').val(resolution);
15
+
16
+ $('#help-viewport').text(viewport);
17
+ $('#help_request_view_port').val(viewport);
18
+
19
+ $('#help-url').text(current_url);
20
+ $('#help_request_current_url').val(current_url);
21
+ }
22
+ populateHelpForm();
23
+
24
+ $('.request-help').on('click', function(event){
25
+ event.preventDefault();
26
+
27
+ $('body').modalmanager('loading');
28
+
29
+ setTimeout(function(){
30
+ $modal.load('/help_requests/new #new_help_request', function(){
31
+ $modal.modal();
32
+ populateHelpForm();
33
+ });
34
+ }, 1000);
35
+ });
36
+ });
@@ -0,0 +1,123 @@
1
+ (($, window, document) ->
2
+ $this = undefined
3
+
4
+ # default settings
5
+ _settings =
6
+ default: 'cool!'
7
+
8
+ _remover = $("<button class=\"btn btn-danger remove\"><i class=\"icon-white glyphicon-minus\"></i><span>Remove</span></button>")
9
+ _adder = $("<button class=\"btn btn-success add\"><i class=\"icon-white glyphicon-plus\"></i><span>Add</span></button>")
10
+
11
+
12
+ # This is your public API (no leading underscore, see?)
13
+ # All public methods must return $this so your plugin is chainable.
14
+ methods =
15
+ init: (options) ->
16
+ $this = $(@)
17
+ # The settings object is available under its name: _settings. Let's
18
+ # expand it with any custom options the user provided.
19
+ $.extend _settings, (options or {})
20
+ # Do anything that actually inits your plugin, if needed, right now!
21
+ # An important thing to keep in mind, is that jQuery plugins should be
22
+ # built so that one can apply them to more than one element, like so:
23
+ #
24
+ # $('.matching-elements, #another-one').foobar()
25
+ #
26
+
27
+ #This code sets up all the "Add" and "Remove" buttons for the autocomplete fields.
28
+
29
+ #For each autocomplete set on the page, add the "Add" and "Remove" buttons
30
+ $this.each (index, el) ->
31
+ $('.autocomplete-groups').each (index, el) ->
32
+ _internals.autocompleteGroups(el)
33
+
34
+ #Make sure these buttons have unique id's
35
+ _adder.id = "adder_" + index
36
+ _remover.id = "remover_" + index
37
+
38
+ #Add the "Remove" button
39
+ $('.field-wrapper:not(:last-child) .field-controls', this).append(_remover.clone())
40
+
41
+ #Add the "Add" button
42
+ $('.field-controls:last', this).append(_adder.clone())
43
+
44
+ #Bind the buttons to onClick events
45
+ $(el).on 'click', 'button.add', (e) ->
46
+ _internals.addToList(this)
47
+ $(el).on 'click', 'button.remove', (e) ->
48
+ _internals.removeFromList(this)
49
+
50
+ return $this
51
+
52
+ # This method is often overlooked.
53
+ destroy: ->
54
+ # Do anything to clean it up (nullify references, unbind events…).
55
+ return $this
56
+
57
+ _internals =
58
+ addToList: (el) ->
59
+ $activeControls = $(el).closest('.field-controls')
60
+ $listing = $activeControls.closest('.listing')
61
+ $('.add', $activeControls).remove()
62
+ $removeControl = _remover.clone()
63
+ $activeControls.prepend($removeControl)
64
+ _internals.newRow($listing, el)
65
+ false
66
+
67
+ newRow: ($listing, el) ->
68
+ $listing.append _internals.newListItem($('li', $listing).size(), $listing, el)
69
+ _internals.autocompleteGroups($('.autocomplete-groups:last', $listing))
70
+
71
+
72
+ removeFromList: (el) ->
73
+ $currentGroup = $(el).closest('li')
74
+ $listing = $currentGroup.closest('.listing')
75
+ $currentGroup.hide()
76
+ # set the destroy flag
77
+ $('input:not([value])', $currentGroup).val('true')
78
+ false
79
+
80
+ newListItem: (index, el) ->
81
+ ## We have multiple places in a view where we need these autocomplete fields
82
+ ## (Work edit view for example), so we don't want to use the first #entry-template.
83
+ ## Using .closest isn't working, but this seems to for now.
84
+ source = $(el).parent().children().html()
85
+ template = Handlebars.compile(source)
86
+ template({index: index})
87
+
88
+ addExistingGroup: ($listItem, value, label) ->
89
+ source = $listItem.parent().prev().html()
90
+ template = Handlebars.compile(source)
91
+ $list = $listItem.closest('ul')
92
+ $('input[required]', $list).removeAttr('required')
93
+ $listItem.replaceWith template({index: $('li', $list).index($listItem), value: value, label: label})
94
+ _internals.newRow($list)
95
+
96
+ autocompleteGroups: (el) ->
97
+ $targetElement = $(el)
98
+ $targetElement.autocomplete
99
+ source: (request, response) ->
100
+ $targetElement.data('url')
101
+ $.getJSON $targetElement.data('url'), { q: request.term + "*" }, ( data, status, xhr ) ->
102
+ matches = []
103
+ $.each data.response.docs, (idx, val) ->
104
+ matches.push {label: val['title_tesim'][0], value: val['id']}
105
+ response( matches )
106
+ minLength: 2
107
+ focus: ( event, ui ) ->
108
+ $targetElement.val(ui.item.label)
109
+ event.preventDefault()
110
+ select: ( event, ui ) ->
111
+ _internals.addExistingGroup($targetElement.closest('li'), ui.item.value, ui.item.label)
112
+ $targetElement.val('')
113
+ event.preventDefault()
114
+
115
+
116
+ $.fn.linkGroups = (method) ->
117
+ if methods[method]
118
+ methods[method].apply this, Array::slice.call(arguments, 1)
119
+ else if typeof method is "object" or not method
120
+ methods.init.apply this, arguments
121
+ else
122
+ $.error "Method " + method + " does not exist on jquery.linkGroups"
123
+ ) jQuery, window, document
@@ -0,0 +1,126 @@
1
+ (($, window, document) ->
2
+ $this = undefined
3
+
4
+ # default settings
5
+ _settings =
6
+ default: 'cool!'
7
+
8
+ _remover = $("<button class=\"btn btn-danger remove\"><i class=\"icon-white icon-minus\"></i><span>Remove</span></button>")
9
+ _adder = $("<button class=\"btn btn-success add\"><i class=\"icon-white icon-plus\"></i><span>Add</span></button>")
10
+
11
+
12
+ # This is your public API (no leading underscore, see?)
13
+ # All public methods must return $this so your plugin is chainable.
14
+ methods =
15
+ init: (options) ->
16
+ $this = $(@)
17
+ # The settings object is available under its name: _settings. Let's
18
+ # expand it with any custom options the user provided.
19
+ $.extend _settings, (options or {})
20
+ # Do anything that actually inits your plugin, if needed, right now!
21
+ # An important thing to keep in mind, is that jQuery plugins should be
22
+ # built so that one can apply them to more than one element, like so:
23
+ #
24
+ # $('.matching-elements, #another-one').foobar()
25
+ #
26
+
27
+ #This code sets up all the "Add" and "Remove" buttons for the autocomplete fields.
28
+
29
+ #For each autocomplete set on the page, add the "Add" and "Remove" buttons
30
+ $this.each (index, el) ->
31
+ $('.autocomplete-users').each (index, el) ->
32
+ _internals.autocompleteUsers(el)
33
+
34
+ #Make sure these buttons have unique id's
35
+ _adder.id = "adder_" + index
36
+ _remover.id = "remover_" + index
37
+
38
+ #Add the "Remove" button
39
+ $('.field-wrapper:not(:last-child) .field-controls', this).append(_remover.clone())
40
+
41
+ #Add the "Add" button
42
+ $('.field-controls:last', this).append(_adder.clone())
43
+
44
+ #Bind the buttons to onClick events
45
+ $(el).on 'click', 'button.add', (e) ->
46
+ _internals.addToList(this)
47
+ $(el).on 'click', 'button.remove', (e) ->
48
+ _internals.removeFromList(this)
49
+
50
+ return $this
51
+
52
+ # This method is often overlooked.
53
+ destroy: ->
54
+ # Do anything to clean it up (nullify references, unbind events…).
55
+ return $this
56
+
57
+ _internals =
58
+ addToList: (el) ->
59
+ $activeControls = $(el).closest('.field-controls')
60
+ $listing = $activeControls.closest('.listing')
61
+ $('.add', $activeControls).remove()
62
+ $removeControl = _remover.clone()
63
+ $activeControls.prepend($removeControl)
64
+ _internals.newRow($listing, el)
65
+ false
66
+
67
+ newRow: ($listing, el) ->
68
+ $listing.append _internals.newListItem($('li', $listing).size(), $listing, el)
69
+ _internals.autocompleteUsers($('.autocomplete-users:last', $listing))
70
+
71
+
72
+ removeFromList: (el) ->
73
+ $currentUser = $(el).closest('li')
74
+ $listing = $currentUser.closest('.listing')
75
+ $currentUser.hide()
76
+ # set the destroy flag
77
+ $('input:not([value])', $currentUser).val('true')
78
+ false
79
+
80
+ newListItem: (index, el) ->
81
+ ## We have multiple places in a view where we need these autocomplete fields
82
+ ## (Work edit view for example), so we don't want to use the first #entry-template.
83
+ ## Using .closest isn't working, but this seems to for now.
84
+ source = $(el).parent().children().html()
85
+ template = Handlebars.compile(source)
86
+ template({index: index})
87
+
88
+ addExistingUser: ($listItem, value, label) ->
89
+ ## We have multiple places in a view where we need these autocomplete fields
90
+ ## (Work edit view for example), so we don't want to use the first #existing-user-template.
91
+ ## Using .closest isn't working, but this seems to for now.
92
+ source = $listItem.parent().prev().html()
93
+ template = Handlebars.compile(source)
94
+ $list = $listItem.closest('ul')
95
+ $('input[required]', $list).removeAttr('required')
96
+ $listItem.replaceWith template({index: $('li', $list).index($listItem), value: value, label: label})
97
+ _internals.newRow($list)
98
+
99
+ autocompleteUsers: (el) ->
100
+ $targetElement = $(el)
101
+ $targetElement.autocomplete
102
+ source: (request, response) ->
103
+ $targetElement.data('url')
104
+ $.getJSON $targetElement.data('url'), { q: request.term + "*" }, ( data, status, xhr ) ->
105
+ matches = []
106
+ $.each data.response.docs, (idx, val) ->
107
+ matches.push {label: val['name_tesim'][0], value: val['id']}
108
+ response( matches )
109
+ minLength: 2
110
+ focus: ( event, ui ) ->
111
+ $targetElement.val(ui.item.label)
112
+ event.preventDefault()
113
+ select: ( event, ui ) ->
114
+ _internals.addExistingUser($targetElement.closest('li'), ui.item.value, ui.item.label)
115
+ $targetElement.val('')
116
+ event.preventDefault()
117
+
118
+
119
+ $.fn.linkUsers = (method) ->
120
+ if methods[method]
121
+ methods[method].apply this, Array::slice.call(arguments, 1)
122
+ else if typeof method is "object" or not method
123
+ methods.init.apply this, arguments
124
+ else
125
+ $.error "Method " + method + " does not exist on jquery.linkUsers"
126
+ ) jQuery, window, document
@@ -0,0 +1,95 @@
1
+ (($, window, document) ->
2
+ $this = undefined
3
+
4
+ # default settings
5
+ _settings =
6
+ default: 'cool!'
7
+
8
+
9
+ # This is your public API (no leading underscore, see?)
10
+ # All public methods must return $this so your plugin is chainable.
11
+ methods =
12
+ init: (options) ->
13
+ $this = $(@)
14
+ # The settings object is available under its name: _settings. Let's
15
+ # expand it with any custom options the user provided.
16
+ $.extend _settings, (options or {})
17
+ # Do anything that actually inits your plugin, if needed, right now!
18
+ # An important thing to keep in mind, is that jQuery plugins should be
19
+ # built so that one can apply them to more than one element, like so:
20
+ #
21
+ # $('.matching-elements, #another-one').foobar()
22
+ #
23
+ $this.each (index, el) ->
24
+ $('#user').each (index, el) ->
25
+ _internals.autocompleteUsers(el)
26
+
27
+ $(el).on 'click', '.remove-proxy-button', _internals.removeContributor
28
+
29
+ return $this
30
+
31
+ # This method is often overlooked.
32
+ destroy: ->
33
+ # Do anything to clean it up (nullify references, unbind events…).
34
+ return $this
35
+
36
+ _internals =
37
+ addContributor: (name, id) ->
38
+ source = $("#tmpl-proxy-row").html()
39
+ template = Handlebars.compile(source)
40
+ row = template({name: name, id: id})
41
+ $('#authorizedProxies tbody', $this).append(row)
42
+
43
+ # if (settings.afterAdd) {
44
+ # settings.afterAdd(this, cloneElem)
45
+ # }
46
+
47
+ $.ajax({
48
+ type: "POST",
49
+ url: 'depositors',
50
+ dataType: 'json',
51
+ data: {grantee_id: id}
52
+ })
53
+
54
+ false
55
+
56
+ removeContributor: ->
57
+ # remove the row
58
+ $.ajax({
59
+ url: $(this).closest('a').prop('href'),
60
+ type: "post",
61
+ dataType: "json",
62
+ data: {"_method":"delete"}
63
+ })
64
+ $(this).closest('tr').remove()
65
+ false
66
+
67
+ autocompleteUsers: (el) ->
68
+ # Remove the choice from the search widget and put it in the table.
69
+ $targetElement = $(el)
70
+ $targetElement.autocomplete
71
+ source: (request, response) ->
72
+ $targetElement.data('url')
73
+ $.getJSON $targetElement.data('url'), { q: request.term, user: true}, ( data, status, xhr ) ->
74
+ matches = []
75
+ $.each data.response.docs, (idx, val) ->
76
+ matches.push {label: val['name_tesim'][0], value: val['id']}
77
+ response( matches )
78
+ minLength: 2
79
+ focus: ( event, ui ) ->
80
+ $targetElement.val(ui.item.label)
81
+ event.preventDefault()
82
+ select: ( event, ui ) ->
83
+ _internals.addContributor(ui.item.label, ui.item.value)
84
+ $targetElement.val('')
85
+ event.preventDefault()
86
+
87
+
88
+ $.fn.proxyRights = (method) ->
89
+ if methods[method]
90
+ methods[method].apply this, Array::slice.call(arguments, 1)
91
+ else if typeof method is "object" or not method
92
+ methods.init.apply this, arguments
93
+ else
94
+ $.error "Method " + method + " does not exist on jquery.proxyRights"
95
+ ) jQuery, window, document