{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/react/collections/collection/CollectionGridViewWrapper.js","webpack:///./app/react/collections/collection/CollectionIndex.js","webpack:///./app/react/collections/collection/CollectionIndexMenu.js","webpack:///./app/react/collections/collection/CollectionAndSublistTags/CollectionAndSublistTagsAlert.js","webpack:///./app/react/collections/collection/CollectionHeader.js","webpack:///./app/react/collections/collection/MaterialsCount.js","webpack:///./app/react/collections/collection/getTags.js","webpack:///./app/react/collections/collection/SearchConfig.js","webpack:///./app/react/collections/collection/CollectionAndSublistTags/index.js","webpack:///./app/react/collections/Collection.js","webpack:///./app/react/jsPacks/collections/collection.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","CollectionGridViewWrapper","children","display","gridTemplateColumns","gridGap","propTypes","PropTypes","node","isRequired","CollectionLink","styled","NavLink","attrs","activeClassName","exact","props","theme","colors","color","radii","rounded","blue600","NestedCollection","title","slug","subCollections","empty","url","useRouteMatch","resolvedUrl","to","map","sc","path","pl","CollectionIndex","getInitialState","as","px","py","borderRadius","bg","id","fontSize","defaultProps","string","bool","arrayOf","CollectionIndexMenu","useState","menuOpen","setMenuOpen","menuRef","useRef","useEffect","activeLinkOffset","document","querySelector","offsetTop","current","scrollTop","boxShadow","position","zIndex","onClick","x","width","aria-haspopup","aria-controls","aria-expanded","alignItems","fontWeight","icon","ml","ref","left","right","maxHeight","overflowY","CollectionAndSublistTagsAlert","tags","mt","mr","mb","CollectionHeader","subtitle","description","banner","tag","userIsElliiAdmin","pb","src","alt","dangerouslySetInnerHTML","__html","renderInlineMarkdown","measure","MaterialsCount","nbHits","Intl","NumberFormat","format","number","connectStats","getTags","collectionTag","pathname","slugMap","substring","searchClient","algoliaSearch","process","SearchConfig","tagFilters","useLocation","cambridgeAccess","searchState","setSearchState","currentTags","setCurrentTags","InstantSearch","indexName","materials","onSearchStateChange","newState","configure","filters","page","Configure","join","CollectionAndSublistTags","Collection","categorySlug","categoryTitle","hasAudienceFilter","hasLevelFilter","hasMaterialTypeFilter","viewMode","useViewMode","WebFont","load","google","families","breadcrumbRoutes","label","external","isLg","useMedia","mediaQueries","lg","basename","ElliiThemeProvider","Breadcrumbs","routes","includes","gridAutoFlow","gridAutoColumns","gridAutoRows","flexWrap","pt","order","origin","ORIGIN","collections","flexGrow","emptyStateHeading","emptyStateMessage","hitComponent","compactView","AllMaterialsGridHit","AllMaterialsListHit","hitsWrapper","undefined","addEventListener","ReactDOM","render"],"mappings":"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","file":"collections/collection.cef14f109f322b8b14a5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"collections/collection\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//d3uk5h2fsqai9v.cloudfront.net/js-packs/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1535,\"vendor\",\"package-common\",\"ellii\",\"react\",\"package-search\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import PropTypes from 'prop-types'\n\nimport { Box } from '@redriverpress/system'\n\nexport default function CollectionGridViewWrapper({ children }) {\n return (\n \n {children}\n \n )\n}\n\nCollectionGridViewWrapper.propTypes = {\n children: PropTypes.node.isRequired,\n}\n","// Indexes a collection and subcollections (if any)\n\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport { NavLink, Route, useRouteMatch } from 'react-router-dom'\n\nimport { Box, Text } from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nconst CollectionLink = styled(NavLink).attrs({\n activeClassName: 'active',\n exact: true,\n})`\n color: ${props => props.theme.colors[props.color]};\n background: none;\n border-radius: ${props => props.theme.radii.rounded};\n display: block;\n font-weight: 600;\n padding: 0.5rem;\n margin: 0.25rem 0;\n text-decoration: none;\n\n &.active {\n background: ${props => props.theme.colors.blue600};\n color: white;\n }\n`\n\n// Recursively renders subcollection links\nfunction NestedCollection({ title, slug, subCollections, empty }) {\n const { url } = useRouteMatch()\n\n // Prevent double forward slash (//) in urls\n // when the current url is the root path.\n // This won't be an issue in React Router v6.\n const resolvedUrl = url === '/' ? '/' : `${url}/`\n\n return (\n \n \n {title}\n \n {subCollections.length > 0 &&\n subCollections.map(sc => (\n \n {/* Further NestedCollections wrapped in a Route with their\n parent's slug so the links are shown progressively. */}\n \n \n \n \n ))}\n \n )\n}\n\nNestedCollection.defaultProps = {\n empty: false,\n subCollections: [],\n}\n\nNestedCollection.propTypes = {\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n empty: PropTypes.bool,\n subCollections: PropTypes.arrayOf(PropTypes.object),\n}\n\n// Renders a link for the top level collection,\n// and for its subcollectionos (if any) using NestedCollection\nexport default function CollectionIndex() {\n const { subCollections } = getInitialState()\n return (\n \n {/* Above id required for aria-controls attribute in ListIndexMenu */}\n \n All Materials\n \n {subCollections.length > 0 && (\n \n {subCollections.map(sc => (\n \n ))}\n \n )}\n \n )\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport {\n Box,\n Container,\n Icon,\n Text,\n TransparentButton,\n} from '@redriverpress/system'\n\nimport CollectionIndex from './CollectionIndex'\n\nexport default function CollectionIndexMenu() {\n const [menuOpen, setMenuOpen] = useState(false)\n\n const menuRef = useRef(null)\n\n useEffect(() => {\n // Ideally this would use a ref, which would be more programmatic to React.\n // But since react router places this aria attribute on the currently active\n // NavLink, I think this is a decent workaround.\n const activeLinkOffset = document.querySelector('[aria-current=\"page\"]')\n .offsetTop\n\n // Scroll the dropdown element to the active link.\n // By listing `menuOpen` as an effect dependency, the scrollTop value\n // will update whenever the menu opens.\n menuRef.current.scrollTop = activeLinkOffset\n }, [menuOpen])\n\n return (\n <>\n \n setMenuOpen(x => !x)}\n width={1}\n px={0}\n aria-haspopup='true'\n aria-controls='collectionIndex'\n aria-expanded={menuOpen}\n >\n \n \n Content\n \n \n \n \n \n \n \n \n \n \n >\n )\n}\n","import PropTypes from 'prop-types'\n\nimport { Box, Icon, Heading, Text } from '@redriverpress/system'\n\n// This component is used only to display tags for the Ellii Admins\nexport default function CollectionAndSublistTagsAlert({ title, tags }) {\n return (\n \n \n \n \n {title}\n \n {tags}\n \n Visible by Ellii admins only\n \n \n \n )\n}\n\nCollectionAndSublistTagsAlert.defaultProps = {\n title: 'Collection and Sublist Tags',\n}\n\nCollectionAndSublistTagsAlert.propTypes = {\n tags: PropTypes.string.isRequired,\n title: PropTypes.string,\n}\n","import { Box, Container, Heading, Image, Text } from '@redriverpress/system'\nimport { renderInlineMarkdown } from 'Common/utils/markdown'\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport CollectionAndSublistTagsAlert from './CollectionAndSublistTags/CollectionAndSublistTagsAlert'\n\nexport default function CollectionHeader() {\n const {\n title,\n subtitle,\n description,\n banner,\n tag,\n userIsElliiAdmin,\n } = getInitialState()\n\n return (\n \n {banner && }\n {title}\n {subtitle && (\n \n {subtitle}\n \n )}\n {description && (\n \n )}\n {/* Visible by ESL Library admins only */}\n {userIsElliiAdmin && (\n \n \n \n )}\n \n )\n}\n","import PropTypes from 'prop-types'\nimport { connectStats } from 'react-instantsearch-dom'\n\nimport { Text } from '@redriverpress/system'\n\nfunction MaterialsCount({ nbHits }) {\n return (\n \n {Intl.NumberFormat().format(nbHits)} {nbHits === 1 ? 'result' : 'results'}\n \n )\n}\n\nMaterialsCount.propTypes = {\n nbHits: PropTypes.number.isRequired,\n}\n\nexport default connectStats(MaterialsCount)\n","/**\n * Returns an array of tags for the current collection and active subcollection(s)\n * based on the pathname and the slugMap\n * @param {object} config\n * @param {string} config.listTag - The tag for the collection\n * @param {string} config.pathname - The current pathname from React Router\n * @param {object} config.slugMap - An object that keys subcollections' slugs to their tags; serialized by the backend\n * @returns {string[]} tags - An array of tags\n */\nexport default function getTags({ collectionTag, pathname, slugMap }) {\n return pathname === '/'\n ? [collectionTag]\n : [collectionTag, ...slugMap[pathname.substring(1)]]\n}\n","import PropTypes from 'prop-types'\nimport algoliaSearch from 'algoliasearch/lite'\nimport { InstantSearch, Configure } from 'react-instantsearch-dom'\nimport { useLocation } from 'react-router-dom'\nimport { useEffect, useState } from 'react'\n\nimport getInitialState from 'Common/utils/getInitialState'\nimport { materials } from 'Packages/search'\n\nimport getTags from './getTags'\n\nconst searchClient = algoliaSearch(\n process.env.ALGOLIA_APPLICATION_ID,\n process.env.ALGOLIA_SEARCH_ONLY_KEY\n)\n\nexport default function SearchConfig({ children }) {\n const { pathname } = useLocation()\n const { tag: collectionTag, slugMap, cambridgeAccess } = getInitialState()\n\n const [searchState, setSearchState] = useState({})\n\n // Initialize currentTags with the pathname rendered on application load\n const [currentTags, setCurrentTags] = useState(() =>\n getTags({ collectionTag, pathname, slugMap })\n )\n\n const handleSearchStateChange = newState => {\n // Reset to first page when changing filters\n // 'Filters' in this case are the tag_list filters, which change when navigating between (sub)collections.\n // NB: Algolia's API docs state that `page` is a 0-based number, but setting the `page` value\n // from `onSearchStateChange` appears to require a 1-based number.\n if (\n searchState.configure &&\n searchState.configure.filters !== newState.configure.filters\n ) {\n return setSearchState({\n ...newState,\n page: 1,\n })\n }\n\n return setSearchState(newState)\n }\n\n const getFilters = () => {\n const tagFilters = currentTags.map(t => `tag_list:'${t}'`).join(' AND ')\n\n if (cambridgeAccess) {\n return tagFilters\n }\n\n return `${tagFilters} AND content_availability:standard`\n }\n\n useEffect(() => {\n // Update currentTags whenever the pathname changes\n setCurrentTags(getTags({ collectionTag, pathname, slugMap }))\n }, [pathname])\n\n return (\n \n \n {children}\n \n )\n}\n\nSearchConfig.propTypes = {\n children: PropTypes.node.isRequired,\n}\n","import { useLocation } from 'react-router-dom'\n\nimport getInitialState from 'Common/utils/getInitialState'\nimport getTags from '../getTags'\nimport CollectionAndSublistTagsAlert from './CollectionAndSublistTagsAlert'\n\nexport default function CollectionAndSublistTags() {\n const { pathname } = useLocation()\n const { tag: collectionTag, slugMap } = getInitialState()\n return (\n \n )\n}\n","import WebFont from 'webfontloader'\nimport useMedia from 'use-media'\nimport { BrowserRouter as Router } from 'react-router-dom'\nimport {\n Box,\n Columns,\n Col,\n Container,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport ElliiThemeProvider from 'Common/components/ElliiThemeProvider'\nimport Breadcrumbs from 'Common/components/Breadcrumbs'\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport {\n AllMaterialsGridHit,\n AllMaterialsListHit,\n AudienceFilter,\n InfiniteHits,\n LevelFilter,\n MaterialTypeFilter,\n Sort,\n ViewModeToggle,\n compactView,\n useViewMode,\n} from 'Packages/search'\n\nimport ORIGIN from 'Common/constants/search'\nimport CollectionGridViewWrapper from './collection/CollectionGridViewWrapper'\nimport CollectionIndex from './collection/CollectionIndex'\nimport CollectionIndexMenu from './collection/CollectionIndexMenu'\nimport CollectionHeader from './collection/CollectionHeader'\nimport MaterialsCount from './collection/MaterialsCount'\nimport SearchConfig from './collection/SearchConfig'\nimport CollectionAndSublistTags from './collection/CollectionAndSublistTags'\n\nexport default function Collection() {\n const {\n categorySlug,\n categoryTitle,\n hasAudienceFilter,\n hasLevelFilter,\n hasMaterialTypeFilter,\n slug,\n title,\n userIsElliiAdmin,\n } = getInitialState()\n\n const [viewMode] = useViewMode()\n\n WebFont.load({\n google: {\n families: ['Open Sans:400,400italic,600,700'],\n },\n })\n\n const breadcrumbRoutes = [\n {\n label: 'Collections',\n to: '/collections',\n external: true,\n },\n {\n label: categoryTitle,\n to: `/collections/${categorySlug}/`,\n external: true,\n },\n {\n label: title,\n to: `/collections/${categorySlug}/${slug}`,\n },\n ]\n\n const isLg = useMedia(mediaQueries.lg)\n\n return (\n \n \n \n \n \n {!isLg && }\n \n \n \n {isLg && (\n \n \n \n )}\n \n {[\n hasLevelFilter,\n hasAudienceFilter,\n hasMaterialTypeFilter,\n ].includes(true) && (\n \n {hasLevelFilter && }\n {hasAudienceFilter && }\n {hasMaterialTypeFilter && }\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n {userIsElliiAdmin && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n )\n}\n","import ReactDOM from 'react-dom'\n\nimport Collection from '../../collections/Collection'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n ReactDOM.render(, document.querySelector('#root'))\n})\n"],"sourceRoot":""}