diff --git a/Gemfile b/Gemfile index c3526e134..556764e9c 100644 --- a/Gemfile +++ b/Gemfile @@ -13,7 +13,7 @@ gem 'blacklight_dynamic_sitemap' gem 'blacklight-hierarchy' gem 'blacklight-marc', '~>8.1' # slider limit support -gem 'blacklight_range_limit', '~> 8.2' +gem 'blacklight_range_limit', '~> 9.0.0' gem 'bootstrap', '~> 5.2.0' gem 'psych' # Capistrano @@ -23,6 +23,7 @@ gem 'capistrano-passenger' # support for non-marc citations (e.g. SCSB records) gem 'citeproc-ruby' gem 'csl-styles' +gem 'deprecation' # Authentication and authorization gem 'devise' gem 'devise-guests' diff --git a/Gemfile.lock b/Gemfile.lock index 01ba36572..166ff963c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -144,9 +144,8 @@ GEM blacklight_dynamic_sitemap (1.0.0) blacklight (> 7.0) rails - blacklight_range_limit (8.5.0) + blacklight_range_limit (9.0.0) blacklight (>= 7.25.2, < 9) - deprecation view_component (>= 2.54, < 4) bootstrap (5.2.3) autoprefixer-rails (>= 9.1.0) @@ -771,7 +770,7 @@ DEPENDENCIES blacklight-hierarchy blacklight-marc (~> 8.1) blacklight_dynamic_sitemap - blacklight_range_limit (~> 8.2) + blacklight_range_limit (~> 9.0.0) bootstrap (~> 5.2.0) capistrano (~> 3.4) capistrano-passenger @@ -781,6 +780,7 @@ DEPENDENCIES coveralls_reborn csl-styles datadog + deprecation devise devise-guests ed25519 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 5d48ac7d9..666120589 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -18,10 +18,8 @@ // // Required by Blacklight //= require blacklight/blacklight -//= require 'blacklight_range_limit' //= require babel/polyfill // -//= require ./custom_range_limit.js //= require ./orangelight.js // Wait for the modal to open diff --git a/app/assets/javascripts/custom_range_limit.js b/app/assets/javascripts/custom_range_limit.js deleted file mode 100644 index fd9f91142..000000000 --- a/app/assets/javascripts/custom_range_limit.js +++ /dev/null @@ -1,11 +0,0 @@ -// this doesn't really do anything -// because it doesn't load properly -// it's supposed to customize the look -// of the range limit plot - -$('.blacklight-pub_date').data('plot-config', { - selection: { color: '#C0FF83' }, - colors: ['#ffffff'], - series: { lines: { fillColor: 'rgba(255,255,255, 0.5)' } }, - grid: { color: '#aaaaaa', tickColor: '#aaaaaa', borderWidth: 0 }, -}) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 55f3e3a85..5abf601b7 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -10,7 +10,6 @@ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new * file per style scope. * - *= require 'blacklight_range_limit' *= require_self */ diff --git a/app/assets/stylesheets/components/search--advanced.scss b/app/assets/stylesheets/components/search--advanced.scss index 8f4315156..1d63ceff0 100644 --- a/app/assets/stylesheets/components/search--advanced.scss +++ b/app/assets/stylesheets/components/search--advanced.scss @@ -100,17 +100,6 @@ white-space: normal; } -.dropdown-item.divider { - pointer-events: none; - border-bottom: 1px solid black; - margin-bottom: 4px; -} - -.row .range_limit input.range_begin, -.row .range_limit input.range_end { - width: 5em; -} - @include media-breakpoint-up(md) { .two-columns-md { display: flex; diff --git a/app/components/numismatics_search_form_component.html.erb b/app/components/numismatics_search_form_component.html.erb index 1241625b5..89b439e13 100644 --- a/app/components/numismatics_search_form_component.html.erb +++ b/app/components/numismatics_search_form_component.html.erb @@ -15,11 +15,8 @@ <% end %>
<%= label_tag pub_date_field.parameterize, :class => "col-sm-4 control-label advanced-facet-label" do %>Year<% end %> -
- - <%= BlacklightRangeLimit::RangeFormComponent.new(facet_field: pub_date_presenter).render_range_input(:begin) %> – - - <%= BlacklightRangeLimit::RangeFormComponent.new(facet_field: pub_date_presenter).render_range_input(:end) %> +
+ <%= render RangeFormComponent.new(facet_field: pub_date_presenter) %>
diff --git a/app/components/numismatics_search_form_component.rb b/app/components/numismatics_search_form_component.rb index 953fac6b5..4e67c60b8 100644 --- a/app/components/numismatics_search_form_component.rb +++ b/app/components/numismatics_search_form_component.rb @@ -22,8 +22,12 @@ def pub_date_field blacklight_config.facet_fields['pub_date_start_sort'] end + def pub_date_field_display_facet + @response.aggregations[pub_date_field] + end + def pub_date_presenter - view_context.facet_field_presenter(pub_date_field, {}) + view_context.facet_field_presenter(pub_date_field, pub_date_field_display_facet) end def initialize_constraints diff --git a/app/components/orangelight/advanced_search_form_component.html.erb b/app/components/orangelight/advanced_search_form_component.html.erb index f5f5e9458..f7850bed0 100644 --- a/app/components/orangelight/advanced_search_form_component.html.erb +++ b/app/components/orangelight/advanced_search_form_component.html.erb @@ -37,11 +37,8 @@ <% end %>
<%= label_tag pub_date_field.parameterize, :class => "col-sm-4 control-label advanced-facet-label" do %>Publication year<% end %> -
- - <%= BlacklightRangeLimit::RangeFormComponent.new(facet_field: pub_date_presenter).render_range_input(:begin) %> – - - <%= BlacklightRangeLimit::RangeFormComponent.new(facet_field: pub_date_presenter).render_range_input(:end) %> +
+ <%= render RangeFormComponent.new(facet_field: pub_date_presenter) %>
@@ -52,6 +49,5 @@
<%= submit_tag t('blacklight.advanced_search.form.search_btn_html'), class: 'btn btn-primary advanced-search-submit', id: "advanced-search-submit" %>
-
<% end %> diff --git a/app/components/orangelight/advanced_search_form_component.rb b/app/components/orangelight/advanced_search_form_component.rb index a34c68b1c..173385689 100644 --- a/app/components/orangelight/advanced_search_form_component.rb +++ b/app/components/orangelight/advanced_search_form_component.rb @@ -15,8 +15,12 @@ def pub_date_field blacklight_config.facet_fields['pub_date_start_sort'] end + def pub_date_field_display_facet + @response.aggregations[pub_date_field] + end + def pub_date_presenter - view_context.facet_field_presenter(pub_date_field, {}) + view_context.facet_field_presenter(pub_date_field, pub_date_field_display_facet) end def initialize_search_field_controls diff --git a/app/components/range_form_component.html.erb b/app/components/range_form_component.html.erb new file mode 100644 index 000000000..79e2b7a7a --- /dev/null +++ b/app/components/range_form_component.html.erb @@ -0,0 +1,25 @@ +<%= render hidden_search_state %> + +
+
+
+ <%= label_tag(begin_input_name, t("blacklight.range_limit.range_begin_short"), class: 'text-muted small mb-1') %> + <%= number_field_tag(begin_input_name, + begin_value_default, + min: range_config[:min_value], + max: range_config[:max_value], + class: "form-control form-control-sm range_begin") + %> +
+ +
+ <%= label_tag(end_input_name, t("blacklight.range_limit.range_end_short"), class: 'text-muted small mb-1') %> + <%= number_field_tag(end_input_name, + end_value_default, + min: range_config[:min_value], + max: range_config[:max_value], + class: "form-control form-control-sm range_end") + %> +
+
+
diff --git a/app/components/range_form_component.rb b/app/components/range_form_component.rb new file mode 100644 index 000000000..d03c0042b --- /dev/null +++ b/app/components/range_form_component.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +# An override of the RangeFormComponent html to remove the Apply submit button +# from the advanced search and the numismatics form +class RangeFormComponent < BlacklightRangeLimit::RangeFormComponent +end diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 625c5ff98..a5192991c 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -118,10 +118,13 @@ class CatalogController < ApplicationController collapse: false, home: true, solr_params: { 'facet.mincount' => Blacklight.blacklight_yml['mincount'] || 1 }, include_in_advanced_search: true # num_segments and segments set to defaults here, included to show customizable features - config.add_facet_field 'pub_date_start_sort', label: 'Publication year', single: true, range: { + config.add_facet_field 'pub_date_start_sort', label: 'Publication year', single: true, range: true, range_config: { num_segments: 10, assumed_boundaries: [1100, Time.now.year + 1], - segments: true + segments: true, + chart_segment_border_color: 'rgb(255, 217, 96)', + chart_segment_bg_color: 'rgba(255, 217, 96, 0.5)', + show_missing_link: false } config.add_facet_field 'language_facet', label: 'Language', limit: true, include_in_advanced_search: true, suggest: true config.add_facet_field 'subject_topic_facet', label: 'Subject: Topic', limit: true, include_in_advanced_search: false, suggest: true diff --git a/app/controllers/search_history_controller.rb b/app/controllers/search_history_controller.rb index b8ee738a6..ba958f44e 100644 --- a/app/controllers/search_history_controller.rb +++ b/app/controllers/search_history_controller.rb @@ -2,6 +2,4 @@ class SearchHistoryController < ApplicationController include Blacklight::SearchHistory - - helper RangeLimitHelper end diff --git a/app/javascript/entrypoints/application.js b/app/javascript/entrypoints/application.js index 193e40439..39d629f8c 100644 --- a/app/javascript/entrypoints/application.js +++ b/app/javascript/entrypoints/application.js @@ -1,5 +1,6 @@ import OrangelightUiLoader from '../orangelight/orangelight_ui_loader.es6'; import { luxImport } from '../orangelight/lux_import'; +import BlacklightRangeLimit from 'blacklight-range-limit'; // boot stuff Blacklight.onLoad(() => { @@ -7,4 +8,6 @@ Blacklight.onLoad(() => { loader.run(); }); +BlacklightRangeLimit.init({ onLoadHandler: Blacklight.onLoad }); + luxImport(); diff --git a/package.json b/package.json index 3377bfc0e..32949c018 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,10 @@ "dependencies": { "@apollo/client": "^3.7.1", "@babel/preset-stage-3": "^7.8.3", + "@kurkle/color": "0.3.2", "@vitejs/plugin-vue": "^5.1.2", + "blacklight-range-limit": "^9.0.0", + "chart.js": "4.2.0", "graphql": "^16.8.1", "jest-environment-jsdom": "^29.4.0", "lux-design-system": "^5.11.0", diff --git a/spec/components/numismatics_search_form_component_spec.rb b/spec/components/numismatics_search_form_component_spec.rb index 3347b9ecf..362fc619b 100644 --- a/spec/components/numismatics_search_form_component_spec.rb +++ b/spec/components/numismatics_search_form_component_spec.rb @@ -37,7 +37,7 @@ expected_fields = [ 'Object Type', 'Denomination', 'Metal', 'City', 'State', 'Region', 'Ruler', 'Artist', 'Find Place', 'Year', - 'date range (starting year)', 'date range (ending year)', + 'Begin', 'End', 'Keyword' ] expect(rendered.all('label').map(&:text)).to match_array(expected_fields) diff --git a/spec/features/advanced_searching_spec.rb b/spec/features/advanced_searching_spec.rb index ab61dfde7..32114af3c 100644 --- a/spec/features/advanced_searching_spec.rb +++ b/spec/features/advanced_searching_spec.rb @@ -25,8 +25,9 @@ expect(page).to have_selector('label', exact_text: 'Advanced search terms - second parameter') expect(page).to have_selector('label', exact_text: 'Options for advanced search - third parameter') expect(page).to have_selector('label', exact_text: 'Advanced search terms - third parameter') - expect(page).to have_selector('label', exact_text: 'Publication date range (starting year)') - expect(page).to have_selector('label', exact_text: 'Publication date range (ending year)') + expect(page).to have_selector('label', exact_text: 'Publication year') + expect(page).to have_selector('label', exact_text: 'Begin') + expect(page).to have_selector('label', exact_text: 'End') end it 'allows searching by format', js: true do diff --git a/spec/features/facets_spec.rb b/spec/features/facets_spec.rb index e8f58c4b2..a2f6f0724 100644 --- a/spec/features/facets_spec.rb +++ b/spec/features/facets_spec.rb @@ -69,12 +69,11 @@ end describe 'publication date facet' do - describe 'view larger option' do + describe 'it has a submit button' do it 'shows a large version of the slider' do visit '/?f[format][]=Book' click_button 'Publication year' - click_link 'View larger' - expect(page).to have_selector('.modal-body .range_limit') + expect(page).to have_selector('.submit') end end end diff --git a/yarn.lock b/yarn.lock index 4be7d5436..c1ca04b5d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1536,6 +1536,16 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@kurkle/color@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.2.tgz#5acd38242e8bde4f9986e7913c8fdf49d3aa199f" + integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== + +"@kurkle/color@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.4.tgz#4d4ff677e1609214fc71c580125ddddd86abcabf" + integrity sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w== + "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" @@ -2357,6 +2367,13 @@ balanced-match@^2.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== +blacklight-range-limit@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/blacklight-range-limit/-/blacklight-range-limit-9.0.0.tgz#89e1e7d36cef7fef205d0266fa0591006801f05d" + integrity sha512-Qr+3Rr0jOeoSNN5kN3fmZYqggAgpPpu3LX7HAHkCtrkHG5gPKqV+TK8BLvila9zueAs77dbWV7AmucZEvE+IBg== + dependencies: + chart.js "^ 4.4.1" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -2448,6 +2465,20 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +chart.js@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.2.0.tgz#dd281b2ce890bff32f3e249cf2972a1e74bc032c" + integrity sha512-wbtcV+QKeH0F7gQZaCJEIpsNriFheacouJQTVIjITi3eQA8bTlIBoknz0+dgV79aeKLNMAX+nDslIVE/nJ3rzA== + dependencies: + "@kurkle/color" "^0.3.0" + +"chart.js@^ 4.4.1": + version "4.4.7" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.7.tgz#7a01ee0b4dac3c03f2ab0589af888db296d896fa" + integrity sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw== + dependencies: + "@kurkle/color" "^0.3.0" + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz"