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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.travis.yml +19 -0
- data/Gemfile +7 -11
- data/README.md +8 -12
- data/Rakefile +17 -2
- data/app/actors/concerns/worthwhile/manages_embargoes_actor.rb +79 -0
- data/app/actors/curation_concern/base_actor.rb +68 -0
- data/app/actors/curation_concern/generic_file_actor.rb +40 -0
- data/app/actors/curation_concern/generic_work_actor.rb +92 -0
- data/app/actors/curation_concern/linked_resource_actor.rb +4 -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/modernizr.js +3 -0
- data/app/assets/javascripts/worthwhile/.gitkeep +0 -0
- data/app/assets/javascripts/worthwhile/accept_contributor_agreement.js +15 -0
- data/app/assets/javascripts/worthwhile/application.js +18 -0
- data/app/assets/javascripts/worthwhile/browse_everything_implement.js +7 -0
- data/app/assets/javascripts/worthwhile/embargoes.js +17 -0
- data/app/assets/javascripts/worthwhile/facet_mine.js +22 -0
- data/app/assets/javascripts/worthwhile/help_modal.js +36 -0
- data/app/assets/javascripts/worthwhile/link_groups.js.coffee +123 -0
- data/app/assets/javascripts/worthwhile/link_users.js.coffee +126 -0
- data/app/assets/javascripts/worthwhile/manage_repeating_fields.js +74 -0
- data/app/assets/javascripts/worthwhile/proxy_rights.js.coffee +95 -0
- data/app/assets/javascripts/worthwhile/proxy_submission.js +23 -0
- data/app/assets/javascripts/worthwhile/select_works.js.coffee +20 -0
- data/app/assets/javascripts/worthwhile/worthwhile.js +45 -0
- data/app/assets/stylesheets/worthwhile.css.scss +23 -0
- data/app/assets/stylesheets/worthwhile/_global-variables.css.scss +5 -0
- data/app/assets/stylesheets/worthwhile/_modules.css.scss +14 -0
- data/app/assets/stylesheets/worthwhile/_positioning.css.scss +138 -0
- data/app/assets/stylesheets/worthwhile/_theme.css.scss +46 -0
- data/app/assets/stylesheets/worthwhile/_typography.css.scss +142 -0
- data/app/assets/stylesheets/worthwhile/_variables_bootstrap.css.scss +7 -0
- data/app/assets/stylesheets/worthwhile/_worthwhile.css.scss +7 -0
- data/app/assets/stylesheets/worthwhile/downloads.css.scss +3 -0
- data/app/assets/stylesheets/worthwhile/help_requests.css.scss +3 -0
- data/app/assets/stylesheets/worthwhile/modules/accessibility.css.scss +50 -0
- data/app/assets/stylesheets/worthwhile/modules/accordion.css.scss +33 -0
- data/app/assets/stylesheets/worthwhile/modules/attributes.css.scss +26 -0
- data/app/assets/stylesheets/worthwhile/modules/classify_work.css.scss +100 -0
- data/app/assets/stylesheets/worthwhile/modules/collections.css.scss +42 -0
- data/app/assets/stylesheets/worthwhile/modules/embargoes.css.scss +15 -0
- data/app/assets/stylesheets/worthwhile/modules/emphatic_action_area.css.scss +14 -0
- data/app/assets/stylesheets/worthwhile/modules/forms.css.scss +116 -0
- data/app/assets/stylesheets/worthwhile/modules/multi_value_fields.css.scss +52 -0
- data/app/assets/stylesheets/worthwhile/modules/pagination.css.scss +4 -0
- data/app/assets/stylesheets/worthwhile/modules/search_results.css.scss +55 -0
- data/app/assets/stylesheets/worthwhile/modules/site_actions.css.scss +53 -0
- data/app/assets/stylesheets/worthwhile/modules/site_search.css.scss +46 -0
- data/app/controllers/catalog_controller.rb +3 -0
- data/app/controllers/collections_controller.rb +59 -0
- data/app/controllers/concerns/worthwhile/application_controller_behavior.rb +23 -0
- data/app/controllers/concerns/worthwhile/catalog_controller.rb +347 -0
- data/app/controllers/concerns/worthwhile/curation_concern_controller.rb +131 -0
- data/app/controllers/concerns/worthwhile/files_controller.rb +149 -0
- data/app/controllers/concerns/worthwhile/manages_embargoes.rb +22 -0
- data/app/controllers/concerns/worthwhile/parent_container.rb +31 -0
- data/app/controllers/concerns/worthwhile/themed_layout_controller.rb +31 -0
- data/app/controllers/concerns/worthwhile/without_namespace.rb +15 -0
- data/app/controllers/curation_concern/generic_files_controller.rb +6 -0
- data/app/controllers/curation_concern/generic_works_controller.rb +6 -0
- data/app/controllers/curation_concern/linked_resources_controller.rb +68 -0
- data/app/controllers/curation_concern/permissions_controller.rb +19 -0
- data/app/controllers/downloads_controller.rb +4 -0
- data/app/controllers/embargoes_controller.rb +44 -0
- data/app/controllers/leases_controller.rb +34 -0
- data/app/controllers/registrations_controller.rb +20 -0
- data/app/controllers/sessions_controller.rb +4 -0
- data/app/controllers/worthwhile/application_controller.rb +7 -0
- data/app/controllers/worthwhile/classify_concerns_controller.rb +35 -0
- data/app/datastreams/generic_work_metadata.rb +3 -0
- data/app/datastreams/worthwhile/generic_work_rdf_properties.rb +57 -0
- data/app/datastreams/worthwhile/properties_datastream.rb +28 -0
- data/app/helpers/curate/collections_helper.rb +133 -0
- data/app/helpers/worthwhile/ability_helper.rb +46 -0
- data/app/helpers/worthwhile/attribute_helper.rb +67 -0
- data/app/helpers/worthwhile/catalog_helper.rb +38 -0
- data/app/helpers/worthwhile/collections_helper.rb +19 -0
- data/app/helpers/worthwhile/embargo_helper.rb +17 -0
- data/app/helpers/worthwhile/generic_file_helper.rb +19 -0
- data/app/helpers/worthwhile/lease_helper.rb +18 -0
- data/app/helpers/worthwhile/main_app_helpers.rb +14 -0
- data/app/helpers/worthwhile/render_constraints_helper.rb +42 -0
- data/app/helpers/worthwhile/search_paths_helper.rb +13 -0
- data/app/helpers/worthwhile/thumbnail_helper.rb +11 -0
- data/app/helpers/worthwhile/title_helper.rb +23 -0
- data/app/helpers/worthwhile/url_helper.rb +16 -0
- data/app/inputs/multi_value_input.rb +72 -0
- data/app/models/collection.rb +15 -0
- data/app/models/concerns/curation_concern/collection_model.rb +62 -0
- data/app/models/concerns/curation_concern/curatable.rb +77 -0
- data/app/models/concerns/curation_concern/has_representative.rb +14 -0
- data/app/models/concerns/curation_concern/human_readable_type.rb +23 -0
- data/app/models/concerns/curation_concern/with_basic_metadata.rb +49 -0
- data/app/models/concerns/curation_concern/with_editors.rb +44 -0
- data/app/models/concerns/curation_concern/with_generic_files.rb +23 -0
- data/app/models/concerns/curation_concern/with_linked_resources.rb +21 -0
- data/app/models/concerns/curation_concern/work.rb +24 -0
- data/app/models/concerns/worthwhile/ability.rb +34 -0
- data/app/models/concerns/worthwhile/generic_file/versioned_content.rb +18 -0
- data/app/models/concerns/worthwhile/generic_file_base.rb +64 -0
- data/app/models/concerns/worthwhile/solr_document_behavior.rb +140 -0
- data/app/models/generic_work.rb +5 -0
- data/app/models/worthwhile/classify_concern.rb +47 -0
- data/app/models/worthwhile/content_version.rb +23 -0
- data/app/models/worthwhile/contributor_agreement.rb +23 -0
- data/app/models/worthwhile/generic_file.rb +5 -0
- data/app/models/worthwhile/linked_resource.rb +41 -0
- data/app/models/worthwhile/quick_classification_query.rb +31 -0
- data/app/services/worthwhile/curation_concern.rb +21 -0
- data/app/services/worthwhile/embargo_service.rb +26 -0
- data/app/services/worthwhile/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 +17 -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 +48 -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_for_select_collection.html.erb +34 -0
- data/app/views/collections/_form_permission.html.erb +36 -0
- data/app/views/collections/_form_required_information.html.erb +11 -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 +22 -0
- data/app/views/collections/new.html.erb +15 -0
- data/app/views/collections/show.html.erb +24 -0
- data/app/views/curate/collections/_add_to_collection_modal.html.erb +15 -0
- data/app/views/curate/collections/_button_remove_from_collection.html.erb +6 -0
- data/app/views/curate/collections/_form_to_add_member.html.erb +27 -0
- data/app/views/curate/collections/add_member_form.html.erb +6 -0
- data/app/views/curation_concern/base/_attributes.html.erb +25 -0
- data/app/views/curation_concern/base/_collections.html.erb +26 -0
- data/app/views/curation_concern/base/_form.html.erb +27 -0
- data/app/views/curation_concern/base/_form_additional_information.html.erb +9 -0
- data/app/views/curation_concern/base/_form_content_license.html.erb +16 -0
- data/app/views/curation_concern/base/_form_contributor_agreement.html.erb +29 -0
- data/app/views/curation_concern/base/_form_descriptive_fields.erb +23 -0
- data/app/views/curation_concern/base/_form_files_and_links.html.erb +29 -0
- data/app/views/curation_concern/base/_form_permission.html.erb +52 -0
- data/app/views/curation_concern/base/_form_permission_embargo.html.erb +6 -0
- data/app/views/curation_concern/base/_form_permission_lease.html.erb +6 -0
- data/app/views/curation_concern/base/_form_permission_under_embargo.html.erb +16 -0
- data/app/views/curation_concern/base/_form_permission_under_lease.html.erb +18 -0
- data/app/views/curation_concern/base/_form_representative_image.html.erb +13 -0
- data/app/views/curation_concern/base/_form_required_information.html.erb +11 -0
- data/app/views/curation_concern/base/_form_supplementary_fields.html.erb +15 -0
- data/app/views/curation_concern/base/_legally_binding_text.html.erb +33 -0
- data/app/views/curation_concern/base/_related_files.html.erb +24 -0
- data/app/views/curation_concern/base/_related_resources.html.erb +40 -0
- data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
- data/app/views/curation_concern/base/edit.html.erb +15 -0
- data/app/views/curation_concern/base/new.html.erb +14 -0
- data/app/views/curation_concern/base/show.html.erb +32 -0
- data/app/views/curation_concern/base/unauthorized.html.erb +3 -0
- data/app/views/curation_concern/generic_files/_form.html.erb +35 -0
- data/app/views/curation_concern/generic_files/_media_display.html.erb +20 -0
- data/app/views/curation_concern/generic_files/edit.html.erb +5 -0
- data/app/views/curation_concern/generic_files/show.html.erb +15 -0
- data/app/views/curation_concern/generic_works/_generic_work.html.erb +3 -0
- data/app/views/curation_concern/linked_resources/_form.html.erb +11 -0
- data/app/views/curation_concern/linked_resources/edit.html.erb +5 -0
- data/app/views/curation_concern/linked_resources/new.html.erb +5 -0
- data/app/views/curation_concern/permissions/confirm.html.erb +13 -0
- data/app/views/curation_concern/worthwhile/generic_files/_actions.html.erb +16 -0
- data/app/views/curation_concern/worthwhile/generic_files/_generic_file.html.erb +12 -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/common_objects.html.erb +36 -0
- data/app/views/layouts/curate_nd.html.erb +33 -0
- data/app/views/layouts/curate_nd/1_column.html.erb +22 -0
- data/app/views/layouts/curate_nd/2_column.html.erb +26 -0
- data/app/views/layouts/curate_nd/catalog.html.erb +38 -0
- data/app/views/layouts/curate_nd/dashboard.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/views/worthwhile/classify_concerns/new.html.erb +27 -0
- data/app/workers/visibility_copy_worker.rb +29 -0
- data/config/initializers/simple_form.rb +31 -0
- data/config/locales/sufia.en.yml +26 -0
- data/config/locales/worthwhile.en.yml +68 -0
- data/config/routes.rb +4 -0
- data/lib/generators/worthwhile/install_generator.rb +74 -0
- data/lib/generators/worthwhile/templates/worthwhile.css.scss +3 -0
- data/lib/generators/worthwhile/templates/worthwhile.js +1 -0
- data/lib/generators/worthwhile/templates/worthwhile_config.rb +3 -0
- data/lib/generators/worthwhile/templates/worthwhile_helper.rb +4 -0
- data/lib/worthwhile.rb +3 -1
- data/lib/worthwhile/configuration.rb +74 -0
- data/lib/worthwhile/controller_resource.rb +10 -0
- data/lib/worthwhile/engine.rb +20 -0
- data/lib/worthwhile/rails/routes.rb +78 -0
- data/lib/worthwhile/spec_support.rb +10 -0
- data/lib/worthwhile/version.rb +1 -1
- data/spec/abilities/generic_file_abilities_spec.rb +62 -0
- data/spec/abilities/generic_work_abilities_spec.rb +58 -0
- data/spec/actors/curation_concern/generic_work_actor_spec.rb +215 -0
- data/spec/actors/curation_concern/linked_resource_actor_spec.rb +36 -0
- data/spec/actors/worthwile/manages_embargoes_actor_spec.rb +95 -0
- data/spec/controllers/catalog_controller_spec.rb +114 -0
- data/spec/controllers/collections_controller_spec.rb +216 -0
- data/spec/controllers/curation_concern/generic_files_controller_spec.rb +258 -0
- data/spec/controllers/curation_concern/generic_works_controller_spec.rb +171 -0
- data/spec/controllers/curation_concern/linked_resources_controller_spec.rb +123 -0
- data/spec/controllers/curation_concern/permissions_controller_spec.rb +29 -0
- data/spec/controllers/downloads_controller_spec.rb +53 -0
- data/spec/controllers/embargoes_controller_spec.rb +107 -0
- data/spec/controllers/leases_controller_spec.rb +95 -0
- data/spec/controllers/worthwhile/classify_concerns_controller_spec.rb +35 -0
- data/spec/factories/collections_factory.rb +21 -0
- data/spec/factories/create_curation_concern.rb +3 -0
- data/spec/factories/generic_files.rb +18 -0
- data/spec/factories/generic_works.rb +37 -0
- data/spec/factories/linked_resources_factory.rb +18 -0
- data/spec/factories/users.rb +15 -0
- data/spec/features/add_external_link_spec.rb +25 -0
- data/spec/features/add_file_spec.rb +28 -0
- data/spec/features/collection_spec.rb +238 -0
- data/spec/features/embargo_spec.rb +45 -0
- data/spec/features/lease_spec.rb +43 -0
- data/spec/features/update_file_spec.rb +28 -0
- data/spec/fixtures/files/image.png +0 -0
- data/spec/helpers/catalog_helper_spec.rb +58 -0
- data/spec/helpers/configuration_helper_spec.rb +13 -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 +19 -0
- data/spec/matchers.rb +24 -0
- data/spec/matchers/metadata_field_matchers.rb +28 -0
- data/spec/models/collection_spec.rb +136 -0
- data/spec/models/curation_concern/collection_model_spec.rb +50 -0
- data/spec/models/curation_concern/work_spec.rb +30 -0
- data/spec/models/generic_work_spec.rb +24 -0
- data/spec/models/worthwhile/content_version_spec.rb +27 -0
- data/spec/models/worthwhile/generic_file_spec.rb +77 -0
- data/spec/models/worthwhile/linked_resource_spec.rb +76 -0
- data/spec/routing/worthwhile/routes_spec.rb +23 -0
- data/spec/services/embargo_service_spec.rb +38 -0
- data/spec/services/lease_service_spec.rb +37 -0
- data/spec/spec_helper.rb +30 -5
- data/spec/support/controllers/engine_helpers.rb +7 -0
- data/spec/support/curation_concern/factory_helpers.rb +14 -0
- data/spec/support/features.rb +19 -0
- data/spec/support/features/fixture_file_upload.rb +14 -0
- data/spec/support/features/session_helpers.rb +41 -0
- data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
- data/spec/support/shared/shared_examples_is_a_curation_concern_model.rb +40 -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/test_app_templates/lib/generators/test_app_generator.rb +8 -29
- data/spec/views/curation_concern/base/_attributes.html.erb_spec.rb +25 -0
- data/spec/views/curation_concern/base/show.html.erb_spec.rb +25 -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 +68 -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
- data/worthwhile.gemspec +9 -3
- metadata +469 -9
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module AttributeHelper
|
|
3
|
+
|
|
4
|
+
# If options[:catalog_search_link] is false,
|
|
5
|
+
# it will return the attribute value as text.
|
|
6
|
+
# If options[:catalog_search_link] is true,
|
|
7
|
+
# it will return a link to a catalog search for that text.
|
|
8
|
+
#
|
|
9
|
+
# If the method_name of the attribute is different than
|
|
10
|
+
# how the attribute name should appear on the search URL,
|
|
11
|
+
# you can explicitly set the URL's search field name using
|
|
12
|
+
# options[:search_field].
|
|
13
|
+
def curation_concern_attribute_to_html(curation_concern, method_name, label = nil, options = {})
|
|
14
|
+
if curation_concern.respond_to?(method_name)
|
|
15
|
+
markup = ""
|
|
16
|
+
label ||= derived_label_for(curation_concern, method_name)
|
|
17
|
+
subject = curation_concern.send(method_name)
|
|
18
|
+
return markup if !subject.present? && !options[:include_empty]
|
|
19
|
+
markup << %(<tr><th>#{label}</th>\n<td><ul class='tabular'>)
|
|
20
|
+
[subject].flatten.compact.each do |value|
|
|
21
|
+
if method_name == :rights
|
|
22
|
+
# Special treatment for license/rights. A URL from the Sufia gem's config/sufia.rb is stored in the descMetadata of the
|
|
23
|
+
# curation_concern. If that URL is valid in form, then it is used as a link. If it is not valid, it is used as plain text.
|
|
24
|
+
parsedUri = URI.parse(value) rescue nil
|
|
25
|
+
if parsedUri.nil?
|
|
26
|
+
markup << %(<li class="attribute #{method_name}">#{h(value)}</li>\n)
|
|
27
|
+
else
|
|
28
|
+
markup << %(<li class="attribute #{method_name}"><a href=#{h(value)} target="_blank"> #{h(Sufia.config.cc_licenses_reverse[value])}</a></li>\n)
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
search_field = options[:search_field] || method_name
|
|
32
|
+
li_value = link_to_if(options[:catalog_search_link], h(value), catalog_index_path(search_field: search_field, q: h(value)))
|
|
33
|
+
markup << %(<li class="attribute #{method_name}"> #{li_value} </li>\n)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
markup << %(</ul></td></tr>)
|
|
37
|
+
markup.html_safe
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def permission_badge_for(curation_concern, solr_document = nil)
|
|
42
|
+
solr_document ||= curation_concern.to_solr
|
|
43
|
+
dom_label_class, link_title = extract_dom_label_class_and_link_title(solr_document)
|
|
44
|
+
%(<span class="label #{dom_label_class}" title="#{link_title}">#{link_title}</span>).html_safe
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
def extract_dom_label_class_and_link_title(document)
|
|
49
|
+
hash = document.stringify_keys
|
|
50
|
+
dom_label_class, link_title = "label-danger", "Private"
|
|
51
|
+
if hash[Hydra.config.permissions.read.group].present?
|
|
52
|
+
if hash[Hydra.config.permissions.read.group].include?('public')
|
|
53
|
+
if hash[Hydra.config.permissions.embargo.release_date].present?
|
|
54
|
+
dom_label_class, link_title = 'label-warning', 'Open Access with Embargo'
|
|
55
|
+
else
|
|
56
|
+
dom_label_class, link_title = 'label-success', 'Open Access'
|
|
57
|
+
end
|
|
58
|
+
elsif hash[Hydra.config.permissions.read.group].include?('registered')
|
|
59
|
+
dom_label_class, link_title = "label-info", t('sufia.institution_name')
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
return dom_label_class, link_title
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Worthwhile::CatalogHelper
|
|
2
|
+
def type_tab(label, key=label)
|
|
3
|
+
if params[:f] && params[:f][type_field] == [key]
|
|
4
|
+
content_tag(:li, link_to(label, "#"), class: "active")
|
|
5
|
+
else
|
|
6
|
+
facet_solr_field = facet_configuration_for_field(type_field)
|
|
7
|
+
path = search_action_path(add_facet_params_and_redirect(type_field, key))
|
|
8
|
+
# local_params = params.dup
|
|
9
|
+
# local_facet_params = local_params[:f] || {}.with_indifferent_access
|
|
10
|
+
# local_params[:f] = local_facet_params.select{|k,_| k != type_field }
|
|
11
|
+
# puts "local #{local_params}"
|
|
12
|
+
# path = add_facet_params(type_field, key, local_params)
|
|
13
|
+
content_tag(:li, link_to(label, path))
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def all_type_tab(label = t('worthwhile.catalog.index.type_tabs.all'))
|
|
18
|
+
if params[:f] && params[:f][type_field]
|
|
19
|
+
facet_solr_field = facet_configuration_for_field(type_field)
|
|
20
|
+
new_params = remove_facet_params(type_field, params[:f][type_field].first)
|
|
21
|
+
|
|
22
|
+
# Delete any request params from facet-specific action, needed
|
|
23
|
+
# to redir to index action properly.
|
|
24
|
+
new_params.except! *Blacklight::Solr::FacetPaginator.request_keys.values
|
|
25
|
+
path = search_action_path(new_params)
|
|
26
|
+
content_tag(:li, link_to(label, path))
|
|
27
|
+
else
|
|
28
|
+
content_tag(:li, link_to(label, '#'), class: "active")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def type_field
|
|
35
|
+
Solrizer.solr_name("generic_type", :facetable)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Worthwhile::CollectionsHelper
|
|
2
|
+
def has_collection_search_parameters?
|
|
3
|
+
params[:cq].present?
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def collection_modal_id(collectible)
|
|
7
|
+
"#{collectible.to_param.gsub(/:/, '-')}-modal"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def link_to_select_collection(collectible, opts={})
|
|
11
|
+
html_class = opts[:class]
|
|
12
|
+
link_to add_member_form_collections_path(collectible_id: collectible.id),
|
|
13
|
+
data: { toggle: "modal", target: '#' + collection_modal_id(collectible) },
|
|
14
|
+
class: "add-to-collection #{html_class}", title: "Add #{collectible.human_readable_type} to Collection" do
|
|
15
|
+
raw('<span class="glyphicon glyphicon-folder-open"></span> Add to a Collection')
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module EmbargoHelper
|
|
3
|
+
|
|
4
|
+
def assets_with_expired_embargoes
|
|
5
|
+
@assets_with_expired_embargoes ||= EmbargoService.assets_with_expired_embargoes
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def assets_under_embargo
|
|
9
|
+
@assets_under_embargo ||= EmbargoService.assets_under_embargo
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def assets_with_deactivated_embargoes
|
|
13
|
+
@assets_with_deactivated_embargoes ||= EmbargoService.assets_with_deactivated_embargoes
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Worthwhile::GenericFileHelper
|
|
2
|
+
|
|
3
|
+
def generic_file_title(gf)
|
|
4
|
+
can?(:read, gf) ? gf.to_s : "File"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def generic_file_link_name(gf)
|
|
8
|
+
can?(:read, gf) ? gf.filename : "File"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def parent_path(parent)
|
|
12
|
+
if parent.is_a?(Collection)
|
|
13
|
+
collection_path(parent)
|
|
14
|
+
else
|
|
15
|
+
polymorphic_path([:curation_concern, parent])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module LeaseHelper
|
|
3
|
+
|
|
4
|
+
def assets_with_expired_leases
|
|
5
|
+
@assets_with_expired_leases ||= LeaseService.assets_with_expired_leases
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def assets_under_lease
|
|
9
|
+
@assets_under_lease ||= LeaseService.assets_under_lease
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def assets_with_deactivated_leases
|
|
13
|
+
@assets_with_deactivated_leases ||= LeaseService.assets_with_deactivated_leases
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Worthwhile::MainAppHelpers
|
|
2
|
+
include Worthwhile::TitleHelper
|
|
3
|
+
include Worthwhile::AttributeHelper
|
|
4
|
+
include Worthwhile::GenericFileHelper
|
|
5
|
+
include Worthwhile::SearchPathsHelper
|
|
6
|
+
include Worthwhile::RenderConstraintsHelper
|
|
7
|
+
include Worthwhile::AbilityHelper
|
|
8
|
+
include Worthwhile::CollectionsHelper
|
|
9
|
+
include Curate::CollectionsHelper
|
|
10
|
+
include Worthwhile::ThumbnailHelper
|
|
11
|
+
include Worthwhile::UrlHelper
|
|
12
|
+
include Worthwhile::EmbargoHelper
|
|
13
|
+
include Worthwhile::LeaseHelper
|
|
14
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module RenderConstraintsHelper
|
|
3
|
+
# Overridden to remove the 'search_field' tag from the localized params when the query is cleared.
|
|
4
|
+
# This is because unlike Blacklight, there is no way to change the search_field in the worthwhile UI
|
|
5
|
+
##
|
|
6
|
+
# Render the query constraints
|
|
7
|
+
#
|
|
8
|
+
# @param [Hash] query parameters
|
|
9
|
+
# @return [String]
|
|
10
|
+
def render_constraints_query(localized_params = params)
|
|
11
|
+
# So simple don't need a view template, we can just do it here.
|
|
12
|
+
return "".html_safe if localized_params[:q].blank?
|
|
13
|
+
|
|
14
|
+
render_constraint_element(constraint_query_label(localized_params),
|
|
15
|
+
localized_params[:q],
|
|
16
|
+
classes: ["query"],
|
|
17
|
+
remove: url_for(localized_params.except(:search_field).merge(q: nil, action: 'index')))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# We can remove this method once we use Blacklight > 5.4.0
|
|
22
|
+
##
|
|
23
|
+
# Return a label for the currently selected search field.
|
|
24
|
+
# If no "search_field" or the default (e.g. "all_fields") is selected, then return nil
|
|
25
|
+
# Otherwise grab the label of the selected search field.
|
|
26
|
+
# @param [Hash] query parameters
|
|
27
|
+
# @return [String]
|
|
28
|
+
def constraint_query_label(localized_params = params)
|
|
29
|
+
label_for_search_field(localized_params[:search_field]) unless default_search_field?(localized_params[:search_field])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# We can remove this method once we use Blacklight > 5.4.0
|
|
34
|
+
##
|
|
35
|
+
# Is the search form using the default search field ("all_fields" by default)?
|
|
36
|
+
# @param [String] the currently selected search_field
|
|
37
|
+
# @return [Boolean]
|
|
38
|
+
def default_search_field?(selected_search_field)
|
|
39
|
+
selected_search_field.blank? || (default_search_field && selected_search_field == default_search_field[:key])
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Worthwhile::SearchPathsHelper
|
|
2
|
+
|
|
3
|
+
def search_path_for_my_works(opts={})
|
|
4
|
+
params_for_my_works = {:'f[generic_type_sim][]'=>'Work', works: 'mine'}
|
|
5
|
+
main_app.catalog_index_path(params_for_my_works.merge(opts))
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def search_path_for_my_collections(opts={})
|
|
9
|
+
params_for_my_collections = {:'f[generic_type_sim][]'=>'Collection', works: 'mine'}
|
|
10
|
+
main_app.catalog_index_path(params_for_my_collections.merge(opts))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module ThumbnailHelper
|
|
3
|
+
def thumbnail_tag(document, image_options)
|
|
4
|
+
if document.representative.present?
|
|
5
|
+
image_tag download_path(document.representative, datastream_id: 'thumbnail'), alt: 'Thumbnail', class: "canonical-image"
|
|
6
|
+
else
|
|
7
|
+
content_tag :span, '', class: 'canonical-image'
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Worthwhile::TitleHelper
|
|
2
|
+
|
|
3
|
+
def construct_page_title(*elements)
|
|
4
|
+
(elements.flatten.compact + [application_name]).join(" // ")
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def curation_concern_page_title(curation_concern)
|
|
8
|
+
if curation_concern.persisted?
|
|
9
|
+
construct_page_title(curation_concern.title, "#{curation_concern.human_readable_type} [#{curation_concern.to_param}]")
|
|
10
|
+
else
|
|
11
|
+
construct_page_title("New #{curation_concern.human_readable_type}")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def default_page_title
|
|
16
|
+
text = controller_name.singularize.titleize
|
|
17
|
+
if action_name
|
|
18
|
+
text = "#{action_name.titleize} " + text
|
|
19
|
+
end
|
|
20
|
+
construct_page_title(text)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Worthwhile
|
|
2
|
+
module UrlHelper
|
|
3
|
+
|
|
4
|
+
# override Blacklight so we can use our 'curation_concern' namespace
|
|
5
|
+
# We may also pass in a ActiveFedora document instead of a SolrDocument
|
|
6
|
+
def url_for_document doc, options = {}
|
|
7
|
+
if doc.kind_of? Worthwhile::GenericFile
|
|
8
|
+
curation_concern_generic_file_path(doc)
|
|
9
|
+
elsif doc.collection?
|
|
10
|
+
doc
|
|
11
|
+
else
|
|
12
|
+
polymorphic_path([:curation_concern, doc])
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
class MultiValueInput < SimpleForm::Inputs::CollectionInput
|
|
2
|
+
def input(wrapper_options)
|
|
3
|
+
@rendered_first_element = false
|
|
4
|
+
input_html_classes.unshift("string")
|
|
5
|
+
#input_html_options[:type] ||= 'text'
|
|
6
|
+
input_html_options[:name] ||= "#{object_name}[#{attribute_name}][]"
|
|
7
|
+
markup = <<-HTML
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
<ul class="listing">
|
|
11
|
+
HTML
|
|
12
|
+
|
|
13
|
+
collection.each_with_index do |value, i|
|
|
14
|
+
unless value.to_s.strip.blank?
|
|
15
|
+
markup << <<-HTML
|
|
16
|
+
<li class="field-wrapper">
|
|
17
|
+
#{build_text_field(value)}
|
|
18
|
+
</li>
|
|
19
|
+
HTML
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
markup << <<-HTML
|
|
24
|
+
<li class="field-wrapper">
|
|
25
|
+
#{build_text_field('')}
|
|
26
|
+
</li>
|
|
27
|
+
</ul>
|
|
28
|
+
|
|
29
|
+
HTML
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def build_text_field(value)
|
|
36
|
+
options = input_html_options.dup
|
|
37
|
+
|
|
38
|
+
options[:value] = value
|
|
39
|
+
if @rendered_first_element
|
|
40
|
+
options[:id] = nil
|
|
41
|
+
options[:required] = nil
|
|
42
|
+
else
|
|
43
|
+
options[:id] ||= input_dom_id
|
|
44
|
+
end
|
|
45
|
+
options[:class] ||= []
|
|
46
|
+
options[:class] += ["#{input_dom_id} form-control multi-text-field"]
|
|
47
|
+
options[:'aria-labelledby'] = label_id
|
|
48
|
+
@rendered_first_element = true
|
|
49
|
+
if options.delete(:type) == 'textarea'.freeze
|
|
50
|
+
@builder.text_area(attribute_name, options)
|
|
51
|
+
else
|
|
52
|
+
@builder.text_field(attribute_name, options)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def label_id
|
|
58
|
+
input_dom_id + '_label'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def input_dom_id
|
|
62
|
+
input_html_options[:id] || "#{object_name}_#{attribute_name}"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def collection
|
|
66
|
+
@collection ||= begin
|
|
67
|
+
object.send(attribute_name)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def multiple?; true; end
|
|
72
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Collection < ActiveFedora::Base
|
|
2
|
+
include Hydra::Collection
|
|
3
|
+
include CurationConcern::CollectionModel
|
|
4
|
+
include Hydra::Collections::Collectible
|
|
5
|
+
include CurationConcern::WithBasicMetadata
|
|
6
|
+
include CurationConcern::WithGenericFiles
|
|
7
|
+
|
|
8
|
+
# override the default Hydra properties so we don't get a prefix deprecation warning.
|
|
9
|
+
has_metadata "properties", type: Worthwhile::PropertiesDatastream
|
|
10
|
+
|
|
11
|
+
# override Hydra::Collection to add :solr_page_size
|
|
12
|
+
has_and_belongs_to_many :members, property: :has_collection_member, class_name: "ActiveFedora::Base" , after_remove: :update_member,
|
|
13
|
+
solr_page_size: 70
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module CurationConcern
|
|
2
|
+
module CollectionModel
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
include Hydra::AccessControls::Permissions
|
|
6
|
+
include Hydra::AccessControls::WithAccessRight
|
|
7
|
+
include Sufia::Noid
|
|
8
|
+
include CurationConcern::HumanReadableType
|
|
9
|
+
include Hydra::Collection
|
|
10
|
+
include Hydra::Collections::Collectible
|
|
11
|
+
include CurationConcern::HasRepresentative
|
|
12
|
+
|
|
13
|
+
def add_member(collectible)
|
|
14
|
+
if can_add_to_members?(collectible)
|
|
15
|
+
collectible.collections << self
|
|
16
|
+
collectible.save
|
|
17
|
+
self.members << collectible
|
|
18
|
+
self.save
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_s
|
|
23
|
+
self.title.present? ? title : "No Title"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_solr(solr_doc={}, opts={})
|
|
27
|
+
super.tap do |solr_doc|
|
|
28
|
+
Solrizer.set_field(solr_doc, 'generic_type', human_readable_type, :facetable)
|
|
29
|
+
solr_doc[Solrizer.solr_name('noid', Sufia::GenericFile.noid_indexer)] = noid
|
|
30
|
+
index_collection_pids(solr_doc)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def can_be_member_of_collection?(collection)
|
|
35
|
+
collection == self ? false : true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# ------------------------------------------------
|
|
40
|
+
# overriding method from active-fedora:
|
|
41
|
+
# lib/active_fedora/semantic_node.rb
|
|
42
|
+
#
|
|
43
|
+
# The purpose of this override is to ensure that
|
|
44
|
+
# a collection cannot contain itself.
|
|
45
|
+
#
|
|
46
|
+
# TODO: After active-fedora 7.0 is released, this
|
|
47
|
+
# logic can be moved into a before_add callback.
|
|
48
|
+
# ------------------------------------------------
|
|
49
|
+
def add_relationship(predicate, target, literal=false)
|
|
50
|
+
return if self == target
|
|
51
|
+
super
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
def can_add_to_members?(collectible)
|
|
56
|
+
collectible.can_be_member_of_collection?(self)
|
|
57
|
+
rescue NoMethodError
|
|
58
|
+
false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|