worthwhile 0.0.1.alpha → 0.0.1

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 (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +1 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +7 -11
  6. data/README.md +8 -12
  7. data/Rakefile +17 -2
  8. data/app/actors/concerns/worthwhile/manages_embargoes_actor.rb +79 -0
  9. data/app/actors/curation_concern/base_actor.rb +68 -0
  10. data/app/actors/curation_concern/generic_file_actor.rb +40 -0
  11. data/app/actors/curation_concern/generic_work_actor.rb +92 -0
  12. data/app/actors/curation_concern/linked_resource_actor.rb +4 -0
  13. data/app/assets/images/default.png +0 -0
  14. data/app/assets/images/nope.png +0 -0
  15. data/app/assets/javascripts/.gitkeep +0 -0
  16. data/app/assets/javascripts/modernizr.js +3 -0
  17. data/app/assets/javascripts/worthwhile/.gitkeep +0 -0
  18. data/app/assets/javascripts/worthwhile/accept_contributor_agreement.js +15 -0
  19. data/app/assets/javascripts/worthwhile/application.js +18 -0
  20. data/app/assets/javascripts/worthwhile/browse_everything_implement.js +7 -0
  21. data/app/assets/javascripts/worthwhile/embargoes.js +17 -0
  22. data/app/assets/javascripts/worthwhile/facet_mine.js +22 -0
  23. data/app/assets/javascripts/worthwhile/help_modal.js +36 -0
  24. data/app/assets/javascripts/worthwhile/link_groups.js.coffee +123 -0
  25. data/app/assets/javascripts/worthwhile/link_users.js.coffee +126 -0
  26. data/app/assets/javascripts/worthwhile/manage_repeating_fields.js +74 -0
  27. data/app/assets/javascripts/worthwhile/proxy_rights.js.coffee +95 -0
  28. data/app/assets/javascripts/worthwhile/proxy_submission.js +23 -0
  29. data/app/assets/javascripts/worthwhile/select_works.js.coffee +20 -0
  30. data/app/assets/javascripts/worthwhile/worthwhile.js +45 -0
  31. data/app/assets/stylesheets/worthwhile.css.scss +23 -0
  32. data/app/assets/stylesheets/worthwhile/_global-variables.css.scss +5 -0
  33. data/app/assets/stylesheets/worthwhile/_modules.css.scss +14 -0
  34. data/app/assets/stylesheets/worthwhile/_positioning.css.scss +138 -0
  35. data/app/assets/stylesheets/worthwhile/_theme.css.scss +46 -0
  36. data/app/assets/stylesheets/worthwhile/_typography.css.scss +142 -0
  37. data/app/assets/stylesheets/worthwhile/_variables_bootstrap.css.scss +7 -0
  38. data/app/assets/stylesheets/worthwhile/_worthwhile.css.scss +7 -0
  39. data/app/assets/stylesheets/worthwhile/downloads.css.scss +3 -0
  40. data/app/assets/stylesheets/worthwhile/help_requests.css.scss +3 -0
  41. data/app/assets/stylesheets/worthwhile/modules/accessibility.css.scss +50 -0
  42. data/app/assets/stylesheets/worthwhile/modules/accordion.css.scss +33 -0
  43. data/app/assets/stylesheets/worthwhile/modules/attributes.css.scss +26 -0
  44. data/app/assets/stylesheets/worthwhile/modules/classify_work.css.scss +100 -0
  45. data/app/assets/stylesheets/worthwhile/modules/collections.css.scss +42 -0
  46. data/app/assets/stylesheets/worthwhile/modules/embargoes.css.scss +15 -0
  47. data/app/assets/stylesheets/worthwhile/modules/emphatic_action_area.css.scss +14 -0
  48. data/app/assets/stylesheets/worthwhile/modules/forms.css.scss +116 -0
  49. data/app/assets/stylesheets/worthwhile/modules/multi_value_fields.css.scss +52 -0
  50. data/app/assets/stylesheets/worthwhile/modules/pagination.css.scss +4 -0
  51. data/app/assets/stylesheets/worthwhile/modules/search_results.css.scss +55 -0
  52. data/app/assets/stylesheets/worthwhile/modules/site_actions.css.scss +53 -0
  53. data/app/assets/stylesheets/worthwhile/modules/site_search.css.scss +46 -0
  54. data/app/controllers/catalog_controller.rb +3 -0
  55. data/app/controllers/collections_controller.rb +59 -0
  56. data/app/controllers/concerns/worthwhile/application_controller_behavior.rb +23 -0
  57. data/app/controllers/concerns/worthwhile/catalog_controller.rb +347 -0
  58. data/app/controllers/concerns/worthwhile/curation_concern_controller.rb +131 -0
  59. data/app/controllers/concerns/worthwhile/files_controller.rb +149 -0
  60. data/app/controllers/concerns/worthwhile/manages_embargoes.rb +22 -0
  61. data/app/controllers/concerns/worthwhile/parent_container.rb +31 -0
  62. data/app/controllers/concerns/worthwhile/themed_layout_controller.rb +31 -0
  63. data/app/controllers/concerns/worthwhile/without_namespace.rb +15 -0
  64. data/app/controllers/curation_concern/generic_files_controller.rb +6 -0
  65. data/app/controllers/curation_concern/generic_works_controller.rb +6 -0
  66. data/app/controllers/curation_concern/linked_resources_controller.rb +68 -0
  67. data/app/controllers/curation_concern/permissions_controller.rb +19 -0
  68. data/app/controllers/downloads_controller.rb +4 -0
  69. data/app/controllers/embargoes_controller.rb +44 -0
  70. data/app/controllers/leases_controller.rb +34 -0
  71. data/app/controllers/registrations_controller.rb +20 -0
  72. data/app/controllers/sessions_controller.rb +4 -0
  73. data/app/controllers/worthwhile/application_controller.rb +7 -0
  74. data/app/controllers/worthwhile/classify_concerns_controller.rb +35 -0
  75. data/app/datastreams/generic_work_metadata.rb +3 -0
  76. data/app/datastreams/worthwhile/generic_work_rdf_properties.rb +57 -0
  77. data/app/datastreams/worthwhile/properties_datastream.rb +28 -0
  78. data/app/helpers/curate/collections_helper.rb +133 -0
  79. data/app/helpers/worthwhile/ability_helper.rb +46 -0
  80. data/app/helpers/worthwhile/attribute_helper.rb +67 -0
  81. data/app/helpers/worthwhile/catalog_helper.rb +38 -0
  82. data/app/helpers/worthwhile/collections_helper.rb +19 -0
  83. data/app/helpers/worthwhile/embargo_helper.rb +17 -0
  84. data/app/helpers/worthwhile/generic_file_helper.rb +19 -0
  85. data/app/helpers/worthwhile/lease_helper.rb +18 -0
  86. data/app/helpers/worthwhile/main_app_helpers.rb +14 -0
  87. data/app/helpers/worthwhile/render_constraints_helper.rb +42 -0
  88. data/app/helpers/worthwhile/search_paths_helper.rb +13 -0
  89. data/app/helpers/worthwhile/thumbnail_helper.rb +11 -0
  90. data/app/helpers/worthwhile/title_helper.rb +23 -0
  91. data/app/helpers/worthwhile/url_helper.rb +16 -0
  92. data/app/inputs/multi_value_input.rb +72 -0
  93. data/app/models/collection.rb +15 -0
  94. data/app/models/concerns/curation_concern/collection_model.rb +62 -0
  95. data/app/models/concerns/curation_concern/curatable.rb +77 -0
  96. data/app/models/concerns/curation_concern/has_representative.rb +14 -0
  97. data/app/models/concerns/curation_concern/human_readable_type.rb +23 -0
  98. data/app/models/concerns/curation_concern/with_basic_metadata.rb +49 -0
  99. data/app/models/concerns/curation_concern/with_editors.rb +44 -0
  100. data/app/models/concerns/curation_concern/with_generic_files.rb +23 -0
  101. data/app/models/concerns/curation_concern/with_linked_resources.rb +21 -0
  102. data/app/models/concerns/curation_concern/work.rb +24 -0
  103. data/app/models/concerns/worthwhile/ability.rb +34 -0
  104. data/app/models/concerns/worthwhile/generic_file/versioned_content.rb +18 -0
  105. data/app/models/concerns/worthwhile/generic_file_base.rb +64 -0
  106. data/app/models/concerns/worthwhile/solr_document_behavior.rb +140 -0
  107. data/app/models/generic_work.rb +5 -0
  108. data/app/models/worthwhile/classify_concern.rb +47 -0
  109. data/app/models/worthwhile/content_version.rb +23 -0
  110. data/app/models/worthwhile/contributor_agreement.rb +23 -0
  111. data/app/models/worthwhile/generic_file.rb +5 -0
  112. data/app/models/worthwhile/linked_resource.rb +41 -0
  113. data/app/models/worthwhile/quick_classification_query.rb +31 -0
  114. data/app/services/worthwhile/curation_concern.rb +21 -0
  115. data/app/services/worthwhile/embargo_service.rb +26 -0
  116. data/app/services/worthwhile/lease_service.rb +23 -0
  117. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  118. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  119. data/app/views/catalog/_document.html.erb +3 -0
  120. data/app/views/catalog/_document_list.html.erb +5 -0
  121. data/app/views/catalog/_home_text.html.erb +8 -0
  122. data/app/views/catalog/_index_default.html.erb +17 -0
  123. data/app/views/catalog/_index_header_list_default.html.erb +17 -0
  124. data/app/views/catalog/_navbar.html.erb +12 -0
  125. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  126. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  127. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  128. data/app/views/catalog/index.html.erb +48 -0
  129. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  130. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  131. data/app/views/collections/_collection.html.erb +1 -0
  132. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  133. data/app/views/collections/_document_list.html.erb +7 -0
  134. data/app/views/collections/_edit_actions.html.erb +5 -0
  135. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  136. data/app/views/collections/_form.html.erb +26 -0
  137. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  138. data/app/views/collections/_form_permission.html.erb +36 -0
  139. data/app/views/collections/_form_required_information.html.erb +11 -0
  140. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  141. data/app/views/collections/_media_display.html.erb +1 -0
  142. data/app/views/collections/_paginate.html.erb +6 -0
  143. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  144. data/app/views/collections/_show_actions.html.erb +8 -0
  145. data/app/views/collections/_show_descriptions.html.erb +10 -0
  146. data/app/views/collections/_show_fields.html.erb +0 -0
  147. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  148. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  149. data/app/views/collections/_view_type_group.html.erb +13 -0
  150. data/app/views/collections/edit.html.erb +22 -0
  151. data/app/views/collections/new.html.erb +15 -0
  152. data/app/views/collections/show.html.erb +24 -0
  153. data/app/views/curate/collections/_add_to_collection_modal.html.erb +15 -0
  154. data/app/views/curate/collections/_button_remove_from_collection.html.erb +6 -0
  155. data/app/views/curate/collections/_form_to_add_member.html.erb +27 -0
  156. data/app/views/curate/collections/add_member_form.html.erb +6 -0
  157. data/app/views/curation_concern/base/_attributes.html.erb +25 -0
  158. data/app/views/curation_concern/base/_collections.html.erb +26 -0
  159. data/app/views/curation_concern/base/_form.html.erb +27 -0
  160. data/app/views/curation_concern/base/_form_additional_information.html.erb +9 -0
  161. data/app/views/curation_concern/base/_form_content_license.html.erb +16 -0
  162. data/app/views/curation_concern/base/_form_contributor_agreement.html.erb +29 -0
  163. data/app/views/curation_concern/base/_form_descriptive_fields.erb +23 -0
  164. data/app/views/curation_concern/base/_form_files_and_links.html.erb +29 -0
  165. data/app/views/curation_concern/base/_form_permission.html.erb +52 -0
  166. data/app/views/curation_concern/base/_form_permission_embargo.html.erb +6 -0
  167. data/app/views/curation_concern/base/_form_permission_lease.html.erb +6 -0
  168. data/app/views/curation_concern/base/_form_permission_under_embargo.html.erb +16 -0
  169. data/app/views/curation_concern/base/_form_permission_under_lease.html.erb +18 -0
  170. data/app/views/curation_concern/base/_form_representative_image.html.erb +13 -0
  171. data/app/views/curation_concern/base/_form_required_information.html.erb +11 -0
  172. data/app/views/curation_concern/base/_form_supplementary_fields.html.erb +15 -0
  173. data/app/views/curation_concern/base/_legally_binding_text.html.erb +33 -0
  174. data/app/views/curation_concern/base/_related_files.html.erb +24 -0
  175. data/app/views/curation_concern/base/_related_resources.html.erb +40 -0
  176. data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
  177. data/app/views/curation_concern/base/edit.html.erb +15 -0
  178. data/app/views/curation_concern/base/new.html.erb +14 -0
  179. data/app/views/curation_concern/base/show.html.erb +32 -0
  180. data/app/views/curation_concern/base/unauthorized.html.erb +3 -0
  181. data/app/views/curation_concern/generic_files/_form.html.erb +35 -0
  182. data/app/views/curation_concern/generic_files/_media_display.html.erb +20 -0
  183. data/app/views/curation_concern/generic_files/edit.html.erb +5 -0
  184. data/app/views/curation_concern/generic_files/show.html.erb +15 -0
  185. data/app/views/curation_concern/generic_works/_generic_work.html.erb +3 -0
  186. data/app/views/curation_concern/linked_resources/_form.html.erb +11 -0
  187. data/app/views/curation_concern/linked_resources/edit.html.erb +5 -0
  188. data/app/views/curation_concern/linked_resources/new.html.erb +5 -0
  189. data/app/views/curation_concern/permissions/confirm.html.erb +13 -0
  190. data/app/views/curation_concern/worthwhile/generic_files/_actions.html.erb +16 -0
  191. data/app/views/curation_concern/worthwhile/generic_files/_generic_file.html.erb +12 -0
  192. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  193. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  194. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  195. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  196. data/app/views/embargoes/edit.html.erb +43 -0
  197. data/app/views/embargoes/index.html.erb +18 -0
  198. data/app/views/layouts/boilerplate.html.erb +22 -0
  199. data/app/views/layouts/common_objects.html.erb +36 -0
  200. data/app/views/layouts/curate_nd.html.erb +33 -0
  201. data/app/views/layouts/curate_nd/1_column.html.erb +22 -0
  202. data/app/views/layouts/curate_nd/2_column.html.erb +26 -0
  203. data/app/views/layouts/curate_nd/catalog.html.erb +38 -0
  204. data/app/views/layouts/curate_nd/dashboard.html.erb +22 -0
  205. data/app/views/leases/_lease_history.html.erb +7 -0
  206. data/app/views/leases/_list_active_leases.html.erb +16 -0
  207. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  208. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  209. data/app/views/leases/edit.html.erb +43 -0
  210. data/app/views/leases/index.html.erb +18 -0
  211. data/app/views/shared/_add_content.html.erb +32 -0
  212. data/app/views/shared/_brand_bar.html.erb +10 -0
  213. data/app/views/shared/_flash_message.html.erb +17 -0
  214. data/app/views/shared/_footer.html.erb +10 -0
  215. data/app/views/shared/_ga.html.erb +6 -0
  216. data/app/views/shared/_header.html.erb +12 -0
  217. data/app/views/shared/_my_actions.html.erb +21 -0
  218. data/app/views/shared/_site_actions.html.erb +7 -0
  219. data/app/views/shared/_site_search.html.erb +12 -0
  220. data/app/views/shared/_title_bar.html.erb +16 -0
  221. data/app/views/worthwhile/classify_concerns/new.html.erb +27 -0
  222. data/app/workers/visibility_copy_worker.rb +29 -0
  223. data/config/initializers/simple_form.rb +31 -0
  224. data/config/locales/sufia.en.yml +26 -0
  225. data/config/locales/worthwhile.en.yml +68 -0
  226. data/config/routes.rb +4 -0
  227. data/lib/generators/worthwhile/install_generator.rb +74 -0
  228. data/lib/generators/worthwhile/templates/worthwhile.css.scss +3 -0
  229. data/lib/generators/worthwhile/templates/worthwhile.js +1 -0
  230. data/lib/generators/worthwhile/templates/worthwhile_config.rb +3 -0
  231. data/lib/generators/worthwhile/templates/worthwhile_helper.rb +4 -0
  232. data/lib/worthwhile.rb +3 -1
  233. data/lib/worthwhile/configuration.rb +74 -0
  234. data/lib/worthwhile/controller_resource.rb +10 -0
  235. data/lib/worthwhile/engine.rb +20 -0
  236. data/lib/worthwhile/rails/routes.rb +78 -0
  237. data/lib/worthwhile/spec_support.rb +10 -0
  238. data/lib/worthwhile/version.rb +1 -1
  239. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  240. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  241. data/spec/actors/curation_concern/generic_work_actor_spec.rb +215 -0
  242. data/spec/actors/curation_concern/linked_resource_actor_spec.rb +36 -0
  243. data/spec/actors/worthwile/manages_embargoes_actor_spec.rb +95 -0
  244. data/spec/controllers/catalog_controller_spec.rb +114 -0
  245. data/spec/controllers/collections_controller_spec.rb +216 -0
  246. data/spec/controllers/curation_concern/generic_files_controller_spec.rb +258 -0
  247. data/spec/controllers/curation_concern/generic_works_controller_spec.rb +171 -0
  248. data/spec/controllers/curation_concern/linked_resources_controller_spec.rb +123 -0
  249. data/spec/controllers/curation_concern/permissions_controller_spec.rb +29 -0
  250. data/spec/controllers/downloads_controller_spec.rb +53 -0
  251. data/spec/controllers/embargoes_controller_spec.rb +107 -0
  252. data/spec/controllers/leases_controller_spec.rb +95 -0
  253. data/spec/controllers/worthwhile/classify_concerns_controller_spec.rb +35 -0
  254. data/spec/factories/collections_factory.rb +21 -0
  255. data/spec/factories/create_curation_concern.rb +3 -0
  256. data/spec/factories/generic_files.rb +18 -0
  257. data/spec/factories/generic_works.rb +37 -0
  258. data/spec/factories/linked_resources_factory.rb +18 -0
  259. data/spec/factories/users.rb +15 -0
  260. data/spec/features/add_external_link_spec.rb +25 -0
  261. data/spec/features/add_file_spec.rb +28 -0
  262. data/spec/features/collection_spec.rb +238 -0
  263. data/spec/features/embargo_spec.rb +45 -0
  264. data/spec/features/lease_spec.rb +43 -0
  265. data/spec/features/update_file_spec.rb +28 -0
  266. data/spec/fixtures/files/image.png +0 -0
  267. data/spec/helpers/catalog_helper_spec.rb +58 -0
  268. data/spec/helpers/configuration_helper_spec.rb +13 -0
  269. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  270. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  271. data/spec/helpers/url_helper_spec.rb +19 -0
  272. data/spec/matchers.rb +24 -0
  273. data/spec/matchers/metadata_field_matchers.rb +28 -0
  274. data/spec/models/collection_spec.rb +136 -0
  275. data/spec/models/curation_concern/collection_model_spec.rb +50 -0
  276. data/spec/models/curation_concern/work_spec.rb +30 -0
  277. data/spec/models/generic_work_spec.rb +24 -0
  278. data/spec/models/worthwhile/content_version_spec.rb +27 -0
  279. data/spec/models/worthwhile/generic_file_spec.rb +77 -0
  280. data/spec/models/worthwhile/linked_resource_spec.rb +76 -0
  281. data/spec/routing/worthwhile/routes_spec.rb +23 -0
  282. data/spec/services/embargo_service_spec.rb +38 -0
  283. data/spec/services/lease_service_spec.rb +37 -0
  284. data/spec/spec_helper.rb +30 -5
  285. data/spec/support/controllers/engine_helpers.rb +7 -0
  286. data/spec/support/curation_concern/factory_helpers.rb +14 -0
  287. data/spec/support/features.rb +19 -0
  288. data/spec/support/features/fixture_file_upload.rb +14 -0
  289. data/spec/support/features/session_helpers.rb +41 -0
  290. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  291. data/spec/support/shared/shared_examples_is_a_curation_concern_model.rb +40 -0
  292. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  293. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  294. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -29
  295. data/spec/views/curation_concern/base/_attributes.html.erb_spec.rb +25 -0
  296. data/spec/views/curation_concern/base/show.html.erb_spec.rb +25 -0
  297. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  298. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  299. data/spec/workers/visibility_copy_worker_spec.rb +68 -0
  300. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  301. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  302. data/vendor/assets/javascripts/handlebars.js +2278 -0
  303. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  304. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  305. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  306. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  307. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  308. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  309. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  310. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  311. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  312. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  313. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  314. data/vendor/assets/stylesheets/token-input.css +127 -0
  315. data/worthwhile.gemspec +9 -3
  316. metadata +469 -9
@@ -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 worthwhile/worthwhile
@@ -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,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['desc_metadata__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['desc_metadata__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,74 @@
1
+ // This widget manages the adding and removing of repeating fields.
2
+ // There are a lot of assumptions about the structure of the classes and elements.
3
+ // These assumptions are reflected in the MultiValueInput class.
4
+
5
+ (function($){
6
+ $.widget( "curate.manage_fields", {
7
+ options: {
8
+ change: null,
9
+ add: null,
10
+ remove: null
11
+ },
12
+
13
+ _create: function() {
14
+ this.element.addClass("managed");
15
+ $('.field-wrapper', this.element).addClass("input-group input-append");
16
+
17
+ this.controls = $("<span class=\"input-group-btn field-controls\">");
18
+ this.remover = $("<button class=\"btn btn-danger remove\"><i class=\"icon-white glyphicon-minus\"></i><span>Remove</span></button>");
19
+ this.adder = $("<button class=\"btn btn-success add\"><i class=\"icon-white glyphicon-plus\"></i><span>Add</span></button>");
20
+
21
+ $('.field-wrapper', this.element).append(this.controls);
22
+ $('.field-wrapper:not(:last-child) .field-controls', this.element).append(this.remover);
23
+ $('.field-controls:last', this.element).append(this.adder);
24
+
25
+ this._on( this.element, {
26
+ "click .remove": "remove_from_list",
27
+ "click .add": "add_to_list"
28
+ });
29
+ },
30
+
31
+ add_to_list: function( event ) {
32
+ event.preventDefault();
33
+
34
+ var $activeField = $(event.target).parents('.field-wrapper'),
35
+ $activeFieldControls = $activeField.children('.field-controls'),
36
+ $removeControl = this.remover.clone(),
37
+ $newField = $activeField.clone(),
38
+ $listing = $('.listing', this.element),
39
+ $warningMessage = $("<div class=\'message has-warning\'>cannot add new empty field</div>");
40
+ if ($activeField.children('input').val() === '') {
41
+ $listing.children('.has-warning').remove();
42
+ $listing.append($warningMessage);
43
+ }
44
+ else{
45
+ $listing.children('.has-warning').remove();
46
+ $('.add', $activeFieldControls).remove();
47
+ $activeFieldControls.prepend($removeControl);
48
+ $newChildren = $newField.children('input');
49
+ $newChildren.
50
+ val('').
51
+ removeProp('required');
52
+ $listing.append($newField);
53
+ $newChildren.first().focus();
54
+ this._trigger("add");
55
+ }
56
+ },
57
+
58
+ remove_from_list: function( event ) {
59
+ event.preventDefault();
60
+
61
+ $(event.target)
62
+ .parents('.field-wrapper')
63
+ .remove();
64
+
65
+ this._trigger("remove");
66
+ },
67
+
68
+ _destroy: function() {
69
+ this.actions.remove();
70
+ $('.field-wrapper', this.element).removeClass("input-append");
71
+ this.element.removeClass( "managed" );
72
+ }
73
+ });
74
+ })(jQuery);
@@ -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['desc_metadata__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