diff --git a/app/Assets/css/extra.css b/app/Assets/css/extra.css index 2837285..7abb05a 100644 --- a/app/Assets/css/extra.css +++ b/app/Assets/css/extra.css @@ -1,12 +1,104 @@ +@layer overrides, limestone; + +/* creates a layer encapsulating all limestone styles; browser has a to prewarm, this import blocks render. Unlayered styles always win conflicting rules regardless of specificity. */ +@import url("https://webcdn.uky.edu/limestone/1.0.0/css/style.css") layer(limestone); + +/* When limestone uses !important, it will win against unlayered rules. Overrides for limestone rules must live here */ +@layer overrides { + .js-accordion__panel[aria-hidden="true"] { + contain: content; + } + + .universal-breadcrumb ul { + font-family: "usual", sans-serif !important; + } + + .left-border { + /* border-left: 2px solid var(--color-sky); */ + } + + .viewer-control:disabled { + background-color: transparent !important; + border-color: transparent !important; + color: transparent !important; + } + + .fa-requestable-contents:focus-visible { + outline: 2px solid var(--color-wildcat-blue) !important; + outline-offset: 2px !important; + } +} + +:root { + /* Limestone brand colors (names mirror Limestone's modifier classes) */ + --color-wildcat-blue: #0033a0; + --color-wildcat-white: #fff; + --color-blue-gray: #eff4fd; + --color-cool-neutral: #dcddde; + --color-sky: #b1c9e8; + --color-dark-gray: #515664; +} + +.fa-component .slab__wrapper { + padding: 0 1rem; +} + +.fa-component { + background-color: var(--color-blue-gray); + padding-top: 0; + padding-bottom: 0; +} + +.checkered-divider { + display: none; +} + +/* Reveal the checkered divider only between nested sibling components */ +.editorial > .slab.fa-component + .slab.fa-component > .checkered-divider { + display: block; +} + +/* At nested levels the checkered divider handles sibling separation */ +.editorial > .slab.fa-component .js-accordion__header { + border-top: 0; +} + +.container_list { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 0; +} + +.container_list_item { + display: flex; + flex-direction: column; + align-items: start; +} + +.container_list_item > p { + margin: 0; + padding: 0; +} + +.editorial { + padding: 0; +} + +.fa-expand-all-wrap { + margin: 0 0 0.75rem; + text-align: right; +} + +.editorial > p { + padding-left: 1em; +} + .fa-request.fa-requestable-toc { display: block; margin: 0 auto; } -.fa-request.fa-requestable-contents { - float: right; -} - .fa-request-summary-note { font-style: italic; } @@ -19,6 +111,10 @@ display: none; } +.breadcrumbs ul li.fa-hidden { + display: none; +} + .fa-request-form { overflow: auto; background: #FDFDF6; @@ -28,24 +124,10 @@ border-radius: 6px; } -.fa-request-ul { - text-overflow: ellipsis; - overflow-x: hidden; - overflow-y: scroll; - margin: 1em; - height: 10em; -} - .fa-options { padding: 1em; } -.fa-viewer { - overflow: hidden; - height: 100vh; - overflow-y: scroll; -} - .fa-toc-entry-highlight { font-weight: bold; } @@ -64,102 +146,124 @@ label { font-weight: 300; } -.hd { - height: 3px; - background-color: #0a3a5e; +.fa-section { + margin-bottom: 2rem; } -.nav-tabs { - float: right; +.editorial .fa-section h3 { + font-size: 1.5rem; } -.container-fluid { - width: 80% !important; - background-color: #ffffff !important; +.editorial .fa-component h4 { + font-size: 1.15rem; + font-weight: 400; } -.panel-heading[data-toggle="collapse"] .panel-title:after { - font-family: "Glyphicons Halflings"; - color: #666; - float: right; - content: "\e114"; +.editorial [role="heading"], +.editorial [role="heading"].headline-group .headline-group__head { + font-size: 1.1667rem; + line-height: 1.5rem; + font-family: "usual", sans-serif; + font-weight: 700; + margin: 0 0 1rem; } -.panel-heading[data-toggle="collapse"].collapsed .panel-title:after { - content: "\e080"; +.fa-component .list-unstyled { + list-style: none; + padding-left: 0; } -.panel-title a { - color: #337ab7 !important; +.fa-availability dd { + font-style: italic; + color: var(--color-dark-gray); } -.toplink { - padding: 1em; - float: right; +.fa-request__button, .button { + min-width: 44px; /* WCAG */ + min-height: 44px; /* WCAG */ + font-size: 0.75rem; + padding: 0.15rem 0.65rem; } .click-to-load-images, .image-overflow { - display: inline; + display: inline; } +.click-to-play-audio, .click-to-play-video { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; +} + +.fa-media, +.mejs-container { + max-width: 100%; +} + +.image-gallery__block--player { + width: 100%; +} + + #viewer { background: black; } +/* overwrite limestone default button styles */ .viewer-control { + display: inline-block; + width: auto; + margin: 0; + padding: 0 1rem; + border: none; background: transparent; - display: inline; - color: transparent; + color: var(--color-wildcat-white); font-size: 6vh; + line-height: 1; } -#viewer-img { - height: 80vh; +.viewer-control:disabled { + visibility: hidden; } -.alert-harmful { - background: #b1c9e8; - color: #282828; +.fa-request-summary { + background-color: var(--color-blue-gray); + padding: 1rem 1.5rem; } - -.red-alert { - color: #ff0033; - font-size: larger; +.fa-request-summary .heading--display span { + background-color: var(--color-blue-gray); } - -.red-alert-text { - font-size: larger; - color: #313132; - font-weight: bold; +.fa-request-summary .accordion__header, +.fa-request-summary .accordion__header:hover, +.fa-request-summary .accordion__header:focus, +.fa-request-summary .accordion__header:active { + background-color: var(--color-blue-gray); } -.green-alert-text { - color: #246024; +/* UK LIMESTONE STYLES */ +/* Fix Limestone bug - `.button--ghost` both focused and hovered should have white background text and blue background */ +button:focus:hover.button--ghost, +.default-colors button:focus:hover.button--ghost { + background-color: var(--color-wildcat-blue); + border-color: var(--color-wildcat-blue); + color: var(--color-wildcat-white); } -/* UK LIMESTONE STYLES */ -/* styling to match Limestone's Underline Link */ -a.underline-link { - color:#000000; - background-attachment: scroll; - background-image: linear-gradient(to top,rgba(161,211,237,0.4) 0,rgba(161,211,237,0.4) 0.5em,transparent 0.5em,transparent 110%),linear-gradient(to top,rgba(0,51,160,0.4) 0,rgba(0,51,160,0.4) 2px,transparent 2px,transparent 100%); - background-repeat: no-repeat; - background-position: 0 0.5em, 0 0; - position: relative; - transition: 0.2s background-position ease-out; - font-weight: 400; - z-index: 1; - text-decoration: none; +/* Fix Limestone bug - `.social-media-links` assume a light background, so override with appropriate color for footer. */ +.global-footer .social-media-links a:hover, +.global-footer .social-media-links a:focus, +.global-footer .social-media-links a:active { + color: var(--color-sky); } -a:hover.underline-link { - color:#0033A0; - background-position: 0 0, 1000px 2px; +.global-footer .social-media-links__linkset a { + text-decoration: none; } /* styling to match central webcom's in-page alert*/ .in-page-alert { - background-color: #EFF4FD; + background-color: var(--color-blue-gray); border-left: 7px solid #1E8AFF; padding: 1rem; align-items: center; @@ -170,7 +274,7 @@ a:hover.underline-link { font-size: 1.75rem; font-weight: 900; margin-top: 0; - color: #0033A0; + color: var(--color-wildcat-blue); line-height: 1.2; } .in-page-alert h3 { @@ -179,7 +283,99 @@ a:hover.underline-link { font-weight: 500; margin-bottom: 5px; margin-top: 10px; - color: #0033A0; + color: var(--color-wildcat-blue); line-height: 1.2; - -} \ No newline at end of file +} + +.heading-section { + margin: 1rem 0; +} + +@scope(.heading-section){ + .heading--display { + margin: 2rem 0; + } +} + +/*Archive content banner*/ +@scope (.slab--micro) { + :scope{ + padding-top: .2rem; + padding-bottom: .2rem; + } + .icon-label--micro { + font-size: .81rem; + margin-top: .2rem; + margin-bottom: .2rem; + } +} + +@scope (.lity-content) { + .viewer { + display: flex; + align-items: center; + } + + img { + max-width: 100%; + height: auto; + } +} + +.image-gallery__block--overflow { + display: none; +} + +.image-gallery__controls { + padding: 0; +} + +.fa-request__button.fa-requestable-contents::before { + margin-right: 0.4em; + font-weight: 700; +} + +.fa-request__button.fa-requestable-contents.button--ghost::before { + content: "\FF0B"; /* + */ +} + +.fa-request__button.fa-requestable-contents.button--wildcat-blue::before { + content: "\2715"; /* ✕ */ +} + +/* Responsive breakpoints (match limestone) */ +/* Small */ +@media screen and (min-width: 35rem) { +} + +@media screen and (min-width: 58rem) { + .container_list_item { + flex-direction: row; + align-items: center; + gap: 0.75rem; + max-width: 32rem; + } + + .container_list_item > p { + flex: 1; + display: flex; + align-items: center; + white-space: nowrap; + } + .container_list_item > p::after { + content: ""; + flex: 1; + margin-left: 0.75rem; + border-top: 2px dotted var(--color-sky); + } +} + +/* Large */ +@media screen and (min-width: 76rem) { + +} + +/* X-Large */ +@media screen and (min-width: 80rem) { + +} diff --git a/app/Assets/css/bootstrap-theme.css b/app/Assets/css/old/bootstrap-theme.css similarity index 100% rename from app/Assets/css/bootstrap-theme.css rename to app/Assets/css/old/bootstrap-theme.css diff --git a/app/Assets/css/bootstrap-theme.css.map b/app/Assets/css/old/bootstrap-theme.css.map similarity index 100% rename from app/Assets/css/bootstrap-theme.css.map rename to app/Assets/css/old/bootstrap-theme.css.map diff --git a/app/Assets/css/bootstrap-theme.min.css b/app/Assets/css/old/bootstrap-theme.min.css similarity index 100% rename from app/Assets/css/bootstrap-theme.min.css rename to app/Assets/css/old/bootstrap-theme.min.css diff --git a/app/Assets/css/bootstrap.css b/app/Assets/css/old/bootstrap.css similarity index 100% rename from app/Assets/css/bootstrap.css rename to app/Assets/css/old/bootstrap.css diff --git a/app/Assets/css/bootstrap.css.map b/app/Assets/css/old/bootstrap.css.map similarity index 100% rename from app/Assets/css/bootstrap.css.map rename to app/Assets/css/old/bootstrap.css.map diff --git a/app/Assets/css/bootstrap.min.css b/app/Assets/css/old/bootstrap.min.css similarity index 100% rename from app/Assets/css/bootstrap.min.css rename to app/Assets/css/old/bootstrap.min.css diff --git a/app/Assets/css/footer.css b/app/Assets/css/old/footer.css similarity index 94% rename from app/Assets/css/footer.css rename to app/Assets/css/old/footer.css index f03dd70..6968a59 100644 --- a/app/Assets/css/footer.css +++ b/app/Assets/css/old/footer.css @@ -4,6 +4,10 @@ footer { font-weight: normal; } +.global-footer .social-media-links__linkset a { + text-decoration: none; +} + #connectWithUs { font-weight: 300; font-size: smaller; diff --git a/app/Assets/js/jquery-accessible-accordion.js b/app/Assets/js/jquery-accessible-accordion.js new file mode 100644 index 0000000..dc8f812 --- /dev/null +++ b/app/Assets/js/jquery-accessible-accordion.js @@ -0,0 +1,315 @@ +/* + * jQuery Accessible Accordion system, using ARIA + * @version v2.5.2 + * Website: https://a11y.nicolas-hoffmann.net/accordion/ + * License MIT: https://github.com/nico3333fr/jquery-accessible-accordion-aria/blob/master/LICENSE + */ +(function(factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (typeof exports !== 'undefined') { + module.exports = factory(require('jquery')); + } else { + factory(window.jQuery); + } +}(function($) { + 'use strict'; + + var defaultConfig = { + headersSelector: '.js-accordion__header', + panelsSelector: '.js-accordion__panel', + buttonsSelector: 'button.js-accordion__header', + buttonsGeneratedContent: 'text', + button: $('', { + class: 'js-accordion__header', + type: 'button' + }), + buttonSuffixId: '_tab', + multiselectable: true, + prefixClass: 'accordion', + headerSuffixClass: '__title', + buttonSuffixClass: '__header', + panelSuffixClass: '__panel', + direction: 'ltr', + accordionPrefixId: 'accordion', + accordionSelector: '.js-accordion' + }; + + function ownedBy($el, $boundary, accordionSelector) { + return $el.parentsUntil($boundary).filter(accordionSelector).length === 0; + } + + var Accordion = function($el, options) { + this.options = $.extend({}, defaultConfig, options); + + this.$wrapper = $el; + var accordionSelector = this.options.accordionSelector; + this.$panels = $(this.options.panelsSelector, this.$wrapper).filter(function() { + return ownedBy($(this), $el, accordionSelector); + }); + + this.initAttributes(); + this.initEvents(); + }; + + Accordion.prototype.initAttributes = function() { + var accordionSelector = this.options.accordionSelector; + + this.$wrapper.attr({ + 'role': 'tablist', + 'aria-multiselectable': this.options.multiselectable.toString() + }).addClass(this.options.prefixClass); + + // id generated if not present + if (!this.$wrapper.attr('id')) { + var index_lisible = Math.random().toString(32).slice(2, 12); + this.$wrapper.attr('id', this.options.accordionPrefixId + '-' + index_lisible); + } + + this.$panels.each($.proxy(function(index, el) { + var $panel = $(el); + var $header = $(this.options.headersSelector, $panel).filter(function() { + return ownedBy($(this), $panel, accordionSelector); + }); + var $button = this.options.buttonsGeneratedContent === 'html' ? this.options.button.clone().html($header.html()) : this.options.button.clone().text($header.text()); + + $header.attr('tabindex', '0').addClass(this.options.prefixClass + this.options.headerSuffixClass); + $panel.before($button); + + var panelId = $panel.attr('id') || this.$wrapper.attr('id') + '-' + index; + var buttonId = panelId + this.options.buttonSuffixId; + + $button.attr({ + 'aria-controls': panelId, + 'aria-expanded': 'false', + 'role': 'tab', + 'id': buttonId, + 'tabindex': '-1', + 'aria-selected': 'false' + }).addClass(this.options.prefixClass + this.options.buttonSuffixClass); + + $panel.attr({ + 'aria-labelledby': buttonId, + 'role': 'tabpanel', + 'id': panelId, + 'aria-hidden': 'true' + }).addClass(this.options.prefixClass + this.options.panelSuffixClass); + + // if opened by default + if ($panel.attr('data-accordion-opened') === 'true') { + $button.attr({ + 'aria-expanded': 'true', + 'data-accordion-opened': null + }); + + $panel.attr({ + 'aria-hidden': 'false' + }); + } + + // init first one focusable + if (index === 0) { + $button.removeAttr('tabindex'); + } + }, this)); + + var $wrapper = this.$wrapper; + this.$buttons = $(this.options.buttonsSelector, this.$wrapper).filter(function() { + return ownedBy($(this), $wrapper, accordionSelector); + }); + }; + + Accordion.prototype.initEvents = function() { + this.$wrapper.on('focus', this.options.buttonsSelector, $.proxy(this.focusButtonEventHandler, this)); + + this.$wrapper.on('click', this.options.buttonsSelector, $.proxy(this.clickButtonEventHandler, this)); + + this.$wrapper.on('keydown', this.options.buttonsSelector, $.proxy(this.keydownButtonEventHandler, this)); + + this.$wrapper.on('keydown', this.options.panelsSelector, $.proxy(this.keydownPanelEventHandler, this)); + }; + + Accordion.prototype.focusButtonEventHandler = function(e) { + var $target = $(e.target); + var $button = $target.is('button') ? $target : $target.closest('button'); + + this.$buttons.attr({ + 'tabindex': '-1', + 'aria-selected': 'false' + }); + + $button.attr({ + 'aria-selected': 'true', + 'tabindex': null + }); + }; + + Accordion.prototype.clickButtonEventHandler = function(e) { + var $target = $(e.target); + var $button = $target.is('button') ? $target : $target.closest('button'); + + if (!ownedBy($button, this.$wrapper, this.options.accordionSelector)) { + return; + } + + var $panel = $('#' + $button.attr('aria-controls')); + + this.$buttons.attr('aria-selected', 'false'); + $button.attr('aria-selected', 'true'); + + // opened or closed? + if ($button.attr('aria-expanded') === 'false') { // closed + $button.attr('aria-expanded', 'true'); + $panel.attr('aria-hidden', 'false'); + } else { // opened + $button.attr('aria-expanded', 'false'); + $panel.attr('aria-hidden', 'true'); + } + + if (this.options.multiselectable === false) { + this.$panels.not($panel).attr('aria-hidden', 'true'); + this.$buttons.not($button).attr('aria-expanded', 'false'); + } + + setTimeout(function() { + $button.focus(); + }, 0); + + e.stopPropagation(); + e.preventDefault(); + }; + + Accordion.prototype.keydownButtonEventHandler = function(e) { + var $target = $(e.target); + var $button = $target.is('button') ? $target : $target.closest('button'); + + if (!ownedBy($button, this.$wrapper, this.options.accordionSelector)) { + return; + } + + var $firstButton = this.$buttons.first(); + var $lastButton = this.$buttons.last(); + var index = this.$buttons.index($button); + + $target = null; + + var k = this.options.direction === 'ltr' ? { + prev: [38, 37], // up & left + next: [40, 39], // down & right + first: 36, // home + last: 35 // end + } : { + prev: [38, 39], // up & left + next: [40, 37], // down & right + first: 36, // home + last: 35 // end + }; + + var allKeyCode = [].concat(k.prev, k.next, k.first, k.last); + + if ($.inArray(e.keyCode, allKeyCode) >= 0 && !e.ctrlKey) { + this.$buttons.attr({ + 'tabindex': '-1', + 'aria-selected': 'false' + }); + + + if (e.keyCode === 36) { + $target = $firstButton; + } + // strike end in the tab => last tab + else if (e.keyCode === 35) { + $target = $lastButton; + } + // strike up or left in the tab => previous tab + else if ($.inArray(e.keyCode, k.prev) >= 0) { + // if we are on first one, activate last + $target = $button.is($firstButton) ? $lastButton : this.$buttons.eq(index - 1); + } + // strike down or right in the tab => next tab + else if ($.inArray(e.keyCode, k.next) >= 0) { + // if we are on last one, activate first + $target = $button.is($lastButton) ? $firstButton : this.$buttons.eq(index + 1); + } + + if ($target !== null) { + this.goToHeader($target); + } + + e.preventDefault(); + } + }; + + Accordion.prototype.keydownPanelEventHandler = function(e) { + var $panel = $(e.target).closest(this.options.panelsSelector); + + if (!ownedBy($panel, this.$wrapper, this.options.accordionSelector)) { + return; + } + + var $button = $('#' + $panel.attr('aria-labelledby')); + var $firstButton = this.$buttons.first(); + var $lastButton = this.$buttons.last(); + var index = this.$buttons.index($button); + var $target = null; + + // strike up + ctrl => go to header + if (e.keyCode === 38 && e.ctrlKey) { + $target = $button; + } + // strike pageup + ctrl => go to prev header + else if (e.keyCode === 33 && e.ctrlKey) { + $target = $button.is($firstButton) ? $lastButton : this.$buttons.eq(index - 1); + } + // strike pagedown + ctrl => go to next header + else if (e.keyCode === 34 && e.ctrlKey) { + $target = $button.is($lastButton) ? $firstButton : this.$buttons.eq(index + 1); + } + + if ($target !== null) { + this.goToHeader($target); + e.preventDefault(); + } + }; + + Accordion.prototype.goToHeader = function($target) { + if ($target.length !== 1) { + return; + } + + $target.attr({ + 'aria-selected': 'true', + 'tabindex': null + }); + + setTimeout(function() { + $target.focus(); + }, 0); + }; + + + var PLUGIN = 'accordion'; + + $.fn[PLUGIN] = function(params) { + var options = $.extend({}, $.fn[PLUGIN].defaults, params); + + + return this.each(function() { + var $el = $(this); + + var specificOptions = { + multiselectable: $el.attr('data-accordion-multiselectable') === 'none' ? false : options.multiselectable, + prefixClass: typeof($el.attr('data-accordion-prefix-classes')) !== 'undefined' ? $el.attr('data-accordion-prefix-classes') : options.prefixClass, + buttonsGeneratedContent: typeof($el.attr('data-accordion-button-generated-content')) !== 'undefined' ? $el.attr('data-accordion-button-generated-content') : options.buttonsGeneratedContent, + direction: $el.closest('[dir="rtl"]').length > 0 ? 'rtl' : options.direction + }; + specificOptions = $.extend({}, options, specificOptions); + + $el.data[PLUGIN] = new Accordion($el, specificOptions); + }); + }; + + $.fn[PLUGIN].defaults = defaultConfig; + +})); diff --git a/app/Assets/js/manifest.txt b/app/Assets/js/manifest.txt index 6766e6f..357e65e 100644 --- a/app/Assets/js/manifest.txt +++ b/app/Assets/js/manifest.txt @@ -1,11 +1,10 @@ # List required files in the desired order mousetrap.min.js -jquery.min.js jquery-ui.min.js -bootstrap.min.js lity.min.js jquery.unveil.js reveal.js mediaelementplayer.min.js +jquery-accessible-accordion.js requests.js ui.js diff --git a/app/Assets/js/requests.js b/app/Assets/js/requests.js index 2d6bac3..f0a94b5 100644 --- a/app/Assets/js/requests.js +++ b/app/Assets/js/requests.js @@ -23,12 +23,15 @@ var requests = (function() { function update_count() { var count = model.get_count(); + $('.fa-request-count').text(count); if (count > 0) { if (count == 1) { $('.fa-request-summary-note').html('You are requesting 1 item.'); + $('.fa-request-announce').text('1 item selected'); } else { $('.fa-request-summary-note').html('You are requesting ' + count + ' items.'); + $('.fa-request-announce').text(count + ' items selected'); } $('.fa-request-options').removeClass('fa-request-hidden'); $('.fa-extra-options').removeClass('fa-request-hidden'); @@ -36,6 +39,7 @@ var requests = (function() { } else { $('.fa-request-summary-note').html('No items have been requested.'); + $('.fa-request-announce').text('No items selected'); $('.fa-request-options').addClass('fa-request-hidden'); $('.fa-extra-options').addClass('fa-request-hidden'); $('#fa-request-submit').addClass('fa-request-hidden'); @@ -71,8 +75,8 @@ var requests = (function() { } else { request_type = model.get_request_type(); - $('button.fa-request-option').addClass('btn-default').removeClass('btn-primary'); - $('button[data-option="' + request_type + '"]').addClass('btn-primary').removeClass('btn-default'); + $('button.fa-request-option').addClass('button--ghost').removeClass('button--wildcat-blue'); + $('button[data-option="' + request_type + '"]').addClass('button--wildcat-blue').removeClass('button--ghost'); $('div.fa-request-option').addClass('fa-request-hidden'); if (model.get_count() > 0) { $('[data-option="' + request_type + '"]').removeClass('fa-request-hidden'); @@ -91,7 +95,7 @@ var requests = (function() { if (model.has(id)) { item = model.remove(id); jid = '#' + id; - $(jid).addClass('btn-warning').removeClass('btn-success').html($(jid).attr('data-inactive')); + $(jid).addClass('button--ghost').removeClass('button--wildcat-blue').html($(jid).attr('data-inactive')); target = $(jid).attr('data-target') + '-remove'; /* Remove hidden inputs */ @@ -123,7 +127,7 @@ var requests = (function() { pos = model.add(item); if (pos !== false) { count = model.get_count(); - $(jid).addClass('btn-success').removeClass('btn-warning').html($(jid).attr('data-active')); + $(jid).addClass('button--wildcat-blue').removeClass('button--ghost').html($(jid).attr('data-active')); /* Display selected item and add toggle control */ removable_element = requests_view.render({ @@ -170,8 +174,8 @@ var requests = (function() { "save-for-later", "request-reproductions" ]; - var default_request_type = "schedule-retrieval"; - /*var default_request_type = "save-for-later";*/ + /*var default_request_type = "schedule-retrieval";*/ + var default_request_type = "save-for-later"; var request_type; var pages_items_to_be_reproduced = ''; var formats = [ @@ -562,11 +566,10 @@ var requests = (function() { render: function (item) { var pieces = []; pieces.push('
  • '); - pieces.push('

    '); + pieces.push('

    ' + item["label"] + '
    '); if (("removable" in item) && item["removable"]) { - pieces.push(' '); + pieces.push(' Remove'); } - pieces.push(item["label"]); pieces.push('

  • '); return pieces.join(''); } @@ -648,8 +651,8 @@ var requests = (function() { collection_title = options["title"]; button_active = options["button_active"]; button_inactive = options["button_inactive"]; - button_toc_active = options["button_toc_active"]; - button_toc_inactive = options["button_toc_inactive"]; + //button_toc_active = options["button_toc_active"]; + //button_toc_inactive = options["button_toc_inactive"]; model.init(); update(); @@ -699,24 +702,24 @@ var requests = (function() { $('.fa-requestable').each(function () { var id = $(this).attr('id'); - if ($(this).hasClass('fa-toc')) { + //if ($(this).hasClass('fa-toc')) { + // $(this).after([ + // '' + // ].join('')); + //} + //else { $(this).after([ - '' - ].join('')); - } - else { - $(this).after([ - ' + diff --git a/app/Views/Findingaid/media.mustache b/app/Views/Findingaid/media.mustache index 37958b2..310a76e 100644 --- a/app/Views/Findingaid/media.mustache +++ b/app/Views/Findingaid/media.mustache @@ -1,19 +1,40 @@ -
    -{{#links}} - {{#image}} - - {{/image}} - {{#extra}} - {{>image_controls}} - {{/extra}} - {{#image_overflow}} - - {{/image_overflow}} - {{#audio}} -


    play

    - {{/audio}} - {{#video}} -


    play

    - {{/video}} -{{/links}} + + + + +{{#image}} + +{{/image}} +{{#image_overflow}} + +{{/image_overflow}} +{{#audio}} + +{{/audio}} +{{#video}} + +{{/video}} diff --git a/app/Views/Findingaid/panel.mustache b/app/Views/Findingaid/panel.mustache index f2f21c2..37170b4 100644 --- a/app/Views/Findingaid/panel.mustache +++ b/app/Views/Findingaid/panel.mustache @@ -1,19 +1,28 @@ -
    -
    -

    {{label}}

    -
    -
    + +
    +

    + {{{label}}} +

    +
    {{single-field}} {{#multi-field}} -
    -
    {{label}}
    - {{#entries}} -
    {{{content}}}
    - {{/entries}} -
    +
    +
    {{label}}
    + {{#entries}} +
    {{{content}}}
    + {{/entries}} +
    {{/multi-field}} - {{#components}} - {{{component}}} - {{/components}} + {{#expandable}} +
    + +
    + {{/expandable}} +
    + {{#components}} + {{{component}}} + {{/components}} +
    + diff --git a/app/Views/Findingaid/requests.mustache b/app/Views/Findingaid/requests.mustache index 9b33f23..012f4ee 100644 --- a/app/Views/Findingaid/requests.mustache +++ b/app/Views/Findingaid/requests.mustache @@ -1,92 +1,89 @@ -
    - {{> advance_note}} -
    -
    -

    {{label}}

    -
    -
    -

    - No items have been requested. -

    -
      -
    -
    -
    - -
    -
    -
    - - - +
    +
    +
    +

    {{label}} (0)

    +
    +
    +

    + No items have been requested. +

    +
      +
    -
    -
    -

    Submit a request for SCRC materials.

    -
    -
    - -
    - - + +
    + -
    -
    + +
    +

    Submit a request to retrieve SCRC materials.

    +
    + +
    + + -
    - - -
    - - - - - - - - - - - - - - + + + + + + + + + +
    + + + + + + + + + + + + + +
    - {{> harmful_language_statement}}
    - diff --git a/app/Views/Findingaid/show.mustache b/app/Views/Findingaid/show.mustache index 3a3d141..48a44d4 100644 --- a/app/Views/Findingaid/show.mustache +++ b/app/Views/Findingaid/show.mustache @@ -1,6 +1,5 @@ -

    {{title}}{{^title}}Welcome to ExploreUK{{/title}}

    -
    - + +
    {{#panels}} {{>panel}} {{/panels}} diff --git a/app/Views/Findingaid/toc.mustache b/app/Views/Findingaid/toc.mustache index 9372ac9..3b0c1a5 100644 --- a/app/Views/Findingaid/toc.mustache +++ b/app/Views/Findingaid/toc.mustache @@ -1,62 +1,27 @@ -
    - {{#requestable}} - {{> advance_note}} - {{/requestable}} -
    -
    -

    {{label}}

    -
    -
    -
      - {{#entries}} -
    • {{label}} - {{#subentries}} -
        - {{#contents_entries}} -
      • {{{label}}}
      • - {{/contents_entries}} -
      - {{/subentries}} -
    • - {{/entries}} -
    - -
    +
    +
    + + {{#toc_component}} + {{/toc_component}}
    - {{#toc_component}} -
    -
      -
    • - {{summary}} - -
    • -
    -
    - {{/toc_component}} - {{> harmful_language_statement}}
    - diff --git a/app/Views/Layouts/application.mustache b/app/Views/Layouts/application.mustache index 66196ee..247d866 100644 --- a/app/Views/Layouts/application.mustache +++ b/app/Views/Layouts/application.mustache @@ -5,9 +5,7 @@ {{#css}} {{/css}} - {{#js}} - - {{/js}} + {{> head-common}} - {{> nav}} -
    {{> maintenance_notice}} -
    -
    - {{{content}}} -
    -
    - {{{toc}}} -
    -
    - {{{requests}}} + {{> nav}} + + + {{> breadcrumbs}} + +
    +
    +
    +
    +
    + {{{toc}}} + {{#requestable}} + {{> contact_info}} + {{/requestable}} + {{#requestable}} + {{{requests}}} + {{/requestable}} +
    + + {{{content}}} +
    -
    -
    - {{>footer}} +
    + {{> harmful_language_statement}} +
    + + + {{> global-footer}} + {{> universal-footer}} + {{> limestone-resources}} + {{#js}} + + {{/js}} + + + {{#requestable}} + + {{/requestable}} + {{>viewer}} diff --git a/app/Views/Layouts/footer.mustache b/app/Views/Layouts/footer.mustache deleted file mode 100644 index 17440da..0000000 --- a/app/Views/Layouts/footer.mustache +++ /dev/null @@ -1,22 +0,0 @@ -{{#requestable}} - -{{/requestable}} -{{^requestable}} - -{{/requestable}} diff --git a/app/Views/Layouts/harmful_language_statement.mustache b/app/Views/Layouts/harmful_language_statement.mustache new file mode 100644 index 0000000..d1b083a --- /dev/null +++ b/app/Views/Layouts/harmful_language_statement.mustache @@ -0,0 +1,20 @@ +
    +
    +
    + + + + + +
    +
    +

    Harmful Language Statement

    +

    + You may come across language in UK Libraries Special Collections Research Center collections and online resources that you find harmful or offensive. SCRC collects materials from different cultures and time periods to preserve and make available the historical record. These materials document the time period when they were created and the view of their creator. As a result, some may demonstrate racist and offensive views that do not reflect the values of UK Libraries. +

    +

    + If you find description with problematic language that you think SCRC should review, please contact us at SCRC@uky.edu. +

    +
    +
    +
    \ No newline at end of file diff --git a/app/Views/Layouts/nav.mustache b/app/Views/Layouts/nav.mustache index 0ba67c9..854bd0e 100644 --- a/app/Views/Layouts/nav.mustache +++ b/app/Views/Layouts/nav.mustache @@ -1,14 +1,5 @@ -
    -
    - {{> repo}} -{{#requestable}} - -{{/requestable}} -
    +{{> archive_notice}} +{{> universal-header}} +{{> global-header}} +{{> search-brief}} + diff --git a/app/Views/Layouts/repo.mustache b/app/Views/Layouts/repo.mustache index e6efb0d..89af215 100644 --- a/app/Views/Layouts/repo.mustache +++ b/app/Views/Layouts/repo.mustache @@ -1,5 +1,5 @@ {{#repository}}

    + src="images/{{logo}}">

    {{/repository}} diff --git a/app/Views/Layouts/viewer.mustache b/app/Views/Layouts/viewer.mustache index 47bd840..ba3a417 100644 --- a/app/Views/Layouts/viewer.mustache +++ b/app/Views/Layouts/viewer.mustache @@ -1,5 +1,5 @@ -
    -
    - -
    +
    + + +
    diff --git a/app/Views/Shared/archive_notice.mustache b/app/Views/Shared/archive_notice.mustache new file mode 100644 index 0000000..9654eed --- /dev/null +++ b/app/Views/Shared/archive_notice.mustache @@ -0,0 +1,10 @@ +
    +
    + +
    +
    \ No newline at end of file diff --git a/app/Views/Shared/breadcrumbs.mustache b/app/Views/Shared/breadcrumbs.mustache new file mode 100644 index 0000000..d82f8c8 --- /dev/null +++ b/app/Views/Shared/breadcrumbs.mustache @@ -0,0 +1,24 @@ +
    +
    + +
    +
    diff --git a/app/Views/Shared/contact_info.mustache b/app/Views/Shared/contact_info.mustache new file mode 100644 index 0000000..13f5a2d --- /dev/null +++ b/app/Views/Shared/contact_info.mustache @@ -0,0 +1,18 @@ +
    +
    +

    Special Collections Research Center - Closed

    +
    +

    The Breckinridge Research Room will be closed starting May 11, 2026, and anticipates re-opening Fall semester 2026 in an alternate location for the duration of the King Library renovation.

    +

    Reproduction requests will still be available during the closure.

    +

    + Contact SCRC with questions. +

    + + +
    +
    +
    \ No newline at end of file diff --git a/app/Views/Shared/global-footer.mustache b/app/Views/Shared/global-footer.mustache new file mode 100644 index 0000000..a6c6def --- /dev/null +++ b/app/Views/Shared/global-footer.mustache @@ -0,0 +1,92 @@ + diff --git a/app/Views/Shared/global-header.mustache b/app/Views/Shared/global-header.mustache new file mode 100644 index 0000000..2676059 --- /dev/null +++ b/app/Views/Shared/global-header.mustache @@ -0,0 +1,130 @@ + +
    + + diff --git a/app/Views/Shared/head-common.mustache b/app/Views/Shared/head-common.mustache new file mode 100644 index 0000000..afb332c --- /dev/null +++ b/app/Views/Shared/head-common.mustache @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/Views/Shared/limestone-resources.mustache b/app/Views/Shared/limestone-resources.mustache new file mode 100644 index 0000000..a455310 --- /dev/null +++ b/app/Views/Shared/limestone-resources.mustache @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/Views/Shared/search-brief.mustache b/app/Views/Shared/search-brief.mustache new file mode 100644 index 0000000..10e2876 --- /dev/null +++ b/app/Views/Shared/search-brief.mustache @@ -0,0 +1,21 @@ +
    +
    + +
    +
    diff --git a/app/Views/Shared/universal-footer.mustache b/app/Views/Shared/universal-footer.mustache new file mode 100644 index 0000000..c5ae2b3 --- /dev/null +++ b/app/Views/Shared/universal-footer.mustache @@ -0,0 +1,51 @@ + \ No newline at end of file diff --git a/app/Views/Shared/universal-header.mustache b/app/Views/Shared/universal-header.mustache new file mode 100644 index 0000000..2d8abd1 --- /dev/null +++ b/app/Views/Shared/universal-header.mustache @@ -0,0 +1,60 @@ + +
    +
    +
    + + + + + + +
    +
    +
    + diff --git a/docker-compose.dev.override.yml b/docker-compose.dev.override.yml index 7d999de..81ec4f9 100644 --- a/docker-compose.dev.override.yml +++ b/docker-compose.dev.override.yml @@ -7,5 +7,5 @@ services: develop: watch: - action: restart - path: ./app/Assets/js - target: /opt/findingaid/app/Assets/js + path: ./app + target: /opt/findingaid/app