diff --git a/.circleci/config.yml b/.circleci/config.yml
index efdddc876..e0790427d 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -5,7 +5,7 @@ orbs:
jobs:
checkout_code:
docker:
- - image: cimg/ruby:2.7
+ - image: cimg/ruby:3.2
working_directory: ~/app
steps:
- restore_cache:
@@ -25,7 +25,7 @@ jobs:
- app/**/*
bundle:
docker:
- - image: cimg/ruby:2.7-browsers
+ - image: cimg/ruby:3.2-browsers
environment:
BUNDLE_PATH: vendor/bundle
working_directory: ~/app
@@ -35,6 +35,10 @@ jobs:
- run:
name: Update Debian Packages for ClamAV
command: |
+ # Temporary fix for Google Bundle
+ wget -O - "https://dl.google.com/linux/linux_signing_key.pub" | sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg
+ echo 'c1db534ce40334b793cdbecba6459ddd21ebccbdef24dc603d6b0debcfb8f746 /etc/apt/keyrings/google-chrome.gpg'
+ echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null
sudo apt-get update &&
sudo apt-get install -y software-properties-common build-essential make apt-utils
- restore_cache:
@@ -59,7 +63,7 @@ jobs:
- app/**/*
lint:
docker:
- - image: cimg/ruby:2.7-browsers
+ - image: cimg/ruby:3.2-browsers
environment:
BUNDLE_PATH: vendor/bundle
working_directory: ~/app
@@ -72,11 +76,12 @@ jobs:
- run: bundle exec rubocop
test:
docker:
- - image: cimg/ruby:2.7-browsers
+ - image: cimg/ruby:3.2-browsers
environment:
BUNDLE_PATH: vendor/bundle
CAPYBARA_APP_HOST: http://test:3001
FEDORA_URL: http://localhost:8080/fcrepo/rest
+ IIIF_SERVER_BASE_URL: http://localhost:8080/iiif
HONEYCOMB_DATASET: od2-rails-test
HONEYCOMB_DEBUG: "true"
HONEYCOMB_WRITEKEY: buzzzzzzzzzzzzzzzz
@@ -115,6 +120,10 @@ jobs:
- run:
name: Update Debian Packages
command: |
+ # Temporary fix for Google Bundle
+ wget -O - "https://dl.google.com/linux/linux_signing_key.pub" | sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg
+ echo 'c1db534ce40334b793cdbecba6459ddd21ebccbdef24dc603d6b0debcfb8f746 /etc/apt/keyrings/google-chrome.gpg'
+ echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] https://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null
sudo apt-get update -qq
sudo apt-get upgrade -qq
sudo apt-get install -y -f software-properties-common build-essential nodejs make apt-utils ffmpeg tesseract-ocr poppler-utils
@@ -230,28 +239,28 @@ jobs:
- docker/check:
registry: registry.library.oregonstate.edu
- docker/pull:
- images: registry.library.oregonstate.edu/od2_web_cache:latest
+ images: registry.library.oregonstate.edu/od2_web_v4_cache:latest
ignore-docker-pull-error: true
- docker/build:
registry: registry.library.oregonstate.edu
- image: od2_web
+ image: od2_web_v4
tag: $TAG
extra_build_args: --build-arg RAILS_ENV=$RAILS_ENV --build-arg FEDORA_URL=$FEDORA_URL --build-arg DEPLOYED_VERSION=$DEPLOYED_VERSION
- cache_from: registry.library.oregonstate.edu/od2_web_cache:latest
+ cache_from: registry.library.oregonstate.edu/od2_web_v4_cache:latest
- docker/push:
registry: registry.library.oregonstate.edu
- image: od2_web
+ image: od2_web_v4
tag: $TAG
- docker/build:
registry: registry.library.oregonstate.edu
- image: od2_web_cache
+ image: od2_web_v4_cache
tag: "latest"
extra_build_args: --target gems
- cache_from: registry.library.oregonstate.edu/od2_web_cache:latest
+ cache_from: registry.library.oregonstate.edu/od2_web_v4_cache:latest
step-name: "Rebuild cache image"
- docker/push:
registry: registry.library.oregonstate.edu
- image: od2_web_cache
+ image: od2_web_v4_cache
tag: latest
step-name: "Push cache image"
workflows:
@@ -269,7 +278,9 @@ workflows:
- lint
filters:
branches:
- ignore: master
+ ignore:
+ - master
+ - feature/hyrax-4
- build_and_push_beavernetes:
name: Build and push application image to Beavernetes image repository
requires:
@@ -281,5 +292,6 @@ workflows:
- master
- /infra\/.*/
- /staging\/.*/
- repo: od2_web
+ - feature/hyrax-4
+ repo: od2_web_v4
environment: production
diff --git a/.rubocop.yml b/.rubocop.yml
index be886c7f5..7e0a7bf5b 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -19,6 +19,8 @@ AllCops:
- 'app/parsers/bulkrax/bagit_complex_parser.rb'
- 'app/views/bulkrax/**/*'
- 'app/parsers/bulkrax/parser_export_record_set.rb'
+ - 'app/jobs/bulkrax/export_work_job.rb'
+ - 'spec/controllers/hyrax/homepage_controller_spec.rb'
Metrics/BlockLength:
ExcludedMethods: ['included']
@@ -43,6 +45,9 @@ Style/CollectionMethods:
Style/ClassAndModuleChildren:
Enabled: false
+Layout/BlockAlignment:
+ Enabled: false
+
Style/SingleLineBlockParams:
Enabled: false
@@ -124,6 +129,9 @@ Lint/StructNewOverride:
Style/ExponentialNotation:
Enabled: false
+RSpec/VerifiedDoubles:
+ Enabled: false
+
Style/HashEachMethods:
Enabled: false
diff --git a/Dockerfile b/Dockerfile
index 947bc38d8..048b021e6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,12 +1,12 @@
-FROM ruby:2.7-alpine3.15 as bundler
+FROM ruby:3.2.1-alpine3.16 AS bundler
# Necessary for bundler to operate properly
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
-RUN gem install bundler -v '2.3.26'
+RUN gem install bundler -v '2.6.8'
-FROM bundler as dependencies
+FROM bundler AS dependencies
# The alpine way
RUN apk --no-cache update && apk --no-cache upgrade && \
@@ -56,9 +56,9 @@ ARG UID=8083
ARG GID=8083
# Create an app user so our program doesn't run as root.
-RUN addgroup -g "$GID" app && adduser -h /data -u "$UID" -G app -D -H app
+RUN addgroup -g 8083 app && adduser -h /data -u 8083 -G app -D -H app
-FROM dependencies as gems
+FROM dependencies AS gems
# Make sure the new user has complete control over all code, including
# bundler's installed assets
@@ -76,7 +76,7 @@ COPY --chown=app:app build/install_gems.sh /data/build
USER app
RUN /data/build/install_gems.sh
-FROM gems as code
+FROM gems AS code
# Add the rest of the code
COPY --chown=app:app . /data
@@ -92,14 +92,14 @@ FROM code
USER root
RUN apk --no-cache update && apk del autoconf automake gcc g++ --purge && \
rm -rf /data/docker-compose.override.yml-example /data/README.md \
- /data/.env.example /data/config/nginx /data/config/solr
+ /data/.env.example /data/config/nginx /data/config/solr
USER app
ENV DEPLOYED_VERSION=${DEPLOYED_VERSION}
RUN if [ "${RAILS_ENV}" = "production" ]; then \
- echo "Precompiling assets with $RAILS_ENV environment"; \
- rm -rf /data/.cache; \
- RAILS_ENV=$RAILS_ENV SECRET_KEY_BASE=temporary bundle exec rails assets:precompile; \
- for f in public/assets/4*.html; do cp $f public/${f:14:3}.html; done; \
+ echo "Precompiling assets with $RAILS_ENV environment"; \
+ rm -rf /data/.cache; \
+ RAILS_ENV=$RAILS_ENV SECRET_KEY_BASE=temporary bundle exec rails assets:precompile; \
+ for f in public/assets/4*.html; do cp $f public/${f:14:3}.html; done; \
fi
diff --git a/Gemfile b/Gemfile
index 50dcb3206..0eff491ae 100644
--- a/Gemfile
+++ b/Gemfile
@@ -8,7 +8,7 @@ end
# TODO: make this a version specification once we get a new release cut
# gem 'hydra-derivatives', git: 'https://github.com/samvera/hydra-derivatives.git'
-gem "blacklight_range_limit", "~> 6"
+gem "blacklight_range_limit", "~> 7.0"
gem 'browse-everything'
# coffee-rails is a requirement for Hyrax or one of its dependencies but hasn't
# been added to either gemspecs
@@ -18,38 +18,43 @@ gem 'dalli', '~> 3.2.3'
gem 'devise'
gem "edtf", "~> 3.0"
gem 'hydra-role-management'
-gem 'hyrax', '3.6.0'
-gem 'hyrax-migrator', github: 'OregonDigital/hyrax-migrator', branch: 'master'
+gem 'hyrax', '~> 4.0'
+# gem 'hyrax-migrator', github: 'OregonDigital/hyrax-migrator', branch: 'master'
gem 'jquery-rails'
gem 'sassc-rails'
gem 'chosen-rails'
gem 'pg'
-gem 'puma', '~> 5.6'
-gem 'rails', '~> 5.2'
-gem 'rsolr', '>= 1.0'
-gem 'sass-rails', '~> 5.0'
-gem 'sidekiq', '~> 6.4'
+gem 'puma', '~> 4.3.8'
+gem 'rails', '~> 6.0.6'
+gem 'rsolr', '>= 1.0', '< 3'
+gem 'sidekiq', '~> 6.0'
+gem 'sprockets', '3.7.2'
gem 'streamio-ffmpeg'
gem 'stemmify'
gem 'tzinfo-data'
gem 'uglifier', '>= 1.3.0'
gem 'ruby-oembed'
-gem 'blacklight_advanced_search', '~> 6.4'
+gem 'bootstrap', '~> 4.0'
+gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
+gem 'blacklight_advanced_search'
gem 'blacklight-oembed'
gem 'blacklight_dynamic_sitemap'
gem 'triplestore-adapter', git: 'https://github.com/osulp/triplestore-adapter'
-gem 'faraday_middleware', '~> 0.10.0'
-gem 'blacklight_iiif_search', '~> 1.0'
+gem 'faraday_middleware'
+gem 'blacklight_iiif_search', '~> 2.0'
gem 'rubyzip', '~> 2'
gem 'zip_tricks', '~> 5.3'
gem 'bulkrax', github: 'samvera/bulkrax', ref: '62517e67876d96c7a0bedb288370a4f10eb0b4c4' #v8.2.0
-gem 'willow_sword', github: 'notch8/willow_sword'
+# gem 'willow_sword', github: 'notch8/willow_sword', branch: 'main'
+gem 'jquery-datatables-rails'
+gem 'concurrent-ruby', '1.3.4'
# Security Audit updates
gem 'loofah', '>= 2.2.3'
# Login gems
-gem 'omniauth-rails_csrf_protection', '~> 0.1'
+gem 'omniauth'
+gem 'omniauth-rails_csrf_protection', '~> 1.0'
gem 'omniauth-cas'
gem 'omniauth-saml'
@@ -78,23 +83,23 @@ end
group :development, :test do
gem 'axe-matchers'
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
- gem 'capybara', '~> 2.17'
+ gem 'capybara', '~> 3.29'
gem 'factory_bot_rails'
gem 'poltergeist'
gem 'pry-byebug'
gem 'pry-rails'
- gem 'rspec-rails'
+ gem 'rspec-rails', '~> 5.0'
gem 'rubocop', '~> 0.93'
gem 'rubocop-rspec'
- gem 'selenium-webdriver', '~> 3'
+ gem 'selenium-webdriver', '~> 4.4'
gem 'webmock'
+ gem 'rails-controller-testing'
end
group :test do
gem 'coveralls', '~> 0.8'
gem 'database_cleaner', '~> 1.8'
gem 'equivalent-xml'
- gem 'rails-controller-testing'
gem 'rspec'
gem 'rspec-mocks'
gem 'rspec-activemodel-mocks'
diff --git a/Gemfile.lock b/Gemfile.lock
index ccecc0985..2927568e2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,28 +1,3 @@
-GIT
- remote: https://github.com/OregonDigital/hyrax-migrator.git
- revision: 87173608ae1def27fe9f97bc46e10cd4f72c6a3a
- branch: master
- specs:
- hyrax-migrator (0.1.0)
- aasm
- actionview (>= 5.2, < 7.0)
- aws-sdk-s3
- bagit
- haml
- rails (~> 5.2)
- rdf
- rubyzip
- sidekiq
-
-GIT
- remote: https://github.com/notch8/willow_sword.git
- revision: 74f7684ff9ca96251f341e50a3afc34b5bd312cc
- specs:
- willow_sword (0.2.0)
- bagit (~> 0.4.1)
- rails (>= 5.1.6)
- rubyzip (>= 1.0.0)
-
GIT
remote: https://github.com/osulp/triplestore-adapter
revision: 30081b1ff8beb169c88dd338f71ecb0e1bad8a73
@@ -60,37 +35,48 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- aasm (5.5.0)
- concurrent-ruby (~> 1.0)
- actioncable (5.2.8.1)
- actionpack (= 5.2.8.1)
+ actioncable (6.0.6.1)
+ actionpack (= 6.0.6.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailer (5.2.8.1)
- actionpack (= 5.2.8.1)
- actionview (= 5.2.8.1)
- activejob (= 5.2.8.1)
+ actionmailbox (6.0.6.1)
+ actionpack (= 6.0.6.1)
+ activejob (= 6.0.6.1)
+ activerecord (= 6.0.6.1)
+ activestorage (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
+ mail (>= 2.7.1)
+ actionmailer (6.0.6.1)
+ actionpack (= 6.0.6.1)
+ actionview (= 6.0.6.1)
+ activejob (= 6.0.6.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
- actionpack (5.2.8.1)
- actionview (= 5.2.8.1)
- activesupport (= 5.2.8.1)
+ actionpack (6.0.6.1)
+ actionview (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (5.2.8.1)
- activesupport (= 5.2.8.1)
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
+ actiontext (6.0.6.1)
+ actionpack (= 6.0.6.1)
+ activerecord (= 6.0.6.1)
+ activestorage (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
+ nokogiri (>= 1.8.5)
+ actionview (6.0.6.1)
+ activesupport (= 6.0.6.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
- active-fedora (13.3.0)
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
+ active-fedora (14.0.1)
active-triples (>= 0.11.0, < 2.0.0)
activemodel (>= 5.1)
activesupport (>= 5.1)
deprecation
- faraday (~> 0.12)
+ faraday (>= 1.0)
faraday-encoding (>= 0.0.5)
ldp (>= 0.7.0, < 2)
rsolr (>= 1.1.2, < 3)
@@ -103,57 +89,57 @@ GEM
active_encode (0.8.2)
rails
sprockets (< 4)
- activejob (5.2.8.1)
- activesupport (= 5.2.8.1)
+ activejob (6.0.6.1)
+ activesupport (= 6.0.6.1)
globalid (>= 0.3.6)
- activemodel (5.2.8.1)
- activesupport (= 5.2.8.1)
- activemodel-serializers-xml (1.0.2)
- activemodel (> 5.x)
- activesupport (> 5.x)
+ activemodel (6.0.6.1)
+ activesupport (= 6.0.6.1)
+ activemodel-serializers-xml (1.0.3)
+ activemodel (>= 5.0.0.a)
+ activesupport (>= 5.0.0.a)
builder (~> 3.1)
- activerecord (5.2.8.1)
- activemodel (= 5.2.8.1)
- activesupport (= 5.2.8.1)
- arel (>= 9.0)
- activerecord-import (1.5.0)
+ activerecord (6.0.6.1)
+ activemodel (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
+ activerecord-import (2.0.0)
activerecord (>= 4.2)
- activestorage (5.2.8.1)
- actionpack (= 5.2.8.1)
- activerecord (= 5.2.8.1)
- marcel (~> 1.0.0)
- activesupport (5.2.8.1)
+ activestorage (6.0.6.1)
+ actionpack (= 6.0.6.1)
+ activejob (= 6.0.6.1)
+ activerecord (= 6.0.6.1)
+ marcel (~> 1.0)
+ activesupport (6.0.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
- addressable (2.8.5)
- public_suffix (>= 2.0.2, < 6.0)
+ zeitwerk (~> 2.2, >= 2.2.2)
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
almond-rails (0.3.0)
rails (>= 4.2)
- anyway_config (2.5.3)
- ruby-next-core (>= 0.14.0)
- arel (9.0.0)
+ anyway_config (2.6.4)
+ ruby-next-core (~> 1.0)
ast (2.4.2)
- autoprefixer-rails (10.4.15.0)
+ autoprefixer-rails (10.4.19.0)
execjs (~> 2)
- awesome_nested_set (3.5.0)
- activerecord (>= 4.0.0, < 7.1)
- aws-eventstream (1.2.0)
- aws-partitions (1.831.0)
- aws-sdk-core (3.185.0)
- aws-eventstream (~> 1, >= 1.0.2)
- aws-partitions (~> 1, >= 1.651.0)
- aws-sigv4 (~> 1.5)
+ awesome_nested_set (3.8.0)
+ activerecord (>= 4.0.0, < 8.1)
+ aws-eventstream (1.3.0)
+ aws-partitions (1.1042.0)
+ aws-sdk-core (3.216.1)
+ aws-eventstream (~> 1, >= 1.3.0)
+ aws-partitions (~> 1, >= 1.992.0)
+ aws-sigv4 (~> 1.9)
jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.72.0)
- aws-sdk-core (~> 3, >= 3.184.0)
- aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.136.0)
- aws-sdk-core (~> 3, >= 3.181.0)
+ aws-sdk-kms (1.97.0)
+ aws-sdk-core (~> 3, >= 3.216.0)
+ aws-sigv4 (~> 1.5)
+ aws-sdk-s3 (1.178.0)
+ aws-sdk-core (~> 3, >= 3.216.0)
aws-sdk-kms (~> 1)
- aws-sigv4 (~> 1.6)
- aws-sigv4 (1.6.0)
+ aws-sigv4 (~> 1.5)
+ aws-sigv4 (1.11.0)
aws-eventstream (~> 1, >= 1.0.2)
axe-matchers (2.6.1)
dumb_delegator (~> 0.8)
@@ -169,84 +155,83 @@ GEM
bagit (0.4.6)
docopt (~> 0.5.0)
validatable (~> 1.6)
- bcp47 (0.3.3)
- i18n
- bcrypt (3.1.19)
+ base64 (0.2.0)
+ bcp47_spec (0.2.1)
+ bcrypt (3.1.20)
+ bigdecimal (3.1.9)
bindex (0.8.1)
- blacklight (6.25.0)
- bootstrap-sass (~> 3.2)
+ blacklight (7.38.0)
deprecation
globalid
+ hashdiff
+ i18n (>= 1.7.0)
jbuilder (~> 2.7)
kaminari (>= 0.15)
- nokogiri (~> 1.6)
- rails (>= 4.2, < 6)
- rsolr (>= 1.0.6, < 3)
- twitter-typeahead-rails (= 0.11.1.pre.corejavascript)
- blacklight-access_controls (0.6.2)
- blacklight (~> 6.0)
- cancancan (~> 1.8)
+ ostruct (>= 0.3.2)
+ rails (>= 5.1, < 7.3)
+ view_component (>= 2.66, < 4)
+ blacklight-access_controls (6.0.1)
+ blacklight (> 6.0, < 8)
+ cancancan (>= 1.8)
deprecation (~> 1.0)
- blacklight-gallery (0.12.0)
- blacklight (~> 6.3)
- bootstrap-sass (~> 3.0)
- openseadragon (>= 0.2.0)
- rails
- blacklight-oembed (0.3.0)
- blacklight (>= 5.0, < 7)
- bootstrap-sass (~> 3.0)
+ blacklight-gallery (4.0.2)
+ blacklight (~> 7.17)
+ rails (>= 5.1, < 8)
+ blacklight-oembed (1.4.2)
+ blacklight (>= 7.25, < 9)
rails
ruby-oembed
- blacklight_advanced_search (6.4.1)
- blacklight (~> 6.0, >= 6.0.1)
+ blacklight_advanced_search (7.0.0)
+ blacklight (~> 7.0)
parslet
- blacklight_dynamic_sitemap (0.6.0)
- blacklight (> 6.0)
+ blacklight_dynamic_sitemap (1.0.0)
+ blacklight (> 7.0)
rails
- blacklight_iiif_search (1.0.0)
- blacklight (~> 6.0)
+ blacklight_iiif_search (2.1.0)
+ blacklight (~> 7.0)
+ ffi (~> 1.16.3)
iiif-presentation
- rails (>= 4.2, < 6)
- blacklight_oai_provider (6.1.1)
- blacklight (~> 6.0)
- oai (~> 1.0)
- blacklight_range_limit (6.5.0)
- blacklight (~> 6.10)
- jquery-rails
- rails (>= 4.2, < 6)
- bootstrap-sass (3.4.1)
- autoprefixer-rails (>= 5.2.1)
- sassc (>= 2.0.0)
- bootstrap_form (5.1.0)
- actionpack (>= 5.2)
- activemodel (>= 5.2)
+ rails (>= 6, < 7.3)
+ blacklight_oai_provider (7.0.2)
+ blacklight (~> 7.0)
+ oai (~> 1.2)
+ rexml
+ blacklight_range_limit (7.9.1)
+ blacklight (~> 7.0)
+ bootstrap (4.6.2.1)
+ autoprefixer-rails (>= 9.1.0)
+ popper_js (>= 1.16.1, < 2)
+ bootstrap_form (5.2.3)
+ actionpack (>= 6.0)
+ activemodel (>= 6.0)
breadcrumbs_on_rails (3.0.1)
- browse-everything (1.2.0)
+ browse-everything (1.5.0)
addressable (~> 2.5)
aws-sdk-s3
dropbox_api (>= 0.1.20)
google-apis-drive_v3
googleauth (>= 0.6.6, < 2.0)
- rails (>= 4.2, < 7.1)
+ rails (>= 4.2, < 8.1)
ruby-box
signet (~> 0.8)
typhoeus
- builder (3.2.4)
+ builder (3.3.0)
byebug (11.1.3)
- cancancan (1.17.0)
- capybara (2.18.0)
+ cancancan (3.6.1)
+ capybara (3.40.0)
addressable
+ matrix
mini_mime (>= 0.1.3)
- nokogiri (>= 1.3.3)
- rack (>= 1.0.0)
- rack-test (>= 0.5.4)
- xpath (>= 2.0, < 4.0)
+ nokogiri (~> 1.11)
+ rack (>= 1.6.0)
+ rack-test (>= 0.6.3)
+ regexp_parser (>= 1.5, < 3.0)
+ xpath (~> 3.2)
carrierwave (1.3.4)
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
ssrf_filter (~> 1.0, < 1.1.0)
- childprocess (3.0.0)
chosen-rails (1.10.0)
coffee-rails (>= 3.2)
railties (>= 3.0)
@@ -263,8 +248,8 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.12.2)
- concurrent-ruby (1.2.2)
- connection_pool (2.4.1)
+ concurrent-ruby (1.3.4)
+ connection_pool (2.5.0)
cookieconsent (0.1.0)
coveralls (0.8.23)
json (>= 1.8, < 3)
@@ -272,39 +257,34 @@ GEM
term-ansicolor (~> 1.3)
thor (>= 0.19.4, < 2.0)
tins (~> 1.6)
- crack (0.4.5)
+ crack (1.0.0)
+ bigdecimal
rexml
crass (1.0.6)
- dalli (3.2.6)
+ csv (3.3.2)
+ dalli (3.2.8)
database_cleaner (1.99.0)
- date (3.3.4)
+ date (3.4.1)
declarative (0.0.20)
- declarative-builder (0.1.0)
- declarative-option (< 0.2.0)
- declarative-option (0.1.0)
denormalize_fields (1.3.0)
activerecord (>= 4.1.14, < 8.0.0)
deprecation (1.1.0)
activesupport
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
- devise (4.9.2)
+ devise (4.9.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
responders
warden (~> 1.2.3)
- diff-lcs (1.5.0)
- disposable (0.4.7)
+ diff-lcs (1.5.1)
+ disposable (0.6.3)
declarative (>= 0.0.9, < 1.0.0)
- declarative-builder (< 0.2.0)
- declarative-option (< 0.2.0)
- representable (>= 2.4.0, <= 3.1.0)
- uber (< 0.2.0)
- docile (1.4.0)
+ representable (>= 3.1.1, < 4)
+ docile (1.4.1)
docopt (0.5.0)
- domain_name (0.5.20190701)
- unf (>= 0.0.5, < 1.0.0)
+ domain_name (0.6.20240107)
draper (4.0.2)
actionpack (>= 5.0)
activemodel (>= 5.0)
@@ -329,16 +309,15 @@ GEM
dry-core (~> 0.4)
dry-equalizer (~> 0.2)
dry-inflector (0.3.0)
- dry-initializer (3.1.1)
+ dry-initializer (3.2.0)
dry-logic (1.3.0)
concurrent-ruby (~> 1.0)
dry-core (~> 0.9, >= 0.9)
zeitwerk (~> 2.6)
- dry-matcher (0.9.0)
- dry-core (~> 0.4, >= 0.4.8)
- dry-monads (1.4.0)
+ dry-monads (1.5.0)
concurrent-ruby (~> 1.0)
- dry-core (~> 0.7)
+ dry-core (~> 0.9, >= 0.9)
+ zeitwerk (~> 2.6)
dry-schema (1.11.3)
concurrent-ruby (~> 1.0)
dry-configurable (~> 0.16, >= 0.16)
@@ -352,11 +331,6 @@ GEM
dry-types (~> 1.6)
ice_nine (~> 0.11)
zeitwerk (~> 2.6)
- dry-transaction (0.13.3)
- dry-container (>= 0.2.8)
- dry-events (>= 0.1.0)
- dry-matcher (>= 0.7.0)
- dry-monads (>= 0.4.0)
dry-types (1.6.1)
concurrent-ruby (~> 1.0)
dry-container (~> 0.3)
@@ -372,178 +346,206 @@ GEM
dry-schema (~> 1.11, >= 1.11.0)
zeitwerk (~> 2.6)
dumb_delegator (0.8.1)
- ebnf (2.3.5)
+ ebnf (2.4.0)
htmlentities (~> 4.3)
- rdf (~> 3.2)
+ rdf (~> 3.3)
scanf (~> 1.0)
- sxp (~> 1.2)
+ sxp (~> 1.3)
unicode-types (~> 1.8)
- edtf (3.1.1)
- activesupport (>= 3.0, < 8.0)
+ edtf (3.2.0)
+ activesupport (>= 3.0, < 9.0)
equalizer (0.0.11)
equivalent-xml (0.6.0)
nokogiri (>= 1.4.3)
- erubi (1.12.0)
+ erubi (1.13.1)
ethon (0.16.0)
ffi (>= 1.15.0)
- excon (0.104.0)
- execjs (2.9.1)
- factory_bot (6.2.1)
+ excon (1.2.3)
+ execjs (2.10.0)
+ factory_bot (6.5.0)
activesupport (>= 5.0.0)
- factory_bot_rails (6.2.0)
- factory_bot (~> 6.2.0)
+ factory_bot_rails (6.4.4)
+ factory_bot (~> 6.5)
railties (>= 5.0.0)
- faraday (0.17.6)
- multipart-post (>= 1.2, < 3)
- faraday-encoding (0.0.5)
+ faraday (1.10.4)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-encoding (0.0.6)
faraday
- faraday_middleware (0.10.1)
- faraday (>= 0.7.4, < 1.0)
- ffi (1.16.2)
- ffi-compiler (1.0.1)
- ffi (>= 1.0.0)
+ faraday-excon (1.1.0)
+ faraday-follow_redirects (0.3.0)
+ faraday (>= 1, < 3)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.1.0)
+ multipart-post (~> 2.0)
+ faraday-net_http (1.0.2)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.1)
+ faraday (~> 1.0)
+ ffi (1.16.3)
+ ffi-compiler (1.3.2)
+ ffi (>= 1.15.5)
rake
- flipflop (2.7.1)
+ flipflop (2.8.0)
activesupport (>= 4.0)
terminal-table (>= 1.8)
flot-rails (0.0.7)
jquery-rails
- font-awesome-rails (4.7.0.8)
- railties (>= 3.2, < 8.0)
- font-awesome-sass (6.4.2)
+ font-awesome-rails (4.7.0.9)
+ railties (>= 3.2, < 9.0)
+ font-awesome-sass (6.7.2)
sassc (~> 2.0)
- geocoder (1.8.2)
+ geocoder (1.8.5)
+ base64 (>= 0.1.0)
+ csv (>= 3.0.0)
globalid (1.1.0)
activesupport (>= 5.0)
- google-apis-core (0.11.1)
+ google-apis-core (0.16.0)
addressable (~> 2.5, >= 2.5.1)
- googleauth (>= 0.16.2, < 2.a)
- httpclient (>= 2.8.1, < 3.a)
+ googleauth (~> 1.9)
+ httpclient (>= 2.8.3, < 3.a)
mini_mime (~> 1.0)
+ mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
- rexml
- webrick
- google-apis-drive_v3 (0.44.0)
- google-apis-core (>= 0.11.0, < 2.a)
- googleauth (1.8.1)
- faraday (>= 0.17.3, < 3.a)
+ google-apis-drive_v3 (0.61.0)
+ google-apis-core (>= 0.15.0, < 2.a)
+ google-cloud-env (2.2.1)
+ faraday (>= 1.0, < 3.a)
+ google-logging-utils (0.1.0)
+ googleauth (1.13.0)
+ faraday (>= 1.0, < 3.a)
+ google-cloud-env (~> 2.2)
+ google-logging-utils (~> 0.1)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
- haml (6.2.0)
+ haml (6.3.0)
temple (>= 0.8.2)
thor
tilt
- hashdiff (1.0.1)
+ hamster (3.0.0)
+ concurrent-ruby (~> 1.0)
+ hashdiff (1.1.2)
hashie (5.0.0)
hiredis (0.6.3)
- honeycomb-beeline (3.0.0)
- libhoney (>= 1.14.2)
+ honeycomb-beeline (3.1.0)
+ libhoney (>= 2.3.0)
htmlentities (4.3.4)
- http (5.1.1)
+ http (5.2.0)
addressable (~> 2.8)
+ base64 (~> 0.1)
http-cookie (~> 1.0)
http-form_data (~> 2.2)
- llhttp-ffi (~> 0.4.0)
- http-cookie (1.0.5)
+ llhttp-ffi (~> 0.5.0)
+ http-cookie (1.0.8)
domain_name (~> 0.5)
http-form_data (2.3.0)
http_logger (0.7.0)
httpclient (2.8.3)
- hydra-access-controls (11.0.7)
+ hydra-access-controls (12.1.0)
active-fedora (>= 10.0.0)
- activesupport (>= 4, < 6)
- blacklight (>= 5.16)
- blacklight-access_controls (~> 0.6.0)
- cancancan (~> 1.8)
+ activesupport (>= 5.2, < 7.1)
+ blacklight-access_controls (~> 6.0)
+ cancancan (>= 1.8, < 4)
deprecation (~> 1.0)
- hydra-core (11.0.7)
- hydra-access-controls (= 11.0.7)
- railties (>= 4.0.0, < 6)
- hydra-derivatives (3.7.0)
- active-fedora (>= 11.5.6, != 13.2.1, != 13.2.0, != 13.1.3, != 13.1.2, != 13.1.1, != 13.1.0, != 13.0.0, != 12.2.1, != 12.2.0, != 12.1.1, != 12.1.0, != 12.0.3, != 12.0.2, != 12.0.1, != 12.0.0)
+ hydra-core (12.1.0)
+ hydra-access-controls (= 12.1.0)
+ railties (>= 5.2, < 7.1)
+ hydra-derivatives (3.8.0)
+ active-fedora (>= 14.0)
+ active-triples (>= 1.2)
active_encode (~> 0.1)
- activesupport (>= 4.0, < 7)
+ activesupport (>= 4.0, < 7.1)
addressable (~> 2.5)
deprecation
mime-types (> 2.0, < 4.0)
mini_magick (>= 3.2, < 5)
- hydra-editor (5.0.5)
+ hydra-editor (6.3.0)
active-fedora (>= 9.0.0)
- activerecord (~> 5.0)
+ activerecord (>= 5.2, < 8.0)
almond-rails (~> 0.1)
- cancancan (~> 1.8)
- rails (>= 5, < 6)
- simple_form (>= 4.1.0, < 6.0)
- sprockets (~> 3.7)
+ cancancan
+ psych (~> 3.3, < 4)
+ rails (>= 5.2, < 8.0)
+ simple_form (>= 4.1.0, < 5.2)
+ sprockets (>= 3.7)
sprockets-es6
- hydra-file_characterization (1.1.2)
+ hydra-file_characterization (1.2.0)
activesupport (>= 3.0.0)
- hydra-head (11.0.7)
- hydra-access-controls (= 11.0.7)
- hydra-core (= 11.0.7)
- rails (>= 5.2, < 6.1)
- hydra-pcdm (1.3.0)
- active-fedora (>= 10, < 15)
+ hydra-head (12.1.0)
+ hydra-access-controls (= 12.1.0)
+ hydra-core (= 12.1.0)
+ rails (>= 5.2, < 7.1)
+ hydra-pcdm (1.4.0)
+ active-fedora (>= 10)
mime-types (>= 1)
rdf-vocab
- hydra-role-management (1.1.0)
- blacklight
+ hydra-role-management (1.2.0)
+ blacklight (< 8)
bootstrap_form
bundler (>= 1.5)
cancancan
json (>= 1.8)
psych (~> 3.0)
- hydra-works (2.1.0)
- activesupport (>= 5.2, < 7.1)
- hydra-derivatives (~> 3.6)
+ hydra-works (2.2.0)
+ activesupport (>= 5.2, < 8.0)
+ hydra-derivatives (>= 3.6)
hydra-file_characterization (~> 1.0)
hydra-pcdm (>= 0.9)
- hyrax (3.6.0)
- active-fedora (~> 13.1, >= 13.1.2)
+ hyrax (4.0.0)
+ active-fedora (~> 14.0)
almond-rails (~> 0.1)
awesome_nested_set (~> 3.1)
- blacklight (~> 6.14)
- blacklight-gallery (~> 0.7)
+ blacklight (~> 7.29)
+ blacklight-gallery (~> 4.0)
breadcrumbs_on_rails (~> 3.0)
browse-everything (>= 0.16, < 2.0)
carrierwave (~> 1.0)
clipboard-rails (~> 1.5)
+ connection_pool (~> 2.4)
draper (~> 4.0)
dry-equalizer (~> 0.2)
dry-events (~> 0.2.0)
- dry-monads (< 1.5)
+ dry-monads (~> 1.5)
dry-struct (~> 1.0)
- dry-transaction (~> 0.11)
dry-validation (~> 1.3)
flipflop (~> 2.3)
flot-rails (~> 0.0.6)
font-awesome-rails (~> 4.2)
hydra-derivatives (~> 3.3)
- hydra-editor (~> 5.0, >= 5.0.4)
- hydra-file_characterization (~> 1.1.2)
- hydra-head (~> 11.0, >= 11.0.1)
+ hydra-editor (~> 6.0)
+ hydra-file_characterization (~> 1.1)
+ hydra-head (~> 12.0)
hydra-works (>= 0.16)
iiif_manifest (>= 0.3, < 2.0)
- jquery-datatables-rails (~> 3.4)
- jquery-ui-rails (~> 6.0)
- json-ld (< 3.2)
json-schema
- kaminari_route_prefix (~> 0.1.1)
legato (~> 0.3)
linkeddata
mailboxer (~> 0.12)
nest (~> 3.1)
- noid-rails (~> 3.0.0)
+ noid-rails (~> 3.0)
oauth
oauth2 (~> 1.2)
+ openseadragon
posix-spawn
- power_converter (~> 0.1, >= 0.1.2)
- psych (~> 3.3)
qa (~> 5.5, >= 5.5.1)
- rails (~> 5.0)
+ rails (~> 6.0)
rails_autolink (~> 1.1)
rdf-rdfxml
rdf-vocab (~> 3.0)
@@ -553,23 +555,24 @@ GEM
reform (~> 2.3)
reform-rails (~> 0.2.0)
retriable (>= 2.9, < 4.0)
- samvera-nesting_indexer (~> 2.0)
- sass-rails (~> 5.0)
+ sass-rails (~> 6.0)
select2-rails (~> 3.5)
signet
+ sprockets (~> 3.7)
tinymce-rails (~> 5.10)
- valkyrie (~> 2, >= 2.1.1)
- i18n (1.14.1)
+ valkyrie (~> 3.0.1)
+ view_component (~> 2.74.1)
+ i18n (1.14.7)
concurrent-ruby (~> 1.0)
ice_nine (0.11.2)
iiif-presentation (1.1.0)
activesupport (>= 3.2.18)
faraday (>= 0.9)
json
- iiif_manifest (1.3.1)
+ iiif_manifest (1.6.0)
activesupport (>= 4)
iso8601 (0.9.1)
- jbuilder (2.11.5)
+ jbuilder (2.13.0)
actionview (>= 5.0.0)
activesupport (>= 5.0.0)
jmespath (1.6.2)
@@ -582,23 +585,24 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- jquery-ui-rails (6.0.1)
- railties (>= 3.2.16)
- json (2.6.3)
- json-canonicalization (0.4.0)
- json-ld (3.1.10)
+ json (2.9.1)
+ json-canonicalization (1.0.0)
+ json-ld (3.3.2)
htmlentities (~> 4.3)
- json-canonicalization (~> 0.2)
+ json-canonicalization (~> 1.0)
link_header (~> 0.0, >= 0.0.8)
- multi_json (~> 1.14)
- rack (~> 2.0)
- rdf (~> 3.1)
- json-ld-preloaded (3.1.6)
- json-ld (~> 3.1)
- rdf (~> 3.1)
- json-schema (4.1.1)
- addressable (>= 2.8)
- jwt (2.7.1)
+ multi_json (~> 1.15)
+ rack (>= 2.2, < 4)
+ rdf (~> 3.3)
+ rexml (~> 3.2)
+ json-ld-preloaded (3.3.1)
+ json-ld (~> 3.3)
+ rdf (~> 3.3)
+ json-schema (5.1.1)
+ addressable (~> 2.8)
+ bigdecimal (~> 3.1)
+ jwt (2.10.1)
+ base64
kaminari (1.2.2)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.2.2)
@@ -611,22 +615,21 @@ GEM
activerecord
kaminari-core (= 1.2.2)
kaminari-core (1.2.2)
- kaminari_route_prefix (0.1.1)
- kaminari (~> 1.0)
language_list (1.2.1)
- ld-patch (3.2.2)
- ebnf (~> 2.3)
- rdf (~> 3.2)
- rdf-xsd (~> 3.2)
- sparql (~> 3.2)
- sxp (~> 1.2)
- ldp (1.0.3)
+ ld-patch (3.3.0)
+ ebnf (~> 2.4)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ sparql (~> 3.3)
+ sxp (~> 1.3)
+ ldp (1.2.1)
deprecation
- faraday
+ faraday (>= 1)
http_logger
- json-ld
- rdf (>= 1.1)
+ json-ld (~> 3.2)
+ rdf (~> 3.2)
rdf-isomorphic
+ rdf-ldp (>= 2.1)
rdf-turtle
rdf-vocab (>= 0.8)
slop
@@ -637,48 +640,48 @@ GEM
rdf-vocab (~> 3.0)
legato (0.7.0)
multi_json
- libhoney (2.2.0)
+ libhoney (2.4.0)
addressable (~> 2.0)
excon
http (>= 2.0, < 6.0)
libxml-ruby (3.2.4)
link_header (0.0.8)
- linkeddata (3.1.6)
- equivalent-xml (~> 0.6)
- json-ld (~> 3.1, >= 3.1.10)
- json-ld-preloaded (~> 3.1, >= 3.1.6)
- ld-patch (~> 3.1, >= 3.1.3)
- nokogiri (~> 1.12)
- rdf (~> 3.1, >= 3.1.15)
- rdf-aggregate-repo (~> 3.1)
- rdf-isomorphic (~> 3.1, >= 3.1.1)
- rdf-json (~> 3.1)
- rdf-microdata (~> 3.1, >= 3.1.4)
- rdf-n3 (~> 3.1, >= 3.1.2)
- rdf-normalize (~> 0.4)
- rdf-ordered-repo (~> 3.1, >= 3.1.1)
- rdf-rdfa (~> 3.1, >= 3.1.3)
- rdf-rdfxml (~> 3.1, >= 3.1.1)
- rdf-reasoner (~> 0.7, >= 0.7.2)
- rdf-tabular (~> 3.1, >= 3.1.1)
- rdf-trig (~> 3.1, >= 3.1.2)
- rdf-trix (~> 3.1, >= 3.1.1)
- rdf-turtle (~> 3.1, >= 3.1.3)
- rdf-vocab (~> 3.1, >= 3.1.14)
- rdf-xsd (~> 3.1, >= 3.1.1)
- shacl (~> 0.1, >= 0.1.1)
- shex (~> 0.6, >= 0.6.4)
- sparql (~> 3.1, >= 3.1.8)
- sparql-client (~> 3.1, >= 3.1.2)
- listen (3.1.5)
+ linkeddata (3.3.1)
+ json-ld (~> 3.3)
+ json-ld-preloaded (~> 3.3)
+ ld-patch (~> 3.3)
+ nokogiri (~> 1.15, >= 1.15.4)
+ rdf (~> 3.2, >= 3.2.1)
+ rdf-aggregate-repo (~> 3.2)
+ rdf-hamster-repo (~> 3.3)
+ rdf-isomorphic (~> 3.3)
+ rdf-json (~> 3.3)
+ rdf-microdata (~> 3.3)
+ rdf-n3 (~> 3.3)
+ rdf-normalize (~> 0.7)
+ rdf-ordered-repo (~> 3.3)
+ rdf-rdfa (~> 3.3)
+ rdf-rdfxml (~> 3.3)
+ rdf-reasoner (~> 0.9)
+ rdf-tabular (~> 3.3)
+ rdf-trig (~> 3.3)
+ rdf-trix (~> 3.3)
+ rdf-turtle (~> 3.3)
+ rdf-vocab (~> 3.3)
+ rdf-xsd (~> 3.3)
+ shacl (~> 0.4)
+ shex (~> 0.8)
+ sparql (~> 3.3)
+ sparql-client (~> 3.3)
+ yaml-ld (~> 0.0)
+ listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
- ruby_dep (~> 1.2)
- llhttp-ffi (0.4.0)
+ llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
- logger (1.5.3)
- loofah (2.21.3)
+ logger (1.6.5)
+ loofah (2.24.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
@@ -689,44 +692,49 @@ GEM
mailboxer (0.15.1)
carrierwave (>= 0.5.8)
rails (>= 5.0.0)
- marcel (1.0.2)
+ marcel (1.0.4)
matrix (0.4.2)
- method_source (1.0.0)
- mime-types (3.5.1)
+ method_source (1.1.0)
+ mime-types (3.6.0)
+ logger
mime-types-data (~> 3.2015)
- mime-types-data (3.2023.1003)
- mini_magick (4.12.0)
+ mime-types-data (3.2025.0107)
+ mini_magick (4.13.2)
mini_mime (1.1.5)
- minitest (5.20.0)
+ minitest (5.25.4)
multi_json (1.15.0)
- multi_xml (0.6.0)
- multipart-post (2.3.0)
+ multi_xml (0.7.1)
+ bigdecimal (~> 3.1)
+ multipart-post (2.4.1)
+ mustermann (2.0.2)
+ ruby2_keywords (~> 0.0.1)
+ mutex_m (0.3.0)
nest (3.2.0)
redic
- net-http-persistent (4.0.2)
+ net-http-persistent (4.0.5)
connection_pool (~> 2.2)
- net-imap (0.3.7)
+ net-imap (0.5.5)
date
net-protocol
net-pop (0.1.2)
net-protocol
- net-protocol (0.2.1)
+ net-protocol (0.2.2)
timeout
- net-smtp (0.4.0)
+ net-smtp (0.5.0)
net-protocol
- nio4r (2.5.9)
+ nio4r (2.7.4)
noid (0.9.0)
- noid-rails (3.0.3)
- actionpack (>= 5.0.0, < 7)
+ noid-rails (3.2.0)
+ actionpack (>= 5.0.0, < 8)
noid (~> 0.9)
- nokogiri (1.15.4-aarch64-linux)
+ nokogiri (1.18.2-aarch64-linux-musl)
racc (~> 1.4)
- nokogiri (1.15.4-x86_64-linux)
+ nokogiri (1.18.2-x86_64-linux-gnu)
racc (~> 1.4)
- oai (1.1.0)
+ oai (1.2.1)
builder (>= 3.1.0)
- faraday
- faraday_middleware
+ faraday (< 3)
+ faraday-follow_redirects (>= 0.3.0, < 2)
oauth (1.1.0)
oauth-tty (~> 1.0, >= 1.0.1)
snaky_hash (~> 2.0)
@@ -739,73 +747,87 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 4)
- omniauth (1.9.2)
+ omniauth (2.1.2)
hashie (>= 3.4.6)
- rack (>= 1.6.2, < 3)
- omniauth-cas (2.0.0)
- addressable (~> 2.3)
- nokogiri (~> 1.5)
- omniauth (~> 1.2)
- omniauth-rails_csrf_protection (0.1.2)
+ rack (>= 2.2.3)
+ rack-protection
+ omniauth-cas (3.0.0)
+ addressable (~> 2.8)
+ nokogiri (~> 1.12)
+ omniauth (~> 2.1)
+ omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
- omniauth (>= 1.3.1)
- omniauth-saml (1.10.3)
- omniauth (~> 1.3, >= 1.3.2)
- ruby-saml (~> 1.9)
+ omniauth (~> 2.0)
+ omniauth-saml (2.2.1)
+ omniauth (~> 2.1)
+ ruby-saml (~> 1.17)
openseadragon (0.6.0)
rails (> 3.2.0)
orm_adapter (0.5.0)
os (1.1.4)
- parallel (1.23.0)
- parser (3.2.2.3)
+ ostruct (0.6.1)
+ parallel (1.26.3)
+ parser (3.3.7.0)
ast (~> 2.4.1)
racc
parslet (2.0.0)
- pg (1.5.4)
+ pg (1.5.9)
poltergeist (1.18.1)
capybara (>= 2.1, < 4)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
+ popper_js (1.16.1)
posix-spawn (0.3.15)
- power_converter (0.1.2)
- prometheus-client (4.2.1)
+ prometheus-client (4.2.3)
+ base64
pry (0.14.2)
coderay (~> 1.1)
method_source (~> 1.0)
pry-byebug (3.10.1)
byebug (~> 11.0)
pry (>= 0.13, < 0.15)
- pry-rails (0.3.9)
- pry (>= 0.10.4)
+ pry-rails (0.3.11)
+ pry (>= 0.13.0)
psych (3.3.4)
- public_suffix (5.0.3)
- puma (5.6.7)
+ public_suffix (6.0.1)
+ puma (4.3.12)
nio4r (~> 2.0)
- qa (5.10.0)
+ qa (5.14.0)
activerecord-import
deprecation
faraday (< 3.0, != 2.0.0)
geocoder
ldpath
nokogiri (~> 1.6)
- rails (>= 5.0, < 7.1)
+ rails (>= 5.0, < 8.1)
rdf
- racc (1.7.1)
- rack (2.2.8)
- rack-test (2.1.0)
+ racc (1.8.1)
+ rack (2.2.10)
+ rack-linkeddata (3.3.0)
+ linkeddata (~> 3.3)
+ rack (>= 2.2, < 4)
+ rack-rdf (~> 3.3)
+ rack-protection (2.2.4)
+ rack
+ rack-rdf (3.3.0)
+ rack (>= 2.2, < 4)
+ rdf (~> 3.3)
+ rack-test (2.2.0)
rack (>= 1.3)
- rails (5.2.8.1)
- actioncable (= 5.2.8.1)
- actionmailer (= 5.2.8.1)
- actionpack (= 5.2.8.1)
- actionview (= 5.2.8.1)
- activejob (= 5.2.8.1)
- activemodel (= 5.2.8.1)
- activerecord (= 5.2.8.1)
- activestorage (= 5.2.8.1)
- activesupport (= 5.2.8.1)
+ rails (6.0.6.1)
+ actioncable (= 6.0.6.1)
+ actionmailbox (= 6.0.6.1)
+ actionmailer (= 6.0.6.1)
+ actionpack (= 6.0.6.1)
+ actiontext (= 6.0.6.1)
+ actionview (= 6.0.6.1)
+ activejob (= 6.0.6.1)
+ activemodel (= 6.0.6.1)
+ activerecord (= 6.0.6.1)
+ activestorage (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
bundler (>= 1.3.0)
- railties (= 5.2.8.1)
+ railties (= 6.0.6.1)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
@@ -815,85 +837,100 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
- rails-html-sanitizer (1.6.0)
+ rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
- nokogiri (~> 1.14)
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
rails_autolink (1.1.8)
actionview (> 3.1)
activesupport (> 3.1)
railties (> 3.1)
- railties (5.2.8.1)
- actionpack (= 5.2.8.1)
- activesupport (= 5.2.8.1)
+ railties (6.0.6.1)
+ actionpack (= 6.0.6.1)
+ activesupport (= 6.0.6.1)
method_source
rake (>= 0.8.7)
- thor (>= 0.19.0, < 2.0)
+ thor (>= 0.20.3, < 2.0)
rainbow (3.1.1)
- rake (13.0.6)
+ rake (13.2.1)
rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
+ rb-inotify (0.11.1)
ffi (~> 1.0)
- rdf (3.2.11)
+ rdf (3.3.2)
+ bcp47_spec (~> 0.2)
+ bigdecimal (~> 3.1, >= 3.1.5)
link_header (~> 0.0, >= 0.0.8)
- rdf-aggregate-repo (3.2.1)
- rdf (~> 3.2)
- rdf-isomorphic (3.2.1)
- rdf (~> 3.2)
- rdf-json (3.2.0)
+ rdf-aggregate-repo (3.3.0)
+ rdf (~> 3.3)
+ rdf-hamster-repo (3.3.0)
+ hamster (~> 3.0)
+ rdf (~> 3.3)
+ rdf-isomorphic (3.3.0)
+ rdf (~> 3.3)
+ rdf-json (3.3.0)
+ rdf (~> 3.3)
+ rdf-ldp (2.1.0)
+ json-ld (~> 3.2)
+ ld-patch (~> 3.2)
+ link_header (~> 0.0, >= 0.0.8)
+ rack (~> 2.2)
+ rack-linkeddata (~> 3.1)
rdf (~> 3.2)
- rdf-microdata (3.2.1)
+ rdf-turtle (~> 3.2)
+ rdf-vocab (~> 3.2)
+ sinatra (~> 2.1)
+ rdf-microdata (3.3.0)
htmlentities (~> 4.3)
- nokogiri (~> 1.13)
- rdf (~> 3.2)
- rdf-rdfa (~> 3.2)
- rdf-xsd (~> 3.2)
- rdf-n3 (3.2.1)
- ebnf (~> 2.2)
- rdf (~> 3.2)
- sparql (~> 3.2)
- sxp (~> 1.2)
- rdf-normalize (0.6.1)
- rdf (~> 3.2)
- rdf-ordered-repo (3.2.1)
- rdf (~> 3.2, >= 3.2.1)
- rdf-rdfa (3.2.3)
- haml (>= 5.2, < 7)
+ nokogiri (~> 1.15, >= 1.15.4)
+ rdf (~> 3.3)
+ rdf-rdfa (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-n3 (3.3.0)
+ ebnf (~> 2.4)
+ rdf (~> 3.3)
+ sparql (~> 3.3)
+ sxp (~> 1.3)
+ rdf-normalize (0.7.0)
+ rdf (~> 3.3)
+ rdf-ordered-repo (3.3.0)
+ rdf (~> 3.3)
+ rdf-rdfa (3.3.0)
+ haml (~> 6.1)
htmlentities (~> 4.3)
- rdf (~> 3.2)
- rdf-aggregate-repo (~> 3.2)
- rdf-vocab (~> 3.2)
- rdf-xsd (~> 3.2)
- rdf-rdfxml (3.2.2)
- builder (~> 3.2)
+ rdf (~> 3.3)
+ rdf-aggregate-repo (~> 3.3)
+ rdf-vocab (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-rdfxml (3.3.0)
+ builder (~> 3.2, >= 3.2.4)
htmlentities (~> 4.3)
- rdf (~> 3.2)
- rdf-xsd (~> 3.2)
- rdf-reasoner (0.8.0)
- rdf (~> 3.2)
- rdf-xsd (~> 3.2)
- rdf-tabular (3.1.1)
- addressable (~> 2.3)
- bcp47 (~> 0.3, >= 0.3.3)
- json-ld (~> 3.1)
- rdf (~> 3.1)
- rdf-vocab (~> 3.1)
- rdf-xsd (~> 3.1)
- rdf-trig (3.2.0)
- ebnf (~> 2.2)
- rdf (~> 3.2)
- rdf-turtle (~> 3.2)
- rdf-trix (3.2.0)
- rdf (~> 3.2)
- rdf-xsd (~> 3.2)
- rdf-turtle (3.2.1)
- ebnf (~> 2.3)
- rdf (~> 3.2)
- rdf-vocab (3.2.7)
- rdf (~> 3.2, >= 3.2.4)
- rdf-xsd (3.2.1)
- rdf (~> 3.2)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-reasoner (0.9.0)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-tabular (3.3.0)
+ addressable (~> 2.8)
+ bcp47_spec (~> 0.2)
+ json-ld (~> 3.3)
+ rdf (~> 3.3)
+ rdf-vocab (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-trig (3.3.0)
+ ebnf (~> 2.4)
+ rdf (~> 3.3)
+ rdf-turtle (~> 3.3)
+ rdf-trix (3.3.0)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ rdf-turtle (3.3.0)
+ ebnf (~> 2.4)
+ rdf (~> 3.3)
+ rdf-vocab (3.3.2)
+ rdf (~> 3.3)
+ rdf-xsd (3.3.0)
+ rdf (~> 3.3)
rexml (~> 3.2)
- recaptcha (5.15.0)
+ recaptcha (5.19.0)
redic (1.5.3)
hiredis
redis (4.8.1)
@@ -901,44 +938,44 @@ GEM
redis (>= 4)
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
- reform (2.5.0)
- disposable (>= 0.4.2, < 0.5.0)
- representable (>= 2.4.0, < 3.1.0)
+ reform (2.6.2)
+ disposable (>= 0.5.0, < 1.0.0)
+ representable (>= 3.1.1, < 4)
uber (< 0.2.0)
reform-rails (0.2.6)
activemodel (>= 5.0)
reform (>= 2.3.1, < 3.0.0)
- regexp_parser (2.8.1)
- representable (3.0.4)
+ regexp_parser (2.10.0)
+ representable (3.2.0)
declarative (< 0.1.0)
- declarative-option (< 0.2.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
- request_store (1.5.1)
+ request_store (1.7.0)
rack (>= 1.4)
- responders (3.1.0)
+ responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
retriable (3.1.2)
- rexml (3.2.6)
- rsolr (2.5.0)
+ rexml (3.4.0)
+ rsolr (2.6.0)
builder (>= 2.1.2)
faraday (>= 0.9, < 3, != 2.0.0)
- rspec (3.12.0)
- rspec-core (~> 3.12.0)
- rspec-expectations (~> 3.12.0)
- rspec-mocks (~> 3.12.0)
- rspec-activemodel-mocks (1.1.0)
+ rspec (3.13.0)
+ rspec-core (~> 3.13.0)
+ rspec-expectations (~> 3.13.0)
+ rspec-mocks (~> 3.13.0)
+ rspec-activemodel-mocks (1.2.1)
activemodel (>= 3.0)
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
- rspec-core (3.12.2)
- rspec-support (~> 3.12.0)
- rspec-expectations (3.12.3)
+ rspec-core (3.13.2)
+ rspec-support (~> 3.13.0)
+ rspec-expectations (3.13.3)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.12.0)
- rspec-mocks (3.12.6)
+ rspec-support (~> 3.13.0)
+ rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.12.0)
+ rspec-support (~> 3.13.0)
rspec-rails (5.1.2)
actionpack (>= 5.2)
activesupport (>= 5.2)
@@ -947,7 +984,7 @@ GEM
rspec-expectations (~> 3.10)
rspec-mocks (~> 3.10)
rspec-support (~> 3.10)
- rspec-support (3.12.1)
+ rspec-support (3.13.2)
rspec_junit_formatter (0.6.0)
rspec-core (>= 2, < 4, != 2.12.0)
rubocop (0.93.1)
@@ -959,8 +996,8 @@ GEM
rubocop-ast (>= 0.6.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0)
- rubocop-ast (1.29.0)
- parser (>= 3.2.1.0)
+ rubocop-ast (1.37.0)
+ parser (>= 3.3.1.0)
rubocop-rspec (1.44.1)
rubocop (~> 0.87)
rubocop-ast (>= 0.7.1)
@@ -969,28 +1006,16 @@ GEM
json
multipart-post
oauth2
- ruby-next-core (0.15.3)
- ruby-oembed (0.16.1)
+ ruby-next-core (1.1.0)
+ ruby-oembed (0.18.1)
ruby-progressbar (1.13.0)
- ruby-saml (1.15.0)
+ ruby-saml (1.17.0)
nokogiri (>= 1.13.10)
rexml
ruby2_keywords (0.0.5)
- ruby_dep (1.5.0)
- rubyzip (2.3.2)
- samvera-nesting_indexer (2.0.0)
- dry-equalizer
- sass (3.7.4)
- sass-listen (~> 4.0.0)
- sass-listen (4.0.0)
- rb-fsevent (~> 0.9, >= 0.9.4)
- rb-inotify (~> 0.9, >= 0.9.7)
- sass-rails (5.1.0)
- railties (>= 5.2.0)
- sass (~> 3.1)
- sprockets (>= 2.8, < 4.0)
- sprockets-rails (>= 2.0, < 4.0)
- tilt (>= 1.1, < 3)
+ rubyzip (2.4.1)
+ sass-rails (6.0.0)
+ sassc-rails (~> 2.1, >= 2.1.1)
sassc (2.4.0)
ffi (~> 1.9)
sassc-rails (2.1.2)
@@ -1001,35 +1026,38 @@ GEM
tilt
scanf (1.0.0)
select2-rails (3.5.11)
- selenium-webdriver (3.142.7)
- childprocess (>= 0.5, < 4.0)
- rubyzip (>= 1.2.2)
- shacl (0.1.1)
- json-ld (~> 3.1, >= 3.1.7)
- rdf (~> 3.1, >= 3.1.8)
- sparql (~> 3.1)
- sxp (~> 1.1)
- shex (0.6.4)
- ebnf (~> 2.1, >= 2.2)
+ selenium-webdriver (4.28.0)
+ base64 (~> 0.2)
+ logger (~> 1.4)
+ rexml (~> 3.2, >= 3.2.5)
+ rubyzip (>= 1.2.2, < 3.0)
+ websocket (~> 1.0)
+ shacl (0.4.1)
+ json-ld (~> 3.3)
+ rdf (~> 3.3)
+ sparql (~> 3.3)
+ sxp (~> 1.2)
+ shex (0.8.0)
+ ebnf (~> 2.4)
htmlentities (~> 4.3)
- json-ld (~> 3.1)
- json-ld-preloaded (~> 3.1)
- rdf (~> 3.1)
- rdf-xsd (~> 3.1)
- sparql (~> 3.1)
- sxp (~> 1.1)
+ json-ld (~> 3.3)
+ json-ld-preloaded (~> 3.3)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ sparql (~> 3.3)
+ sxp (~> 1.3)
shoulda-matchers (4.5.1)
activesupport (>= 4.2.0)
- sidekiq (6.5.10)
+ sidekiq (6.5.12)
connection_pool (>= 2.2.5, < 3)
rack (~> 2.0)
redis (>= 4.5.0, < 5)
- signet (0.18.0)
+ signet (0.19.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
- simple_form (5.2.0)
+ simple_form (5.1.0)
actionpack (>= 5.2)
activemodel (>= 5.2)
simplecov (0.16.1)
@@ -1037,6 +1065,11 @@ GEM
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
+ sinatra (2.2.4)
+ mustermann (~> 2.0)
+ rack (~> 2.2)
+ rack-protection (= 2.2.4)
+ tilt (~> 2.0)
slop (4.10.1)
snaky_hash (2.0.1)
hashie
@@ -1044,18 +1077,18 @@ GEM
sniffer (0.5.0)
anyway_config (>= 1.0)
dry-initializer (~> 3)
- sparql (3.2.6)
+ sparql (3.3.0)
builder (~> 3.2, >= 3.2.4)
- ebnf (~> 2.3, >= 2.3.5)
+ ebnf (~> 2.4)
logger (~> 1.5)
- rdf (~> 3.2, >= 3.2.11)
- rdf-aggregate-repo (~> 3.2, >= 3.2.1)
- rdf-xsd (~> 3.2)
- sparql-client (~> 3.2, >= 3.2.2)
- sxp (~> 1.2, >= 1.2.4)
- sparql-client (3.2.2)
+ rdf (~> 3.3)
+ rdf-aggregate-repo (~> 3.3)
+ rdf-xsd (~> 3.3)
+ sparql-client (~> 3.3)
+ sxp (~> 1.3)
+ sparql-client (3.3.0)
net-http-persistent (~> 4.0, >= 4.0.2)
- rdf (~> 3.2, >= 3.2.11)
+ rdf (~> 3.3)
sprockets (3.7.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
@@ -1071,50 +1104,48 @@ GEM
stemmify (0.0.2)
streamio-ffmpeg (3.0.2)
multi_json (~> 1.8)
- sxp (1.2.4)
+ sxp (1.3.0)
matrix (~> 0.4)
- rdf (~> 3.2)
+ rdf (~> 3.3)
sync (0.5.0)
- temple (0.10.2)
- term-ansicolor (1.7.1)
+ temple (0.10.3)
+ term-ansicolor (1.11.2)
tins (~> 1.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
- thor (1.2.2)
+ thor (1.3.2)
thread_safe (0.3.6)
- tilt (2.3.0)
- timeout (0.4.0)
- tins (1.32.1)
+ tilt (2.6.0)
+ timeout (0.4.3)
+ tins (1.38.0)
+ bigdecimal
sync
- tinymce-rails (5.10.7.1)
+ tinymce-rails (5.10.9)
railties (>= 3.1.1)
+ trailblazer-option (0.1.2)
twitter-typeahead-rails (0.11.1.pre.corejavascript)
actionpack (>= 3.1)
jquery-rails
railties (>= 3.1)
- typhoeus (1.4.0)
+ typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (1.2.11)
thread_safe (~> 0.1)
- tzinfo-data (1.2023.3)
+ tzinfo-data (1.2025.1)
tzinfo (>= 1.0.0)
uber (0.1.0)
- uglifier (4.2.0)
+ uglifier (4.2.1)
execjs (>= 0.3.0, < 3)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
- unicode-types (1.9.0)
+ unicode-types (1.10.0)
validatable (1.6.7)
- valkyrie (2.2.0)
+ valkyrie (3.0.3)
activemodel
activesupport
- disposable (~> 0.4.5)
- draper
dry-struct
dry-types (~> 1.0)
- faraday (< 1.0)
+ faraday (>= 0.9, < 3, != 2.0.0)
+ faraday-multipart
json
json-ld
railties
@@ -1123,7 +1154,11 @@ GEM
reform (~> 2.2)
reform-rails
vcr (5.1.0)
- version_gem (1.1.3)
+ version_gem (1.1.4)
+ view_component (2.74.1)
+ activesupport (>= 5.0.0, < 8.0)
+ concurrent-ruby (~> 1.0)
+ method_source (~> 1.0)
virtus (1.0.5)
axiom-types (~> 0.1)
coercible (~> 1.0)
@@ -1131,29 +1166,30 @@ GEM
equalizer (~> 0.0, >= 0.0.9)
warden (1.2.9)
rack (>= 2.0.9)
- web-console (3.7.0)
- actionview (>= 5.0)
- activemodel (>= 5.0)
+ web-console (4.2.1)
+ actionview (>= 6.0.0)
+ activemodel (>= 6.0.0)
bindex (>= 0.4.0)
- railties (>= 5.0)
- webmock (3.19.1)
+ railties (>= 6.0.0)
+ webmock (3.24.0)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
- webrick (1.8.1)
- websocket-driver (0.7.6)
+ websocket (1.2.11)
+ websocket-driver (0.7.7)
+ base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
- yabeda (0.12.0)
+ yabeda (0.13.1)
anyway_config (>= 1.0, < 3)
concurrent-ruby
dry-initializer
- yabeda-http_requests (0.2.0)
+ yabeda-http_requests (0.2.1)
sniffer
yabeda
- yabeda-prometheus (0.9.0)
+ yabeda-prometheus (0.9.1)
prometheus-client (>= 3.0, < 5.0)
rack
yabeda (~> 0.10)
@@ -1166,11 +1202,16 @@ GEM
anyway_config (>= 1.3, < 3)
railties
yabeda (~> 0.8)
- yabeda-sidekiq (0.10.0)
+ yabeda-sidekiq (0.12.0)
anyway_config (>= 1.3, < 3)
sidekiq
yabeda (~> 0.6)
- zeitwerk (2.6.12)
+ yaml-ld (0.0.3)
+ json-ld (~> 3.3)
+ psych (>= 3.3)
+ rdf (~> 3.3)
+ rdf-xsd (~> 3.3)
+ zeitwerk (2.7.1)
zip_tricks (5.6.0)
PLATFORMS
@@ -1180,17 +1221,19 @@ PLATFORMS
DEPENDENCIES
axe-matchers
blacklight-oembed
- blacklight_advanced_search (~> 6.4)
+ blacklight_advanced_search
blacklight_dynamic_sitemap
- blacklight_iiif_search (~> 1.0)
+ blacklight_iiif_search (~> 2.0)
blacklight_oai_provider
- blacklight_range_limit (~> 6)
+ blacklight_range_limit (~> 7.0)
+ bootstrap (~> 4.0)
browse-everything
bulkrax!
byebug
- capybara (~> 2.17)
+ capybara (~> 3.29)
chosen-rails
coffee-rails (~> 4.2)
+ concurrent-ruby (= 1.3.4)
cookieconsent
coveralls (~> 0.8)
dalli (~> 3.2.3)
@@ -1199,52 +1242,53 @@ DEPENDENCIES
edtf (~> 3.0)
equivalent-xml
factory_bot_rails
- faraday_middleware (~> 0.10.0)
+ faraday_middleware
font-awesome-sass (~> 6.4, >= 6.4.2)
honeycomb-beeline (>= 2.10.0)
hydra-role-management
- hyrax (= 3.6.0)
- hyrax-migrator!
+ hyrax (~> 4.0)
+ jquery-datatables-rails
jquery-rails
libhoney (>= 2.1.0)
listen (>= 3.0.5, < 3.2)
loofah (>= 2.2.3)
+ omniauth
omniauth-cas
- omniauth-rails_csrf_protection (~> 0.1)
+ omniauth-rails_csrf_protection (~> 1.0)
omniauth-saml
pg
poltergeist
pry-byebug
pry-rails
- puma (~> 5.6)
- rails (~> 5.2)
+ puma (~> 4.3.8)
+ rails (~> 6.0.6)
rails-controller-testing
recaptcha
- rsolr (>= 1.0)
+ rsolr (>= 1.0, < 3)
rspec
rspec-activemodel-mocks
rspec-mocks
- rspec-rails
+ rspec-rails (~> 5.0)
rspec_junit_formatter
rubocop (~> 0.93)
rubocop-rspec
ruby-oembed
rubyzip (~> 2)
- sass-rails (~> 5.0)
sassc-rails
- selenium-webdriver (~> 3)
+ selenium-webdriver (~> 4.4)
shoulda-matchers (~> 4)
- sidekiq (~> 6.4)
+ sidekiq (~> 6.0)
simplecov (>= 0.9)
+ sprockets (= 3.7.2)
stemmify
streamio-ffmpeg
triplestore-adapter!
+ twitter-typeahead-rails (= 0.11.1.pre.corejavascript)
tzinfo-data
uglifier (>= 1.3.0)
vcr (~> 5.1)
web-console (>= 3.3.0)
webmock
- willow_sword!
yabeda
yabeda-http_requests
yabeda-prometheus
@@ -1254,4 +1298,4 @@ DEPENDENCIES
zip_tricks (~> 5.3)
BUNDLED WITH
- 2.3.26
+ 2.6.8
diff --git a/app/assets/images/blacklight/gallery.svg b/app/assets/images/blacklight/gallery.svg
new file mode 100644
index 000000000..3b3e7f742
--- /dev/null
+++ b/app/assets/images/blacklight/gallery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/blacklight/list.svg b/app/assets/images/blacklight/list.svg
new file mode 100644
index 000000000..df2da7b24
--- /dev/null
+++ b/app/assets/images/blacklight/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/blacklight/masonry.svg b/app/assets/images/blacklight/masonry.svg
new file mode 100644
index 000000000..3b3e7f742
--- /dev/null
+++ b/app/assets/images/blacklight/masonry.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/images/blacklight/tables.svg b/app/assets/images/blacklight/tables.svg
new file mode 100644
index 000000000..df2da7b24
--- /dev/null
+++ b/app/assets/images/blacklight/tables.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 3359e5ce3..b5f962b30 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -12,7 +12,12 @@
//
// Required by Blacklight
-//= require jquery
+//= require rails-ujs
+//= require jquery3
+//= require jquery-ui
+//= require popper
+//= require twitter/typeahead
+//= require bootstrap-sprockets
//= require chosen-jquery
//= require 'blacklight_advanced_search'
@@ -20,10 +25,10 @@
//= require jquery.treetable
//= require browse_everything/behavior
-//= require jquery_ujs
-//= require dataTables/jquery.dataTables
-//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
+//= require jquery.dataTables
+//= require dataTables.bootstrap4
//= require blacklight/blacklight
+//= require blacklight_gallery
//= require_directory .
//= require bulkrax/application
@@ -31,8 +36,7 @@
//= require hyrax
// Required for Hyrax override in assets/javascripts/hyrax/editor/controlled_vocabulary.es6
-//= require handlebars-v4.0.5
-
+//= require handlebars
// For blacklight_range_limit built-in JS, if you don't want it you don't need
// this:
diff --git a/app/assets/javascripts/blacklight/ajax_modal.js b/app/assets/javascripts/blacklight/ajax_modal.js
deleted file mode 100644
index 1cc655623..000000000
--- a/app/assets/javascripts/blacklight/ajax_modal.js
+++ /dev/null
@@ -1,246 +0,0 @@
-//= require blacklight/core
-
-/*
- The ajax_modal plugin can display some interactions inside a Bootstrap
- modal window, including some multi-page interactions.
-
- It supports unobtrusive Javascript, where a link or form that would have caused
- a new page load is changed to display it's results inside a modal dialog,
- by this plugin. The plugin assumes there is a Bootstrap modal div
- on the page with id #ajax-modal to use as the modal -- the standard Blacklight
- layout provides this.
-
- To make a link or form have their results display inside a modal, add
- `data-ajax-modal="trigger"` to the link or form. (Note, form itself not submit input)
- With Rails link_to helper, you'd do that like:
-
- link_to something, link, :data => {:ajax_modal => "trigger"}
-
- The results of the link href or form submit will be displayed inside
- a modal -- they should include the proper HTML markup for a bootstrap modal's
- contents. Also, you ordinarily won't want the Rails template with wrapping
- navigational elements to be used. The Rails controller could suppress
- the layout when a JS AJAX request is detected, OR the response
- can include a `
` -- only the contents
- of the container will be placed inside the modal, the rest of the
- page will be ignored.
-
- If you'd like to have a link or button that closes the modal,
- you can just add a `data-dismiss="modal"` to the link,
- standard Bootstrap convention. But you can also have
- an href on this link for non-JS contexts, we'll make sure
- inside the modal it closes the modal and the link is NOT followed.
-
- Link or forms inside the modal will ordinarily cause page loads
- when they are triggered. However, if you'd like their results
- to stay within the modal, just add `data-ajax-modal="preserve"`
- to the link or form.
-
- Here's an example of what might be returned, demonstrating most of the devices available:
-
-
-
-
-
-
Some message
- <%= link_to "This result will still be within modal", some_link, :data => {:ajax_modal => "preserve"} %>
-
-
-
-
-
-
-
- One additional feature. If the content returned from the AJAX modal load
- has an element with `data-ajax-modal=close`, that will trigger the modal
- to be closed. And if this element includes a node with class "flash_messages",
- the flash-messages node will be added to the main page inside #main-flahses.
-
- == Events
-
- We'll send out an event 'loaded.blacklight.ajax-modal' with the #ajax-modal
- dialog as the target, right after content is loaded into the modal but before
- it is shown (if not already a shown modal). In an event handler, you can
- inspect loaded content by looking inside $(this). If you call event.preventDefault(),
- we won't 'show' the dialog (although it may already have been shown, you may want to
- $(this).modal("hide") if you want to ensure hidden/closed.
-
- The data-ajax-modal=close behavior is implemented with this event, see for example.
-*/
-
-// We keep all our data in Blacklight.ajaxModal object.
-// Create lazily if someone else created first.
-if (Blacklight.ajaxModal === undefined) {
- Blacklight.ajaxModal = {};
-}
-
-
-// a Bootstrap modal div that should be already on the page hidden
-Blacklight.ajaxModal.modalSelector = "#ajax-modal";
-
-// Trigger selectors identify forms or hyperlinks that should open
-// inside a modal dialog.
-Blacklight.ajaxModal.triggerLinkSelector = "a[data-ajax-modal~=trigger],button[data-ajax-modal~=trigger], button.lightboxLink,button.more_facets_link,.ajax_modal_launch";
-Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], form.ajax_form";
-
-// preserve selectors identify forms or hyperlinks that, if activated already
-// inside a modal dialog, should have destinations remain inside the modal -- but
-// won't trigger a modal if not already in one.
-//
-// No need to repeat selectors from trigger selectors, those will already
-// be preserved. MUST be manually prefixed with the modal selector,
-// so they only apply to things inside a modal.
-Blacklight.ajaxModal.preserveLinkSelector = Blacklight.ajaxModal.modalSelector + ' a[data-ajax-modal~=preserve],button[data-ajax-modal~=preserve]';
-Blacklight.ajaxModal.preserveFormSelector = Blacklight.ajaxModal.modalSelector + ' form[data-ajax-modal~=preserve]'
-
-Blacklight.ajaxModal.containerSelector = "[data-ajax-modal~=container]";
-
-Blacklight.ajaxModal.modalCloseSelector = "[data-ajax-modal~=close], span.ajax-close-modal";
-
-// Called on fatal failure of ajax load, function returns content
-// to show to user in modal. Right now called only for extreme
-// network errors.
-Blacklight.ajaxModal.onFailure = function() {
- var contents = "";
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
- $(Blacklight.ajaxModal.modalSelector).modal('show', this.relatedObject);
- // Blacklight.ajaxModal.clickTarget = clickTarget;
-};
-
-Blacklight.ajaxModal.receiveAjax = function (contents) {
- // does it have a data- selector for container?
- // important we don't execute script tags, we shouldn't.
- // code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
- var container = $("
").
- append( jQuery.parseHTML(contents) ).find( Blacklight.ajaxModal.containerSelector ).first();
- if (container.length !== 0) {
- contents = container.html();
- }
-
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
- $(Blacklight.ajaxModal.modalSelector).attr('aria-labelledby', 'modal-title');
-
- // send custom event with the modal dialog div as the target
- var e = $.Event('loaded.blacklight.ajax-modal');
- $(Blacklight.ajaxModal.modalSelector).trigger(e);
- // if they did preventDefault, don't show the dialog
- if (e.isDefaultPrevented()) return;
-
- $(Blacklight.ajaxModal.modalSelector).modal('show', this.relatedObject);
-};
-
-
-Blacklight.ajaxModal.modalAjaxLinkClick = function(e) {
- e.preventDefault();
-
- $.ajax({
- url: $(this).attr('data-href'),
- relatedObject: this,
- })
- .fail(Blacklight.ajaxModal.onFailure)
- .done(Blacklight.ajaxModal.receiveAjax)
-};
-
-Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
- e.preventDefault();
-
- $.ajax({
- url: $(this).attr('action'),
- data: $(this).serialize(),
- type: $(this).attr('method') // POST
- })
- .fail(Blacklight.ajaxModal.onFailure)
- .done(Blacklight.ajaxModal.receiveAjax)
-}
-
-
-
-Blacklight.ajaxModal.setup_modal = function() {
- // Event indicating blacklight is setting up a modal link,
- // you can catch it and call e.preventDefault() to abort
- // setup.
- var e = $.Event('setup.blacklight.ajax-modal');
- $("body").trigger(e);
- if (e.isDefaultPrevented()) return;
-
- // Register both trigger and preserve selectors in ONE event handler, combining
- // into one selector with a comma, so if something matches BOTH selectors, it
- // still only gets the event handler called once.
- $("body").on("click", Blacklight.ajaxModal.triggerLinkSelector + ", " + Blacklight.ajaxModal.preserveLinkSelector,
- Blacklight.ajaxModal.modalAjaxLinkClick);
- $("body").on("submit", Blacklight.ajaxModal.triggerFormSelector + ", " + Blacklight.ajaxModal.preserveFormSelector,
- Blacklight.ajaxModal.modalAjaxFormSubmit);
-
- // Catch our own custom loaded event to implement data-ajax-modal=closed
- $("body").on("loaded.blacklight.ajax-modal", Blacklight.ajaxModal.check_close_ajax_modal);
-
- // we support doing data-dismiss=modal on a
with a href for non-ajax
- // use, we need to suppress following the a's href that's there for
- // non-JS contexts.
- $("body ").on("click", Blacklight.ajaxModal.modalSelector + " a[data-dismiss~=modal]", function (e) {
- e.preventDefault();
- });
-};
-
-// A function used as an event handler on loaded.blacklight.ajax-modal
-// to catch contained data-ajax-modal=closed directions
-Blacklight.ajaxModal.check_close_ajax_modal = function(event) {
- if ($(event.target).find(Blacklight.ajaxModal.modalCloseSelector).length) {
- modal_flashes = $(this).find('.flash_messages');
-
- $(event.target).modal("hide");
- event.preventDefault();
-
- main_flashes = $('#main-flashes');
- main_flashes.append(modal_flashes);
- modal_flashes.fadeIn(500);
- }
-}
-
-Blacklight.onLoad(function() {
- Blacklight.ajaxModal.setup_modal();
-});
-
-// Reset focus to element that opened the modal
-$(document).ready(function() {
- $('body').on('show.bs.modal', function(e) {
- if (!$(e.relatedTarget).parents('.modal').length) {
- Blacklight.ajaxModal.clickTarget = $(e.relatedTarget);
- }
- });
- // Find first and last focusable elements in the modal
- // and making tabing off the modal wrap around instead
- $('body').on('shown.bs.modal', function(e) {
- // Find the focusable elements and save them
- var focusable = $(e.target).find('button:visible, [href]:visible, input:visible, select:visible, textarea:visible, [tabindex]:visible:not([tabindex="-1"])');
- Blacklight.ajaxModal.firstFocusable = $(focusable[0])
- Blacklight.ajaxModal.lastFocusable = $(focusable[focusable.length - 1]);
- Blacklight.ajaxModal.firstFocusable.focus();
- // On the first focusable, if we shift+tab off, jump to last focusable
- Blacklight.ajaxModal.firstFocusable.on('keydown', function(e) {
- if(e.keyCode == 9 && e.shiftKey) {
- e.preventDefault();
- Blacklight.ajaxModal.lastFocusable.focus();
- }
- });
- // On the last focusable, if we tab (but not shift+tab) off, jump to the first focusable
- Blacklight.ajaxModal.lastFocusable.on('keydown', function(e) {
- if(e.keyCode == 9 && !e.shiftKey) {
- e.preventDefault();
- Blacklight.ajaxModal.firstFocusable.focus();
- }
- });
- });
- $('body').on('hide.bs.modal', function(e) {
- if (Blacklight.ajaxModal.clickTarget) {
- Blacklight.ajaxModal.clickTarget.focus();
- }
- });
-});
diff --git a/app/assets/javascripts/hyrax/save_work/uploaded_files.es6 b/app/assets/javascripts/hyrax/save_work/uploaded_files.es6
index fca2977b3..09de13eae 100644
--- a/app/assets/javascripts/hyrax/save_work/uploaded_files.es6
+++ b/app/assets/javascripts/hyrax/save_work/uploaded_files.es6
@@ -14,7 +14,8 @@ export class UploadedFiles {
}
get inProgress() {
- return this.element.fileupload('active') > 0
+ // OVERRIDE FROM HYRAX: increase allowed number of active file uploads to 1 because the fileuploadcompleted event fires before... file is completed uploading
+ return this.element.fileupload('active') > 1
}
get hasFiles() {
diff --git a/app/assets/javascripts/oregon_digital/content_mask_warning.js b/app/assets/javascripts/oregon_digital/content_mask_warning.js
new file mode 100644
index 000000000..98e6d2a29
--- /dev/null
+++ b/app/assets/javascripts/oregon_digital/content_mask_warning.js
@@ -0,0 +1,46 @@
+// GLOBAL: Declare it globally for checking radio button
+var radioButtonChecked = false;
+
+// ON LOAD: When page refresh, it checks on the spot if radio/checkbox button being selected
+$(function() {
+ // LOAD: On page load filter out the JS
+ $('input[name*="[mask_content][]"]').each(function() {
+ var workName = $(this).attr('name');
+ checkMaskContent(workName);
+ });
+
+ // CHECK: Check if any checkbox in the ':mask_content' group is checked
+ $('input[name*="[mask_content][]"]').on('click', function() {
+ var workName = $(this).attr('name');
+ checkMaskContent(workName);
+ });
+});
+
+// METHOD: Create a method to disabled field from being selected if :mask_content is not selected
+function toggleDisable(disable_val) {
+ $('#content_alert_default').prop('disabled', disable_val);
+ $('#content_alert_custom').prop('disabled', disable_val);
+ $('#content_alert_box').prop('disabled', disable_val);
+
+ if (disable_val) {
+ $('#content_alert_text').addClass('disabled-text');
+ } else {
+ $('#content_alert_text').removeClass('disabled-text');
+ }
+}
+
+// METHOD: Check for mask content to disable or not for for :content_alert
+function checkMaskContent(workName) {
+ var field = 'input[name="' + workName + '"]:checked'
+ if ($(field).length > 0 && !radioButtonChecked) {
+ toggleDisable(false); // Enable elements or perform actions when checked
+ $('#content_alert_default').prop('checked', true);
+ radioButtonChecked = true;
+ } else if ($(field).length === 0) {
+ toggleDisable(true); // Disable elements or perform actions when unchecked
+ $('#content_alert_default').prop('checked', false);
+ $('#content_alert_custom').prop('checked', false);
+ $('#content_alert_box').val('');
+ radioButtonChecked = false;
+ }
+}
diff --git a/app/assets/javascripts/oregon_digital/facets_button.js b/app/assets/javascripts/oregon_digital/facets_button.js
new file mode 100644
index 000000000..03ff082cb
--- /dev/null
+++ b/app/assets/javascripts/oregon_digital/facets_button.js
@@ -0,0 +1,13 @@
+// ON LOAD: When page refresh, it will switch on click for the label on facets display button
+$(function() {
+ // CHANGE: On click, change the button label between 'More' and 'Less'
+ $('.secondary-facets, .secondary-advanced-facets').on('click', function() {
+ // DECLARE: Get the modify text
+ const moreText = $(this).data('more-text');
+ const lessText = $(this).data('less-text');
+
+ // CHECK: Get the current text and check the value to switch on display when click
+ const currentText = $.trim($(this).text());
+ $(this).text(currentText === moreText ? lessText : moreText);
+ });
+});
\ No newline at end of file
diff --git a/app/assets/javascripts/oregon_digital/bootstrap-fixes.js b/app/assets/javascripts/oregon_digital/fixes/bootstrap-fixes.js
similarity index 100%
rename from app/assets/javascripts/oregon_digital/bootstrap-fixes.js
rename to app/assets/javascripts/oregon_digital/fixes/bootstrap-fixes.js
diff --git a/app/assets/javascripts/oregon_digital/fixes/bulkrax_fixes.js b/app/assets/javascripts/oregon_digital/fixes/bulkrax_fixes.js
new file mode 100644
index 000000000..f62f718dc
--- /dev/null
+++ b/app/assets/javascripts/oregon_digital/fixes/bulkrax_fixes.js
@@ -0,0 +1,2 @@
+// Bulkrax is using $().on('ready') syntax which was deprecated when they wrote it and removed in jQuery v3
+$(document).ready(prepBulkrax);
diff --git a/app/assets/stylesheets/_variables.scss b/app/assets/stylesheets/_variables.scss
index f3cce8cc3..72a92273b 100644
--- a/app/assets/stylesheets/_variables.scss
+++ b/app/assets/stylesheets/_variables.scss
@@ -13,14 +13,27 @@ $medium-grey: #999999;
$light-grey: #CCCCCC;
$very-light-grey: #ECECEC;
-$brand-primary: $navy-blue;
-// $brand-primary: $apple-green;
+$primary: $navy-blue;
+
+$theme-colors: (
+ primary: $primary
+);
+
+// Bootstrap color variables
+$secondary: #fff;
// Change bootstrap grid breakpoints
$grid-gutter-width: 30px;
-$container-tablet: (720px + $grid-gutter-width);
-$container-desktop: (1140px + $grid-gutter-width);
-$container-large-desktop: (1520px + $grid-gutter-width);
+$container-max-widths: (
+ md: 720px + $grid-gutter-width,
+ lg: 1140px + $grid-gutter-width,
+ xl: 1520px + $grid-gutter-width
+);
-$screen-lg: 1580px;
-$screen-md: 1200px;
+$grid-breakpoints: (
+ xs: 0,
+ sm: 1px,
+ md: 768px,
+ lg: 1200px,
+ xl: 1580px
+)
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 390a09862..8304a7927 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -11,7 +11,7 @@
* It is generally better to create a new file per style scope.
*
*= require openseadragon/openseadragon
- *= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
+ *= require dataTables.bootstrap4
*= require jquery-ui
*= require select2
*= require bulkrax/application
@@ -21,6 +21,8 @@
*= require cookieconsent
*/
+@import "_variables";
+@import "bootstrap";
@import "*";
@import "blacklight/**/*";
@import "oregon_digital/**/*";
\ No newline at end of file
diff --git a/app/assets/stylesheets/blacklight/facet_overrides.scss b/app/assets/stylesheets/blacklight/facet_overrides.scss
index 4a380dc38..2dd335faa 100644
--- a/app/assets/stylesheets/blacklight/facet_overrides.scss
+++ b/app/assets/stylesheets/blacklight/facet_overrides.scss
@@ -1,6 +1,6 @@
-.panel-heading.collapse-toggle .panel-title.collapsed:after {
+.panel-heading.collapse-toggle .panel-title:after {
/* symbol for "collapsed" panels */
- content: "\e080";
+ color: grey;
/* adjust as needed, taken from bootstrap.css */
}
.collapse-toggle.panel-heading {
@@ -8,6 +8,11 @@
padding: 0;
}
+.facet-field-heading button {
+ font-size: 16px;
+ font-weight: 600;
+}
+
.panel-header {
margin: 0;
button {
@@ -17,3 +22,8 @@
white-space: normal;
}
}
+
+// CUSTOM: Add in custom margin for the new dropdown collapse button
+.secondary-facets {
+ margin: 5px 0px 5px 0px;
+}
diff --git a/app/assets/stylesheets/browse_everything.scss b/app/assets/stylesheets/browse_everything.scss
index d9d4bc1a5..fdd0db40c 100644
--- a/app/assets/stylesheets/browse_everything.scss
+++ b/app/assets/stylesheets/browse_everything.scss
@@ -1,6 +1,5 @@
-@import 'bootstrap-sprockets';
@import 'bootstrap';
@import "font-awesome";
-@import "browse_everything/browse_everything_bootstrap3";
+@import "browse_everything/browse_everything_bootstrap4";
diff --git a/app/assets/stylesheets/hyrax.scss b/app/assets/stylesheets/hyrax.scss
index 0e9cadd8e..33f25ec38 100644
--- a/app/assets/stylesheets/hyrax.scss
+++ b/app/assets/stylesheets/hyrax.scss
@@ -1,11 +1,10 @@
-@import "bootstrap-sprockets";
-@import 'bootstrap';
@import 'blacklight/blacklight';
@import "font-awesome";
@import "blacklight_gallery/gallery";
@import "blacklight_gallery/masonry";
@import "blacklight_gallery/slideshow";
@import "blacklight_gallery/osd_viewer";
+@import "hyrax/blacklight_gallery";
@import 'hyrax/hyrax';
diff --git a/app/assets/stylesheets/oregon_digital/_advanced.scss b/app/assets/stylesheets/oregon_digital/_advanced.scss
index 89fe17861..08f1f00cb 100644
--- a/app/assets/stylesheets/oregon_digital/_advanced.scss
+++ b/app/assets/stylesheets/oregon_digital/_advanced.scss
@@ -80,7 +80,7 @@
}
select {
- border: 3px solid $brand-primary;
+ border: 3px solid $primary;
padding: .25em;
padding-right: .75em;
diff --git a/app/assets/stylesheets/oregon_digital/_breadcrumbs.scss b/app/assets/stylesheets/oregon_digital/_breadcrumbs.scss
index dd47919d0..8d5126031 100644
--- a/app/assets/stylesheets/oregon_digital/_breadcrumbs.scss
+++ b/app/assets/stylesheets/oregon_digital/_breadcrumbs.scss
@@ -12,8 +12,10 @@
.breadcrumb {
background: none;
border: none;
+ margin-top: 0;
margin-bottom: 0;
- padding: 1em 0;
+ padding-bottom: 1em;
+ padding-top: 1.5em;
}
// Dashboard nav needs to act like main content
diff --git a/app/assets/stylesheets/oregon_digital/_buttons.scss b/app/assets/stylesheets/oregon_digital/_buttons.scss
index 689c24fb5..152f8fb7a 100644
--- a/app/assets/stylesheets/oregon_digital/_buttons.scss
+++ b/app/assets/stylesheets/oregon_digital/_buttons.scss
@@ -41,8 +41,8 @@ input.link {
&.btn-outline {
background: unset;
border-radius: 0 !important;
- border: 3px solid $brand-primary;
- color: $brand-primary;
+ border: 3px solid $primary;
+ color: $primary;
margin: 0 5px;
&:hover,
&:focus {
@@ -51,6 +51,15 @@ input.link {
color: $black;
}
}
+
+ &.btn-secondary {
+ &:hover {
+ border-color: #adadad;
+ }
+ }
+}
+.btn-sm {
+ font-size: 14px;
}
.btn-lg {
padding: 16px 24px;
@@ -63,9 +72,9 @@ input.link {
font-size: 14px;
}
-.btn-default {
- color: $brand-primary;
- border: 3px solid $brand-primary;
+.btn-default, .btn-secondary {
+ color: $primary;
+ border: 3px solid $primary;
}
/* increase checkbox size */
diff --git a/app/assets/stylesheets/oregon_digital/_files-sets.scss b/app/assets/stylesheets/oregon_digital/_files-sets.scss
index 576d714c9..90f129c5a 100644
--- a/app/assets/stylesheets/oregon_digital/_files-sets.scss
+++ b/app/assets/stylesheets/oregon_digital/_files-sets.scss
@@ -17,8 +17,13 @@
.copy-input-fileset {
width: 215px;
+ @media (min-width: breakpoint-min(xl)) {
+ width: 285px;
+ }
}
.centered-socials {
+ @media (min-width: breakpoint-min(xl)) {
margin-top: -5px;
+ }
}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/_footer.scss b/app/assets/stylesheets/oregon_digital/_footer.scss
index dcb6ec6c1..65c41ae18 100644
--- a/app/assets/stylesheets/oregon_digital/_footer.scss
+++ b/app/assets/stylesheets/oregon_digital/_footer.scss
@@ -17,7 +17,7 @@
margin-left: 10px;
}
-@media (max-width: $screen-md-min) {
+@media (max-width: breakpoint-min(lg)) {
.osu-logo,
.uo-logo {
@@ -33,6 +33,24 @@
width: 100%;
height: 100%;
background-color: $dark-grey;
+
+ p {
+ margin: 0 0 10px;
+ }
+
+ @media (max-width: breakpoint-min(lg)) {
+ .row {
+ display: block;
+ }
+
+ .col-md-1,
+ .col-md-2,
+ .horizontal-sm,
+ .col-md-4 {
+ max-width: 100%;
+ flex: max-content;
+ }
+ }
}
.homepage-info-text {
@@ -81,8 +99,9 @@ a.toc-link {
.left-border {
border-left: $lime-green 2px solid;
+ height: fit-content;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
& {
text-align: center;
border: none;
@@ -90,7 +109,7 @@ a.toc-link {
}
}
-@media (max-width: $screen-md-min) {
+@media (max-width: breakpoint-min(lg)) {
.horizontal-sm {
width: 4em;
border-bottom: $lime-green 2px solid;
@@ -101,7 +120,7 @@ a.toc-link {
.right-align {
text-align: right;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
& {
text-align: center;
}
diff --git a/app/assets/stylesheets/oregon_digital/_form.scss b/app/assets/stylesheets/oregon_digital/_form.scss
new file mode 100644
index 000000000..1795ff918
--- /dev/null
+++ b/app/assets/stylesheets/oregon_digital/_form.scss
@@ -0,0 +1,6 @@
+// CSS: Create a custom CSS for the edit form on OD2
+.disabled-text {
+ cursor: default;
+ user-select: none; /* Prevents text selection */
+ color: #ccc; /* Make color looks like disable */
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/_header.scss b/app/assets/stylesheets/oregon_digital/_header.scss
index 79cf07b5b..b139dc090 100644
--- a/app/assets/stylesheets/oregon_digital/_header.scss
+++ b/app/assets/stylesheets/oregon_digital/_header.scss
@@ -7,17 +7,22 @@ header {
// Move searchbar back down
margin-top: 0;
}
- .navbar-toggle {
+ .navbar-toggler#main-nav-toggler {
+ border-color: transparent;
+
&:focus {
outline: revert;
}
- .icon-bar {
- background-color: $navy-blue;
+ .navbar-toggler-icon {
+ display: inline-block;
}
}
.navbar-header {
- display: grid;
- grid-template-columns: 1fr auto;
+ display: flex;
+ flex-grow: 1;
+ justify-content: space-between;
+ margin-right: -15px;
+ margin-left: -15px;
}
.navbar-header:before {
display: unset;
@@ -68,11 +73,28 @@ header {
}
}
+ .navbar-nav > li > a {
+ padding-top:15px;
+ padding-bottom:15px;
+
+ &:hover {
+ text-decoration: none;
+ background-color: #eee;
+ }
+ }
+
+ #user_utility_links {
+ @media (min-width: breakpoint-min(lg)) {
+ margin-right: -15px;
+ }
+ }
+
ul.nav {
a.explore-collections {
+ padding: 10px 15px;
padding-bottom: 2px;
font-weight: 700;
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(sm)) {
display: inline-block;
font-size: 20px;
margin-bottom: 2em;
@@ -82,7 +104,7 @@ header {
padding: 0 2em;
}
form {
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(sm)) {
padding-bottom: 2em;
}
@@ -91,18 +113,18 @@ header {
font-weight: 700;
padding: 0;
- @media (min-width: $screen-sm-min) {
+ @media (min-width: breakpoint-min(md)) {
& {
float: right;
}
}
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(sm)) {
font-size: 1.25em;
}
}
.input-group {
margin: auto;
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-min(lg)) {
width: 75%;
}
@@ -133,16 +155,26 @@ header {
box-shadow: 0 0 10px $dark-grey;
border-width: 0 0 5px 0;
padding: 1em 2em;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
& {
padding: .5em;
}
}
+
+ .container-fluid {
+ flex-wrap: wrap;
+ padding-left: 15px;
+ padding-right: 15px;
+ }
}
#top-navbar-collapse {
letter-spacing: 2px;
+ @media (max-width: breakpoint-max(lg)) {
+ justify-content: flex-start !important;
+ }
+
.divider {
height: 1px;
overflow: hidden;
@@ -150,12 +182,26 @@ header {
}
#user-dropdown {
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(sm)) {
display: none;
}
}
#user-util-links {
- @media (max-width: $screen-xs-max) {
+ margin-top: -0.6em;
+
+ li {
+ font-size: 14px;
+
+ a {
+ color: #333;
+ }
+
+ & > a:hover{
+ text-decoration: none;
+ }
+ }
+
+ @media (max-width: breakpoint-max(sm)) {
position: static;
float: none;
width: auto;
@@ -168,17 +214,12 @@ header {
li {
font-size: 16px;
}
+
.my-account-option {
margin: .25em 0;
}
}
}
-
- .navbar-left-sm {
- @media (max-width: $screen-sm-max) and (min-width: $screen-sm-min) {
- float: left !important;
- }
- }
}
}
diff --git a/app/assets/stylesheets/oregon_digital/_home-page.scss b/app/assets/stylesheets/oregon_digital/_home-page.scss
index faf17c15b..839363d3f 100644
--- a/app/assets/stylesheets/oregon_digital/_home-page.scss
+++ b/app/assets/stylesheets/oregon_digital/_home-page.scss
@@ -142,33 +142,19 @@ body {
}
-ul.nav.homepage-nav {
- text-transform: unset;
- width: 100%;
-
- #masthead-search-field-header {
- width: 100%;
- }
- #masthead-search-form-header {
- .advanced-link {
- text-transform: unset;
- }
+#masthead-search-form-header {
+ .advanced-link {
+ text-transform: unset;
+ float: right;
+ font-size: 10px;
+ font-weight: 700;
+ letter-spacing: 1.5px;
+ padding: 0;
+ top: -.75em;
+ color: $white;
}
- li {
- background: none;
- width: 100%;
- }
- form {
- width: 100%;
- a.advanced-link {
- position: relative;
- float: right;
- font-size: 10px;
- font-weight: 700;
- letter-spacing: 1.5px;
- padding: 0;
- top: -.75em;
- }
+
+ .form-group {
.input-group {
width: 100%;
button {
@@ -179,7 +165,6 @@ ul.nav.homepage-nav {
border: unset;
width: 3.25em;
height: calc(100% - 1.25em);
- margin-top: 10px;
margin-bottom: 10px;
border-right: 1.5px solid $very-light-grey;
i {
@@ -217,10 +202,6 @@ ul.nav.homepage-nav {
-ms-transform: translateX(-50%);
-o-transform: translateX(-50%);
transform: translateX(-50%);
-
- @media (min-width: $screen-lg-min) {
- width: 100%;
- }
}
}
@@ -235,7 +216,7 @@ ul.nav.homepage-nav {
.home-content #showcase {
h2 {
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
& {
text-align: center;
font-size: 32px;
@@ -243,7 +224,7 @@ ul.nav.homepage-nav {
}
}
}
- .visible-sm.visible-xs {
+ .d-lg-none.d-block {
a.btn {
margin-bottom: 3.5em;
}
@@ -265,7 +246,7 @@ ul.nav.homepage-nav {
font-size: 20px;
font-weight: bold;
line-height: 30px;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
& {
font-size: 28px;
}
@@ -279,7 +260,7 @@ ul.nav.homepage-nav {
}
.collection-items {
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
& {
font-size: 22px;
}
@@ -290,10 +271,16 @@ ul.nav.homepage-nav {
.featured-collection-item {
padding: 0 .25em;
flex-basis: 16.67%;
- &:last-of-type {
- flex-basis: 50%;
- margin-left: 1em;
- }
+
+ // Add in the thumbnail as the first order
+ order: 1;
+}
+
+/* Move title to the end of the block */
+.featured-collection-title {
+ order: 2;
+ flex-basis: 50%;
+ margin-left: 1em;
}
.feature-collection-divider {
@@ -312,7 +299,7 @@ ul.nav.homepage-nav {
.about-oregondigital-container {
img {
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
padding-bottom: 1em;
}
}
@@ -330,8 +317,12 @@ ul.nav.homepage-nav {
.chevron-align {
height: 1%;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
margin-top: 13px;
}
margin-right: 5px;
}
+
+.test-color {
+ color: black;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/_search.scss b/app/assets/stylesheets/oregon_digital/_search.scss
index ea2d7e8bb..66d6f9c64 100644
--- a/app/assets/stylesheets/oregon_digital/_search.scss
+++ b/app/assets/stylesheets/oregon_digital/_search.scss
@@ -10,14 +10,14 @@
background-color: $very-light-grey;
height: 0.75em;
- @media (min-width: $screen-sm-min) {
+ @media (min-width: breakpoint-min(md)) {
& {
margin-top: 1em;
}
}
}
-@media (max-width: $screen-sm-min) {
+@media (max-width: breakpoint-min(md)) {
#appliedParams.explore-collection,
#appliedParamsConstraint.explore-collection {
position: absolute;
@@ -45,16 +45,17 @@
position: relative;
}
-.view-type .btn-default {
+.view-type .btn-outline-secondary {
background-color: $very-light-grey;
border-radius: 5px !important;
border: none;
box-shadow: none;
- padding: .1em .25em;
+ padding: .2em .25em;
+ padding-top: 0;
font-size: 18pt;
+ color: $navy-blue !important;
&.active {
- color: $navy-blue;
- background-color: $contrast-orange;
+ background-color: $contrast-orange !important;
}
&.view-type-gallery,
&.view-type-masonry {
@@ -73,7 +74,7 @@
padding-right: 1em;
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
margin-bottom: 1em;
}
}
@@ -82,13 +83,14 @@
margin-top: 2em;
+ .flex-container {
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
flex-direction: column;
}
}
}
#sortAndPerPage {
border: none;
+ flex-grow: 1;
.search-widgets {
margin-bottom: .75em;
@@ -96,10 +98,18 @@
.btn {
background-color: $very-light-grey;
}
+
+ .dropdown-menu {
+ li > .dropdown-item {
+ padding: 3px 20px;
+ font-size: 14px;
+ }
+ }
+
}
- .save-widgets {
+ .save-widgets button {
color: $navy-blue;
- font-size: 14pt;
+ font-size: 14px;
}
#sort-dropdown,
@@ -114,23 +124,28 @@
}
}
#sort-dropdown {
- margin-right: 1.5em;
+ margin-right: 1.5em !important;
}
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
.search-widgets {
text-align: right;
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
#sort-dropdown {
- margin-right: 0;
+ margin-right: 0 !important;
}
#search-sort-button,
button.submits-batches.submits-batches-add {
min-width: 13em;
text-align: left !important;
+
+ &::after {
+ float: right;
+ margin-top: 0.5em;
+ }
}
}
}
@@ -141,21 +156,23 @@
font-style: italic;
height: 54px;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(lg)) {
text-align: center;
}
}
.panel.facet_limit {
- background: none;
+ background: $very-light-grey;
border: 2px solid $navy-blue;
border-radius: 0;
+ margin-top: 5px;
.panel-heading {
- background: none;;
+ background: none;
}
.panel-body {
background-color: white;
+ padding: 15px;
}
}
@@ -167,7 +184,20 @@
padding: 1em;
}
- @media (max-width: $screen-sm-min) {
+ .facets-toggle {
+ display: none;
+ }
+
+ .top-panel-heading {
+ background: none;
+ border-bottom: 0;
+ }
+
+ .more_facets_link {
+ font-size: 12px;
+ }
+
+ @media (max-width: breakpoint-min(md)) {
background: none;
#facet-panel-collapse {
display: block;
@@ -181,9 +211,6 @@
border: 0;
border-top: 2px solid $light-grey;
}
- .facets-toggle {
- display: none;
- }
}
.facets-heading {
@@ -207,8 +234,9 @@
form {
.input-group {
margin: 1em;
- margin-bottom: 6em;
+ margin-bottom: 2.25em;
display: block;
+ width: inherit;
button {
position: absolute;
@@ -220,7 +248,6 @@
height: calc(100% - 16px);
margin-top: 8px;
margin-bottom: 8px;
- border-right: 1px solid $light-grey;
}
input {
background-color: white;
@@ -236,6 +263,8 @@
.search-result-wrapper {
border-bottom: 0px solid $very-light-grey !important;
+ margin-bottom: 30px;
+ overflow: hidden;
&:first-child {
border-top: 2px solid $very-light-grey;
@@ -264,6 +293,10 @@
}
span {
vertical-align: top;
+
+ span {
+ margin-left: 2px;
+ }
}
i,
.children {
@@ -271,14 +304,20 @@
}
}
- .search-results-title-row .search-result-title {
- display: inline-block;
- margin: 0;
- }
- .search-results-title-row .label {
- margin-left: 15px;
+ .search-results-title-row {
+ padding: 0 0 15px;
+
+ .search-result-title {
+ display: inline-block;
+ margin: 0;
+ }
+
+ .badge {
+ margin-left: 15px;
+ }
}
+
dl dd ul {
padding-left: 0;
}
@@ -339,38 +378,47 @@ em {
div.pagination {
display: flex;
justify-content: center;
+ margin: 20px 0;
}
-ul.pagination li {
- &.active span {
- background-color: $contrast-orange;
- border: none;
- color: $navy-blue;
- }
- &.next span,
- &.next a,
- &.previous span,
- &.previous a {
- background: none;
- }
- &.disabled {
- span,
- span:hover,
- span:focus,
- a,
- a:hover,
- a:focus {
- color: $dark-grey;
+ol.pagination {
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: 1em;
+}
+ul.pagination {
+ align-items: center;
+ li {
+ &.active span.page-link {
+ background-color: $contrast-orange;
+ border: none;
+ color: $navy-blue;
+ }
+ &.next span,
+ &.next a,
+ &.previous span,
+ &.previous a {
+ background: none;
+ }
+ &.disabled {
+ span,
+ span:hover,
+ span:focus,
+ a,
+ a:hover,
+ a:focus {
+ color: $dark-grey;
+ }
}
- }
- a,
- span {
- background-color: $very-light-grey;
- border: none;
- margin: 0 .25em;
+ a,
+ span {
+ background-color: $very-light-grey;
+ border: none;
+ margin: 0 .25em;
+ padding: 6px 12px;
+ }
}
}
-
/* Gallery specific */
#content {
flex-direction: column;
@@ -403,7 +451,7 @@ ul.pagination li {
background: none;
padding-top: 1em;
a {
- text-align: left;
+ text-align: center;
img {
width: 100%;
@@ -514,7 +562,7 @@ ul.pagination li {
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
h3 {
margin: 1em 0;
}
diff --git a/app/assets/stylesheets/oregon_digital/_sign_up.scss b/app/assets/stylesheets/oregon_digital/_sign_up.scss
index 07e48b12c..becc797b5 100644
--- a/app/assets/stylesheets/oregon_digital/_sign_up.scss
+++ b/app/assets/stylesheets/oregon_digital/_sign_up.scss
@@ -1,5 +1,5 @@
.devise-container {
- max-width: $container-tablet;
+ max-width: map-get($container-max-widths, "md");;
margin: auto;
.login-footer,
@@ -27,7 +27,7 @@
.login-select,
.devise-form {
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(xs)) {
ul,
.flex-item.action,
diff --git a/app/assets/stylesheets/oregon_digital/_work-show.scss b/app/assets/stylesheets/oregon_digital/_work-show.scss
index fee11bc5e..c77c594bd 100644
--- a/app/assets/stylesheets/oregon_digital/_work-show.scss
+++ b/app/assets/stylesheets/oregon_digital/_work-show.scss
@@ -6,20 +6,29 @@
}
}
-table.table-scrollable {
- @media (max-width: $screen-sm-min) {
- display: block;
- overflow-x: auto;
- white-space: nowrap;
- height: 100%
+caption {
+ caption-side: unset;
+}
+table {
+ .table-scrollable {
+ @media (max-width: breakpoint-min(sm)) {
+ display: block;
+ overflow-x: auto;
+ white-space: nowrap;
+ height: 100%
+ }
+ }
+
+ &.table thead tr th {
+ border-top: none;
}
}
.panel-workflow {
- .panel-heading {
+ .card-header {
background-color: $contrast-orange;
- a {
+ h2 {
color: $navy-blue;
}
}
@@ -33,11 +42,6 @@ table.table-scrollable {
margin-top: 25px;
}
-.delete-button-show-page {
- margin-left: 30px;
- background-color: #E88F2A;
-}
-
.show-actions {
display: flex;
justify-content: flex-end;
@@ -71,7 +75,7 @@ dl.work-show {
column-gap: 1em;
overflow-wrap: anywhere;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
grid-template: auto / max-content auto;
}
@@ -99,7 +103,7 @@ dl.work-show {
column-gap: 2em;
margin-bottom: 20px;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
& {
display: block;
column-count: 1;
@@ -115,18 +119,25 @@ dl.work-show {
padding: 14px 0;
input {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- // border: ;
- border-radius: 5px;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-right: 0;
height: 38px;
+ border-radius: 5px;
+ @media (min-width: breakpoint-min(lg)) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-right: 0;
+ }
+ @media (max-width: breakpoint-min(md)) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-right: 0;
+ }
}
button {
- margin-top: -4px;
+ margin-top: -5px;
+ @media (max-width: breakpoint-min(lg)) and (min-width: breakpoint-min(md)) {
+ margin-top: 5px;
+ }
}
}
@@ -144,7 +155,7 @@ dl.work-show {
margin-bottom: 15px;
li {
- &.active a {
+ a.active {
color: #555555;
cursor: default;
background-color: #fff;
@@ -180,6 +191,7 @@ dl.work-show {
margin-right: 2px;
line-height: 1.428571429;
border: 1px solid transparent;
+ border-radius: 0;
position: relative;
display: block;
@@ -195,7 +207,7 @@ dl.work-show {
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
float: none;
display: flex;
@@ -255,26 +267,15 @@ dl.work-show {
}
#work-show-tablist {
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
display: flex;
flex-basis: 50%;
flex-wrap: wrap;
}
}
-.align-button {
- width: 134%;
- margin-left: -3px;
-}
-
-.add-to-align {
- width: 109%;
- margin-left: 7px;
+.action-buttons .btn {
+ min-width: 9em;
}
-
-.print-button {
- margin-right: -7px;
-}
-
.no-left-padding {
padding-left: 0px;
}
@@ -310,7 +311,7 @@ dl.work-show {
.workflow-actions-button {
width: 100%;
- background-color:#E88F2A;
+ background-color:$contrast-orange;
}
/* Add the blur effect */
@@ -354,6 +355,6 @@ dl.work-show {
// CSS for the custom message text box to fit the div
.content_alert_box {
- width: 100%;
+ width: 100%;
height: 100%;
}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/bootstrap/_modals.scss b/app/assets/stylesheets/oregon_digital/bootstrap/_modals.scss
index fd5f2090c..6caf57d1e 100644
--- a/app/assets/stylesheets/oregon_digital/bootstrap/_modals.scss
+++ b/app/assets/stylesheets/oregon_digital/bootstrap/_modals.scss
@@ -57,8 +57,4 @@ div.collection-list {
margin: 2.5em 0 1.5em 0;
padding: .5em 2.5em;
}
-
- .login-radio {
- margin: 0.25em 0;
- }
}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/collections/show.scss b/app/assets/stylesheets/oregon_digital/collections/show.scss
index 4fdd4e11f..c8d85dd85 100644
--- a/app/assets/stylesheets/oregon_digital/collections/show.scss
+++ b/app/assets/stylesheets/oregon_digital/collections/show.scss
@@ -13,7 +13,7 @@
dd {
font-size: 16px;
margin-left: 5em;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
grid-column: 1;
margin: 0;
}
@@ -32,7 +32,7 @@
align-items: baseline;
justify-content: flex-start;
margin-bottom: 1em;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
display: block;
padding-top: 1em;
@@ -67,14 +67,14 @@
margin-left: 1em;
}
.institution-header {
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(md)) {
padding-top: 1em;
}
}
.social-media {
padding: 0;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
padding-bottom: 1em;
}
}
@@ -89,7 +89,7 @@
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
display: block;
}
}
@@ -103,7 +103,7 @@
padding: 1em 0;
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
margin-top: 1em;
.flex-container {
@@ -152,7 +152,7 @@
#masonry-sizer {
padding: 0;
width: 23%;
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
& {
width: 48%;
}
diff --git a/app/assets/stylesheets/oregon_digital/dashboard/_dashboard.scss b/app/assets/stylesheets/oregon_digital/dashboard/_dashboard.scss
new file mode 100644
index 000000000..affda7683
--- /dev/null
+++ b/app/assets/stylesheets/oregon_digital/dashboard/_dashboard.scss
@@ -0,0 +1,6 @@
+// CUSTOM: A custom SCSS file to modify any changes towards the admin dashboard
+
+// MODIFY: Tell the CSS to not display this button in filter works
+#suppressed_bsi {
+ display: none;
+}
diff --git a/app/assets/stylesheets/oregon_digital/explore_collections/_actions_list.scss b/app/assets/stylesheets/oregon_digital/explore_collections/_actions_list.scss
index d37aa5ed9..e140fe501 100644
--- a/app/assets/stylesheets/oregon_digital/explore_collections/_actions_list.scss
+++ b/app/assets/stylesheets/oregon_digital/explore_collections/_actions_list.scss
@@ -11,7 +11,7 @@
justify-content: space-between;
margin: 0;
padding: 0;
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(sm)) {
& {
background: $very-light-grey;
border-radius: .25em;
@@ -28,13 +28,13 @@
input {
vertical-align: middle;
}
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(sm)) {
& {
border-right: 3px solid $light-grey;
text-align: center;
}
}
- @media (min-width: $screen-sm-max) {
+ @media (min-width: breakpoint-max(sm)) {
& {
max-width: 75px;
width: 5%;
@@ -52,7 +52,7 @@
height: 1.5em;
}
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(sm)) {
& {
flex-basis: 100%;
flex-wrap: wrap;
@@ -84,7 +84,7 @@
min-width: unset;
text-align: center;
width: 33%;
- @media (min-width: $screen-xs-max) and (max-width: $screen-sm-max) {
+ @media (min-width: breakpoint-max(xs)) and (max-width: breakpoint-max(sm)) {
width: unset;
}
}
diff --git a/app/assets/stylesheets/oregon_digital/explore_collections/_buttons.scss b/app/assets/stylesheets/oregon_digital/explore_collections/_buttons.scss
index 1915f9b3c..2b79f5bd0 100644
--- a/app/assets/stylesheets/oregon_digital/explore_collections/_buttons.scss
+++ b/app/assets/stylesheets/oregon_digital/explore_collections/_buttons.scss
@@ -64,7 +64,7 @@ $triangle-size: $block-border-size*4;
width:$triangle-size*2;
height:$triangle-size*2;
overflow:hidden;
- position:absolute;
+ position:relative;
visibility: hidden;
}
.notch::before,
@@ -89,12 +89,11 @@ $triangle-size: $block-border-size*4;
/* Notch on Bottom Middle */
.notch-xMiddle-yBottom {
- bottom:-$triangle-size*2;
left:50%;
transform:rotate(90deg) translateY(50%);
}
-@media (min-width: $screen-sm-min) {
+@media (min-width: breakpoint-min(md)) {
$block-border-size: 5px;
$triangle-size: $block-border-size*4;
.notch {
@@ -113,12 +112,6 @@ $triangle-size: $block-border-size*4;
left:-($triangle-size + $block-border-size*2);
}
- /* Notch on Bottom Middle */
- .notch-xMiddle-yBottom {
- bottom:-$triangle-size*2;
- // left:50%;
- // transform:rotate(90deg) translateY(50%);
- }
#explore-tabs a {
height: 55px;
width: 150px;
diff --git a/app/assets/stylesheets/oregon_digital/explore_collections/_masonry_view.scss b/app/assets/stylesheets/oregon_digital/explore_collections/_masonry_view.scss
index be0e4b1b0..8a1800b39 100644
--- a/app/assets/stylesheets/oregon_digital/explore_collections/_masonry_view.scss
+++ b/app/assets/stylesheets/oregon_digital/explore_collections/_masonry_view.scss
@@ -6,13 +6,13 @@
border-top: $very-light-grey 2px solid;
width: calc(16.666% - 20px);
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(xl)) {
& {
width: calc(25% - 30px);
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
& {
width: calc(50% - 20px);
}
@@ -26,13 +26,13 @@
#masonry-gutter-sizer {
width: 20px;
- @media (max-width: $screen-md-min) {
+ @media (max-width: breakpoint-min(xl)) {
& {
width: 30px;
}
}
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(md)) {
& {
width: 40px;
}
diff --git a/app/assets/stylesheets/oregon_digital/explore_collections/_showcase.scss b/app/assets/stylesheets/oregon_digital/explore_collections/_showcase.scss
index bd9a7a1ee..641118753 100644
--- a/app/assets/stylesheets/oregon_digital/explore_collections/_showcase.scss
+++ b/app/assets/stylesheets/oregon_digital/explore_collections/_showcase.scss
@@ -31,7 +31,7 @@ form#explore-collection-search {
#sortAndPerPage.explore-collections-per-page {
padding: 2em 0 1em 0;
- @media (max-width: $screen-xs-max) {
+ @media (max-width: breakpoint-max(sm)) {
& {
padding-left: 2em;
padding-right: 2em;
@@ -44,7 +44,7 @@ form#explore-collection-search {
font-weight: bold;
padding-bottom: 2em;
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(md)) {
& {
display: block;
}
@@ -52,27 +52,58 @@ form#explore-collection-search {
}
.explore-collections-search-widgets {
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(md)) {
& {
+ display: flex;
+ flex-direction: column;
float: left !important;
}
}
- @media (min-width: $screen-sm-max) {
+ @media (min-width: breakpoint-max(md)) {
transform: 0 15%;
}
.search-widgets {
display: inline-block;
+ text-align: left;
#per_page-dropdown {
- margin-right: 1.5em;
+ margin-right: 1.5em !important;
margin-top: 0;
}
+
+ .btn-group .dropdown-toggle:focus {
+ outline: 2px auto Highlight;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline: -2px;
+ }
+
+ .dropdown-item {
+ font-size: 14px;
+ }
}
}
}
+.view-type .btn-default {
+ background-color: $very-light-grey;
+ border-radius: 5px !important;
+ border: none;
+ box-shadow: none;
+ padding: .2em .25em;
+ padding-top: 0;
+ font-size: 18pt;
+ color: $navy-blue !important;
+ &.active {
+ background-color: $contrast-orange !important;
+ }
+ &.view-type-gallery,
+ &.view-type-masonry {
+ margin-left: .5em;
+ }
+}
+
.very-light-grey-hr {
border: 1px solid $very-light-grey;
color: $very-light-grey;
diff --git a/app/assets/stylesheets/oregon_digital/explore_collections/_table_view.scss b/app/assets/stylesheets/oregon_digital/explore_collections/_table_view.scss
index be8eaa46a..79402ee77 100644
--- a/app/assets/stylesheets/oregon_digital/explore_collections/_table_view.scss
+++ b/app/assets/stylesheets/oregon_digital/explore_collections/_table_view.scss
@@ -2,7 +2,7 @@ table#documents-table {
width: 100%;
thead th {
padding: 2em 0;
- @media (max-width: $screen-sm-max) {
+ @media (max-width: breakpoint-max(md)) {
& {
position: absolute;
width: 1px;
@@ -21,7 +21,10 @@ table#documents-table {
td {
padding: 0.25em 0;
}
- @media (max-width: $screen-sm-max) {
+ b {
+ font-weight: bold;
+ }
+ @media (max-width: breakpoint-max(md)) {
&, th, td {
display: block;
}
@@ -33,6 +36,7 @@ table#documents-table {
margin-top: 1.5em;
}
th {
+ max-width: 100%;
font-size: 30px;
padding: 0;
}
diff --git a/app/assets/stylesheets/oregon_digital/fonts.scss b/app/assets/stylesheets/oregon_digital/fonts.scss
index 84a5fdb7c..f8e5aaa02 100644
--- a/app/assets/stylesheets/oregon_digital/fonts.scss
+++ b/app/assets/stylesheets/oregon_digital/fonts.scss
@@ -152,6 +152,9 @@ table {
.white {
color: $white;
}
+.black {
+ color: $black;
+}
.uppercase {
text-transform: uppercase;
diff --git a/app/assets/stylesheets/oregon_digital/forms.scss b/app/assets/stylesheets/oregon_digital/forms.scss
index 9b22516fa..f789fdc49 100644
--- a/app/assets/stylesheets/oregon_digital/forms.scss
+++ b/app/assets/stylesheets/oregon_digital/forms.scss
@@ -24,4 +24,9 @@
input#file_set_oembed_url {
width: 100%;
}
+}
+
+.form-group > label {
+ text-align: unset;
+ font-weight: bold;
}
\ No newline at end of file
diff --git a/app/assets/stylesheets/oregon_digital/utils.scss b/app/assets/stylesheets/oregon_digital/utils.scss
index f3ff757d4..da2cd640a 100644
--- a/app/assets/stylesheets/oregon_digital/utils.scss
+++ b/app/assets/stylesheets/oregon_digital/utils.scss
@@ -12,7 +12,7 @@
left: 50% !important;
transform: translateX(-50%);
- @media (max-width: $screen-sm-min) {
+ @media (max-width: breakpoint-min(sm)) {
& {
position: relative !important;
}
diff --git a/app/authorities/qa/authorities/collections.rb b/app/authorities/qa/authorities/collections.rb
index 80bacb682..969b0b1c5 100644
--- a/app/authorities/qa/authorities/collections.rb
+++ b/app/authorities/qa/authorities/collections.rb
@@ -36,7 +36,7 @@ def search_response(controller)
access = controller.params[:access] || 'read'
search_service(controller).search_results do |builder|
- builder.where("#{controller.params[:q]}*")
+ builder.with(q: "#{controller.params[:q]}*")
.with_access(access)
.rows(100)
end
diff --git a/app/builders/hyrax/bootstrap_breadcrumbs_builder.rb b/app/builders/hyrax/bootstrap_breadcrumbs_builder.rb
index bcf1b1976..291015bf4 100644
--- a/app/builders/hyrax/bootstrap_breadcrumbs_builder.rb
+++ b/app/builders/hyrax/bootstrap_breadcrumbs_builder.rb
@@ -16,8 +16,8 @@ class Hyrax::BootstrapBreadcrumbsBuilder < BreadcrumbsOnRails::Breadcrumbs::Buil
def render
return '' if @elements.blank?
- @context.tag.nav(breadcrumbs_options) do
- @context.tag.ol do
+ @context.content_tag(:nav, breadcrumbs_options) do
+ @context.content_tag(:ol) do
safe_join(@elements.uniq.collect { |e| render_element(e) })
end
end
@@ -27,7 +27,7 @@ def render_element(element)
html_class = 'active' if @context.current_page?(compute_path(element)) || element.options['aria-current'] == 'page'
element.options['aria-current'] = 'page' if html_class
- @context.tag.li(class: html_class) do
+ @context.content_tag(:li, class: html_class) do
@context.link_to(@context.truncate(compute_name(element), length: 30, separator: ' '), compute_path(element), element.options)
end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index ef4867307..42d3331a2 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -14,9 +14,6 @@ class ApplicationController < ActionController::Base
with_themed_layout '1_column'
- # Hyrax 2.1 migration
- skip_after_action :discard_flash_if_xhr
-
protect_from_forgery with: :exception
# Send user to 401/403 page rather than forward with flash message
diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb
index 0f4b347a6..7339a693e 100644
--- a/app/controllers/catalog_controller.rb
+++ b/app/controllers/catalog_controller.rb
@@ -17,7 +17,6 @@ class CatalogController < ApplicationController
# Combine our search queries as they come in
def index
create_full_size_download_facet
- params[:q] = params[:q].join(' AND ') if params[:q].respond_to?('join')
super
end
@@ -94,4 +93,15 @@ def create_full_size_download_facet
# rubocop:enable Metrics/MethodLength
# rubocop:enable Metrics/CyclomaticComplexity
# rubocop:enable Metrics/PerceivedComplexity
+
+ private
+
+ # OVERRIDE FROM BLACKLIGHT: Allow and account for multiple q: query params
+ # This must be on every controller that uses the layout, because it is used in
+ # the header to draw Blacklight::SearchNavbarComponent (via the shared/header_navbar template)
+ # @return [Blacklight::SearchState] a memoized instance of the parameter state.
+ def search_state
+ params[:q] = params[:q].join(' AND ') if params[:q].respond_to?('join')
+ @search_state ||= search_state_class.new(params, blacklight_config, self)
+ end
end
diff --git a/app/controllers/concerns/hyrax/dashboard_authorization.rb b/app/controllers/concerns/hyrax/dashboard_authorization.rb
index 40c371690..0ce065428 100644
--- a/app/controllers/concerns/hyrax/dashboard_authorization.rb
+++ b/app/controllers/concerns/hyrax/dashboard_authorization.rb
@@ -24,7 +24,7 @@ def admin
def operating_on_user_collection
curation_concern ||= params['id'] ? ::SolrDocument.find(params['id']) : nil
- (params[:collection_type_gid] || curation_concern&.collection_type_gid) == Hyrax::CollectionType.find_by(machine_id: :user_collection)&.gid&.to_s
+ (params[:collection_type_gid] || curation_concern&.collection_type_gid) == Hyrax::CollectionType.find_by(machine_id: :user_collection)&.to_global_id&.to_s
end
end
end
diff --git a/app/controllers/concerns/oregon_digital/aspace_digital_object_export_behavior.rb b/app/controllers/concerns/oregon_digital/aspace_digital_object_export_behavior.rb
index 2e8275096..ac64a5687 100644
--- a/app/controllers/concerns/oregon_digital/aspace_digital_object_export_behavior.rb
+++ b/app/controllers/concerns/oregon_digital/aspace_digital_object_export_behavior.rb
@@ -5,7 +5,7 @@ module OregonDigital
module AspaceDigitalObjectExportBehavior
def show_do_export
@importer = Bulkrax::Importer.find(params[:importer_id])
- render plain: export
+ render json: export
end
def export
@@ -27,8 +27,7 @@ def process_entries
end
def build(pid)
- work = Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: pid)
- ado = OregonDigital::AspaceDigitalObject.new(work)
+ ado = OregonDigital::AspaceDigitalObject.new(pid)
ado.build_record
ado
end
@@ -43,7 +42,7 @@ def push(ado)
def format_result
result[:errors] = errors
- JSON.generate(@result)
+ JSON.dump(result)
end
def errors
diff --git a/app/controllers/concerns/oregon_digital/blacklight_config_behavior.rb b/app/controllers/concerns/oregon_digital/blacklight_config_behavior.rb
index 1992dfab1..8dc690164 100644
--- a/app/controllers/concerns/oregon_digital/blacklight_config_behavior.rb
+++ b/app/controllers/concerns/oregon_digital/blacklight_config_behavior.rb
@@ -37,13 +37,12 @@ def self.modified_field
config.advanced_search[:url_key] ||= 'advanced'
config.advanced_search[:query_parser] ||= 'dismax'
config.advanced_search[:form_solr_parameters] ||= {
- 'facet.field' => %w[non_user_collections_ssim copyright_combined_label_sim date_combined_year_label_ssim institution_label_sim language_label_sim]
+ 'facet.field' => %w[non_user_collections_label_ssim non_user_collections_ssim copyright_combined_label_sim date_combined_year_label_ssim institution_label_sim language_label_sim]
}
config.advanced_search[:form_facet_partial] = 'advanced_search_facets_as_select'
config.view.list.partials = %i[thumbnail index_header index]
config.view.gallery.partials = %i[metadata]
- config.view.gallery.icon_class = 'fa fa-trello fa-lg'
config.view.gallery.if = true
config.view.slideshow.partials = %i[index]
config.view.slideshow.if = false
@@ -54,6 +53,9 @@ def self.modified_field
config.http_method = :post
config.per_page = [20, 60, 100]
+ config.add_results_collection_tool(:sort_widget)
+ config.add_results_collection_tool(:per_page_widget)
+
## Default parameters to send to solr for all search-like requests. See also SolrHelper#solr_search_params
config.default_solr_params = {
qt: 'search',
@@ -67,7 +69,7 @@ def self.modified_field
config.index.thumbnail_field = 'thumbnail_path_ss'
# Remove the view type selector (masonry, grid, list, etc) from the sort/show section so we can add it somewhere else
- config.index.collection_actions.delete_field 'view_type_group'
+ # config.index.collection_actions.delete_field 'view_type_group'
# The generic_type isn't displayed on the facet list
# It's used to give a label to the filter that comes from the user profile
@@ -201,6 +203,7 @@ def self.modified_field
http\://creativecommons.org/publicdomain/zero/1.0/ OR
http\://creativecommons.org/publicdomain/mark/1.0/)' }
}
+
config.add_facet_field 'copyright_combined_label_sim', label: I18n.translate('simple_form.labels.defaults.copyright_combined'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'file_format_sim', label: I18n.translate('simple_form.labels.defaults.file_format'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'resource_type_label_sim', label: I18n.translate('simple_form.labels.defaults.resource_type_label'), index_range: 'A'..'Z', limit: 5
@@ -212,12 +215,12 @@ def self.modified_field
config.add_facet_field 'location_combined_label_sim', label: I18n.translate('simple_form.labels.defaults.location_combined'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'workType_label_sim', label: I18n.translate('simple_form.labels.defaults.workType'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'language_label_sim', label: I18n.translate('simple_form.labels.defaults.language'), index_range: 'A'..'Z', limit: 5
- config.add_facet_field 'non_user_collections_ssim', limit: 5, label: 'Collection', helper_method: 'collection_title_from_id', index_range: 'A'..'Z'
+ config.add_facet_field 'non_user_collections_label_ssim', label: 'Collection', helper_method: 'collection_title_modify', index_range: 'A'..'Z', limit: 5
config.add_facet_field 'local_collection_name_label_sim', label: I18n.translate('simple_form.labels.defaults.local_collection'), index_range: 'A'..'Z', limit: 5
- config.add_facet_field 'institution_label_sim', limit: 5, label: 'Institution', index_range: 'A'..'Z'
+ config.add_facet_field 'institution_label_sim', label: 'Institution', index_range: 'A'..'Z', limit: 5
+
config.add_facet_field 'cultural_context_label_sim', label: I18n.translate('simple_form.labels.defaults.cultural_context_label'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'local_contexts_label_sim', label: I18n.translate('simple_form.labels.defaults.local_contexts'), index_range: 'A'..'Z', limit: 5
-
config.add_facet_field 'former_owner_sim', label: I18n.translate('simple_form.labels.defaults.former_owner'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'mode_of_issuance_sim', label: I18n.translate('simple_form.labels.defaults.mode_of_issuance'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'box_number_sim', label: I18n.translate('simple_form.labels.defaults.box_number'), index_range: 'A'..'Z', limit: 5
@@ -229,6 +232,9 @@ def self.modified_field
config.add_facet_field 'series_number_sim', label: I18n.translate('simple_form.labels.defaults.series_number'), index_range: 'A'..'Z', limit: 5
config.add_facet_field 'exhibit_sim', label: I18n.translate('simple_form.labels.defaults.exhibit'), index_range: 'A'..'Z', limit: 5
+ config.add_facet_field 'non_user_collections_ssim', label: 'Collection', show: false
+ config.add_facet_field 'user_collections_ssim', label: 'User Collection', show: false
+
# Iterate all metadata and facet the properties that are configured for facets and not facetable yet
# Do not show these facets, they're for collection configurable facets
(Generic::ORDERED_PROPERTIES + Generic::UNORDERED_PROPERTIES).each do |prop|
diff --git a/app/controllers/concerns/oregon_digital/importer_controller_behavior.rb b/app/controllers/concerns/oregon_digital/importer_controller_behavior.rb
index 34e16bbe2..b3629be32 100644
--- a/app/controllers/concerns/oregon_digital/importer_controller_behavior.rb
+++ b/app/controllers/concerns/oregon_digital/importer_controller_behavior.rb
@@ -3,21 +3,6 @@
module OregonDigital
# adds custom behavior to bulkrax importer
module ImporterControllerBehavior
- def show_errors
- @importer = Bulkrax::Importer.find(params[:importer_id])
- @errors = compile_errors
- render 'oregon_digital/importer/show_errors'
- end
-
- def verify
- @importer = Bulkrax::Importer.find(params[:importer_id])
- bvs = OregonDigital::BatchVerificationService.new(work_ids.map { |x| x[:work_id] }.reject(&:nil?))
- bvs.verify
- redirect_to importer_path(@importer.id), notice: 'Verification jobs are enqueued. Jobs may be delayed depending on number/type of jobs already enqueued; please wait 5-10 minutes before checking results.'
- end
-
- # returns an array of hashes, eg { work_id: 'abcde1234', entry_identifier: '80-101' }
- # if solr returns an empty array, the work_id will be nil
def work_ids
ids = []
@importer.entries.pluck(:identifier).each do |i|
@@ -27,24 +12,27 @@ def work_ids
ids
end
- def compile_errors
- errors = {}
- work_ids.each do |item|
- if item[:work_id].nil?
- errors[item[:entry_identifier]] = { solr: ['Unable to load work for this entry.'] }
- else
- errors[item[:work_id]] = retrieve_errors(item[:work_id])
- end
- end
- errors
+ # show_errors?importer_id=9&time=202504011111
+ def show_errors
+ render file: report_path, layout: false, content_type: 'application/json'
+ end
+
+ def report_path
+ File.join(OD2::Application.config.local_path, "verify/batch_#{params[:importer_id]}_report_#{params[:time]}.json")
end
- def retrieve_errors(id)
- work = Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: id)
- work.all_errors
- rescue Valkyrie::Persistence::ObjectNotFoundError
- { valkyrie: ['Unable to load work.'] }
+ # rubocop:disable Metrics/AbcSize
+ def verify
+ @importer = Bulkrax::Importer.find(params[:importer_id])
+ Redis.current.del("verify_count:#{@importer.id}")
+ ids = work_ids.map { |x| x[:work_id] }.reject(&:nil?)
+ redirect_to(importer_path(@importer.id), notice: 'Unable to find any items to verify.') and return if ids.empty?
+
+ bvs = OregonDigital::BatchVerificationService.new(ids, { batch_id: @importer.id, user_mail: current_user.email, size: ids.size, reporter: 'OregonDigital::ImporterVerificationReporter' })
+ bvs.verify
+ redirect_to importer_path(@importer.id), notice: 'Verification jobs are enqueued. Jobs may be delayed depending on number/type of jobs already enqueued; an email will be sent to you when the report is complete.'
end
+ # rubocop:enable Metrics/AbcSize
def importers_list
render 'oregon_digital/importer/importers_list'
diff --git a/app/controllers/concerns/oregon_digital/work_relation_pagination_behavior.rb b/app/controllers/concerns/oregon_digital/work_relation_pagination_behavior.rb
index ce6c4e6f0..4bfc87ad2 100644
--- a/app/controllers/concerns/oregon_digital/work_relation_pagination_behavior.rb
+++ b/app/controllers/concerns/oregon_digital/work_relation_pagination_behavior.rb
@@ -3,6 +3,7 @@
module OregonDigital
# Behavior for displaying relationships with pagination
module WorkRelationPaginationBehavior
+ COUNT = 4
# Include 'catalog' in the search path for views, while prefering
# our local paths. Thus we are unable to just override `self.local_prefixes`
def _prefixes
@@ -13,39 +14,79 @@ def _prefixes
# Finds a solr document matching the id and sets @presenter
# @raise CanCan::AccessDenied if the document is not found or the user doesn't have access to it.
def show
- blacklight_config.per_page = [4]
+ blacklight_config.per_page = [COUNT]
parent_results
sibling_results
child_results
+ ordered_child_results
@search_builder_class = Hyrax::WorkSearchBuilder
super
end
# Pass work to relationship search builders
def search_builder
- work ||= ::SolrDocument.find(params['id'])
search_builder_class == Hyrax::WorkSearchBuilder ? search_builder_class.new(self) : search_builder_class.new(self, work: work)
end
+ def work
+ @work ||= begin
+ doc = ::SolrDocument.find(params['id'])
+ Hyrax::SolrDocument::OrderedMembers.decorate(doc)
+ end
+ end
+
# Get all parent documents
def parent_results
@search_builder_class = OregonDigital::ParentsOfWorkSearchBuilder
- params[:page] = params[:parent_page]
- (@parent_response, @parent_doc_list) = search_results(params)
+ (@parent_response, @parent_doc_list) = search_service.search_results do
+ search_builder.page(params[:parent_page] || 1)
+ end
end
# Get all sibling documents
def sibling_results
@search_builder_class = OregonDigital::SiblingsOfWorkSearchBuilder
params[:page] = params[:sibling_page]
- (@sibling_response, @sibling_doc_list) = search_results(params)
+ (@sibling_response, @sibling_doc_list) = search_service.search_results do
+ search_builder.page(params[:sibling_page] || 1)
+ end
end
- # get all child documents
+ # get all child works for response
def child_results
@search_builder_class = OregonDigital::ChildrenOfWorkSearchBuilder
- params[:page] = params[:child_page]
- (@child_response, @child_doc_list) = search_results(params)
+ (@child_response,) = search_service.search_results do
+ search_builder.page(params[:child_page] || 1)
+ end
+ # handle pagination if some assets will be restricted for some reason
+ @child_response['response']['numFound'] = work.ordered_member_ids.count
+ @child_response['response']['start'] = start(params[:child_page])
+ end
+
+ # hacky method for getting one page of child docs in order
+ def ordered_child_results
+ @child_doc_list = []
+ return unless @child_response['response']['numFound'].positive?
+
+ @search_builder_class = OregonDigital::OrderedChildrenOfWorkSearchBuilder
+ (_, @child_doc_list) = search_service.search_results do
+ search_builder
+ end
+ @child_doc_list = sort_by_ordered(@child_doc_list, start(params[:child_page]))
+ end
+
+ def sort_by_ordered(doc_list, start_ind)
+ ordered_docs = []
+ work.ordered_member_ids.slice(start_ind, COUNT).each do |id|
+ ordered_docs << doc_list.find { |x| x['id'] == id }
+ end
+ ordered_docs.compact
+ end
+
+ def start(page)
+ return 0 if page.nil?
+
+ (page.to_i - 1) * COUNT
end
end
end
diff --git a/app/controllers/concerns/oregon_digital/works_controller_behavior.rb b/app/controllers/concerns/oregon_digital/works_controller_behavior.rb
index 03779698f..6ba01c9cb 100644
--- a/app/controllers/concerns/oregon_digital/works_controller_behavior.rb
+++ b/app/controllers/concerns/oregon_digital/works_controller_behavior.rb
@@ -27,12 +27,14 @@ def create
# This helps failed form submissions to return to the form and display errors
params[hash_key_for_curation_concern][:member_of_collection_ids] = nil if params[hash_key_for_curation_concern][:member_of_collection_ids].empty?
set_permissions_to_work
+ set_content_alert
super
end
# MODIFY: Add in a special method to help on updating the permissions
def update
set_permissions_to_work
+ set_content_alert
super
end
@@ -55,6 +57,11 @@ def set_permissions_to_work
end
# rubocop:enable Metrics/AbcSize
+ # METHOD: Check for mask_content not being check
+ def set_content_alert
+ curation_concern.content_alert = nil if params[hash_key_for_curation_concern][:mask_content]&.all?(&:blank?)
+ end
+
def after_update_response
OregonDigital::PermissionChangeEventJob.perform_later(curation_concern, current_user) if permissions_changed?
super
diff --git a/app/controllers/hyrax/homepage_controller.rb b/app/controllers/hyrax/homepage_controller.rb
index fbea95d27..68ca0a9a4 100644
--- a/app/controllers/hyrax/homepage_controller.rb
+++ b/app/controllers/hyrax/homepage_controller.rb
@@ -4,15 +4,8 @@
class Hyrax::HomepageController < ApplicationController
# Adds Hydra behaviors into the application controller
include Blacklight::SearchContext
- include Blacklight::SearchHelper
include Blacklight::AccessControls::Catalog
- # The search builder for finding recent documents
- # Override of Blacklight::RequestBuilders
- def search_builder_class
- Hyrax::HomepageSearchBuilder
- end
-
class_attribute :presenter_class
self.presenter_class = Hyrax::HomepagePresenter
layout 'homepage'
@@ -33,11 +26,11 @@ def index
# Return 8 collections
def collections(rows: 8)
# TODO: set CollectionSearchBuilder to retrieve collections from a curated list, instead of newest collections
- builder = OregonDigital::NonUserCollectionsSearchBuilder.new(self)
- .rows(rows)
- .merge(sort: sort_field)
- response = repository.search(builder)
- response.documents
+ Hyrax::CollectionsService.list_search_builder_class = OregonDigital::NonUserCollectionsSearchBuilder
+ Hyrax::CollectionsService.new(self).search_results do |builder|
+ builder.rows(rows)
+ builder.merge(sort: sort_field)
+ end
rescue Blacklight::Exceptions::ECONNREFUSED, Blacklight::Exceptions::InvalidRequest
[]
end
@@ -45,11 +38,18 @@ def collections(rows: 8)
def recent
# OVERRIDE FROM HYRAX to increase number of recent document rows
# grab any recent documents
- (_, @recent_documents) = search_results(q: '', sort: sort_field, rows: 6)
+ (_, @recent_documents) = search_service.search_results do |builder|
+ builder.rows(6)
+ builder.merge(sort: sort_field)
+ end
rescue Blacklight::Exceptions::ECONNREFUSED, Blacklight::Exceptions::InvalidRequest
@recent_documents = []
end
+ def search_service
+ Hyrax::SearchService.new(config: blacklight_config, user_params: { q: '' }, scope: self, search_builder_class: Hyrax::HomepageSearchBuilder)
+ end
+
def sort_field
'system_create_dtsi desc'
end
diff --git a/app/controllers/hyrax/my/works_controller.rb b/app/controllers/hyrax/my/works_controller.rb
new file mode 100644
index 000000000..d73053473
--- /dev/null
+++ b/app/controllers/hyrax/my/works_controller.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+module Hyrax
+ module My
+ # OVERRIDE: Override the default Works Controller to modify the works filter layout
+ class WorksController < MyController
+ # Define collection specific filter facets.
+ def self.configure_facets
+ configure_blacklight do |config|
+ config.search_builder_class = Hyrax::My::WorksSearchBuilder
+ config.add_facet_field 'admin_set_sim', limit: 5
+ config.add_facet_field 'member_of_collections_ssim', limit: 5
+
+ # ADD: Add in a new field 'Workflow State' to the works filter list
+ config.add_facet_field 'workflow_state_name_ssim', label: I18n.translate('blacklight.search.fields.facet.workflow_state_name_ssim'), helper_method: :workflow_state_display
+ end
+ end
+ configure_facets
+
+ class_attribute :create_work_presenter_class
+ self.create_work_presenter_class = Hyrax::SelectTypeListPresenter
+
+ # rubocop:disable Metrics/AbcSize
+ def index
+ # The user's collections for the "add to collection" form
+ @user_collections = collections_service.search_results(:deposit)
+
+ add_breadcrumb t(:'hyrax.controls.home'), root_path
+ add_breadcrumb t(:'hyrax.dashboard.breadcrumbs.admin'), hyrax.dashboard_path
+ add_breadcrumb t(:'hyrax.admin.sidebar.works'), hyrax.my_works_path
+ managed_works_count
+ @create_work_presenter = create_work_presenter_class.new(current_user)
+ super
+ end
+ # rubocop:enable Metrics/AbcSize
+
+ private
+
+ def collections_service
+ Hyrax::CollectionsService.new(self)
+ end
+
+ def search_action_url(*args)
+ hyrax.my_works_url(*args)
+ end
+
+ # The url of the "more" link for additional facet values
+ def search_facet_path(args = {})
+ hyrax.my_dashboard_works_facet_path(args[:id])
+ end
+
+ def managed_works_count
+ @managed_works_count = Hyrax::Works::ManagedWorksService.managed_works_count(scope: self)
+ end
+ end
+ end
+end
diff --git a/app/controllers/oregon_digital/explore_collections_controller.rb b/app/controllers/oregon_digital/explore_collections_controller.rb
index 00a69bd0d..67dee8ab7 100644
--- a/app/controllers/oregon_digital/explore_collections_controller.rb
+++ b/app/controllers/oregon_digital/explore_collections_controller.rb
@@ -26,10 +26,10 @@ def page_title
configure_blacklight do |config|
config.view.gallery.if = false
config.view.list.if = false
- config.view.table.partials = %i[index]
- config.view.table.icon_class = 'glyphicon-th-list'
+ config.view.tables.partials = %i[metadata index table]
+ config.view.tables.template = 'document_tables'
+ config.view.masonry(document_component: Blacklight::Gallery::DocumentComponent)
config.view.masonry.partials = %i[metadata]
- config.view.masonry.icon_class = 'fa fa-trello fa-lg'
config.sort_fields.except! 'score desc, system_create_dtsi desc', 'date_dtsi desc', 'date_dtsi asc', 'system_create_dtsi desc'
config.sort_fields['title_ssort desc'][:label] = 'Z-A'
@@ -40,7 +40,7 @@ def page_title
def all
@tab = TABS[:all]
blacklight_config.search_builder_class = OregonDigital::NonUserCollectionsSearchBuilder
- (@response, @document_list) = search_results(params)
+ (@response, @document_list) = search_service.search_results
build_breadcrumbs
render :index
end
@@ -48,7 +48,7 @@ def all
def osu
@tab = TABS[:osu]
blacklight_config.search_builder_class = OregonDigital::OsuCollectionsSearchBuilder
- (@response, @document_list) = search_results(params)
+ (@response, @document_list) = search_service.search_results
build_breadcrumbs
render :index
end
@@ -56,7 +56,7 @@ def osu
def uo
@tab = TABS[:uo]
blacklight_config.search_builder_class = OregonDigital::UoCollectionsSearchBuilder
- (@response, @document_list) = search_results(params)
+ (@response, @document_list) = search_service.search_results
build_breadcrumbs
render :index
end
@@ -64,7 +64,7 @@ def uo
def my
@tab = TABS[:my]
blacklight_config.search_builder_class = OregonDigital::MyCollectionsSearchBuilder
- (@response, @document_list) = search_results(params)
+ (@response, @document_list) = search_service.search_results
build_breadcrumbs
render :index
end
@@ -106,7 +106,11 @@ def build_breadcrumbs
all: 'all',
osu: 'osu',
uo: 'uo',
- my: 'my collections'
+ my: 'my'
}.freeze
+
+ def search_service
+ Hyrax::SearchService.new(config: blacklight_config, user_params: params, scope: self, search_builder_class: blacklight_config.search_builder_class)
+ end
end
end
diff --git a/app/controllers/oregon_digital/oembeds_controller.rb b/app/controllers/oregon_digital/oembeds_controller.rb
index eeb3cd967..eb4871854 100644
--- a/app/controllers/oregon_digital/oembeds_controller.rb
+++ b/app/controllers/oregon_digital/oembeds_controller.rb
@@ -16,15 +16,19 @@ def index
@errors = OembedError.all
end
+ # rubocop:disable Metrics/AbcSize
def edit
load_curation_concern
- authorize! :edit, @curation_concern
+ return unless can? :edit, @curation_concern
+
+ # authorize! :edit, @curation_concern
add_breadcrumb t(:'hyrax.controls.home'), root_path
add_breadcrumb t(:'hyrax.dashboard.breadcrumbs.admin'), hyrax.dashboard_path
add_breadcrumb t(:'oregon_digital.oembeds.index.manage_oembeds'), Rails.application.routes.url_helpers.oembeds_path
add_breadcrumb t(:'oregon_digital.oembeds.edit.oembed_update'), '#'
end
+ # rubocop:enable Metrics/AbcSize
def load_curation_concern
@curation_concern = Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: params[:id])
diff --git a/app/controllers/saved_searches_controller.rb b/app/controllers/saved_searches_controller.rb
deleted file mode 100644
index 80d29eb53..000000000
--- a/app/controllers/saved_searches_controller.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# frozen_string_literal: true
-
-# Controller for saved searches provided by blacklight_advanced_search
-class SavedSearchesController < ApplicationController
- include Blacklight::SavedSearches
-
- helper BlacklightAdvancedSearch::RenderConstraintsOverride
-end
diff --git a/app/helpers/oregon_digital/hyrax_helper_behavior.rb b/app/helpers/oregon_digital/hyrax_helper_behavior.rb
index cb73db60d..b848ce820 100644
--- a/app/helpers/oregon_digital/hyrax_helper_behavior.rb
+++ b/app/helpers/oregon_digital/hyrax_helper_behavior.rb
@@ -22,8 +22,9 @@ def iconify_auto_link_with_highlight(field, show_link = true)
sanitize combine_hits_with_links(html_content, show_link)
end
- def collection_title_from_id(field, _show_link = true)
- SolrDocument.find(field).title_or_label
+ # METHOD: Modify the string of collection title so it can display correctly
+ def collection_title_modify(field, _show_link = true)
+ field.match?(/^\[.*\]$/) ? field.gsub(/^\[|\]$/, '') : field
end
# @return [String] the appropriate action url for our search form (depending on our current page)
diff --git a/app/helpers/oregon_digital/my/dashboard_works_helper.rb b/app/helpers/oregon_digital/my/dashboard_works_helper.rb
new file mode 100644
index 000000000..1bdba75ef
--- /dev/null
+++ b/app/helpers/oregon_digital/my/dashboard_works_helper.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module OregonDigital
+ module My
+ # MODULE: A custom works dashboard helper for display filter works
+ module DashboardWorksHelper
+ # METHOD: Create a method to change the display value for the workflow state
+ def workflow_state_display(value)
+ {
+ 'deposited' => 'Published',
+ 'pending_review' => 'Under Review',
+ 'tombstoned' => 'Tombstoned'
+ }[value] || value.titleize # Fallback to titleized value
+ end
+ end
+ end
+end
diff --git a/app/indexers/generic_indexer.rb b/app/indexers/generic_indexer.rb
index 4d9b08d80..444ffbc83 100644
--- a/app/indexers/generic_indexer.rb
+++ b/app/indexers/generic_indexer.rb
@@ -9,11 +9,23 @@ class GenericIndexer < Hyrax::WorkIndexer
include OregonDigital::StripsStopwords
include OregonDigital::ParsableLabelBehavior
+ # Valkyrie compatibility hack to allow Hyrax.indexing_adapter to see AF based indexers
+ def initialize(obj)
+ obj = obj[:resource] if obj.is_a?(Hash) && obj.key?(:resource)
+ super(obj)
+ end
+
+ # Valkyrie compatibility hack to allow Hyrax.indexing_adapter to see AF based indexers
+ def to_solr
+ generate_solr_document
+ end
+
# ABC Size is hard to avoid here because there are many types of fields we need to index.
# Pulling them out of #generate_solr_document and creating their own methods causes this issue to
# propogate downwards.
# rubocop:disable Metrics/AbcSize
# rubocop:disable Metrics/MethodLength
+ # rubocop:disable Metrics/BlockLength
def generate_solr_document
super.tap do |solr_doc|
index_rights_statement_label(solr_doc, object)
@@ -25,6 +37,7 @@ def generate_solr_document
index_local_contexts_label(solr_doc, object)
index_sort_options(solr_doc)
label_fetch_properties_solr_doc(object, solr_doc)
+ solr_doc['non_user_collections_label_ssim'] = []
solr_doc['non_user_collections_ssim'] = []
solr_doc['user_collections_ssim'] = []
solr_doc['oai_collections_ssim'] = []
@@ -32,6 +45,7 @@ def generate_solr_document
collection_index_key = collection_indexing_key(collection.collection_type.machine_id)
solr_doc[collection_index_key] << collection.id
solr_doc[collection_index_key.gsub('_ssim', '_tesim')] = collection.title
+ solr_doc['non_user_collections_label_ssim'] << collection.title if collection_index_key == 'non_user_collections_ssim'
end
# removing index_topic_combined_label(solr_doc, object.keyword)
# will be handled when indexing fetched labels
@@ -47,6 +61,7 @@ def generate_solr_document
end
# rubocop:enable Metrics/AbcSize
# rubocop:enable Metrics/MethodLength
+ # rubocop:enable Metrics/BlockLength
def collection_indexing_key(machine_id)
case machine_id
diff --git a/app/jobs/bulkrax/export_work_job.rb b/app/jobs/bulkrax/export_work_job.rb
new file mode 100644
index 000000000..ec87aa93c
--- /dev/null
+++ b/app/jobs/bulkrax/export_work_job.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+module Bulkrax
+ class ExportWorkJob < ApplicationJob
+ queue_as :export
+
+ def perform(*args)
+ entry = Entry.find(args[0])
+ exporter_run = ExporterRun.find(args[1])
+ begin
+ entry.build
+ entry.save
+ rescue StandardError
+ # rubocop:disable Rails/SkipsModelValidations
+ ExporterRun.increment_counter(:failed_records, args[1])
+ ExporterRun.decrement_counter(:enqueued_records, args[1]) unless exporter_run.reload.enqueued_records <= 0
+ raise
+ else
+ if entry.failed?
+ ExporterRun.increment_counter(:failed_records, args[1])
+ ExporterRun.decrement_counter(:enqueued_records, args[1]) unless exporter_run.reload.enqueued_records <= 0
+ raise entry.reload.current_status.error_class.constantize
+ else
+ ExporterRun.increment_counter(:processed_records, args[1])
+ ExporterRun.decrement_counter(:enqueued_records, args[1]) unless exporter_run.reload.enqueued_records <= 0
+ end
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+ return entry if exporter_run.reload.enqueued_records.positive?
+
+ if exporter_run.failed_records.positive?
+ exporter_run.exporter.set_status_info('Complete (with failures)')
+ else
+ exporter_run.exporter.set_status_info('Complete')
+ end
+
+ return entry
+ end
+ end
+end
diff --git a/app/jobs/oregon_digital/verify_work_job.rb b/app/jobs/oregon_digital/verify_work_job.rb
index 49c2604b3..aad5f408d 100644
--- a/app/jobs/oregon_digital/verify_work_job.rb
+++ b/app/jobs/oregon_digital/verify_work_job.rb
@@ -6,9 +6,29 @@ module OregonDigital
class VerifyWorkJob < ApplicationJob
queue_as :verify
+ # rubocop:disable Style/GuardClause
+ after_perform do |job|
+ args = job.arguments.first
+ count = Redis.current.incr("verify_count:#{args[:batch_id]}")
+ if count >= args[:size]
+ follow_up(args)
+ Redis.current.expire("verify_count:#{args[:batch_id]}", 5)
+ end
+ end
+
def perform(args)
service = OregonDigital::VerifyWorkService.new(args)
service.run
end
+
+ def follow_up(args)
+ unless args[:reporter].nil?
+ datetime_today = Time.zone.now.strftime('%Y%m%d%H%M') # '201710211259'
+ reporter = args[:reporter].constantize.new(args[:batch_id], datetime_today)
+ reporter.write_report
+ reporter.notify_user(args[:user_mail])
+ end
+ end
+ # rubocop:enable Style/GuardClause
end
end
diff --git a/app/mailers/oregon_digital/failed_fetch_mailer.rb b/app/mailers/oregon_digital/failed_fetch_mailer.rb
new file mode 100644
index 000000000..6c900efff
--- /dev/null
+++ b/app/mailers/oregon_digital/failed_fetch_mailer.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module OregonDigital
+ # MAILER: Email user/metadata team for failed fetch cv
+ class FailedFetchMailer < ApplicationMailer
+ # METHOD: Create an email and send a report to the user
+ # rubocop:disable Metrics/AbcSize
+ def failed_fetch_email
+ if params[:to] == 'kevin.jones@oregonstate.edu'
+ file_path = "#{Rails.root.join('tmp')}/#{params[:filename]}"
+ attachments[params[:filename]] = File.read(file_path) if File.exist?(file_path)
+ else
+ file_text = "#{Rails.root.join('tmp', 'failed_fetch')}/#{params[:filename]}"
+ attachments[params[:filename]] = File.read(file_text) if File.exist?(file_text)
+ end
+
+ mail(to: params[:to], subject: 'Oregon Digital: Failed Fetch Notice')
+ end
+ # rubocop:enable Metrics/AbcSize
+ end
+end
diff --git a/app/mailers/oregon_digital/notification_mailer.rb b/app/mailers/oregon_digital/notification_mailer.rb
index 8d61c7257..bbcb669f6 100644
--- a/app/mailers/oregon_digital/notification_mailer.rb
+++ b/app/mailers/oregon_digital/notification_mailer.rb
@@ -3,11 +3,11 @@
module OregonDigital
# Emails users that have reviews to do
class NotificationMailer < ApplicationMailer
+ default from: 'noreply@oregondigital.org'
def notification_email
- @user = params[:user]
- @need_keyword = params[:need_keyword]
- @url = 'http://oregondigital.org/notifications'
- mail(to: @user.email, subject: "Required #{@need_keyword} in Oregon Digital")
+ @email = params[:email]
+ @message = params[:message]
+ mail(to: @email, subject: 'Required Actions in Oregon Digital')
end
end
end
diff --git a/app/models/collection_representative.rb b/app/models/collection_representative.rb
index b06d9f327..2acd0c915 100644
--- a/app/models/collection_representative.rb
+++ b/app/models/collection_representative.rb
@@ -4,5 +4,7 @@
class CollectionRepresentative < ApplicationRecord
def fs_title
fileset_id.empty? ? '' : Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: fileset_id, use_valkyrie: false).title.first
+ rescue Ldp::Gone
+ ''
end
end
diff --git a/app/models/concerns/oregon_digital/uri_methods.rb b/app/models/concerns/oregon_digital/uri_methods.rb
index 3385a32de..ede5273e8 100644
--- a/app/models/concerns/oregon_digital/uri_methods.rb
+++ b/app/models/concerns/oregon_digital/uri_methods.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
+require 'uri'
module OregonDigital
# create urls needed to point to asset show pages and representative images
module UriMethods
def iiif_url(pid)
- "https://iiif.oregondigital.org/iiif/#{bucket_path(pid)}-jp2.jp2/full/430,/0/default.jpg"
+ URI.join(iiif_server, bucket_path(pid) + '-jp2.jp2/full/430,/0/default.jpg').to_s
end
def bucket_path(pid)
@@ -12,43 +13,48 @@ def bucket_path(pid)
end
def iiif_doc_url(pid)
- "https://iiif.oregondigital.org/iiif/#{bucket_path(pid)}-jp2-0000.jp2/full/430,/0/default.jpg"
+ URI.join(iiif_server, bucket_path(pid) + '-jp2-0000.jp2/full/430,/0/default.jpg').to_s
end
def show_url(klass, pid)
- "https://oregondigital.org/concern/#{klass}/#{pid}"
+ URI.join(app_base_url, "concern/#{klass}/#{pid}").to_s
end
def video_thumb(pid)
doc = Hyrax::SolrService.query("id:#{pid}", rows: 1).first
- "https://oregondigital.org#{doc['thumbnail_path_ss']}"
+ URI.join(app_base_url, doc['thumbnail_path_ss']).to_s
end
- # rubocop:disable Metrics/AbcSize
- def assign_uris(item)
- @asset_show_uri = show_url(item.class.to_s.downcase + 's', item.id.to_s)
- return image_uri(item) unless item.class.to_s == 'Generic'
+ # requires solr document to be decorated, i.e.
+ # Hyrax::SolrDocument::OrderedMembers.decorate(doc)
+ def assign_uris(doc)
+ @asset_show_uri = show_url(doc['has_model_ssim'].first.downcase + 's', doc['id'])
+ return image_uri(doc) unless doc['has_model_ssim'].first == 'Generic'
- return if item.member_ids.blank?
+ return if doc.ordered_member_ids.blank?
- image_uri(query(item.member_ids.first.to_s))
+ chdoc = SolrDocument.find(doc.ordered_member_ids.first)
+ image_uri(chdoc)
end
- # rubocop:enable Metrics/AbcSize
- def query(pid)
- Hyrax.query_service.find_by_alternate_identifier(alternate_identifier: pid)
+ def iiif_server
+ ENV.fetch('IIIF_SERVER_BASE_URL')
end
- def image_uri(item)
- return if item.member_ids.blank?
+ def app_base_url
+ Rails.application.routes.url_helpers.root_url
+ end
+
+ def image_uri(doc)
+ return if doc['member_ids_ssim'].blank?
- case item.class.to_s
+ case doc['has_model_ssim'].first
when 'Image'
- @asset_image_uri = iiif_url(item.member_ids.first.to_s)
+ @asset_image_uri = iiif_url(doc['member_ids_ssim'].first)
when 'Document'
- @asset_image_uri = iiif_doc_url(item.member_ids.first.to_s)
+ @asset_image_uri = iiif_doc_url(doc['member_ids_ssim'].first)
when 'Video'
- @asset_image_uri = video_thumb(item.member_ids.first.to_s)
+ @asset_image_uri = video_thumb(doc['member_ids_ssim'].first)
end
end
end
diff --git a/app/models/oai_set.rb b/app/models/oai_set.rb
index e1ddf1f42..0bd1799fc 100644
--- a/app/models/oai_set.rb
+++ b/app/models/oai_set.rb
@@ -46,7 +46,7 @@ def initialize(spec, opts = {})
def name_from_spec
collection = Collection.find @spec
- return nil if collection.collection_type.gid != Hyrax::CollectionType.find_by(machine_id: :oai_set).gid.to_s
+ return nil if collection.collection_type.to_global_id.to_s != Hyrax::CollectionType.find_by(machine_id: :oai_set).to_global_id.to_s
ActiveFedora::SolrService.query("id:#{@spec}", rows: 1).first['title_tesim'].first
end
diff --git a/app/models/oregon_digital/aspace_digital_object.rb b/app/models/oregon_digital/aspace_digital_object.rb
index cc8913073..671e8b621 100644
--- a/app/models/oregon_digital/aspace_digital_object.rb
+++ b/app/models/oregon_digital/aspace_digital_object.rb
@@ -11,37 +11,40 @@ class AspaceDigitalObject
# jsonmodel_type, extents, lang_materials, dates, is_slug_auto,
# file_versions, restrictions, title, digital_object_id
# image_uri is the iiif path, show_uri is the show page
- attr_accessor :asset_image_uri, :asset_show_uri, :work, :errors
- def initialize(work)
- @work = work
+ attr_accessor :asset_image_uri, :asset_show_uri, :doc, :errors
+ def initialize(pid)
+ @doc = Hyrax::SolrDocument::OrderedMembers.decorate(SolrDocument.find(pid))
@errors = []
end
def json
- JSON.generate(record)
+ JSON.dump(record)
end
# rubocop:disable Metrics/AbcSize
def build_record
record['dates'] = [add_date]
- record['title'] = work.title.first
+ record['title'] = doc['title_tesim'].first
record['lang_materials'] = [lang]
record['file_versions'] = file_versions
record['digital_object_type'] = do_type
record['linked_instances'] = [linked_instance]
- record['digital_object_id'] = work.identifier.first
+ record['digital_object_id'] = doc['identifier_tesim'].first
add_visibility
end
# rubocop:enable Metrics/AbcSize
def linked_instance
- if work.archival_object_id.blank?
- errors << "#{work.id} has no archival_object_id"
+ if doc['archival_object_id_tesim'].blank?
+ errors << "#{doc['id']} has no archival_object_id"
return {}
end
- ao_id = work.archival_object_id.first.split('/').last
- { 'ref' => "/repositories/2/archival_objects/#{ao_id}" }
+ val = doc['archival_object_id_tesim'].first.split('/').last
+ id_match = /[0-9]+/.match val
+ return {} if id_match.nil?
+
+ { 'ref' => "/repositories/2/archival_objects/#{id_match}" }
end
def record
@@ -53,7 +56,7 @@ def record
end
def add_visibility
- restrict = (work.visibility != 'open' || !work.access_restrictions.blank?)
+ restrict = (doc['visibility_ssi'] != 'open' || !doc['access_restrictions_tesim'].blank?)
record['publish'] = true
record['restrictions'] = restrict
record['suppressed'] = false
@@ -67,13 +70,20 @@ def date_hash
}
end
- # rubocop:disable Metrics/AbcSize
+ def date_present
+ return doc['date_tesim'].first unless doc['date_tesim'].blank?
+
+ return doc['date_created_tesim'].first unless doc['date_created_tesim'].blank?
+ end
+
# rubocop:disable Metrics/MethodLength
def add_date
- return {} if work.date.blank?
+ d = date_present
+ return {} if d.nil?
+
+ return {} unless EDTF.parse(d).present?
date_hash.tap do |t|
- d = work.date.first
t['expression'] = d
arr = d.split('/')
t['begin'] = arr[0]
@@ -83,7 +93,6 @@ def add_date
end
end
end
- # rubocop:enable Metrics/AbcSize
# rubocop:enable Metrics/MethodLength
def file_version_keys
@@ -99,9 +108,9 @@ def file_version_show
end
def file_versions
- assign_uris(work)
+ assign_uris(doc)
[].tap do |a|
- a << build_file_version(file_version_embed, @asset_image_uri) if work.visibility == 'open'
+ a << build_file_version(file_version_embed, @asset_image_uri) if doc['visibility_ssi'] == 'open'
a << build_file_version(file_version_show, @asset_show_uri)
end
end
@@ -116,12 +125,12 @@ def build_file_version(arr, uri)
end
def lang
- return {} if work.language.blank?
+ return {} if doc['language_tesim'].blank?
{
'jsonmodel_type' => 'lang_material',
'language_and_script' => {
- 'language' => work.language.first.split('/').last,
+ 'language' => doc['language_tesim'].first.split('/').last,
'jsonmodel_type' => 'language_and_script'
}
}
@@ -129,7 +138,7 @@ def lang
# rubocop:disable Metrics/MethodLength
def do_type
- case work.class.to_s
+ case doc['has_model_ssim'].first
when 'Document'
return 'Text'
when 'Image'
diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb
index 46efba6c8..b1192be52 100644
--- a/app/models/solr_document.rb
+++ b/app/models/solr_document.rb
@@ -28,9 +28,7 @@ def self.find(ids)
return super(ids) unless ids.is_a? Array
return [] if ids.blank?
- solr_query = Hyrax::SolrQueryBuilderService.construct_query_for_ids(ids)
- path = repository.blacklight_config.document_solr_path || repository.blacklight_config.solr_path
- docs = repository.send_and_receive path, { fq: solr_query, rows: ids.count }
+ docs = repository.find(ids)
docs.documents
end
@@ -73,10 +71,9 @@ def rights_statement_to_fa_class(rights_statement)
# Find and return parent works
def parents
- config = ::CatalogController.new
- repository = config.repository
- search_builder = OregonDigital::ParentsSearchBuilder.new(id: self['id'])
- @parents ||= repository.search(search_builder).docs
+ @parents ||= Hyrax::SolrService.get("{!field f=member_ids_ssim}#{id}")['response']['docs'].map do |doc|
+ SolrDocument.new(doc)
+ end
end
def parents?
@@ -100,7 +97,7 @@ def sort_members
end
def process_chunk(chunk)
- SolrDocument.find(chunk).map do |document|
+ SolrDocument.find(chunk.reject(&:blank?)).map do |document|
if document['has_model_ssim'].first.include?('FileSet')
@file_sets << document
else
diff --git a/app/models/user.rb b/app/models/user.rb
index d9272cabb..04b5bf29c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -8,13 +8,13 @@ class User < ApplicationRecord
include Hyrax::UserUsageStats
include Blacklight::User
- attr_accessible :email, :password, :password_confirmation if Blacklight::Utils.needs_attr_accessible?
before_create :role_from_devise
# DISABLE RUBOCOP BECAUSE DEVISE REQUIRES A PARTICULAR FORMAT
# rubocop:disable Style/SymbolArray
# Include default devise modules. Others available are:
- devise :database_authenticatable, :registerable, :recoverable, :confirmable,
+ # TODO: ADD BACK IN CONFIRMABLE
+ devise :database_authenticatable, :registerable, :recoverable,
:omniauthable, :validatable, omniauth_providers: [:cas, :saml]
# rubocop:enable Style/SymbolArray
@@ -68,7 +68,7 @@ def self.from_omniauth(access_token)
User.where(email: email).first_or_create do |u|
u.email = email
u.roles << role unless role.nil?
- u.skip_confirmation!
+ # u.skip_confirmation!
end
end
diff --git a/app/parsers/bulkrax/bagit_complex_parser.rb b/app/parsers/bulkrax/bagit_complex_parser.rb
index 48101398c..080712b42 100644
--- a/app/parsers/bulkrax/bagit_complex_parser.rb
+++ b/app/parsers/bulkrax/bagit_complex_parser.rb
@@ -33,7 +33,7 @@ def create_collections
title: lookup_collection(collection),
work_identifier => [collection],
visibility: 'open',
- collection_type_gid: Hyrax::CollectionType.find_or_create_default_collection_type.gid
+ collection_type_gid: Hyrax::CollectionType.find_or_create_default_collection_type.to_global_id
}
new_entry = find_or_create_entry(collection_entry_class, collection, 'Bulkrax::Importer', metadata)
ImportWorkCollectionJob.perform_now(new_entry.id, current_importer_run.id)
@@ -154,7 +154,7 @@ def write_files
file_name = filename(fs)
next if file_name.blank?
- io = open(fs.original_file.uri)
+ io = URI.open(fs.original_file.uri)
file = Tempfile.new([file_name, File.extname(file_name)], binmode: true)
file.write(io.read)
file.close
diff --git a/app/presenters/hyrax/collapsable_section_presenter.rb b/app/presenters/hyrax/collapsable_section_presenter.rb
index 71ce7b54a..f2db3168a 100644
--- a/app/presenters/hyrax/collapsable_section_presenter.rb
+++ b/app/presenters/hyrax/collapsable_section_presenter.rb
@@ -2,13 +2,14 @@
module Hyrax
# Draws a collapsable list widget using the Bootstrap 3 / Collapse.js plugin
class CollapsableSectionPresenter
- def initialize(view_context:, text:, id:, icon_class:, open:)
- @view_context = view_context
- @text = text
- @id = id
- @icon_class = icon_class
- @open = open
- end
+ def initialize(view_context:, text:, id:, icon_class:, open:, title: nil)
+ @view_context = view_context
+ @text = text
+ @id = id
+ @icon_class = icon_class
+ @open = open
+ @title = title
+ end
attr_reader :view_context, :text, :id, :icon_class, :open
delegate :content_tag, :safe_join, :tag, to: :view_context
diff --git a/app/presenters/oregon_digital/mp3_presenter.rb b/app/presenters/oregon_digital/mp3_presenter.rb
index 4c15777ac..3627a45a5 100644
--- a/app/presenters/oregon_digital/mp3_presenter.rb
+++ b/app/presenters/oregon_digital/mp3_presenter.rb
@@ -38,10 +38,17 @@ def to_s
private
+ # rubocop:disable Metrics/AbcSize
def duration
- dur = @file_set.duration.first&.split(':')&.map(&:to_i) || [0, 0, -1]
- (dur.first * 3600) + (dur.second * 60) + dur.third + 1
+ dur_array = @file_set.duration.first&.split(':')&.map(&:to_i) || [0, 0, -1]
+
+ if dur_array.count > 1
+ (dur_array.first * 3600) + (dur_array.second * 60) + dur_array.third + 1
+ else
+ (dur_array.first / 1000).ceil
+ end
end
+ # rubocop:enable Metrics/AbcSize
# The path to the derivative download
def default_content_path
diff --git a/app/presenters/oregon_digital/permission_badge.rb b/app/presenters/oregon_digital/permission_badge.rb
index 19113f70d..8ca17e7df 100644
--- a/app/presenters/oregon_digital/permission_badge.rb
+++ b/app/presenters/oregon_digital/permission_badge.rb
@@ -6,13 +6,13 @@ class PermissionBadge < Hyrax::PermissionBadge
include ActionView::Helpers::TagHelper
VISIBILITY_LABEL_CLASS = {
- authenticated: 'label-info',
- embargo: 'label-warning',
- osu: 'label-warning',
- uo: 'label-warning',
- lease: 'label-warning',
- open: 'label-success',
- restricted: 'label-danger'
+ authenticated: 'badge-info',
+ embargo: 'badge-warning',
+ osu: 'badge-warning',
+ uo: 'badge-warning',
+ lease: 'badge-warning',
+ open: 'badge-success',
+ restricted: 'badge-danger'
}.freeze
private
diff --git a/app/search_builders/oregon_digital/in_review_search_builder.rb b/app/search_builders/oregon_digital/in_review_search_builder.rb
index 2153aa57a..ebefa96d0 100644
--- a/app/search_builders/oregon_digital/in_review_search_builder.rb
+++ b/app/search_builders/oregon_digital/in_review_search_builder.rb
@@ -31,7 +31,7 @@ def roles_for_user
# @param workflow [Sipity::Workflow]
# @return [ActiveRecord::Relation]
def workflow_roles_for_user_and_workflow(workflow)
- Hyrax::Workflow::PermissionQuery.scope_processing_workflow_roles_for_user_and_workflow(user: current_user, workflow: workflow)
+ Hyrax::Workflow::PermissionQuery.scope_processing_workflow_roles_for_user_and_workflow(user: current_ability.current_user, workflow: workflow)
end
end
end
diff --git a/app/search_builders/oregon_digital/my_collections_search_builder.rb b/app/search_builders/oregon_digital/my_collections_search_builder.rb
index c1347bcc4..bbaacb6da 100644
--- a/app/search_builders/oregon_digital/my_collections_search_builder.rb
+++ b/app/search_builders/oregon_digital/my_collections_search_builder.rb
@@ -4,6 +4,7 @@
class OregonDigital::MyCollectionsSearchBuilder < Hyrax::My::CollectionsSearchBuilder
include OregonDigital::FilterTombstone
self.default_processor_chain += [:non_tombstoned_works]
+
# This overrides the models in Hyrax::My::CollectionsSearchBuilder
# @return [Array] a list of classes to include
def models
diff --git a/app/search_builders/oregon_digital/only_non_user_collections_behavior.rb b/app/search_builders/oregon_digital/only_non_user_collections_behavior.rb
index 29d8254de..a902277c5 100644
--- a/app/search_builders/oregon_digital/only_non_user_collections_behavior.rb
+++ b/app/search_builders/oregon_digital/only_non_user_collections_behavior.rb
@@ -8,8 +8,8 @@ module OnlyNonUserCollectionsBehavior
included do
def show_only_collections_not_created_users(solr_parameters)
clauses = [
- ActiveFedora::SolrQueryBuilder.construct_query_for_rel(collection_type_gid: Hyrax::CollectionType.find_by(machine_id: :user_collection).gid),
- ActiveFedora::SolrQueryBuilder.construct_query_for_rel(collection_type_gid: Hyrax::CollectionType.find_by(machine_id: :oai_set).gid)
+ ActiveFedora::SolrQueryBuilder.construct_query_for_rel(collection_type_gid: Hyrax::CollectionType.find_by(machine_id: :user_collection)&.to_global_id.to_s),
+ ActiveFedora::SolrQueryBuilder.construct_query_for_rel(collection_type_gid: Hyrax::CollectionType.find_by(machine_id: :oai_set)&.to_global_id.to_s)
]
solr_parameters[:fq] ||= []
solr_parameters[:fq] += ["!(#{clauses.join(' OR ')})"]
diff --git a/app/search_builders/oregon_digital/ordered_children_of_work_search_builder.rb b/app/search_builders/oregon_digital/ordered_children_of_work_search_builder.rb
new file mode 100644
index 000000000..312cf465d
--- /dev/null
+++ b/app/search_builders/oregon_digital/ordered_children_of_work_search_builder.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal:true
+
+module OregonDigital
+ # Finds subset of ordered child works, i.e. for a given page
+ class OrderedChildrenOfWorkSearchBuilder < Hyrax::SearchBuilder
+ self.default_processor_chain += [:ordered_child_works]
+
+ attr_reader :work
+
+ def initialize(*options, work:)
+ @work = work
+ super(options.first)
+ @child_page = options.first.params['child_page']
+ # page must be set to 1, otherwise search builder assumes
+ # that all docs have already been returned on the previous page
+ options.first.params['page'] = '1'
+ @count = blacklight_config.per_page.first
+ end
+
+ def ordered_child_works(solr_params)
+ ids = @work.ordered_member_ids || ['""']
+ ids = ids.slice(find_start(@child_page), @count)
+ solr_params[:fq] ||= []
+ solr_params[:fq] << "id:(#{ids.join(' OR ')})"
+ solr_params[:fq] << '-has_model_ssim:*FileSet'
+ end
+
+ def find_start(page)
+ return 0 if page.nil?
+
+ return (page.to_i - 1) * @count
+ end
+ end
+end
diff --git a/app/search_builders/oregon_digital/parents_search_builder.rb b/app/search_builders/oregon_digital/parents_search_builder.rb
index 95386cbbf..d6458c853 100644
--- a/app/search_builders/oregon_digital/parents_search_builder.rb
+++ b/app/search_builders/oregon_digital/parents_search_builder.rb
@@ -2,14 +2,14 @@
module OregonDigital
# Finds parent works
- class ParentsSearchBuilder < Blacklight::SearchBuilder
+ class ParentsSearchBuilder < Hyrax::SearchBuilder
self.default_processor_chain += [:parent_works]
attr_reader :work
- def initialize(id:)
+ def initialize(*options, id:)
@id = id
- super
+ super(options.first)
end
def parent_works(solr_params)
diff --git a/app/views/_controls.html.erb b/app/views/_controls.html.erb
index e33886dfb..6d7084c2d 100644
--- a/app/views/_controls.html.erb
+++ b/app/views/_controls.html.erb
@@ -1,32 +1,28 @@
-
-
+
+
<%= t('hyrax.product_name') %>
-
-
-
- <%= form_tag search_form_action, method: :get, class: "form-horizontal search-form", id: "masthead-search-form-header", role: "search" do %>
- <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %>
- <%= hidden_field_tag :search_field, 'all_fields', id: 'masthead_search_field' %>
-
- <%= link_to 'Advanced', BlacklightAdvancedSearch::Engine.routes.url_helpers.advanced_search_path, class: 'advanced-link' %>
- <% end %>
-
-
+
+ <%= form_tag search_form_action, method: :get, class: "form-horizontal search-form", id: "masthead-search-form-header", role: "search" do %>
+ <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %>
+ <%= hidden_field_tag :search_field, 'all_fields', id: 'masthead_search_field' %>
+
+ <%= link_to 'Advanced', BlacklightAdvancedSearch::Engine.routes.url_helpers.advanced_search_path, class: 'advanced-link' %>
+ <% end %>
-
+
\ No newline at end of file
diff --git a/app/views/_logo.html.erb b/app/views/_logo.html.erb
index 8ced8c4bf..114577e1e 100644
--- a/app/views/_logo.html.erb
+++ b/app/views/_logo.html.erb
@@ -1,6 +1,6 @@
<%= image_tag('logo.png', height: '64', width: '64', alt: '', class: 'logo') %>
<%= application_name %>
- <%= 'Unique Cultural Heritage Collections' %>
+ <%= 'Unique Cultural Heritage Collections' %>
diff --git a/app/views/_masthead.html.erb b/app/views/_masthead.html.erb
index 783db514f..35d75b71f 100644
--- a/app/views/_masthead.html.erb
+++ b/app/views/_masthead.html.erb
@@ -1,19 +1,16 @@
-
+
-
-
-
+
<%= render '/user_util_links' %>
diff --git a/app/views/_user_util_links.html.erb b/app/views/_user_util_links.html.erb
index 3a8061615..a8bed70c7 100644
--- a/app/views/_user_util_links.html.erb
+++ b/app/views/_user_util_links.html.erb
@@ -1,4 +1,4 @@
-
+
<%= link_to 'Explore Collections', Rails.application.routes.url_helpers.all_collections_path, class: 'explore-collections visible-all-inline-block lato-b' %>
@@ -8,24 +8,23 @@
<% if user_signed_in? %>
- <%= link_to hyrax.dashboard_profile_path(current_user), id: 'user-dropdown', class: ['btn', 'btn-outline'],role: 'button', data: { toggle: 'dropdown' }, aria: { expanded: false, controls: 'user-util-links' } do %>
+ <%= link_to hyrax.dashboard_profile_path(current_user), id: 'user-dropdown', class: ['btn', 'btn-sm', 'btn-outline', 'dropdown-toggle'],role: 'button', data: { toggle: 'dropdown' }, aria: { expanded: false, controls: 'user-util-links' } do %>
- My Account
-
+ My Account
<% end %>
<% else %>
diff --git a/app/views/blacklight_range_limit/_range_limit_panel.html.erb b/app/views/blacklight_range_limit/_range_limit_panel.html.erb
index 1d58c3fb5..a1d1da9a8 100644
--- a/app/views/blacklight_range_limit/_range_limit_panel.html.erb
+++ b/app/views/blacklight_range_limit/_range_limit_panel.html.erb
@@ -1,89 +1,90 @@
<%- # requires solr_config local passed in
- field_config = range_config(solr_field)
- label = facet_field_label(solr_field)
-
+ field_config = range_config(field_name)
+ label = facet_field_label(field_name)
+
input_label_range_begin = field_config[:input_label_range_begin] || t("blacklight.range_limit.range_begin", field_label: label)
input_label_range_end = field_config[:input_label_range_end] || t("blacklight.range_limit.range_end", field_label: label)
maxlength = field_config[:maxlength]
-%>
-
- <% if has_selected_range_limit?(solr_field) %>
+
+ <% if has_selected_range_limit?(field_name) %>
- <%= range_display(solr_field) %>
- <%= link_to remove_range_param(solr_field), :class=>"remove", :title => t('blacklight.range_limit.remove_limit') do %>
-
+ <%= range_display(field_name) %>
+ <%= link_to search_action_url(remove_range_param(field_name).except(:controller, :action)), :class=>"remove", :title => t('blacklight.range_limit.remove_limit') do %>
+ ✖
[<%= t('blacklight.range_limit.remove_limit') %>]
- <% end %>
+ <% end %>
<%= number_with_delimiter(@response.total) %>
-
- <% end %>
- <% unless selected_missing_for_range_limit?(solr_field) %>
- <%= form_tag search_action_path, :method => :get, class: [BlacklightRangeLimit.classes[:form], "range_#{solr_field}"].join(' ') do %>
- <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:page)) %>
-
-
- <% unless params.has_key?(:search_field) %>
- <%= hidden_field_tag("search_field", "dummy_range") %>
- <% end %>
-
- <%= render_range_input(solr_field, :begin, input_label_range_begin, maxlength) %> – <%= render_range_input(solr_field, :end, input_label_range_end, maxlength) %>
- <%= submit_tag t('blacklight.range_limit.submit_limit'), class: BlacklightRangeLimit.classes[:submit] %>
-
- <% end %>
+
<% end %>
-
+
- <% unless selected_missing_for_range_limit?(solr_field) %>
+ <% unless selected_missing_for_range_limit?(field_name) %>
- <% if stats_for_field?(solr_field) %>
+ <% if stats_for_field?(field_name) %>
<% end %>
- <% if (min = range_results_endpoint(solr_field, :min)) &&
- (max = range_results_endpoint(solr_field, :max)) %>
-
">
- Current results range from <%= range_results_endpoint(solr_field, :min) %> to <%= range_results_endpoint(solr_field, :max) %>
-
-
+
+ <% if (min = range_results_endpoint(field_name, :min)) &&
+ (max = range_results_endpoint(field_name, :max)) %>
+
<% if field_config[:segments] != false %>
- <% if solr_range_queries_to_a(solr_field).length > 0 %>
-
- <%= render(:partial => "blacklight_range_limit/range_segments", :locals => {:solr_field => solr_field}) %>
-
- <% else %>
- <%= link_to('View distribution', main_app.url_for(search_state.to_h.merge(action: 'range_limit', range_field: solr_field, range_start: min, range_end: max)), :class => "load_distribution") %>
+ <% if solr_range_queries_to_a(field_name).length > 0 %>
+
+ <%= render(:partial => "blacklight_range_limit/range_segments", :locals => {:solr_field => field_name}) %>
+
+ <% else %>
+ <%= link_to(t('blacklight.range_limit.view_distribution'), range_limit_url(range_field: field_name, range_start: min, range_end: max), :class => "load_distribution") %>
<% end %>
- <% end %>
- <% end %>
-
-
-
- <% if (stats = stats_for_field(solr_field)) && stats["missing"] > 0 %>
-
-
-
- <%= link_to BlacklightRangeLimit.labels[:missing], add_range_missing(solr_field) %>
-
-
- <%= number_with_delimiter(stats["missing"]) %>
-
-
-
+ <% end %>
+
">
+ <%= t('blacklight.range_limit.results_range_html', min: range_results_endpoint(field_name, :min), max: range_results_endpoint(field_name, :max)) %>
+
<% end %>
+
+ <%= form_tag search_action_path, :method => :get, class: [BlacklightRangeLimit.classes[:form], "range_#{field_name} d-flex justify-content-center"].join(' ') do %>
+ <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:page)) %>
+
+ <% end %>
+
+ <%= link_to t('blacklight.range_limit.view_larger', field_name: label),
+ range_limit_panel_url(id: field_name, range_start: 0, range_end: 2019),
+ class: 'view_larger mt-1',
+ data: { blacklight_modal: 'trigger' } %>
+
+ <% unless request.xhr? %>
+ <% if (stats = stats_for_field(field_name)) && stats["missing"] > 0 %>
+
+
+
+ <%= link_to t('blacklight.range_limit.missing'), search_action_url(add_range_missing(field_name).except(:controller, :action)) %>
+
+ <%# note important there be no whitespace inside facet-count to avoid
+ bug in some versions of Blacklight (including 7.1.0.alpha) %>
+ <%= number_with_delimiter(stats["missing"]) %>
+
+
+ <% end %>
+ <% end %>
<% end %>
\ No newline at end of file
diff --git a/app/views/catalog/_constraints.html.erb b/app/views/catalog/_constraints.html.erb
index 38b0edabb..e7ae690f9 100644
--- a/app/views/catalog/_constraints.html.erb
+++ b/app/views/catalog/_constraints.html.erb
@@ -1,5 +1,5 @@
-
+
<%= render_constraints(params) %>
@@ -10,18 +10,20 @@
<%= render_filtered_partials(view_type_group: tool_config) %>
-
+
<%= render_constraints(params) %>
- <%= render_results_collection_tools wrapping_class: "search-widgets", constraint: true %>
+
+ <%= render 'per_page_widget', size: 'xs' %>
+
-
+
<%= t('blacklight.search.search_results_header') %>
-
Showing <%= ((@response.current_page * @response.limit_value) - (@response.limit_value)) + 1 %> to <%= ([@response.total_count, @response.current_page * @response.limit_value].min) %> of <%= @response.total_count %> item(s)
+
Showing <%= ((@response.current_page * @response.limit_value) - (@response.limit_value)) + 1 %> to <%= ([@response.total_count, @response.current_page * @response.limit_value].min) %> of <%= @response.total_count %> item(s)
<%= render 'sort_and_per_page' %>
diff --git a/app/views/catalog/_constraints_element.html.erb b/app/views/catalog/_constraints_element.html.erb
index 20d8df64d..0c08f77c8 100644
--- a/app/views/catalog/_constraints_element.html.erb
+++ b/app/views/catalog/_constraints_element.html.erb
@@ -10,10 +10,10 @@
">
<% unless label.blank? %>
- <%= label %>
+ <%= label %>
<% end %>
<% unless value.blank? %>
- <%= content_tag :span, value, class: 'filterValue', title: value %>
+ <%= content_tag :span, value, class: 'filter-value', title: value %>
<% end %>
<% unless options[:remove].blank? %>
@@ -25,9 +25,8 @@
end
end
%>
-
- <%= link_to(content_tag(:span, '', class: 'glyphicon glyphicon-remove') + accessible_remove_label,
- options[:remove], class: 'dropdown-toggle'
+ <%= link_to(content_tag(:span, '✖', class: 'remove-icon', 'aria-hidden': true) + accessible_remove_label,
+ options[:remove]
) %>
<%- end -%>
diff --git a/app/views/catalog/_document.html.erb b/app/views/catalog/_document.html.erb
index dbae3d75b..62c12d86d 100644
--- a/app/views/catalog/_document.html.erb
+++ b/app/views/catalog/_document.html.erb
@@ -1,7 +1,7 @@
<% if can?(:read, document) %>
-
+
<% unless document.collection? %>
value=<%= document.id %> class="batch_document_selector" onclick="max_checked(this)" aria-label="Select <%= document.title_or_label %> for saving">
diff --git a/app/views/catalog/_document_gallery.html.erb b/app/views/catalog/_document_gallery.html.erb
index ee67dee7d..3ed04be58 100644
--- a/app/views/catalog/_document_gallery.html.erb
+++ b/app/views/catalog/_document_gallery.html.erb
@@ -1,5 +1,5 @@
<% # container for all documents in index view -%>
-
+
<% documents.in_groups_of(4, false).each do |docs| %>
<%= render collection: docs, as: :document, partial: 'index_gallery', locals: {count: documents.count} %>
diff --git a/app/views/catalog/_facet_index_navigation.html.erb b/app/views/catalog/_facet_index_navigation.html.erb
index 98c0296d0..afaf5f455 100644
--- a/app/views/catalog/_facet_index_navigation.html.erb
+++ b/app/views/catalog/_facet_index_navigation.html.erb
@@ -1,16 +1,9 @@
-
-