{"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} );\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","firstChild","removeChild","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","emptyNode","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","recommended","filtered","changeView","v","k","i","orderbyLength","orderby","q","facetData","views","radio","checkboxes","sort","query","CitiesSpeak","log","Archive","filteredClass","toggleSections","Initiatives","loader","async"],"mappings":"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"}