@thegetty/quire-cli 0.20.3 → 0.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/bin/.DS_Store +0 -0
- package/bin/go-iiif/.DS_Store +0 -0
- package/bin/index.js +2 -0
- package/bin/starters/.DS_Store +0 -0
- package/bin/starters/README.md +0 -0
- package/bin/starters/default/.circleci/config.yml +98 -0
- package/bin/starters/default/.gitignore +14 -0
- package/bin/starters/default/.nojekyll +0 -0
- package/bin/starters/default/CHANGELOG.md +38 -0
- package/bin/starters/default/README.md +25 -0
- package/bin/starters/default/bin/deploy.sh +25 -0
- package/bin/starters/default/config/_default/config.yml +53 -0
- package/bin/starters/default/config/development/config.yml +14 -0
- package/bin/starters/default/config/environments/dev.yml +14 -0
- package/bin/starters/default/config/environments/github.yml +15 -0
- package/bin/starters/default/config/environments/netlify.yml +18 -0
- package/bin/starters/default/config/epub.yml +15 -0
- package/bin/starters/default/config/pdf.yml +16 -0
- package/bin/starters/default/config/site.yml +13 -0
- package/bin/starters/default/config.yml +53 -0
- package/bin/starters/default/content/about.md +20 -0
- package/bin/starters/default/content/bibliography.md +7 -0
- package/bin/starters/default/content/catalogue/1.md +28 -0
- package/bin/starters/default/content/catalogue/2.md +29 -0
- package/bin/starters/default/content/catalogue/3.md +20 -0
- package/bin/starters/default/content/catalogue/4.md +22 -0
- package/bin/starters/default/content/catalogue/catalogue-index.md +8 -0
- package/bin/starters/default/content/contents.md +7 -0
- package/bin/starters/default/content/contributors.md +7 -0
- package/bin/starters/default/content/cover.md +11 -0
- package/bin/starters/default/content/essay.md +80 -0
- package/bin/starters/default/content/intro.md +21 -0
- package/bin/starters/default/content/search-index.md +8 -0
- package/bin/starters/default/data/figures.yml +90 -0
- package/bin/starters/default/data/objects.yml +49 -0
- package/bin/starters/default/data/publication.yml +149 -0
- package/bin/starters/default/data/references.yml +11 -0
- package/bin/starters/default/static/css/custom.css +0 -0
- package/bin/starters/default/static/data/sample-geojson.json +16 -0
- package/bin/starters/default/static/downloads/.gitkeep +0 -0
- package/bin/starters/default/static/downloads/output.epub +0 -0
- package/bin/starters/default/static/downloads/output.mobi +0 -0
- package/bin/starters/default/static/downloads/output.pdf +0 -0
- package/bin/starters/default/static/img/contributors/judith-keller.jpg +0 -0
- package/bin/starters/default/static/img/cover.png +0 -0
- package/bin/starters/default/static/img/figures/duo.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-burroughs.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-child.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-graveyard.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-hymns.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-legionnaire.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-refugee.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-sons.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-video-still.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans-washroom.jpg +0 -0
- package/bin/starters/default/static/img/figures/evans.jpg +0 -0
- package/bin/starters/default/static/img/figures/family.jpg +0 -0
- package/bin/starters/default/static/img/figures/lange-house.jpg +0 -0
- package/bin/starters/default/static/img/figures/lange.jpg +0 -0
- package/bin/starters/default/static/img/figures/mother-b.jpg +0 -0
- package/bin/starters/default/static/img/figures/mother-c.jpg +0 -0
- package/bin/starters/default/static/img/figures/mother.jpg +0 -0
- package/bin/starters/default/static/img/figures/pickers.jpg +0 -0
- package/bin/starters/default/static/img/logo-getty.png +0 -0
- package/bin/starters/default/static/img/pattern-spiral-overlay.png +0 -0
- package/bin/starters/default/static/js/custom.js +4 -0
- package/bin/themes/README.md +0 -0
- package/bin/themes/default/.circleci/config.yml +62 -0
- package/bin/themes/default/.eslintrc.js +16 -0
- package/bin/themes/default/.gitignore +13 -0
- package/bin/themes/default/.scss-lint.yml +239 -0
- package/bin/themes/default/CHANGELOG.md +73 -0
- package/bin/themes/default/LICENSE.md +20 -0
- package/bin/themes/default/README.md +112 -0
- package/bin/themes/default/archetypes/default.md +2 -0
- package/bin/themes/default/cypress.json +7 -0
- package/bin/themes/default/layouts/404.html +0 -0
- package/bin/themes/default/layouts/_default/baseof.html +43 -0
- package/bin/themes/default/layouts/_default/single.html +26 -0
- package/bin/themes/default/layouts/contents/single.html +37 -0
- package/bin/themes/default/layouts/cover/single.html +128 -0
- package/bin/themes/default/layouts/data/search-index.html +65 -0
- package/bin/themes/default/layouts/entry/single.html +372 -0
- package/bin/themes/default/layouts/essay/single.html +24 -0
- package/bin/themes/default/layouts/partials/analytics.html +29 -0
- package/bin/themes/default/layouts/partials/cite-this.html +348 -0
- package/bin/themes/default/layouts/partials/contents-list/card-image.html +13 -0
- package/bin/themes/default/layouts/partials/contents-list/closing-tags.html +59 -0
- package/bin/themes/default/layouts/partials/contents-list/contents-list.html +179 -0
- package/bin/themes/default/layouts/partials/contents-list/file-dir.html +7 -0
- package/bin/themes/default/layouts/partials/contents-list/file-path.html +10 -0
- package/bin/themes/default/layouts/partials/contents-list/list-item-type.html +9 -0
- package/bin/themes/default/layouts/partials/contents-list/list-item-types/abstract.html +17 -0
- package/bin/themes/default/layouts/partials/contents-list/list-item-types/brief.html +7 -0
- package/bin/themes/default/layouts/partials/contents-list/list-item-types/default.html +9 -0
- package/bin/themes/default/layouts/partials/contents-list/list-item-types/grid.html +30 -0
- package/bin/themes/default/layouts/partials/contents-list/section-heading.html +5 -0
- package/bin/themes/default/layouts/partials/contents-list.html +207 -0
- package/bin/themes/default/layouts/partials/contributor-info.html +78 -0
- package/bin/themes/default/layouts/partials/contributor-list.html +102 -0
- package/bin/themes/default/layouts/partials/copyright.html +155 -0
- package/bin/themes/default/layouts/partials/debug-contents.html +8 -0
- package/bin/themes/default/layouts/partials/dublin-core.html +21 -0
- package/bin/themes/default/layouts/partials/error-message.html +19 -0
- package/bin/themes/default/layouts/partials/figure-caption.html +1 -0
- package/bin/themes/default/layouts/partials/figure-fallback.html +31 -0
- package/bin/themes/default/layouts/partials/figure-image.html +44 -0
- package/bin/themes/default/layouts/partials/figure-label.html +15 -0
- package/bin/themes/default/layouts/partials/figure-soundcloud.html +25 -0
- package/bin/themes/default/layouts/partials/figure-table.html +44 -0
- package/bin/themes/default/layouts/partials/figure-vimeo.html +24 -0
- package/bin/themes/default/layouts/partials/figure-website.html +21 -0
- package/bin/themes/default/layouts/partials/figure-youtube.html +23 -0
- package/bin/themes/default/layouts/partials/figures/caption.html +44 -0
- package/bin/themes/default/layouts/partials/figures/label.html +35 -0
- package/bin/themes/default/layouts/partials/figures/media-types/fallback.html +32 -0
- package/bin/themes/default/layouts/partials/figures/media-types/image.html +54 -0
- package/bin/themes/default/layouts/partials/figures/media-types/soundcloud.html +35 -0
- package/bin/themes/default/layouts/partials/figures/media-types/table.html +53 -0
- package/bin/themes/default/layouts/partials/figures/media-types/vimeo.html +34 -0
- package/bin/themes/default/layouts/partials/figures/media-types/website.html +24 -0
- package/bin/themes/default/layouts/partials/figures/media-types/youtube.html +29 -0
- package/bin/themes/default/layouts/partials/footer-buttons.html +29 -0
- package/bin/themes/default/layouts/partials/head.html +46 -0
- package/bin/themes/default/layouts/partials/icon.html +20 -0
- package/bin/themes/default/layouts/partials/icons-cc.html +86 -0
- package/bin/themes/default/layouts/partials/icons.html +54 -0
- package/bin/themes/default/layouts/partials/json-ld.html +117 -0
- package/bin/themes/default/layouts/partials/link-list-arrow.html +16 -0
- package/bin/themes/default/layouts/partials/link-list.html +11 -0
- package/bin/themes/default/layouts/partials/menu-header.html +25 -0
- package/bin/themes/default/layouts/partials/menu.html +69 -0
- package/bin/themes/default/layouts/partials/metadata.html +27 -0
- package/bin/themes/default/layouts/partials/navbar.html +173 -0
- package/bin/themes/default/layouts/partials/open-graph.html +43 -0
- package/bin/themes/default/layouts/partials/page-abstract.html +7 -0
- package/bin/themes/default/layouts/partials/page-bibliography.html +59 -0
- package/bin/themes/default/layouts/partials/page-class.html +9 -0
- package/bin/themes/default/layouts/partials/page-contributor.html +48 -0
- package/bin/themes/default/layouts/partials/page-header.html +22 -0
- package/bin/themes/default/layouts/partials/page-title.html +9 -0
- package/bin/themes/default/layouts/partials/page-tombstone.html +36 -0
- package/bin/themes/default/layouts/partials/pdf-info.html +20 -0
- package/bin/themes/default/layouts/partials/pdf-title-pages.html +39 -0
- package/bin/themes/default/layouts/partials/scripts.html +5 -0
- package/bin/themes/default/layouts/partials/search.html +52 -0
- package/bin/themes/default/layouts/partials/site-title.html +9 -0
- package/bin/themes/default/layouts/partials/tests/check-node-modules.html +9 -0
- package/bin/themes/default/layouts/partials/tests/check-page-one-class.html +21 -0
- package/bin/themes/default/layouts/partials/tests/check-page-weights.html +49 -0
- package/bin/themes/default/layouts/partials/tests/run.html +13 -0
- package/bin/themes/default/layouts/partials/twitter-card.html +23 -0
- package/bin/themes/default/layouts/shortcodes/q-bibliography.html +61 -0
- package/bin/themes/default/layouts/shortcodes/q-cite.html +79 -0
- package/bin/themes/default/layouts/shortcodes/q-class.html +3 -0
- package/bin/themes/default/layouts/shortcodes/q-contributor.html +327 -0
- package/bin/themes/default/layouts/shortcodes/q-contributors.html +11 -0
- package/bin/themes/default/layouts/shortcodes/q-figure-group.html +457 -0
- package/bin/themes/default/layouts/shortcodes/q-figure-new.html +70 -0
- package/bin/themes/default/layouts/shortcodes/q-figure-zoom.html +408 -0
- package/bin/themes/default/layouts/shortcodes/q-figure.html +86 -0
- package/bin/themes/default/layouts/sitemap.xml +24 -0
- package/bin/themes/default/layouts/splash/single.html +67 -0
- package/bin/themes/default/package-lock.json +13198 -0
- package/bin/themes/default/package.json +96 -0
- package/bin/themes/default/source/css/application.scss +30 -0
- package/bin/themes/default/source/css/bulma-components.scss +21 -0
- package/bin/themes/default/source/css/colors.scss +16 -0
- package/bin/themes/default/source/css/components/_all.scss +15 -0
- package/bin/themes/default/source/css/components/container.sass +35 -0
- package/bin/themes/default/source/css/components/quire-buttons.scss +95 -0
- package/bin/themes/default/source/css/components/quire-citation.scss +77 -0
- package/bin/themes/default/source/css/components/quire-contents-list.scss +329 -0
- package/bin/themes/default/source/css/components/quire-contributors.scss +131 -0
- package/bin/themes/default/source/css/components/quire-copyright.scss +28 -0
- package/bin/themes/default/source/css/components/quire-cover.scss +216 -0
- package/bin/themes/default/source/css/components/quire-deepzoom.scss +181 -0
- package/bin/themes/default/source/css/components/quire-entry.scss +651 -0
- package/bin/themes/default/source/css/components/quire-figure.scss +589 -0
- package/bin/themes/default/source/css/components/quire-map.scss +17 -0
- package/bin/themes/default/source/css/components/quire-menu.scss +209 -0
- package/bin/themes/default/source/css/components/quire-navbar.scss +366 -0
- package/bin/themes/default/source/css/components/quire-page.scss +920 -0
- package/bin/themes/default/source/css/components/quire-popup.scss +233 -0
- package/bin/themes/default/source/css/components/quire-search.scss +121 -0
- package/bin/themes/default/source/css/epub.scss +549 -0
- package/bin/themes/default/source/css/fonts.scss +159 -0
- package/bin/themes/default/source/css/layout.scss +186 -0
- package/bin/themes/default/source/css/print.scss +613 -0
- package/bin/themes/default/source/css/utilities.scss +345 -0
- package/bin/themes/default/source/css/variables.scss +144 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bold.eot +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bold.woff +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bold.woff2 +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bolditalic.eot +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bolditalic.woff +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-bolditalic.woff2 +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-italic.eot +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-italic.woff +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-italic.woff2 +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-regular.eot +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-regular.woff +0 -0
- package/bin/themes/default/source/fonts/ibm-plex-sans-condensed/ibmplexsanscondensed-regular.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bold.eot +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bold.woff +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bold.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bolditalic.eot +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bolditalic.woff +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-bolditalic.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-italic.eot +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-italic.woff +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-italic.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-regular.eot +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-regular.woff +0 -0
- package/bin/themes/default/source/fonts/noto-sans/notosans-regular.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bold.eot +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bold.woff +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bold.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bolditalic.eot +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bolditalic.woff +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-bolditalic.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-italic.eot +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-italic.woff +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-italic.woff2 +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-regular.eot +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-regular.woff +0 -0
- package/bin/themes/default/source/fonts/noto-serif/notoserif-regular.woff2 +0 -0
- package/bin/themes/default/source/img/cover.png +0 -0
- package/bin/themes/default/source/img/fullscreen.png +0 -0
- package/bin/themes/default/source/img/icons/arrow_forward.png +0 -0
- package/bin/themes/default/source/img/icons/baseline-headset-24px.png +0 -0
- package/bin/themes/default/source/img/icons/baseline-videocam-24px.png +0 -0
- package/bin/themes/default/source/img/icons/baseline-website-24px.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by-nc-nd.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by-nc-sa.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by-nc.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by-nd.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by-sa.png +0 -0
- package/bin/themes/default/source/img/icons/cc-by.png +0 -0
- package/bin/themes/default/source/img/icons/cc-zero.png +0 -0
- package/bin/themes/default/source/img/icons/close.png +0 -0
- package/bin/themes/default/source/img/icons/down-arrow.png +0 -0
- package/bin/themes/default/source/img/icons/download.png +0 -0
- package/bin/themes/default/source/img/icons/favicon.ico +0 -0
- package/bin/themes/default/source/img/icons/home.png +0 -0
- package/bin/themes/default/source/img/icons/left-arrow.png +0 -0
- package/bin/themes/default/source/img/icons/link.png +0 -0
- package/bin/themes/default/source/img/icons/nav.png +0 -0
- package/bin/themes/default/source/img/icons/right-arrow.png +0 -0
- package/bin/themes/default/source/img/icons/search.png +0 -0
- package/bin/themes/default/source/img/icons/start.png +0 -0
- package/bin/themes/default/source/img/layers-2x.png +0 -0
- package/bin/themes/default/source/img/layers.png +0 -0
- package/bin/themes/default/source/img/marker-icon.png +0 -0
- package/bin/themes/default/source/img/pattern-spiral-overlay.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/classic-catalogue.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/classic-entry.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/classic-essay.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/modern-contents.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/modern-cover.png +0 -0
- package/bin/themes/default/source/img/promo-screenshots/modern-essay.png +0 -0
- package/bin/themes/default/source/js/application.js +604 -0
- package/bin/themes/default/source/js/deepzoom.js +186 -0
- package/bin/themes/default/source/js/epub.js +9 -0
- package/bin/themes/default/source/js/fullscreen.js +190 -0
- package/bin/themes/default/source/js/helper.js +197 -0
- package/bin/themes/default/source/js/map.js +94 -0
- package/bin/themes/default/source/js/navigation.js +59 -0
- package/bin/themes/default/source/js/popup.js +311 -0
- package/bin/themes/default/source/js/search.js +35 -0
- package/bin/themes/default/source/js/soundcloud-api.js +1 -0
- package/bin/themes/default/static/css/epub.css +401 -0
- package/bin/themes/default/static/fonts/MaterialIcons-Regular.eot +0 -0
- package/bin/themes/default/static/fonts/MaterialIcons-Regular.woff +0 -0
- package/bin/themes/default/static/fonts/MaterialIcons-Regular.woff2 +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bold.eot +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bold.woff +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bold.woff2 +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bolditalic.eot +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bolditalic.woff +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-bolditalic.woff2 +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-italic.eot +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-italic.woff +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-italic.woff2 +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-regular.eot +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-regular.woff +0 -0
- package/bin/themes/default/static/fonts/ibmplexsanscondensed-regular.woff2 +0 -0
- package/bin/themes/default/static/fonts/notosans-bold.eot +0 -0
- package/bin/themes/default/static/fonts/notosans-bold.woff +0 -0
- package/bin/themes/default/static/fonts/notosans-bold.woff2 +0 -0
- package/bin/themes/default/static/fonts/notosans-bolditalic.eot +0 -0
- package/bin/themes/default/static/fonts/notosans-bolditalic.woff +0 -0
- package/bin/themes/default/static/fonts/notosans-bolditalic.woff2 +0 -0
- package/bin/themes/default/static/fonts/notosans-italic.eot +0 -0
- package/bin/themes/default/static/fonts/notosans-italic.woff +0 -0
- package/bin/themes/default/static/fonts/notosans-italic.woff2 +0 -0
- package/bin/themes/default/static/fonts/notosans-regular.eot +0 -0
- package/bin/themes/default/static/fonts/notosans-regular.woff +0 -0
- package/bin/themes/default/static/fonts/notosans-regular.woff2 +0 -0
- package/bin/themes/default/static/fonts/notoserif-bold.eot +0 -0
- package/bin/themes/default/static/fonts/notoserif-bold.woff +0 -0
- package/bin/themes/default/static/fonts/notoserif-bold.woff2 +0 -0
- package/bin/themes/default/static/fonts/notoserif-bolditalic.eot +0 -0
- package/bin/themes/default/static/fonts/notoserif-bolditalic.woff +0 -0
- package/bin/themes/default/static/fonts/notoserif-bolditalic.woff2 +0 -0
- package/bin/themes/default/static/fonts/notoserif-italic.eot +0 -0
- package/bin/themes/default/static/fonts/notoserif-italic.woff +0 -0
- package/bin/themes/default/static/fonts/notoserif-italic.woff2 +0 -0
- package/bin/themes/default/static/fonts/notoserif-regular.eot +0 -0
- package/bin/themes/default/static/fonts/notoserif-regular.woff +0 -0
- package/bin/themes/default/static/fonts/notoserif-regular.woff2 +0 -0
- package/bin/themes/default/static/img/baseline-website-24px.png +0 -0
- package/bin/themes/default/static/img/cover.png +0 -0
- package/bin/themes/default/static/img/fullscreen.png +0 -0
- package/bin/themes/default/static/img/fullscreen@2x.png +0 -0
- package/bin/themes/default/static/img/icons/arrow_forward.png +0 -0
- package/bin/themes/default/static/img/icons/baseline-headset-24px.png +0 -0
- package/bin/themes/default/static/img/icons/baseline-videocam-24px.png +0 -0
- package/bin/themes/default/static/img/icons/baseline-website-24px.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by-nc-nd.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by-nc-sa.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by-nc.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by-nd.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by-sa.png +0 -0
- package/bin/themes/default/static/img/icons/cc-by.png +0 -0
- package/bin/themes/default/static/img/icons/cc-zero.png +0 -0
- package/bin/themes/default/static/img/icons/close.png +0 -0
- package/bin/themes/default/static/img/icons/down-arrow.png +0 -0
- package/bin/themes/default/static/img/icons/download.png +0 -0
- package/bin/themes/default/static/img/icons/favicon.ico +0 -0
- package/bin/themes/default/static/img/icons/home.png +0 -0
- package/bin/themes/default/static/img/icons/left-arrow.png +0 -0
- package/bin/themes/default/static/img/icons/link.png +0 -0
- package/bin/themes/default/static/img/icons/nav.png +0 -0
- package/bin/themes/default/static/img/icons/right-arrow.png +0 -0
- package/bin/themes/default/static/img/icons/search.png +0 -0
- package/bin/themes/default/static/img/icons/soundcloud.png +0 -0
- package/bin/themes/default/static/img/icons/start.png +0 -0
- package/bin/themes/default/static/img/icons/vimeo.png +0 -0
- package/bin/themes/default/static/img/icons/website.png +0 -0
- package/bin/themes/default/static/img/icons/youtube.png +0 -0
- package/bin/themes/default/static/img/layers-2x.png +0 -0
- package/bin/themes/default/static/img/layers.png +0 -0
- package/bin/themes/default/static/img/marker-icon.png +0 -0
- package/bin/themes/default/static/img/pattern-spiral-overlay.png +0 -0
- package/bin/themes/default/tests/.gitkeep +0 -0
- package/bin/themes/default/tests/e2e/.eslintrc.js +9 -0
- package/bin/themes/default/tests/e2e/fixtures/blns.json +483 -0
- package/bin/themes/default/tests/e2e/plugins/index.js +22 -0
- package/bin/themes/default/tests/e2e/specs/quire-contents.spec.js +52 -0
- package/bin/themes/default/tests/e2e/specs/quire-contributors.spec.js +66 -0
- package/bin/themes/default/tests/e2e/specs/quire-entry.spec.js +104 -0
- package/bin/themes/default/tests/e2e/specs/quire-essay.spec.js +105 -0
- package/bin/themes/default/tests/e2e/specs/quire-menu.spec.js +38 -0
- package/bin/themes/default/tests/e2e/specs/quire-modal.spec.js +69 -0
- package/bin/themes/default/tests/e2e/specs/quire-next-back-buttons.spec.js +27 -0
- package/bin/themes/default/tests/e2e/specs/quire-page.spec.js +28 -0
- package/bin/themes/default/tests/e2e/specs/quire-search.spec.js +48 -0
- package/bin/themes/default/tests/e2e/specs/quire-splash.spec.js +38 -0
- package/bin/themes/default/tests/e2e/support/commands.js +25 -0
- package/bin/themes/default/tests/e2e/support/index.js +20 -0
- package/bin/themes/default/theme.toml +22 -0
- package/bin/themes/default/tsconfig.json +5 -0
- package/bin/themes/default/webpack/webpack.config.dev.js +128 -0
- package/bin/themes/default/webpack/webpack.config.epub.js +140 -0
- package/bin/themes/default/webpack/webpack.config.pdf.js +135 -0
- package/bin/themes/default/webpack/webpack.config.prod.js +133 -0
- package/package.json +1 -1
- package/index.js +0 -20
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileOverview
|
|
5
|
+
* @name application.js
|
|
6
|
+
* @description This file serves as the entry point for Webpack, the JS library
|
|
7
|
+
* responsible for building all CSS and JS assets for the theme.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Stylesheets
|
|
11
|
+
import "intersection-observer";
|
|
12
|
+
import "leaflet-fullscreen/dist/leaflet.fullscreen.css";
|
|
13
|
+
import "../css/application.scss";
|
|
14
|
+
import "leaflet/dist/leaflet.css";
|
|
15
|
+
import quicklink from "quicklink";
|
|
16
|
+
|
|
17
|
+
// JS Libraries (add them to package.json with `npm install [library]`)
|
|
18
|
+
import "babel-polyfill";
|
|
19
|
+
import $ from "jquery";
|
|
20
|
+
import "velocity-animate";
|
|
21
|
+
import "./soundcloud-api";
|
|
22
|
+
|
|
23
|
+
// Modules (feel free to define your own and import here)
|
|
24
|
+
import { preloadImages, stopVideo, toggleFullscreen } from "./helper";
|
|
25
|
+
import Search from "./search";
|
|
26
|
+
import Navigation from "./navigation";
|
|
27
|
+
import Popup from "./popup";
|
|
28
|
+
import DeepZoom from "./deepzoom";
|
|
29
|
+
import Map from "./map";
|
|
30
|
+
|
|
31
|
+
// array of leaflet instances
|
|
32
|
+
const mapArr = [];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* toggleMenu
|
|
36
|
+
* @description Show/hide the menu UI by changing CSS classes and Aria status.
|
|
37
|
+
* This function is bound to the global window object so it can be called from
|
|
38
|
+
* templates without additional binding.
|
|
39
|
+
*/
|
|
40
|
+
window["toggleMenu"] = () => {
|
|
41
|
+
let menu = document.getElementById("site-menu");
|
|
42
|
+
document.getElementsByClassName;
|
|
43
|
+
let menuAriaStatus = menu.getAttribute("aria-expanded");
|
|
44
|
+
menu.classList.toggle("is-expanded", !menu.classList.contains("is-expanded"));
|
|
45
|
+
if (menuAriaStatus === "true") {
|
|
46
|
+
$(
|
|
47
|
+
".side-by-side > .quire-entry__image-wrap > .quire-entry__image"
|
|
48
|
+
).removeClass("menu_open");
|
|
49
|
+
menu.setAttribute("aria-expanded", "false");
|
|
50
|
+
} else {
|
|
51
|
+
$(
|
|
52
|
+
".side-by-side > .quire-entry__image-wrap > .quire-entry__image"
|
|
53
|
+
).addClass("menu_open");
|
|
54
|
+
menu.setAttribute("aria-expanded", "true");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* activeMenuPage
|
|
60
|
+
* @description This function is called on pageSetup to go through the navigation
|
|
61
|
+
* (#nav in partials/menu.html) and find all the anchor tags. Then find the user's
|
|
62
|
+
* current URL directory. Then it goes through the array of anchor tags and if the
|
|
63
|
+
* current URL directory matches the nav anchor, it's the active link.
|
|
64
|
+
*/
|
|
65
|
+
function activeMenuPage() {
|
|
66
|
+
let nav = document.getElementById("nav");
|
|
67
|
+
let anchor = nav.getElementsByTagName("a");
|
|
68
|
+
let current =
|
|
69
|
+
window.location.protocol +
|
|
70
|
+
"//" +
|
|
71
|
+
window.location.host +
|
|
72
|
+
window.location.pathname;
|
|
73
|
+
for (var i = 0; i < anchor.length; i++) {
|
|
74
|
+
if (anchor[i].href == current) {
|
|
75
|
+
anchor[i].className = "active";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* toggleSearch
|
|
82
|
+
* @description Show/hide the search UI by changing CSS classes and Aria status.
|
|
83
|
+
* This function is bound to the global window object so it can be called from
|
|
84
|
+
* templates without additinoal binding.
|
|
85
|
+
*/
|
|
86
|
+
window["toggleSearch"] = () => {
|
|
87
|
+
let searchControls = document.getElementById("js-search");
|
|
88
|
+
let searchInput = document.getElementById("js-search-input");
|
|
89
|
+
let searchAriaStatus = searchControls.getAttribute("aria-expanded");
|
|
90
|
+
searchControls.classList.toggle(
|
|
91
|
+
"is-active",
|
|
92
|
+
!searchControls.classList.contains("is-active")
|
|
93
|
+
);
|
|
94
|
+
if (searchAriaStatus === "true") {
|
|
95
|
+
searchControls.setAttribute("aria-expanded", "false");
|
|
96
|
+
} else {
|
|
97
|
+
searchInput.focus();
|
|
98
|
+
searchControls.setAttribute("aria-expanded", "true");
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* sliderSetup
|
|
104
|
+
* @description Set up the simple image slider used on catalogue entry pages for
|
|
105
|
+
* objects with multiple figure images. See also slideImage function below.
|
|
106
|
+
*/
|
|
107
|
+
async function sliderSetup() {
|
|
108
|
+
toggleFullscreen(
|
|
109
|
+
mapArr,
|
|
110
|
+
document.getElementById("toggleFullscreen"),
|
|
111
|
+
document.getElementById("quire-entry__image")
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
let slider = $(".quire-entry__image__group-container");
|
|
115
|
+
slider.each(function() {
|
|
116
|
+
let sliderImages = $(this).find("figure");
|
|
117
|
+
sliderImages.each((i, v) => {
|
|
118
|
+
if (sliderImages.length > 1) {
|
|
119
|
+
$(v)
|
|
120
|
+
.find(".quire-image-counter-download-container")
|
|
121
|
+
.append(
|
|
122
|
+
`<div class="quire-counter-container"><span class="counter">${i +
|
|
123
|
+
1} of ${sliderImages.length}</span></div>`
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
let firstImage = $(sliderImages.first());
|
|
128
|
+
let lastImage = $(sliderImages.last());
|
|
129
|
+
sliderImages.addClass("visually-hidden");
|
|
130
|
+
firstImage.addClass("current-image first-image");
|
|
131
|
+
firstImage.removeClass("visually-hidden");
|
|
132
|
+
firstImage.css("display", "flex");
|
|
133
|
+
lastImage.addClass("last-image");
|
|
134
|
+
});
|
|
135
|
+
const images = [...document.querySelectorAll(".quire-deepzoom-entry")];
|
|
136
|
+
const imageSrcs = images.filter(v => {
|
|
137
|
+
return v.getAttribute("src") !== null ? v : "";
|
|
138
|
+
})
|
|
139
|
+
.map(v => {
|
|
140
|
+
return v.getAttribute("src");
|
|
141
|
+
});
|
|
142
|
+
await preloadImages(imageSrcs);
|
|
143
|
+
mapSetup(".quire-map-entry");
|
|
144
|
+
deepZoomSetup(".quire-deepzoom-entry", mapArr);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* search
|
|
149
|
+
* @description makes a search query using Lunr
|
|
150
|
+
*/
|
|
151
|
+
window["search"] = () => {
|
|
152
|
+
let searchInput = document.getElementById("js-search-input");
|
|
153
|
+
let searchQuery = searchInput["value"];
|
|
154
|
+
let searchInstance = window["QUIRE_SEARCH"];
|
|
155
|
+
let resultsContainer = document.getElementById("js-search-results-list");
|
|
156
|
+
let resultsTemplate = document.getElementById("js-search-results-template");
|
|
157
|
+
if (searchQuery.length >= 3) {
|
|
158
|
+
let searchResults = searchInstance.search(searchQuery);
|
|
159
|
+
displayResults(searchResults);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function clearResults() {
|
|
163
|
+
resultsContainer.innerText = "";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function displayResults(results) {
|
|
167
|
+
clearResults();
|
|
168
|
+
results.forEach(result => {
|
|
169
|
+
let clone = document.importNode(resultsTemplate.content, true);
|
|
170
|
+
let item = clone.querySelector(".js-search-results-item");
|
|
171
|
+
let title = clone.querySelector(".js-search-results-item-title");
|
|
172
|
+
let type = clone.querySelector(".js-search-results-item-type");
|
|
173
|
+
let length = clone.querySelector(".js-search-results-item-length");
|
|
174
|
+
item.href = result.url;
|
|
175
|
+
title.textContent = result.title;
|
|
176
|
+
type.textContent = result.type;
|
|
177
|
+
length.textContent = result.length;
|
|
178
|
+
resultsContainer.appendChild(clone);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* scrollToHash
|
|
185
|
+
* @description Scroll the #main area after each smoothState reload.
|
|
186
|
+
* If a hash id is present, scroll to the location of that element,
|
|
187
|
+
* taking into account the height of the navbar.
|
|
188
|
+
*/
|
|
189
|
+
function scrollToHash() {
|
|
190
|
+
// Select all links with hashes
|
|
191
|
+
$('a[href*="#"]')
|
|
192
|
+
// Remove links that don't actually link to anything
|
|
193
|
+
.not('[href="#"]')
|
|
194
|
+
.not('[href="#0"]')
|
|
195
|
+
.not('.popup')
|
|
196
|
+
.click(function(event) {
|
|
197
|
+
// only override default link behavior if it points to the same page
|
|
198
|
+
if (this.pathname.includes(window.location.pathname)) {
|
|
199
|
+
// prevent default scrolling behavior
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
// ensure the hash is manually set after preventing default
|
|
202
|
+
window.location.hash = this.hash;
|
|
203
|
+
}
|
|
204
|
+
// save current hash, prefixing all ':' and '.' with '\\' to make them query-selectable
|
|
205
|
+
var hash = this.hash.replace(":", "\\:");
|
|
206
|
+
hash = hash.replace(".", "\\.");
|
|
207
|
+
// Figure out element to scroll to
|
|
208
|
+
var target = $(hash);
|
|
209
|
+
target = target.length ? target : $("[name=" + this.hash.slice(1) + "]");
|
|
210
|
+
// Does a scroll target exist?
|
|
211
|
+
if (target.length) {
|
|
212
|
+
$("html, body").animate(
|
|
213
|
+
{
|
|
214
|
+
scrollTop: target.offset().top - $(".quire-navbar").height() - 7
|
|
215
|
+
},
|
|
216
|
+
1,
|
|
217
|
+
function() {
|
|
218
|
+
// Callback after animation
|
|
219
|
+
// Must change focus!
|
|
220
|
+
var $target = $(target);
|
|
221
|
+
$target.focus();
|
|
222
|
+
if ($target.is(":focus")) {
|
|
223
|
+
// Checking if the target was focused
|
|
224
|
+
return false;
|
|
225
|
+
} else {
|
|
226
|
+
$target.attr("tabindex", "-1"); // Adding tabindex for elements not focusable
|
|
227
|
+
$target.focus(); // Set focus again
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function scrollToHashOnLoad() {
|
|
236
|
+
if (window.location.hash) {
|
|
237
|
+
var hash = window.location.hash;
|
|
238
|
+
hash = hash.replace(":", "\\:");
|
|
239
|
+
hash = hash.replace(".", "\\.");
|
|
240
|
+
$("html, body").animate(
|
|
241
|
+
{
|
|
242
|
+
scrollTop: $(hash).offset().top - $(".quire-navbar").height() - 7
|
|
243
|
+
},
|
|
244
|
+
75,
|
|
245
|
+
"swing"
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* globalSetup
|
|
252
|
+
* @description Initial setup on first page load.
|
|
253
|
+
*/
|
|
254
|
+
function globalSetup() {
|
|
255
|
+
let container = document.getElementById("container");
|
|
256
|
+
container.classList.remove("no-js");
|
|
257
|
+
var classNames = [];
|
|
258
|
+
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/i))
|
|
259
|
+
classNames.push("device-ios");
|
|
260
|
+
|
|
261
|
+
if (navigator.userAgent.match(/android/i)) classNames.push("device-android");
|
|
262
|
+
|
|
263
|
+
if (classNames.length) classNames.push("on-device");
|
|
264
|
+
|
|
265
|
+
loadSearchData();
|
|
266
|
+
scrollToHash();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* loadSearchData
|
|
271
|
+
* @description Load full-text index data from the specified URL
|
|
272
|
+
* and pass it to the search module.
|
|
273
|
+
*/
|
|
274
|
+
function loadSearchData() {
|
|
275
|
+
// Grab search data
|
|
276
|
+
let dataURL = $("#js-search").data("search-index");
|
|
277
|
+
$.get(dataURL, {
|
|
278
|
+
cache: true
|
|
279
|
+
}).done(data => {
|
|
280
|
+
data = typeof data === "string" ? JSON.parse(data) : data;
|
|
281
|
+
window["QUIRE_SEARCH"] = new Search(data);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* navigation
|
|
287
|
+
* @description Turn on ability to use arrow keys
|
|
288
|
+
* to get next adn previous pages
|
|
289
|
+
*/
|
|
290
|
+
let navigation;
|
|
291
|
+
|
|
292
|
+
function navigationSetup() {
|
|
293
|
+
if (!navigation) {
|
|
294
|
+
navigation = new Navigation();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* @description
|
|
300
|
+
* Set up modal for media
|
|
301
|
+
*/
|
|
302
|
+
function popupSetup(figureModal) {
|
|
303
|
+
toggleFullscreen(
|
|
304
|
+
mapArr,
|
|
305
|
+
document.getElementById("toggleFullscreen"),
|
|
306
|
+
document.querySelector(".mfp-wrap")
|
|
307
|
+
);
|
|
308
|
+
if (figureModal) {
|
|
309
|
+
Popup(".q-figure__wrapper", mapArr);
|
|
310
|
+
} else {
|
|
311
|
+
mapSetup(".quire-map");
|
|
312
|
+
deepZoomSetup(".quire-deepzoom", mapArr);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* @description
|
|
318
|
+
* Render Map if Popup @false
|
|
319
|
+
*/
|
|
320
|
+
function mapSetup(ele) {
|
|
321
|
+
return [...document.querySelectorAll(ele)].forEach(v => {
|
|
322
|
+
let id = v.getAttribute("id");
|
|
323
|
+
new Map(id);
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* @description
|
|
329
|
+
* Render deepzoom or iiif if Popup @false
|
|
330
|
+
*/
|
|
331
|
+
function deepZoomSetup(ele, mapArr) {
|
|
332
|
+
return [...document.querySelectorAll(ele)].forEach(v => {
|
|
333
|
+
let id = v.getAttribute("id");
|
|
334
|
+
new DeepZoom(id, mapArr);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* @description
|
|
340
|
+
* Adding GoogleChromeLabs quicklinks https://github.com/GoogleChromeLabs/quicklink
|
|
341
|
+
* For faster subsequent page-loads by prefetching in-viewport links during idle time
|
|
342
|
+
*/
|
|
343
|
+
function quickLinksSetup() {
|
|
344
|
+
let links = [...document.getElementsByTagName("a")];
|
|
345
|
+
links = links.filter(a => {
|
|
346
|
+
return a.hostname === window.location.hostname;
|
|
347
|
+
});
|
|
348
|
+
quicklink({
|
|
349
|
+
urls: links,
|
|
350
|
+
timeout: 4000,
|
|
351
|
+
ignores: [
|
|
352
|
+
/tel:/g,
|
|
353
|
+
/mailto:/g,
|
|
354
|
+
/#(.+)/,
|
|
355
|
+
uri => uri.includes("tel:"),
|
|
356
|
+
uri => uri.includes("mailto:"),
|
|
357
|
+
uri => uri.includes("#"),
|
|
358
|
+
uri => uri.includes(".zip"),
|
|
359
|
+
uri => uri.includes(".epub"),
|
|
360
|
+
uri => uri.includes(".pdf"),
|
|
361
|
+
uri => uri.includes(".mobi")
|
|
362
|
+
]
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Applies MLA format to date
|
|
368
|
+
*
|
|
369
|
+
* @param {Date} date javascript date object
|
|
370
|
+
* @return {String} MLA formatted date
|
|
371
|
+
*/
|
|
372
|
+
function mlaDate(date) {
|
|
373
|
+
const options = {
|
|
374
|
+
month: "long"
|
|
375
|
+
};
|
|
376
|
+
const monthNum = date.getMonth();
|
|
377
|
+
let month;
|
|
378
|
+
if ([4, 5, 6].includes(monthNum)) {
|
|
379
|
+
let dateString = date.toLocaleDateString("en-US", options);
|
|
380
|
+
month = dateString.replace(/[^A-Za-z]+/, '');
|
|
381
|
+
} else {
|
|
382
|
+
month = (month === 8) ? "Sept" : date.toLocaleDateString("en-US", options).slice(0, 3);
|
|
383
|
+
month += '.';
|
|
384
|
+
}
|
|
385
|
+
const day = date.getDate();
|
|
386
|
+
const year = date.getFullYear();
|
|
387
|
+
return [day, month, year].join(' ');
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* @description
|
|
392
|
+
* Set the date for the cite this partial
|
|
393
|
+
* https://github.com/gettypubs/quire/issues/153
|
|
394
|
+
* Quire books include a "Cite this Page" feature with page-level citations formatted in both Chicago and MLA style.
|
|
395
|
+
* For MLA, the citations need to include a date the page was accessed by the reader.
|
|
396
|
+
*
|
|
397
|
+
*/
|
|
398
|
+
function setDate() {
|
|
399
|
+
const $date = $(".cite-current-date");
|
|
400
|
+
const formattedDate = mlaDate(new Date());
|
|
401
|
+
$date.empty();
|
|
402
|
+
$date.text(formattedDate);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* slideImage
|
|
407
|
+
* @description Slide to previous or next catalogue object image in a loop.
|
|
408
|
+
* Supports any number of figures per object, and any number of objects
|
|
409
|
+
* per page. Also pass in the maps array to invalidate size after transition.
|
|
410
|
+
* @param {string} direction must be an integer
|
|
411
|
+
* @param {object} event must be an object
|
|
412
|
+
* @param {array} mapArr must be an array
|
|
413
|
+
*/
|
|
414
|
+
function slideImage(direction, event, mapArr) {
|
|
415
|
+
event.stopPropagation();
|
|
416
|
+
let deepzoomCont = $(".leaflet-image-layer");
|
|
417
|
+
deepzoomCont.hide();
|
|
418
|
+
let slider = $(".quire-entry__image__group-container");
|
|
419
|
+
let firstImage = slider.children(".first-image");
|
|
420
|
+
let lastImage = slider.children(".last-image");
|
|
421
|
+
let currentImage = slider.children(".current-image");
|
|
422
|
+
let nextImage = currentImage.next("figure");
|
|
423
|
+
let prevImage = currentImage.prev("figure");
|
|
424
|
+
stopVideo(document.querySelector(".current-image"));
|
|
425
|
+
currentImage.hide();
|
|
426
|
+
currentImage.removeClass("current-image");
|
|
427
|
+
if (direction == "next") {
|
|
428
|
+
if (currentImage.hasClass("last-image")) {
|
|
429
|
+
firstImage.addClass("current-image");
|
|
430
|
+
firstImage.css("display", "flex");
|
|
431
|
+
firstImage.removeClass("visually-hidden");
|
|
432
|
+
} else {
|
|
433
|
+
nextImage.addClass("current-image");
|
|
434
|
+
nextImage.css("display", "flex");
|
|
435
|
+
nextImage.removeClass("visually-hidden");
|
|
436
|
+
}
|
|
437
|
+
} else if (direction == "prev") {
|
|
438
|
+
if (currentImage.hasClass("first-image")) {
|
|
439
|
+
lastImage.addClass("current-image");
|
|
440
|
+
lastImage.css("display", "flex");
|
|
441
|
+
lastImage.removeClass("visually-hidden");
|
|
442
|
+
} else {
|
|
443
|
+
prevImage.addClass("current-image");
|
|
444
|
+
prevImage.css("display", "flex");
|
|
445
|
+
prevImage.removeClass("visually-hidden");
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
mapArr.forEach(v => {
|
|
450
|
+
validateSize(v)
|
|
451
|
+
.then(() => {
|
|
452
|
+
deepzoomCont.fadeIn({
|
|
453
|
+
duration: "fast"
|
|
454
|
+
});
|
|
455
|
+
})
|
|
456
|
+
.catch(err => console.log(err));
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* validateSize
|
|
462
|
+
* @description
|
|
463
|
+
* invalidateSize map as a promise
|
|
464
|
+
* @param {object} map must be an object
|
|
465
|
+
*/
|
|
466
|
+
function validateSize(map) {
|
|
467
|
+
return new Promise((resolve, reject) => {
|
|
468
|
+
if (!map) reject(new Error("No map!"));
|
|
469
|
+
setTimeout(() => {
|
|
470
|
+
resolve(map.invalidateSize());
|
|
471
|
+
}, 250);
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Translates the X-position of an element inside a container so that its contents
|
|
477
|
+
* are contained
|
|
478
|
+
* Expects the contained element to already be translated so that it's centered above
|
|
479
|
+
* another element
|
|
480
|
+
*
|
|
481
|
+
* @param {object} element to position
|
|
482
|
+
* @param {object} container element
|
|
483
|
+
* @param {number} container margin
|
|
484
|
+
*/
|
|
485
|
+
function setPositionInContainer(el, container) {
|
|
486
|
+
const margin = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--gap'));
|
|
487
|
+
const elRect = el.getBoundingClientRect();
|
|
488
|
+
const containerRect = container.getBoundingClientRect();
|
|
489
|
+
|
|
490
|
+
const leftDiff = containerRect.left - elRect.left;
|
|
491
|
+
const rightDiff = elRect.right - containerRect.right;
|
|
492
|
+
const halfElWidth = elRect.width/2;
|
|
493
|
+
// x
|
|
494
|
+
if (rightDiff > 0) {
|
|
495
|
+
el.style.transform = `translateX(-${halfElWidth+rightDiff+margin}px)`;
|
|
496
|
+
} else if (leftDiff > 0) {
|
|
497
|
+
el.style.transform = `translateX(-${halfElWidth-leftDiff-margin}px)`;
|
|
498
|
+
}
|
|
499
|
+
// @todo y
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* @description
|
|
504
|
+
* find expandable class and look for aria-expanded
|
|
505
|
+
* https://github.com/gettypubs/quire/issues/152
|
|
506
|
+
* Cite button where users can select, tied to two config settings:
|
|
507
|
+
* citationPopupStyle - text for text only | icon for text and icon
|
|
508
|
+
* citationPopupLinkText which is whatever text you it to say
|
|
509
|
+
*/
|
|
510
|
+
function toggleCite() {
|
|
511
|
+
let expandables = document.querySelectorAll(".expandable [aria-expanded]");
|
|
512
|
+
for (let i = 0; i < expandables.length; i++) {
|
|
513
|
+
expandables[i].addEventListener("click", event => {
|
|
514
|
+
// Allow these links to bubble up
|
|
515
|
+
event.stopPropagation();
|
|
516
|
+
let expanded = event.target.getAttribute("aria-expanded");
|
|
517
|
+
if (expanded === "false") {
|
|
518
|
+
event.target.setAttribute("aria-expanded", "true");
|
|
519
|
+
} else {
|
|
520
|
+
event.target.setAttribute("aria-expanded", "false");
|
|
521
|
+
}
|
|
522
|
+
let content = event.target.parentNode.querySelector(
|
|
523
|
+
".quire-citation__content"
|
|
524
|
+
);
|
|
525
|
+
if (content) {
|
|
526
|
+
content.getAttribute("hidden");
|
|
527
|
+
if (typeof content.getAttribute("hidden") === "string") {
|
|
528
|
+
content.removeAttribute("hidden");
|
|
529
|
+
} else {
|
|
530
|
+
content.setAttribute("hidden", "hidden");
|
|
531
|
+
}
|
|
532
|
+
setPositionInContainer(content, document.documentElement);
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
document.addEventListener("click", event => {
|
|
537
|
+
let content = event.target.parentNode;
|
|
538
|
+
if (!content) return;
|
|
539
|
+
if (
|
|
540
|
+
content.classList.contains("quire-citation") ||
|
|
541
|
+
content.classList.contains("quire-citation__content")
|
|
542
|
+
) {
|
|
543
|
+
// do nothing
|
|
544
|
+
} else {
|
|
545
|
+
// find all Buttons/Cites
|
|
546
|
+
let citeButtons = document.querySelectorAll(".quire-citation__button");
|
|
547
|
+
let citesContents = document.querySelectorAll(".quire-citation__content");
|
|
548
|
+
// hide all buttons
|
|
549
|
+
if (!citesContents) return;
|
|
550
|
+
for (let i = 0; i < citesContents.length; i++) {
|
|
551
|
+
if (!citeButtons[i]) return;
|
|
552
|
+
citeButtons[i].setAttribute("aria-expanded", "false");
|
|
553
|
+
citesContents[i].setAttribute("hidden", "hidden");
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* pageSetup
|
|
561
|
+
* @description This function is called after each smoothState reload.
|
|
562
|
+
* Initialize any jquery plugins or set up page UI elements here.
|
|
563
|
+
*/
|
|
564
|
+
function pageSetup() {
|
|
565
|
+
setDate();
|
|
566
|
+
quickLinksSetup();
|
|
567
|
+
activeMenuPage();
|
|
568
|
+
sliderSetup();
|
|
569
|
+
navigationSetup();
|
|
570
|
+
popupSetup(figureModal);
|
|
571
|
+
toggleCite();
|
|
572
|
+
// smoothScroll();
|
|
573
|
+
|
|
574
|
+
// Wire up event listeners here, so we can pass in the maps array
|
|
575
|
+
const prev = document.getElementById("prev-image");
|
|
576
|
+
const next = document.getElementById("next-image");
|
|
577
|
+
if (prev)
|
|
578
|
+
prev.addEventListener("click", e => slideImage("prev", e, mapArr), false);
|
|
579
|
+
if (next)
|
|
580
|
+
next.addEventListener("click", e => slideImage("next", e, mapArr), false);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
/**
|
|
584
|
+
* pageTeardown
|
|
585
|
+
* @description This function is called before each smoothState reload.
|
|
586
|
+
* Remove any event listeners here.
|
|
587
|
+
*/
|
|
588
|
+
/*
|
|
589
|
+
function pageTeardown() {
|
|
590
|
+
navigationTeardown();
|
|
591
|
+
}
|
|
592
|
+
*/
|
|
593
|
+
|
|
594
|
+
// Start
|
|
595
|
+
// -----------------------------------------------------------------------------
|
|
596
|
+
//
|
|
597
|
+
// Run immediately
|
|
598
|
+
globalSetup();
|
|
599
|
+
|
|
600
|
+
// Run when document is ready
|
|
601
|
+
$(window).ready(() => {
|
|
602
|
+
pageSetup();
|
|
603
|
+
scrollToHashOnLoad();
|
|
604
|
+
});
|