{"version":3,"file":"filters.min.js","sources":["../../../assets/js/filters/_checkbox-facet.js","../../../assets/js/base/_emptyNode.js","../../../assets/js/filters/_controller.js","../../../assets/js/filters/_resource-library.js","../../../assets/js/filters/_cities-speak.js","../../../assets/js/filters/_archive.js","../../../assets/js/filters/_initiatives.js"],"sourcesContent":["class CheckboxFacet {\n\tconstructor( node, opts = {} ) {\n\t\tthis.node = node;\n\t\tthis.opts = Object.assign( {\n\t\t\topenClass : 'facet--open',\n\t\t\tnoMatchClass : 'facet--no-match',\n\t\t\tinvertedClass : 'facet--inverted',\n\t\t\ttoggler : '.facet__toggler',\n\t\t\tsearch : '.facet__search',\n\t\t\tfilters : '.facet__filter',\n\t\t\tdropdown : '.facet__dropdown',\n\t\t\tmobileMediaQuery: '(max-width: 848px)',\n\t\t}, opts );\n\n\t\tthis.opened = false;\n\n\t\tthis.toggler = this.node.querySelector( this.opts.toggler );\n\t\tthis.search = this.node.querySelector( this.opts.search );\n\t\tthis.dropdown = this.node.querySelector( this.opts.dropdown );\n\t\tthis.filters = Array.from( this.node.querySelectorAll( this.opts.filters ) );\n\t\tthis.searchData = this.filters.map( node => {\n\t\t\treturn {\n\t\t\t\tnode,\n\t\t\t\tname: node.querySelector( '.facet__name' ).textContent.toLowerCase().replace( /\\s/g, '' )\n\t\t\t}\n\t\t} );\n\n\t\t// open/close\n\t\tthis.toggler.addEventListener( 'click', this.toggle.bind(this) );\n\n\t\tif( this.search ) {\n\t\t\t// search on input\n\t\t\tthis.search.addEventListener( 'input', this.filter.bind(this) );\n\n\t\t\t// go ahead and filter if the input already has value\n\t\t\tthis.filter();\n\t\t}\n\n\t\t// don't propagate click events on checkboxes/labels outside the node\n\t\tthis.node.addEventListener( 'click', (e) => {\n\t\t\tlet node = e.target;\n\n\t\t\twhile( node.parentNode && node !== this.node ) {\n\t\t\t\tif ( 'LABEL' === node.tagName || ( 'INPUT' === node.tagName && 'checkbox' === node.type ) ) {\n\t\t\t\t\treturn e.stopPropagation();\n\t\t\t\t}\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t} );\n\n\t\t// listen for clicks outside the node and close if outside - but not on mobile\n\t\tthis.listenForClose = (e) => {\n\t\t\tif ( ! window.matchMedia( this.opts.mobileMediaQuery ).matches ) {\n\t\t\t\tlet node = document.activeElement;\n\n\t\t\t\twhile( node && node.parentNode ) {\n\t\t\t\t\tif ( node === this.node ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = node.parentNode;\n\t\t\t\t}\n\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\n\t\t// listen for the esc key\n\t\tthis.listenForEsc = (e) => {\n\t\t\tif ( this.opened && e.key === 'Escape' ) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\n\t\tconst focusPrevFilter = () => {\n\t\t\tif ( document.activeElement !== this.search ) {\n\t\t\t\tconst focusable = this.filters.filter( filter => ! filter.hidden );\n\n\t\t\t\tif ( focusable.length > 0 ) {\n\t\t\t\t\tconst focused = document.activeElement.closest( this.opts.filters );\n\t\t\t\t\tconst toFocusIndex = focusable.indexOf( focused ) - 1;\n\n\t\t\t\t\tif ( toFocusIndex > -1 ) {\n\t\t\t\t\t\tfocusable[ toFocusIndex ].querySelector('input').focus();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.search.focus();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.search.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst focusNextFilter = () => {\n\t\t\tconst focusable = this.filters.filter( filter => ! filter.hidden );\n\n\t\t\tif ( focusable.length > 0 ) {\n\t\t\t\tif ( document.activeElement === this.search ) {\n\t\t\t\t\tfocusable[0].querySelector( 'input' ).focus();\n\t\t\t\t} else {\n\t\t\t\t\tconst focused = document.activeElement.closest( this.opts.filters );\n\t\t\t\t\tconst toFocusIndex = focusable.indexOf( focused ) + 1;\n\n\t\t\t\t\tif ( toFocusIndex < focusable.length ) {\n\t\t\t\t\t\tfocusable[ toFocusIndex ].querySelector('input').focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.search.focus();\n\t\t\t}\n\t\t}\n\n\t\tthis.listenForArrow = ( e ) => {\n\t\t\tif ( this.opened ) {\n\t\t\t\tswitch( e.key ) {\n\t\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfocusPrevFilter();\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfocusNextFilter();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tfilter() {\n\t\tif ( ! this.search ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst search = this.search.value.toLowerCase().replace( /\\s/g, '' );\n\t\tlet hasMatch = false;\n\n\t\tthis.searchData.forEach( datum => {\n\t\t\tif ( datum.name.indexOf( search ) > -1 ) {\n\t\t\t\tdatum.node.removeAttribute( 'hidden' );\n\t\t\t\thasMatch = true;\n\t\t\t} else {\n\t\t\t\tdatum.node.setAttribute( 'hidden', 'hidden' );\n\t\t\t}\n\t\t} );\n\n\t\tif ( false === hasMatch ) {\n\t\t\tthis.node.classList.add( this.opts.noMatchClass );\n\t\t} else {\n\t\t\tthis.node.classList.remove( this.opts.noMatchClass );\n\t\t}\n\t}\n\n\topen() {\n\t\tthis.opened = true;\n\t\tthis.node.classList.add( this.opts.openClass );\n\t\tdocument.body.addEventListener( 'click', this.listenForClose );\n\t\tthis.node.addEventListener( 'keydown', this.listenForArrow );\n\t\tdocument.addEventListener( 'keyup', this.listenForEsc );\n\n\t\tif ( this.search ) {\n\t\t\tthis.search.focus();\n\t\t}\n\n\t\tif ( this.dropdown.getBoundingClientRect().bottom > window.innerHeight ) {\n\t\t\tthis.node.classList.add( this.opts.invertedClass );\n\t\t}\n\t}\n\n\tclose() {\n\t\tthis.opened = false;\n\t\tthis.node.classList.remove( this.opts.openClass );\n\t\tthis.node.classList.remove( this.opts.invertedClass );\n\t\tdocument.body.removeEventListener('click', this.listenForClose);\n\t\tthis.node.removeEventListener( 'keydown', this.listenForArrow );\n\t\tdocument.removeEventListener( 'keyup', this.listenForEsc );\n\t}\n\n\ttoggle() {\n\t\treturn this.opened ? this.close() : this.open();\n\t}\n}\n\nexport default CheckboxFacet;\n","export default function( node ) {\n\twhile( node.firstChild ) {\n\t\tnode.removeChild( node.firstChild );\n\t}\n}\n","import Twig from 'twigjs';\nimport CheckboxFacet from './_checkbox-facet.js';\nimport emptyNode from '../base/_emptyNode.js';\n\nconst resetInput = function( node ) {\n\tswitch( node.tagName ) {\n\t\tcase 'SELECT':\n\t\t\tnode.value = '';\n\t\tbreak;\n\t\tdefault: // input\n\t\t\tswitch( node.type ) {\n\t\t\t\tcase 'radio':\n\t\t\t\t\tnode.checked = ! node.value;\n\t\t\t\tbreak;\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tnode.checked = false;\n\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tnode.value = '';\n\t\t\t\tbreak;\n\t\t\t}\n\t\tbreak;\n\t}\n}\n\n/**\n * This class needs the following polyfills for legacy support\n *\n * - CustomEvent\n * - HTMLElement.matches\n * - Object.assign\n * - fetch\n * - Promise\n * - URL\n * - URLSearchParams\n */\nclass Controller {\n\n\t/**\n\t *\n\t * @param {object} opts - selectors, classNames, and text options\n\t * @param {HTMLFormElement|string} opts.form - form element to act on\n\t * @param {HTMLElement|string} opts.facets - where to render the facets template\n\t * @param {HTMLElement|string} opts.results - where to render the results template\n\t * @param {HTMLElement|string} opts.toggler - the node to toggle the mobile view\n\t * @param {boolean} opts.history - should the history api be utilized on load\n\t * @param {boolean} opts.init - should this controller to auto initialized\n\t * @param {string} opts.route - the refresh route of the to get results from\n\t * @param {object} opts.templates - an object of templates to render by their node key\n\t * @param {object} opts.classNames - an object of classNames\n\t */\n\tconstructor( opts = {} ) {\n\t\tthis.opts = {\n\t\t\tform : 'form.page-header',\n\t\t\tfacets : '.page-header__facets',\n\t\t\tresults : null,\n\t\t\tselected : '.page-header__selected',\n\t\t\ttoggler : '.page-header__facet-toggler',\n\t\t\tfacetCount : '.page-header__facet-filter-count',\n\t\t\thistory : true,\n\t\t\tinit : true,\n\t\t\troute : `${window.location.origin}${window.location.pathname}`,\n\t\t\tfacetsItems : '.facet',\n\t\t\ttotal : '.search__count',\n\t\t\tcounter : '.filters__counter',\n\t\t\tloadMore : '.load-more',\n\t\t\tclassNames: {\n\t\t\t\tremoveFilter : 'page-header__filter-remove',\n\t\t\t\tremoveFilterAll: 'page-header__filter-remove--all',\n\t\t\t\topen : 'page-header--filters-open',\n\t\t\t\tloading : 'is-loading',\n\t\t\t},\n\t\t\ttemplates: {\n\t\t\t\tfacets : '/wp-content/themes/nlc/views/partials/facets/checkboxes.twig',\n\t\t\t\tloading : '/wp-content/themes/nlc/views/partials/loading.twig',\n\t\t\t\tresults : '/wp-content/themes/nlc/views/partials/search/results.twig',\n\t\t\t\tselected: '/wp-content/themes/nlc/views/partials/facets/selected.twig',\n\t\t\t},\n\t\t};\n\n\t\tthis.location = window.location.origin + window.location.pathname;\n\n\t\t// merge single level of objects in options\n\t\tif ( opts && Object.keys( opts ).length > 0 ) {\n\t\t\tfor ( let opt in opts ) {\n\t\t\t\tif ( opts.hasOwnProperty( opt ) && typeof opts[ opt ] !== 'undefined' ) {\n\t\t\t\t\tif ( typeof opts[ opt ] === 'object' ) {\n\t\t\t\t\t\tif ( typeof this.opts[ opt ] === 'object' && this.opts[ opt ] !== null ) {\n\t\t\t\t\t\t\tthis.opts[ opt ] = Object.assign( this.opts[ opt ], opts[ opt ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.opts[ opt ] = opts[ opt ];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.opts[ opt ] = opts[ opt ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( this.opts.init ) {\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the class after options have been parsed\n\t */\n\tinit() {\n\t\t// query nodes\n\t\tthis.opts.form = this.opts.form instanceof HTMLFormElement ? this.opts.form : ( typeof this.opts.form === 'string' ? document.querySelector( this.opts.form ) : null );\n\t\tthis.opts.results = this.opts.results instanceof HTMLElement ? this.opts.results : ( typeof this.opts.results === 'string' ? document.querySelector( this.opts.results ) : null );\n\t\tthis.opts.facets = this.opts.facets instanceof HTMLElement ? this.opts.facets : ( this.opts.form && typeof this.opts.facets === 'string' ? this.opts.form.querySelector( this.opts.facets ) : null );\n\t\tthis.opts.toggler = this.opts.toggler instanceof HTMLElement ? this.opts.toggler : ( this.opts.form && typeof this.opts.toggler === 'string' ? this.opts.form.querySelector( this.opts.toggler ) : null );\n\t\tthis.opts.facetCount = this.opts.facetCount instanceof HTMLElement ? this.opts.facetCount : ( this.opts.form && typeof this.opts.facetCount === 'string' ? this.opts.form.querySelector( this.opts.facetCount ) : null );\n\t\tthis.opts.selected = this.opts.selected instanceof HTMLElement ? this.opts.selected : ( this.opts.form && typeof this.opts.selected === 'string' ? this.opts.form.querySelector( this.opts.selected ) : null );\n\t\tthis.opts.loadMore = this.opts.loadMore instanceof HTMLElement ? this.opts.loadMore : ( typeof this.opts.loadMore === 'string' ? document.querySelector( this.opts.loadMore ) : null );\n\t\tthis.opts.total = this.opts.total instanceof HTMLElement ? this.opts.total : ( this.opts.form && typeof this.opts.total === 'string' ? this.opts.form.querySelector( this.opts.total ) : null );\n\n\t\tthis.opened = false;\n\t\tthis.loading = false;\n\t\tthis.twigs = {};\n\t\tthis.paged = 1;\n\n\t\t// bind all event methods\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onSubmit = this.onSubmit.bind( this );\n\t\tthis.onPopstate = this.onPopstate.bind( this );\n\t\tthis.onLoadMore = this.onLoadMore.bind( this );\n\t\tthis.onRemove = this.onRemove.bind( this );\n\t\tthis.toggle = this.toggle.bind( this );\n\n\t\tif ( ! this.opts.form || ! this.opts.results ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.opts.toggler instanceof HTMLElement ) {\n\t\t\tthis.opts.toggler.addEventListener( 'click', this.toggle );\n\t\t}\n\n\t\tif ( this.opts.selected instanceof HTMLElement ) {\n\t\t\tthis.opts.selected.addEventListener( 'click', this.onRemove );\n\t\t}\n\n\t\t// sync input values with the url\n\t\tthis.getParamsFromURL( false );\n\n\t\t// initialize facet ui\n\t\tthis.initFacets();\n\n\t\t// listen for back/forward button\n\t\twindow.addEventListener( 'popstate', this.onPopstate );\n\n\t\tif ( this.opts.form instanceof HTMLFormElement ) {\n\t\t\t// listen for search submit\n\t\t\tthis.opts.form.addEventListener( 'submit', this.onSubmit );\n\n\t\t\t// listen for filters changes\n\t\t\tthis.opts.form.addEventListener( 'change', this.onChange );\n\t\t}\n\n\t\t// listen for pagination changes\n\t\tif ( this.opts.loadMore instanceof HTMLElement ) {\n\t\t\tthis.opts.loadMore.addEventListener( 'click', this.onLoadMore );\n\t\t}\n\t}\n\n\tinitFacets() {\n\t\tif ( this.opts.facets ) {\n\t\t\tArray.from( this.opts.facets.querySelectorAll( this.opts.facetsItems ) ).forEach( node => {\n\t\t\t\tswitch( node.dataset.type ) {\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\tnew CheckboxFacet( node );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * handle back/forward\n\t *\n\t * @param {Event} e\n\t */\n\tonPopstate( e ) {\n\t\tthis.getParamsFromURL();\n\t\tthis.load( false );\n\t\t// this.updateTitle();\n\t}\n\n\t/**\n\t * Get params based on the live form data\n\t *\n\t * @return {object}\n\t */\n\tgetParams() {\n\t\tthis.formData = new FormData( this.opts.form );\n\t\tthis.params = new URLSearchParams( this.formData );\n\t\tconst removeEm = [];\n\n\t\tthis.params.forEach( ( value, param ) => {\n\t\t\t// for some reason you can't delete items within the iterator, so build a list and remove them after\n\t\t\tif ( value === '' ) {\n\t\t\t\tremoveEm.push( param );\n\t\t\t}\n\t\t} );\n\n\t\tremoveEm.forEach( param => this.params.delete( param ) );\n\n\t\tif ( this.paged > 1 ) {\n\t\t\tthis.params.set( 'paged', this.paged );\n\t\t}\n\n\t\treturn this.params;\n\t}\n\n\tgetParamsFromURL( load = true ) {\n\t\tconst params = new URLSearchParams( window.location.search );\n\n\t\tthis.opts.form.removeEventListener( 'change', this.onChange );\n\n\t\tArray.from( this.opts.form.elements ).filter( input => input.name ).forEach( input => {\n\t\t\tlet value;\n\n\t\t\tif ( input.name.match( /\\[\\]$/ ) ) {\n\t\t\t\tvalue = params.getAll( input.name );\n\n\t\t\t\tif ( ! value.length ) {\n\t\t\t\t\tvalue.push( '' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalue = params.get( input.name );\n\n\t\t\t\tif ( ! value ) {\n\t\t\t\t\tvalue = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch( true ) {\n\t\t\t\tcase input.tagName === 'SELECT':\n\n\t\t\t\tbreak;\n\t\t\t\tcase input.tagName === 'INPUT' && /^checkbox|radio$/.test( input.type ):\n\t\t\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\t\t\tinput.checked = value.indexOf( input.value ) > -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.checked = value === input.value;\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tinput.value = value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} );\n\n\t\tthis.getParams();\n\n\t\tif ( load ) {\n\t\t\tthis.load( false );\n\t\t\tthis.onChange();\n\t\t}\n\n\t\tthis.opts.form.addEventListener( 'change', this.onChange );\n\t}\n\n\tonRemove( e ) {\n\t\tlet target = e.target;\n\n\t\twhile( target && target !== this.opts.selected ) {\n\t\t\tif ( target.matches( `.${this.opts.classNames.removeFilterAll}` ) ) {\n\t\t\t\treturn this.clear();\n\t\t\t}\n\n\t\t\tif ( target.matches( `.${this.opts.classNames.removeFilter}[data-name]` ) ) {\n\t\t\t\t// find the matching node to remove one\n\t\t\t\tconst input = this.opts.form.querySelector( `[name=\"${target.dataset.name}\"][value=\"${target.value}\"]` );\n\t\t\t\tif ( input ) {\n\t\t\t\t\tresetInput( input );\n\t\t\t\t\tthis.onChange();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttarget = target.parentNode;\n\t\t}\n\t}\n\n\t/**\n\t * handle filter change\n\t *\n\t * @param {Event} e\n\t */\n\tonChange( e = null ) {\n\t\t// don't do anything if the changed element has no name attribute - checkboxes filter\n\t\tif ( e && ( ! e.target || ! e.target.name ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.paged = 1;\n\t\temptyNode( this.opts.results );\n\t\tthis.load();\n\t}\n\n\t/**\n\t * Handle the submit event of the form\n\t *\n\t * @param {Event} e\n\t */\n\tonSubmit( e ) {\n\t\te.preventDefault();\n\t\tthis.onChange();\n\t\tthis.load();\n\t}\n\n\t/**\n\t * Increment the page and reload\n\t *\n\t * @param {Event} e\n\t */\n\tonLoadMore( e ) {\n\t\tif ( e && typeof e.preventDefault === 'function' ) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.paged++;\n\t\tthis.load( false, ( response ) => {\n\t\t\tif ( response.items && response.items.length ) {\n\t\t\t\tthis.renderResults( response.items );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Add the open class - used on mobile\n\t */\n\topen() {\n\t\tthis.opened = true;\n\t\tthis.opts.form.classList.add( this.opts.classNames.open );\n\t}\n\n\t/**\n\t * Remove the open class\n\t */\n\tclose() {\n\t\tthis.opened = false;\n\t\tthis.opts.form.classList.remove( this.opts.classNames.open );\n\t}\n\n\t/**\n\t * toggle the open class\n\t */\n\ttoggle() {\n\t\treturn this.opened ? this.close() : this.open();\n\t}\n\n\t/**\n\t * Clear all filters by resetting them to uncheked or with no value\n\t *\n\t * @param {bool} fire - whether to fire the onChange callback immediately\n\t */\n\tclear( fire = true ) {\n\t\t// stop listening to batch changes\n\t\tthis.opts.form.removeEventListener( 'change', this.onChange );\n\n\t\tArray.from( this.opts.form.elements ).forEach( node => resetInput( node ) );\n\n\t\t// Array.from( this.opts.form.querySelectorAll( `.${this.opts.classNames.removeFilter}[data-name]` ) ).forEach( button => {\n\t\t// \tconst input = this.opts.form.querySelector( `[name=\"${button.dataset.name}\"][value=\"${button.value}\"]` );\n\n\t\t// \tconsole.log( input );\n\t\t// \tif ( input ) {\n\t\t// \t\tresetInput( input );\n\t\t// \t}\n\t\t// } );\n\n\t\t// trigger our change manually and listen again\n\t\tif ( fire ) {\n\t\t\tthis.onChange();\n\t\t}\n\t\tthis.opts.form.addEventListener( 'change', this.onChange );\n\t}\n\n\t/**\n\t *\n\t * @param {HTMLElement} target - the element to render the template inside\n\t * @param {string} view - the name of the twig view\n\t * @param {object} data - the data model passed to the view\n\t * @param {function} callback - what to do when the template is rendered\n\t */\n\trenderView( target, view, data ) {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tconst render = () => {\n\t\t\t\ttarget.insertAdjacentHTML( 'beforeend', Twig.twig( { ref: view } ).render( data ) );\n\t\t\t\tresolve();\n\t\t\t}\n\n\t\t\tif ( this.twigs[ view ] ) {\n\t\t\t\treturn render();\n\t\t\t}\n\n\t\t\tthis.twigs[ view ] = Twig.twig( {\n\t\t\t\tid: view,\n\t\t\t\thref: view,\n\t\t\t\tload: render,\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t *\n\t * @param {array} facets\n\t */\n\trenderFacets( facets ) {\n\t\temptyNode( this.opts.facets );\n\n\t\tthis.renderView( this.opts.facets, this.opts.templates.facets, {\n\t\t\tfacets,\n\t\t\tview: '../facets/checkboxes.twig',\n\t\t\tselected: '../facets/selected.twig',\n\t\t} ).then( this.initFacets.bind( this ) );\n\t}\n\n\t/**\n\t *\n\t * @param {array} facets\n\t */\n\trenderSelected( facets ) {\n\t\tthis.renderView( this.opts.selected, this.opts.templates.selected, { facets } );\n\t}\n\n\t/**\n\t *\n\t * @param {array} posts\n\t */\n\trenderResults( posts ) {\n\t\tthis.renderView( this.opts.results, this.opts.templates.results, { posts, view: 'result.twig' } );\n\t}\n\n\t/**\n\t *\n\t * @param {object} pagination\n\t */\n\trenderPagination( pagination ) {\n\t\tthis.renderView( this.pagination, this.opts.templates.pagination, { pagination } );\n\t}\n\n\t/**\n\t * Process the response from the load call\n\t *\n\t * @param {object} response\n\t * @param {URLSearchParams} params\n\t * @return {undefined}\n\t */\n\tprocess( response, params ) {\n\t\temptyNode( this.opts.results );\n\n\t\tif ( response.items && response.items.length ) {\n\t\t\tthis.renderResults( response.items );\n\t\t}\n\n\t\tif ( this.opts.facets && response.data.facets ) {\n\t\t\tthis.renderFacets( response.data.facets );\n\t\t}\n\n\t\tif ( this.opts.selected ) {\n\t\t\temptyNode( this.opts.selected );\n\n\t\t\tthis.renderSelected( response.data.facets );\n\t\t}\n\n\t\tif ( this.opts.total ) {\n\t\t\temptyNode( this.opts.total );\n\n\t\t\tif ( response.data.total ) {\n\t\t\t\tthis.opts.total.insertAdjacentHTML( 'beforeend', `${response.data.total} ${parseInt( response.data.total, 10 ) === 1 ? 'result' : 'results'}` );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.opts.facetCount ) {\n\t\t\temptyNode( this.opts.facetCount );\n\n\t\t\tif ( response.data.facets ) {\n\t\t\t\tlet facetCount = Object.keys( response.data.facets ).map( key => response.data.facets[ key ] ).reduce( ( carry, facet ) => {\n\t\t\t\t\treturn carry + facet.filters.filter( f => f.active ).length;\n\t\t\t\t}, 0 );\n\n\t\t\t\tthis.opts.facetCount.insertAdjacentHTML( 'beforeend', facetCount > 0 ? facetCount : '' );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load the results based on the current state\n\t *\n\t * @param {bool|string} history\n\t * @param {function} process custom process callback\n\t */\n\tload( history = true, process = null ) {\n\t\tif ( this.loading ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.opts.form.dispatchEvent( new CustomEvent('filters:load:before') );\n\n\t\tconst loadingNodes = [ this.opts.form, this.opts.results, this.opts.loadMore ].filter( node => node instanceof HTMLElement );\n\n\t\t// let our components know we're loading\n\t\tloadingNodes.forEach( node => node.classList.add( this.opts.classNames.loading ) );\n\n\t\tlet loadMoreText;\n\n\t\tif ( this.opts.loadMore ) {\n\t\t\tloadMoreText = this.opts.loadMore.innerHTML;\n\t\t\tTwig.twig( {\n\t\t\t\thref: this.opts.templates.loading,\n\t\t\t\tload: () => this.opts.loadMore.innerHTML = Twig.twig( { ref: this.opts.templates.loading } ).render(),\n\t\t\t} );\n\n\t\t\tthis.opts.loadMore.removeAttribute('href');\n\t\t\tthis.opts.loadMore.hidden = false;\n\t\t}\n\n\t\tlet params = this.getParams();\n\n\t\tlet historyUrl = this.location;\n\t\tlet route = this.opts.route;\n\n\t\tlet queryString = params.toString();\n\t\tlet routeParams = new URLSearchParams( queryString );\n\n\t\trouteParams.set( 'json', '1' );\n\n\t\tlet routeQueryString = routeParams.toString();\n\n\t\tif ( routeQueryString.length ) {\n\t\t\troute += `?${routeQueryString}`;\n\t\t}\n\n\t\tif ( historyUrl && queryString.length ) {\n\t\t\thistoryUrl += `?${queryString}`;\n\t\t}\n\n\t\tthis.loading = true;\n\n\t\t// make our fetch request\n\t\twindow.fetch( route, {\n\t\t\theaders: {\n\t\t\t\t'Accept': 'application/json',\n\t\t\t}\n\t\t} ).then( response => response.json() ).then( response => {\n\t\t\tif ( typeof process === 'function' ) {\n\t\t\t\tprocess( response, routeParams );\n\t\t\t} else {\n\t\t\t\tthis.process( response, routeParams );\n\t\t\t}\n\n\t\t\tif ( this.opts.history && history ) {\n\t\t\t\tswitch( this.opts.history ) {\n\t\t\t\t\tcase 'replace':\n\t\t\t\t\t\twindow.history.replaceState( {}, '', historyUrl );\n\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\twindow.history.pushState( {}, '', historyUrl );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparams.set( 'paged', this.paged + 1 );\n\n\t\t\tif ( this.opts.loadMore ) {\n\t\t\t\tthis.opts.loadMore.innerHTML = loadMoreText || 'Load More';\n\n\t\t\t\tif ( response.data && response.data.paged && response.data.totalPages && response.data.paged < response.data.totalPages ) {\n\t\t\t\t\tif ( response.data.next ) {\n\t\t\t\t\t\tthis.opts.loadMore.href = response.data.next;\n\t\t\t\t\t}\n\t\t\t\t\tthis.opts.loadMore.hidden = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.opts.loadMore.hidden = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} ).catch( error => {\n\t\t\tif ( typeof console === 'object' && typeof console.error === 'function' ) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\n\t\t\tif ( this.opts.loadMore ) {\n\t\t\t\tthis.opts.loadMore.hidden = true;\n\t\t\t}\n\n\t\t\tthis.opts.results.innerHTML = '
There was an unknown error loading the results.
';\n\t\t\tthis.opts.form.dispatchEvent( new CustomEvent('filters:load:error') );\n\t\t} ).finally( () => {\n\t\t\t// let the components know we're done loading\n\t\t\tloadingNodes.forEach( ( node ) => node.classList.remove( this.opts.classNames.loading ) );\n\t\t\tthis.loading = false;\n\n\t\t\tthis.opts.form.dispatchEvent( new CustomEvent('filters:load') );\n\t\t} );\n\t}\n}\n\nexport default Controller;\n","import Controller from './_controller.js';\nimport emptyNode from '../base/_emptyNode.js';\n\nclass ResourceLibrary extends Controller {\n\n\tconstructor( opts ) {\n\t\tsuper( Object.assign( {\n\t\t\trecommended: document.querySelector( '.resource-library__recommended' ),\n\t\t\tfiltered : document.querySelector( '.resource-library__filtered' ),\n\t\t}, opts ) );\n\t}\n\n\tinit() {\n\t\tsuper.init();\n\t\tthis.changeView();\n\t}\n\n\tonRemove( e ) {\n\t\tconst params = this.getParams();\n\t\tconst keys = [];\n\t\tparams.forEach( ( v, k ) => keys.push( k ) );\n\n\t\t// reset view to recommended when there are no filters left besides orderby\n\t\tif ( keys.length === 2 && params.get( 'orderby' ) ) {\n\t\t\tfor ( let i = 0, orderbyLength = this.opts.form.orderby.length; i < orderbyLength; i++ ) {\n\t\t\t\tthis.opts.form.orderby[ i ].checked = this.opts.form.orderby[ i ].value === '';\n\t\t\t}\n\t\t}\n\n\t\tsuper.onRemove( e );\n\t}\n\n\tonChange( e = null ) {\n\t\t// if clicking on the recommended button, we should reset all filters\n\t\tif ( e && e.target && e.target.tagName === 'INPUT' && e.target.name === 'orderby' && this.opts.form.orderby && ! this.opts.form.orderby.value ) {\n\t\t\tthis.clear( false );\n\t\t\tsuper.onChange( e );\n\t\t\tthis.changeView();\n\t\t\treturn;\n\t\t}\n\n\t\t// change sort to date if a filter is newly selected without a search\n\t\tif ( this.opts.form.orderby && ! this.opts.form.orderby.value ) {\n\t\t\tconst params = this.getParams();\n\t\t\tconst keys = [];\n\n\t\t\tparams.forEach( ( v, k ) => keys.push( k ) );\n\n\t\t\tif ( keys.length > 0 ) {\n\t\t\t\tconst orderby = this.opts.form.q.value ? 'score' : 'date';\n\n\t\t\t\tfor ( let i = 0, orderbyLength = this.opts.form.orderby.length; i < orderbyLength; i++ ) {\n\t\t\t\t\tthis.opts.form.orderby[ i ].checked = this.opts.form.orderby[ i ].value === orderby;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// default\n\t\tsuper.onChange( e );\n\t\tthis.changeView();\n\t}\n\n\tchangeView() {\n\t\tif ( ! this.params ) {\n\t\t\tthis.getParams();\n\t\t}\n\n\t\tlet keys = [];\n\t\tthis.params.forEach( ( v, k ) => keys.push( k ) );\n\n\t\tif ( keys.length === 0 ) {\n\t\t\tthis.opts.recommended.hidden = false;\n\t\t\tthis.opts.filtered.hidden = true;\n\t\t} else {\n\t\t\tthis.opts.recommended.hidden = true;\n\t\t\tthis.opts.filtered.hidden = false;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {array} facets\n\t */\n\trenderFacets( facets ) {\n\t\tconst facetData = {\n\t\t\tfacets,\n\t\t\torderby: this.opts.form.orderby ? ( this.opts.form.orderby.value ? this.opts.form.orderby.value : null ) : null,\n\t\t\tviews: {\n\t\t\t\tselected : './selected.twig',\n\t\t\t\tradio : './radio.twig',\n\t\t\t\tcheckboxes: './checkboxes.twig',\n\t\t\t\tsort : './sort.twig',\n\t\t\t},\n\t\t\tsearch: {\n\t\t\t\tquery: this.opts.form.q && this.opts.form.q.value ? this.opts.form.q.value : null\n\t\t\t},\n\t\t};\n\n\t\temptyNode( this.opts.facets );\n\t\tthis.renderView( this.opts.facets, this.opts.templates.facets, facetData ).then( () => this.initFacets() );\n\t}\n\n\t/**\n\t *\n\t * @param {array} posts\n\t */\n\trenderResults( posts ) {\n\t\tthis.changeView();\n\t\tthis.renderView( this.opts.results, this.opts.templates.results, {\n\t\t\tposts,\n\t\t\tview: './default.twig',\n\t\t\tplaceholder: this.opts.placeholder ? this.opts.placeholder : '',\n\t\t} );\n\t}\n\n}\n\nexport default ResourceLibrary;\n","import Controller from './_controller.js';\n\nclass CitiesSpeak extends Controller {\n\tconstructor(\n\t\tnode = document.querySelector( '.filters' ),\n\t\topts = {\n\t\t\tresults: '.filters__results',\n\t\t}\n\t) {\n\t\tsuper( node, opts );\n\n\t\tconsole.log('CitiesSpeak');\n\t}\n\t// return new\n}\n\nexport default CitiesSpeak;\n","import Controller from './_controller.js';\n\nclass Archive extends Controller {\n\n\tconstructor( opts = {} ) {\n\t\tsuper( opts );\n\n\t\tthis.filteredClass = 'has-filters';\n\n\t\tthis.toggleSections();\n\t\tthis.opts.form.addEventListener( 'filters:load', this.toggleSections.bind( this ) );\n\t}\n\n\ttoggleSections() {\n\t\tif ( this.formData.get('topic[]') || this.formData.get('q') ) {\n\t\t\tdocument.body.classList.add( this.filteredClass );\n\t\t} else {\n\t\t\tdocument.body.classList.remove( this.filteredClass );\n\t\t}\n\t}\n\n}\n\nexport default Archive;\n","import Archive from './_archive.js';\nimport emptyNode from '../base/_emptyNode.js';\n\nclass Initiatives extends Archive {\n\n\tconstructor( opts = {} ) {\n\t\tsuper( opts );\n\n\t\tthis.loader = document.querySelector('.loader');\n\t\tthis.loader.hidden = true;\n\n\t\tTwig.twig( {\n\t\t\thref: this.opts.templates.loading,\n\t\t\tasync: true,\n\t\t\tload: () => {\n\t\t\t\tthis.loader.innerHTML = Twig.twig( { ref: this.opts.templates.loading } ).render();\n\t\t\t},\n\t\t} );\n\n\t\tconsole.log( this.opts.form );\n\t\tthis.opts.form.addEventListener( 'filters:load:before', () => {\n\t\t\tconsole.log( 'filters:load:before' );\n\t\t\tthis.loader.hidden = false;\n\t\t} );\n\n\t\tthis.opts.form.addEventListener( 'filters:load', () => {\n\t\t\tconsole.log( 'filters:load' );\n\t\t\tthis.loader.hidden = true;\n\t\t} );\n\t}\n\n\t/**\n\t *\n\t * @param {array} facets\n\t */\n\trenderFacets( facets ) {\n\t\temptyNode( this.opts.facets );\n\n\t\tthis.renderView( this.opts.facets, this.opts.templates.facets, {\n\t\t\tfacets,\n\t\t\tviews: {\n\t\t\t\tcheckboxes: './checkboxes.twig',\n\t\t\t\tselected: './selected.twig',\n\t\t\t}\n\t\t} ).then( this.initFacets.bind( this ) );\n\t}\n}\n\nexport default Initiatives;\n"],"names":["CheckboxFacet","node","opts","this","Object","assign","openClass","noMatchClass","invertedClass","toggler","search","filters","dropdown","mobileMediaQuery","opened","querySelector","Array","from","querySelectorAll","searchData","map","name","textContent","toLowerCase","replace","addEventListener","toggle","bind","filter","e","let","target","parentNode","tagName","type","stopPropagation","listenForClose","window","matchMedia","matches","document","activeElement","close","listenForEsc","key","listenForArrow","preventDefault","const","focusable","hidden","length","focused","closest","toFocusIndex","indexOf","focus","focusPrevFilter","focusNextFilter","emptyNode","firstChild","removeChild","prototype","value","hasMatch","forEach","datum","removeAttribute","setAttribute","classList","add","remove","open","body","getBoundingClientRect","bottom","innerHeight","removeEventListener","resetInput","checked","Controller","form","facets","results","selected","facetCount","history","init","route","location","facetsItems","total","counter","loadMore","classNames","removeFilter","removeFilterAll","loading","templates","origin","pathname","keys","opt","hasOwnProperty","HTMLFormElement","HTMLElement","twigs","paged","onChange","onSubmit","onPopstate","onLoadMore","onRemove","getParamsFromURL","initFacets","dataset","load","getParams","formData","FormData","params","URLSearchParams","removeEm","param","push","delete","set","elements","input","match","getAll","get","test","isArray","clear","response","items","renderResults","fire","renderView","view","data","Promise","resolve","reject","render","insertAdjacentHTML","Twig","twig","ref","id","href","renderFacets","then","renderSelected","posts","renderPagination","pagination","process","parseInt","reduce","carry","facet","f","active","dispatchEvent","CustomEvent","loadMoreText","loadingNodes","innerHTML","historyUrl","queryString","toString","routeParams","routeQueryString","fetch","headers","Accept","json","replaceState","pushState","totalPages","next","catch","error","console","finally","ResourceLibrary","super","call","recommended","filtered","constructor","changeView","v","k","i","orderbyLength","orderby","q","facetData","views","radio","checkboxes","sort","query","placeholder","CitiesSpeak","log","Archive","filteredClass","toggleSections","Initiatives","loader","async"],"mappings":"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"}