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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/Gemfile +31 -0
- data/LICENSE.txt +15 -0
- data/README.md +46 -0
- data/RELEASING.md +2 -0
- data/Rakefile +26 -0
- data/VERSION +1 -0
- data/app/assets/images/default.png +0 -0
- data/app/assets/images/nope.png +0 -0
- data/app/assets/javascripts/.gitkeep +0 -0
- data/app/assets/javascripts/curation_concerns/.gitkeep +0 -0
- data/app/assets/javascripts/curation_concerns/application.js +18 -0
- data/app/assets/javascripts/curation_concerns/browse_everything_implement.js +7 -0
- data/app/assets/javascripts/curation_concerns/curation_concerns.js +28 -0
- data/app/assets/javascripts/curation_concerns/embargoes.js +17 -0
- data/app/assets/javascripts/curation_concerns/facet_mine.js +22 -0
- data/app/assets/javascripts/curation_concerns/help_modal.js +36 -0
- data/app/assets/javascripts/curation_concerns/link_groups.js.coffee +123 -0
- data/app/assets/javascripts/curation_concerns/link_users.js.coffee +126 -0
- data/app/assets/javascripts/curation_concerns/proxy_rights.js.coffee +95 -0
- data/app/assets/javascripts/curation_concerns/proxy_submission.js +23 -0
- data/app/assets/javascripts/curation_concerns/select_works.js.coffee +20 -0
- data/app/assets/javascripts/modernizr.js +3 -0
- data/app/assets/stylesheets/curation_concerns/_curation_concerns.scss +9 -0
- data/app/assets/stylesheets/curation_concerns/_global-variables.scss +5 -0
- data/app/assets/stylesheets/curation_concerns/_modules.scss +13 -0
- data/app/assets/stylesheets/curation_concerns/_positioning.scss +138 -0
- data/app/assets/stylesheets/curation_concerns/_theme.scss +46 -0
- data/app/assets/stylesheets/curation_concerns/_typography.scss +137 -0
- data/app/assets/stylesheets/curation_concerns/_variables_bootstrap.scss +7 -0
- data/app/assets/stylesheets/curation_concerns/downloads.scss +3 -0
- data/app/assets/stylesheets/curation_concerns/help_requests.scss +3 -0
- data/app/assets/stylesheets/curation_concerns/modules/accessibility.scss +50 -0
- data/app/assets/stylesheets/curation_concerns/modules/accordion.scss +33 -0
- data/app/assets/stylesheets/curation_concerns/modules/attributes.scss +31 -0
- data/app/assets/stylesheets/curation_concerns/modules/classify_work.scss +100 -0
- data/app/assets/stylesheets/curation_concerns/modules/embargoes.scss +15 -0
- data/app/assets/stylesheets/curation_concerns/modules/emphatic_action_area.scss +14 -0
- data/app/assets/stylesheets/curation_concerns/modules/forms.scss +116 -0
- data/app/assets/stylesheets/curation_concerns/modules/multi_value_fields.scss +52 -0
- data/app/assets/stylesheets/curation_concerns/modules/pagination.scss +4 -0
- data/app/assets/stylesheets/curation_concerns/modules/search_results.scss +55 -0
- data/app/assets/stylesheets/curation_concerns/modules/site_actions.scss +53 -0
- data/app/assets/stylesheets/curation_concerns/modules/site_search.scss +46 -0
- data/app/controllers/catalog_controller.rb +3 -0
- data/app/controllers/collections_controller.rb +3 -0
- data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +28 -0
- data/app/controllers/concerns/curation_concerns/catalog_controller.rb +321 -0
- data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +76 -0
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +125 -0
- data/app/controllers/concerns/curation_concerns/download_behavior.rb +60 -0
- data/app/controllers/concerns/curation_concerns/embargoes_controller_behavior.rb +44 -0
- data/app/controllers/concerns/curation_concerns/generic_files_controller_behavior.rb +149 -0
- data/app/controllers/concerns/curation_concerns/leases_controller_behavior.rb +36 -0
- data/app/controllers/concerns/curation_concerns/manages_embargoes.rb +26 -0
- data/app/controllers/concerns/curation_concerns/parent_container.rb +33 -0
- data/app/controllers/concerns/curation_concerns/themed_layout_controller.rb +31 -0
- data/app/controllers/concerns/curation_concerns/without_namespace.rb +15 -0
- data/app/controllers/curation_concerns/application_controller.rb +7 -0
- data/app/controllers/curation_concerns/classify_concerns_controller.rb +35 -0
- data/app/controllers/curation_concerns/generic_files_controller.rb +13 -0
- data/app/controllers/curation_concerns/permissions_controller.rb +19 -0
- data/app/controllers/downloads_controller.rb +4 -0
- data/app/controllers/embargoes_controller.rb +5 -0
- data/app/controllers/leases_controller.rb +5 -0
- data/app/controllers/registrations_controller.rb +20 -0
- data/app/controllers/sessions_controller.rb +4 -0
- data/app/datastreams/curation_concerns/generic_work_rdf_properties.rb +57 -0
- data/app/datastreams/generic_work_metadata.rb +3 -0
- data/app/forms/curation_concerns/forms/collection_edit_form.rb +17 -0
- data/app/forms/curation_concerns/forms/generic_file_edit_form.rb +15 -0
- data/app/forms/curation_concerns/forms/generic_work_edit_form.rb +9 -0
- data/app/helpers/curation_concerns/ability_helper.rb +46 -0
- data/app/helpers/curation_concerns/attribute_helper.rb +67 -0
- data/app/helpers/curation_concerns/catalog_helper.rb +38 -0
- data/app/helpers/curation_concerns/collections_helper.rb +63 -0
- data/app/helpers/curation_concerns/embargo_helper.rb +17 -0
- data/app/helpers/curation_concerns/generic_file_helper.rb +19 -0
- data/app/helpers/curation_concerns/lease_helper.rb +18 -0
- data/app/helpers/curation_concerns/main_app_helpers.rb +13 -0
- data/app/helpers/curation_concerns/render_constraints_helper.rb +42 -0
- data/app/helpers/curation_concerns/search_paths_helper.rb +13 -0
- data/app/helpers/curation_concerns/thumbnail_helper.rb +11 -0
- data/app/helpers/curation_concerns/title_helper.rb +23 -0
- data/app/helpers/curation_concerns/url_helper.rb +29 -0
- data/app/presenters/curation_concerns/collection_presenter.rb +40 -0
- data/app/presenters/curation_concerns/generic_file_presenter.rb +14 -0
- data/app/presenters/curation_concerns/generic_work_presenter.rb +13 -0
- data/app/search_builders/curation_concerns/search_builder.rb +49 -0
- data/app/services/curation_concerns/curation_concern.rb +14 -0
- data/app/services/curation_concerns/embargo_service.rb +26 -0
- data/app/services/curation_concerns/lease_service.rb +23 -0
- data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
- data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
- data/app/views/catalog/_document.html.erb +3 -0
- data/app/views/catalog/_document_list.html.erb +5 -0
- data/app/views/catalog/_home_text.html.erb +8 -0
- data/app/views/catalog/_index_default.html.erb +17 -0
- data/app/views/catalog/_index_header_list_default.html.erb +8 -0
- data/app/views/catalog/_navbar.html.erb +12 -0
- data/app/views/catalog/_show_partials/_default.html.erb +22 -0
- data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
- data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
- data/app/views/catalog/index.html.erb +47 -0
- data/app/views/collections/_add_to_collection_modal.html.erb +15 -0
- data/app/views/collections/_batch_edits_actions.html.erb +3 -0
- data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
- data/app/views/collections/_collection.html.erb +1 -0
- data/app/views/collections/_dashboard_document_list.html.erb +6 -0
- data/app/views/collections/_document_list.html.erb +7 -0
- data/app/views/collections/_edit_actions.html.erb +5 -0
- data/app/views/collections/_edit_descriptions.html.erb +20 -0
- data/app/views/collections/_form.html.erb +26 -0
- data/app/views/collections/_form_additional_information.html.erb +6 -0
- data/app/views/collections/_form_for_select_collection.html.erb +34 -0
- data/app/views/collections/_form_permission.html.erb +36 -0
- data/app/views/collections/_form_representative_image.html.erb +13 -0
- data/app/views/collections/_form_required_information.html.erb +11 -0
- data/app/views/collections/_form_to_add_member.html.erb +21 -0
- data/app/views/collections/_identifier_and_action.html.erb +15 -0
- data/app/views/collections/_media_display.html.erb +1 -0
- data/app/views/collections/_paginate.html.erb +6 -0
- data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
- data/app/views/collections/_show_actions.html.erb +8 -0
- data/app/views/collections/_show_descriptions.html.erb +10 -0
- data/app/views/collections/_show_fields.html.erb +0 -0
- data/app/views/collections/_single_item_action_fields.html.erb +6 -0
- data/app/views/collections/_sort_and_per_page.html.erb +29 -0
- data/app/views/collections/_view_type_group.html.erb +13 -0
- data/app/views/collections/edit.html.erb +17 -0
- data/app/views/collections/show.html.erb +24 -0
- data/app/views/curation_concerns/base/_attributes.html.erb +25 -0
- data/app/views/curation_concerns/base/_collections.html.erb +26 -0
- data/app/views/curation_concerns/base/_form.html.erb +25 -0
- data/app/views/curation_concerns/base/_form_additional_information.html.erb +7 -0
- data/app/views/curation_concerns/base/_form_content_license.html.erb +16 -0
- data/app/views/curation_concerns/base/_form_descriptive_fields.erb +11 -0
- data/app/views/curation_concerns/base/_form_editors.html.erb +15 -0
- data/app/views/curation_concerns/base/_form_files_and_links.html.erb +23 -0
- data/app/views/curation_concerns/base/_form_permission.html.erb +52 -0
- data/app/views/curation_concerns/base/_form_permission_embargo.html.erb +6 -0
- data/app/views/curation_concerns/base/_form_permission_lease.html.erb +6 -0
- data/app/views/curation_concerns/base/_form_permission_under_embargo.html.erb +16 -0
- data/app/views/curation_concerns/base/_form_permission_under_lease.html.erb +18 -0
- data/app/views/curation_concerns/base/_form_representative_image.html.erb +13 -0
- data/app/views/curation_concerns/base/_form_required_information.html.erb +11 -0
- data/app/views/curation_concerns/base/_form_supplementary_fields.html.erb +15 -0
- data/app/views/curation_concerns/base/_legally_binding_text.html.erb +33 -0
- data/app/views/curation_concerns/base/_related_files.html.erb +24 -0
- data/app/views/curation_concerns/base/_representative_media.html.erb +8 -0
- data/app/views/curation_concerns/base/edit.html.erb +13 -0
- data/app/views/curation_concerns/base/new.html.erb +12 -0
- data/app/views/curation_concerns/base/show.html.erb +21 -0
- data/app/views/curation_concerns/base/unauthorized.html.erb +3 -0
- data/app/views/curation_concerns/classify_concerns/new.html.erb +25 -0
- data/app/views/curation_concerns/collections/_form_additional_information.html.erb +6 -0
- data/app/views/curation_concerns/generic_files/_actions.html.erb +16 -0
- data/app/views/curation_concerns/generic_files/_form.html.erb +35 -0
- data/app/views/curation_concerns/generic_files/_generic_file.html.erb +12 -0
- data/app/views/curation_concerns/generic_files/_media_display.html.erb +19 -0
- data/app/views/curation_concerns/generic_files/edit.html.erb +5 -0
- data/app/views/curation_concerns/generic_files/jq_upload.json.jbuilder +8 -0
- data/app/views/curation_concerns/generic_files/show.html.erb +15 -0
- data/app/views/curation_concerns/permissions/confirm.html.erb +21 -0
- data/app/views/embargoes/_embargo_history.html.erb +7 -0
- data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
- data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
- data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
- data/app/views/embargoes/edit.html.erb +43 -0
- data/app/views/embargoes/index.html.erb +18 -0
- data/app/views/layouts/boilerplate.html.erb +22 -0
- data/app/views/layouts/curation_concerns/1_column.html.erb +11 -0
- data/app/views/layouts/curation_concerns/catalog.html.erb +37 -0
- data/app/views/layouts/curation_concerns.html.erb +22 -0
- data/app/views/leases/_lease_history.html.erb +7 -0
- data/app/views/leases/_list_active_leases.html.erb +16 -0
- data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
- data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
- data/app/views/leases/edit.html.erb +43 -0
- data/app/views/leases/index.html.erb +18 -0
- data/app/views/shared/_add_content.html.erb +32 -0
- data/app/views/shared/_brand_bar.html.erb +10 -0
- data/app/views/shared/_flash_message.html.erb +17 -0
- data/app/views/shared/_footer.html.erb +10 -0
- data/app/views/shared/_ga.html.erb +6 -0
- data/app/views/shared/_header.html.erb +12 -0
- data/app/views/shared/_my_actions.html.erb +21 -0
- data/app/views/shared/_site_actions.html.erb +7 -0
- data/app/views/shared/_site_search.html.erb +12 -0
- data/app/views/shared/_title_bar.html.erb +16 -0
- data/app/workers/visibility_copy_worker.rb +30 -0
- data/config/initializers/simple_form.rb +31 -0
- data/config/locales/curation_concerns.en.yml +96 -0
- data/config/routes.rb +4 -0
- data/curation_concerns-models/.gitignore +17 -0
- data/curation_concerns-models/Gemfile +4 -0
- data/curation_concerns-models/LICENSE.md +177 -0
- data/curation_concerns-models/README.md +42 -0
- data/curation_concerns-models/Rakefile +1 -0
- data/curation_concerns-models/app/actors/concerns/curation_concerns/manages_embargoes_actor.rb +99 -0
- data/curation_concerns-models/app/actors/curation_concerns/base_actor.rb +90 -0
- data/curation_concerns-models/app/actors/curation_concerns/generic_file_actor.rb +150 -0
- data/curation_concerns-models/app/actors/curation_concerns/work_actor_behavior.rb +88 -0
- data/curation_concerns-models/app/jobs/active_fedora_id_based_job.rb +22 -0
- data/curation_concerns-models/app/jobs/active_fedora_pid_based_job.rb +6 -0
- data/curation_concerns-models/app/jobs/audit_job.rb +58 -0
- data/curation_concerns-models/app/jobs/characterize_job.rb +11 -0
- data/curation_concerns-models/app/jobs/copy_permissions_job.rb +24 -0
- data/curation_concerns-models/app/jobs/create_derivatives_job.rb +15 -0
- data/curation_concerns-models/app/jobs/import_url_job.rb +56 -0
- data/curation_concerns-models/app/jobs/ingest_local_file_job.rb +48 -0
- data/curation_concerns-models/app/jobs/resolrize_job.rb +9 -0
- data/curation_concerns-models/app/models/checksum_audit_log.rb +21 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/ability.rb +34 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/basic_metadata.rb +87 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/collection_behavior.rb +47 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/belongs_to_works.rb +53 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/characterization.rb +89 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/content.rb +8 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/export.rb +343 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/full_text_indexing.rb +12 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/indexing.rb +14 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file/versions.rb +16 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file.rb +5 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_file_behavior.rb +44 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/generic_work_behavior.rb +38 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/has_representative.rb +14 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/human_readable_type.rb +23 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/readable.rb +19 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions/writable.rb +75 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/permissions.rb +7 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/serializers.rb +15 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb +135 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/user.rb +65 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/with_basic_metadata.rb +98 -0
- data/curation_concerns-models/app/models/concerns/curation_concerns/with_generic_files.rb +29 -0
- data/curation_concerns-models/app/models/curation_concerns/classify_concern.rb +47 -0
- data/curation_concerns-models/app/models/curation_concerns/quick_classification_query.rb +31 -0
- data/curation_concerns-models/app/models/datastreams/fits_datastream.rb +148 -0
- data/curation_concerns-models/app/models/version_committer.rb +2 -0
- data/curation_concerns-models/app/services/curation_concerns/characterization_service.rb +71 -0
- data/curation_concerns-models/app/services/curation_concerns/full_text_extraction_service.rb +38 -0
- data/curation_concerns-models/app/services/curation_concerns/generic_file_audit_service.rb +85 -0
- data/curation_concerns-models/app/services/curation_concerns/generic_file_indexing_service.rb +14 -0
- data/curation_concerns-models/app/services/curation_concerns/generic_work_indexing_service.rb +16 -0
- data/curation_concerns-models/app/services/curation_concerns/noid.rb +23 -0
- data/curation_concerns-models/app/services/curation_concerns/repository_audit_service.rb +9 -0
- data/curation_concerns-models/app/services/curation_concerns/versioning_service.rb +27 -0
- data/curation_concerns-models/config/locales/curation_concerns.en.yml +6 -0
- data/curation_concerns-models/curation_concerns-models.gemspec +34 -0
- data/curation_concerns-models/lib/curation_concerns/messages.rb +66 -0
- data/curation_concerns-models/lib/curation_concerns/models/engine.rb +61 -0
- data/curation_concerns-models/lib/curation_concerns/models/resque.rb +36 -0
- data/curation_concerns-models/lib/curation_concerns/models/utils.rb +22 -0
- data/curation_concerns-models/lib/curation_concerns/models/version.rb +5 -0
- data/curation_concerns-models/lib/curation_concerns/models.rb +32 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/abstract_migration_generator.rb +30 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/clamav_generator.rb +19 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/fulltext_generator.rb +28 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/install_generator.rb +70 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/collection.rb +4 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/app/models/generic_file.rb +4 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/clamav.rb +1 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/curation_concerns.rb +123 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/mime_types.rb +6 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis.yml +9 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/redis_config.rb +32 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque-pool.yml +1 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_admin.rb +10 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/config/resque_config.rb +5 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_checksum_audit_logs.rb +19 -0
- data/curation_concerns-models/lib/generators/curation_concerns/models/templates/migrations/create_version_committers.rb +15 -0
- data/curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake +75 -0
- data/curation_concerns-models/lib/tasks/migrate.rake +13 -0
- data/curation_concerns-models/lib/tasks/resque.rake +13 -0
- data/curation_concerns-models/lib/tasks/solr_reindex.rake +8 -0
- data/curation_concerns.gemspec +46 -0
- data/lib/curation_concerns/configuration.rb +74 -0
- data/lib/curation_concerns/controller_resource.rb +10 -0
- data/lib/curation_concerns/engine.rb +20 -0
- data/lib/curation_concerns/rails/routes.rb +76 -0
- data/lib/curation_concerns/spec_support.rb +10 -0
- data/lib/curation_concerns/version.rb +3 -0
- data/lib/curation_concerns.rb +8 -0
- data/lib/generators/curation_concerns/install_generator.rb +103 -0
- data/lib/generators/curation_concerns/templates/curation_concerns.css.scss +3 -0
- data/lib/generators/curation_concerns/templates/curation_concerns.js +1 -0
- data/lib/generators/curation_concerns/templates/curation_concerns_config.rb +2 -0
- data/lib/generators/curation_concerns/templates/curation_concerns_helper.rb +4 -0
- data/lib/generators/curation_concerns/work/USAGE +19 -0
- data/lib/generators/curation_concerns/work/templates/README +13 -0
- data/lib/generators/curation_concerns/work/templates/actor.rb.erb +7 -0
- data/lib/generators/curation_concerns/work/templates/actor_spec.rb.erb +9 -0
- data/lib/generators/curation_concerns/work/templates/controller.rb.erb +7 -0
- data/lib/generators/curation_concerns/work/templates/controller_spec.rb.erb +9 -0
- data/lib/generators/curation_concerns/work/templates/model.rb.erb +7 -0
- data/lib/generators/curation_concerns/work/templates/model_spec.rb.erb +9 -0
- data/lib/generators/curation_concerns/work/work_generator.rb +78 -0
- data/solr_conf/conf/solrconfig.xml +223 -0
- data/spec/abilities/collection_abilities_spec.rb +48 -0
- data/spec/abilities/generic_file_abilities_spec.rb +62 -0
- data/spec/abilities/generic_work_abilities_spec.rb +58 -0
- data/spec/actors/curation_concerns/generic_file_actor_spec.rb +116 -0
- data/spec/actors/curation_concerns/manages_embargoes_actor_spec.rb +95 -0
- data/spec/actors/curation_concerns/work_actor_spec.rb +203 -0
- data/spec/controllers/catalog_controller_spec.rb +115 -0
- data/spec/controllers/curation_concerns/classify_concerns_controller_spec.rb +43 -0
- data/spec/controllers/curation_concerns/collections_controller_spec.rb +171 -0
- data/spec/controllers/curation_concerns/generic_files_controller_spec.rb +251 -0
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +167 -0
- data/spec/controllers/curation_concerns/permissions_controller_spec.rb +29 -0
- data/spec/controllers/downloads_controller_spec.rb +51 -0
- data/spec/controllers/embargoes_controller_spec.rb +114 -0
- data/spec/controllers/leases_controller_spec.rb +94 -0
- data/spec/factories/collections.rb +15 -0
- data/spec/factories/create_curation_concern.rb +3 -0
- data/spec/factories/generic_files.rb +31 -0
- data/spec/factories/generic_works.rb +54 -0
- data/spec/factories/users.rb +28 -0
- data/spec/features/add_file_spec.rb +30 -0
- data/spec/features/collection_spec.rb +222 -0
- data/spec/features/create_work_spec.rb +43 -0
- data/spec/features/embargo_spec.rb +51 -0
- data/spec/features/lease_spec.rb +49 -0
- data/spec/features/update_file_spec.rb +32 -0
- data/spec/features/work_generator_spec.rb +58 -0
- data/spec/fixtures/Example.ogg +0 -0
- data/spec/fixtures/charter.docx +0 -0
- data/spec/fixtures/countdown.avi +0 -0
- data/spec/fixtures/curation_concerns_generic_stub.txt +1 -0
- data/spec/fixtures/files/image.png +0 -0
- data/spec/fixtures/image.jp2 +0 -0
- data/spec/fixtures/image.jpg +0 -0
- data/spec/fixtures/piano_note.wav +0 -0
- data/spec/fixtures/sample_mpeg4.mp4 +0 -0
- data/spec/fixtures/small_file.txt +1 -0
- data/spec/fixtures/spoken-text.m4a +0 -0
- data/spec/fixtures/test4.pdf +0 -0
- data/spec/fixtures/test5.mp3 +0 -0
- data/spec/fixtures/world.png +0 -0
- data/spec/forms/collection_edit_form_spec.rb +20 -0
- data/spec/forms/generic_file_edit_form_spec.rb +33 -0
- data/spec/helpers/catalog_helper_spec.rb +58 -0
- data/spec/helpers/configuration_helper_spec.rb +13 -0
- data/spec/helpers/curation_concerns/.keep +0 -0
- data/spec/helpers/curation_concerns/collections_helper_spec.rb +49 -0
- data/spec/helpers/render_constraints_helper_spec.rb +19 -0
- data/spec/helpers/thumbnail_helper_spec.rb +21 -0
- data/spec/helpers/url_helper_spec.rb +22 -0
- data/spec/jobs/active_fedora_id_based_job_spec.rb +14 -0
- data/spec/jobs/audit_job_spec.rb +53 -0
- data/spec/jobs/characterize_job_spec.rb +23 -0
- data/spec/jobs/copy_permissions_job_spec.rb +49 -0
- data/spec/jobs/create_derivatives_job_spec.rb +23 -0
- data/spec/jobs/curation_concerns_resque_queue_spec.rb +49 -0
- data/spec/jobs/import_url_job_spec.rb +45 -0
- data/spec/jobs/ingest_local_file_job_spec.rb +25 -0
- data/spec/lib/curation_concerns/messages_spec.rb +70 -0
- data/spec/lib/curation_concerns/readable_permissions_spec.rb +56 -0
- data/spec/lib/curation_concerns/writable_permissions_spec.rb +16 -0
- data/spec/matchers/metadata_field_matchers.rb +28 -0
- data/spec/matchers/response_matchers.rb +7 -0
- data/spec/matchers.rb +24 -0
- data/spec/models/checksum_audit_log_spec.rb +66 -0
- data/spec/models/curation_concerns/collection_behavior_spec.rb +107 -0
- data/spec/models/curation_concerns/generic_file/derivatives_spec.rb +88 -0
- data/spec/models/curation_concerns/generic_work_behavior_spec.rb +35 -0
- data/spec/models/fits_datastream_spec.rb +127 -0
- data/spec/models/generic_file_spec.rb +619 -0
- data/spec/models/generic_work_spec.rb +43 -0
- data/spec/models/user_spec.rb +23 -0
- data/spec/presenters/curation_concerns/collection_presenter_spec.rb +34 -0
- data/spec/presenters/curation_concerns/generic_file_presenter_spec.rb +16 -0
- data/spec/routing/curation_concerns/routes_spec.rb +36 -0
- data/spec/routing/route_spec.rb +86 -0
- data/spec/services/characterization_service_spec.rb +30 -0
- data/spec/services/embargo_service_spec.rb +38 -0
- data/spec/services/full_text_extraction_service_spec.rb +5 -0
- data/spec/services/generic_file_audit_service_spec.rb +71 -0
- data/spec/services/generic_file_indexing_service_spec.rb +57 -0
- data/spec/services/generic_work_indexing_service_spec.rb +18 -0
- data/spec/services/lease_service_spec.rb +53 -0
- data/spec/services/repository_audit_service_spec.rb +18 -0
- data/spec/services/versioning_service_spec.rb +32 -0
- data/spec/spec_helper.rb +94 -0
- data/spec/support/controllers/engine_helpers.rb +7 -0
- data/spec/support/curation_concerns/factory_helpers.rb +14 -0
- data/spec/support/features/fixture_file_upload.rb +14 -0
- data/spec/support/features/session_helpers.rb +41 -0
- data/spec/support/features.rb +19 -0
- data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
- data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
- data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
- data/spec/tasks/rake_spec.rb +24 -0
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +55 -0
- data/spec/views/catalog/index.html.erb_spec.rb +59 -0
- data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +25 -0
- data/spec/views/curation_concerns/base/show.html.erb_spec.rb +29 -0
- data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +33 -0
- data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
- data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
- data/spec/workers/visibility_copy_worker_spec.rb +70 -0
- data/tasks/jetty.rake +15 -0
- data/tasks/release.rake +93 -0
- data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/assets/javascripts/handlebars.js +2278 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
- data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
- data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
- data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
- data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
- data/vendor/assets/stylesheets/token-input-mac.css +204 -0
- data/vendor/assets/stylesheets/token-input.css +127 -0
- 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
data/.rspec
ADDED
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
|
+
[](https://travis-ci.org/projecthydra-labs/curation_concerns)
|
|
3
|
+
[](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
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,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
|