{"version":3,"file":"script.min.js","sources":["../../../../block-editor/blocks/advanced-query/script.js"],"sourcesContent":["// const onFacetClick = (event, facet) => {\n// \tfacet.parentNode.classList.toggle('advanced-query__facet--opened');\n// }\n\n// const initFacetMenus = () =>{\n// const facets = document.querySelectorAll('.advanced-query__facet-toggle');\n\n// \t[...facets].map((facet) => {\n// \t\tfacet.addEventListener('click', (event) => onFacetClick(event, facet));\n// \t});\n\n// }\n\n// export default initFacetMenus();\n\nfunction copyNode( from, to ) {\n\tto.innerHTML = from.innerHTML;\n\n\tfor ( let attribute of from.attributes ) {\n\t\tto.setAttribute( attribute.name, attribute.value );\n\t}\n}\n\nexport class AdvancedQuery {\n\tconstructor( node, opts = {} ) {\n\t\tthis.node = node;\n\t\tthis.opts = {\n\t\t\tajax: true,\n\t\t\tqueryId: null,\n\t\t\tpostTemplate: '.advanced-query__grid',\n\t\t\tpagination: '.advanced-query__pagination',\n\t\t\topenedClass: 'facets--opened',\n\t\t\topener: '.facets__heading--mobile',\n\t\t\theading: '.advanced-query__heading',\n\t\t\tpaginationLink: '.advanced-query__pagination a',\n\t\t\tform: '.advanced-query__form',\n\t\t\tfacets: '.advanced-query__facet',\n\t\t\tfacetsOpened: 'advanced-query__facet--opened',\n\t\t\tfacetsToggle: '.advanced-query__facet-toggle',\n\t\t\t...opts\n\t\t}\n\n\t\tthis.postTemplate = this.node.querySelector( this.opts.postTemplate );\n\t\tthis.pagination = this.node.querySelector( this.opts.pagination );\n\t\tthis.form = this.node.querySelector( this.opts.form );\n\t\tthis.heading = this.node.querySelector( this.opts.heading );\n\n\t\tthis.opener = typeof this.opts.opener === 'string' ? document.querySelector( this.opts.opener ) : this.opts.opener;\n\t\tthis.opened = this.node.classList.contains( this.opts.openedClass );\n\t\tthis.wasFocused = null;\n\n\t\tthis.form.addEventListener('submit', (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.fetch( this.url() );\n\t\t});\n\n\t\tthis.node.addEventListener('change', ( { target } ) => {\n\t\t\tif ( [ 'checkbox', 'radio' ].includes( target.type ) ) {\n\t\t\t\tthis.wasFocused = `[name=\"${target.name}\"][value=\"${target.value}\"]`;\n\t\t\t\tthis.fetch( this.url() );\n\t\t\t}\n\t\t});\n\n\t\tthis.node.addEventListener('click', (e) => {\n\t\t\tif ( e.target.matches( this.opts.facetsToggle ) ) {\n\t\t\t\tconst facet = e.target.closest( this.opts.facets );\n\n\t\t\t\tif ( facet ) {\n\t\t\t\t\tfacet.classList.toggle( this.opts.facetsOpened );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.node.addEventListener( 'input', (e) => {\n\t\t\tif ( ! e.target.matches('.advanced-query__facet-search input[type=\"text\"]') ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst search = e.target.value.toLowerCase().replace( /\\s/g, '' );\n\t\t\tconst list = e.target.closest( 'ul' );\n\n\t\t\tif ( ! list ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst items = Array.from( list.children ).filter( n => ! n.classList.contains( 'advanced-query__facet-search' ) );\n\n\t\t\titems.forEach( item => {\n\t\t\t\tif ( ! search ) {\n\t\t\t\t\treturn item.style.display = '';\n\t\t\t\t}\n\n\t\t\t\tif ( ! item.textContent.replace( /\\s/g, '' ).toLowerCase().includes( search ) ) {\n\t\t\t\t\treturn item.style.display = 'none';\n\t\t\t\t}\n\n\t\t\t\treturn item.style.display = '';\n\t\t\t} );\n\t\t});\n\n\t\tthis.node.addEventListener('reset', (e) => {\n\t\t\tfor ( let elem of this.node.elements ) {\n\t\t\t\tif ( elem.type ) {\n\t\t\t\t\tswitch ( elem.type ) {\n\t\t\t\t\t\tcase 'radio':\n\t\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\t\telem.removeAttribute('checked');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'hidden':\n\t\t\t\t\t\t\t// no-op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\telem.value = '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fetch( this.url() );\n\t\t});\n\n\t\tif ( this.node ) {\n\t\t\tthis.node.addEventListener( 'click', ( e ) => {\n\t\t\t\tif ( e.target.matches( this.opts.paginationLink ) ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.fetch( e.target.href );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.opts.ajax ) {\n\t\t\twindow.addEventListener( 'popstate', (e) => this.fetch( location.href, false ) );\n\t\t}\n\n\t\tif ( this.opener ) {\n\t\t\tthis.opener.addEventListener( 'click', this.toggle.bind(this) );\n\t\t}\n\t}\n\n\turl() {\n\t\tlet { origin, pathname } = location;\n\n\t\tconst formData = new FormData( this.form );\n\t\tconst formSearchParams = new URLSearchParams( formData );\n\t\tconst urlSearchParams = new URLSearchParams( location.search );\n\n\t\t// remove any fields from the url params that overlap with fields on the form\n\t\tArray.from( this.form.elements ).map( el => el.name ).filter( v => v ).forEach( ( name ) => {\n\t\t\turlSearchParams.delete( name );\n\t\t} );\n\n\t\t// add form params to the url params\n\t\tfor ( let param of formSearchParams.keys() ) {\n\t\t\tconst values = formSearchParams.getAll( param );\n\n\t\t\tfor ( let value of values ) {\n\t\t\t\tif ( ! urlSearchParams.has( param, value ) ) {\n\t\t\t\t\turlSearchParams.append( param, value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpathname = pathname.replace( /\\/page\\/[\\d]+(\\/)?$/, '$1' );\n\t\turlSearchParams.delete( 'page' );\n\n\t\tif ( urlSearchParams.has( 'filter[paged]' ) ) {\n\t\t\turlSearchParams.delete( 'filter[paged]' );\n\t\t}\n\n\t\t// remove empty values\n\t\tfor ( let param of Array.from( urlSearchParams.keys() ) ) {\n\t\t\tif ( ! urlSearchParams.get( param ) ) {\n\t\t\t\turlSearchParams.delete( param );\n\t\t\t}\n\t\t}\n\n\t\tconst hasQueryString = Array.from( urlSearchParams.keys() ).length > 0;\n\n\t\treturn `${ origin }${ pathname }${ hasQueryString ? '?' : '' }${ urlSearchParams }`;\n\t}\n\n\tasync fetch( url, history = true ) {\n\t\tif ( ! this.opts.ajax ) {\n\t\t\twindow.location.href = url;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.node.classList.add('is-loading');\n\t\tthis.node.querySelectorAll('fieldset').forEach( facet => facet.disabled = true );\n\n\t\treturn fetch( url ).then( ( response ) => {\n\t\t\treturn response.text();\n\t\t} ).then( html => {\n\t\t\t// @see - https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n\t\t\tconst parser = new DOMParser();\n\t\t\tconst doc = parser.parseFromString( html, 'text/html' );\n\t\t\tconst form = doc.querySelector( this.opts.form );\n\t\t\tconst postTemplate = doc.querySelector( this.opts.postTemplate );\n\t\t\tconst pagination = doc.querySelector( this.opts.pagination );\n\t\t\tconst heading = doc.querySelector( this.opts.heading );\n\n\t\t\tif ( form ) {\n\t\t\t\tcopyNode( form, this.form );\n\t\t\t} else {\n\t\t\t\tthis.form.innerHTML = '';\n\t\t\t}\n\n\t\t\tif ( pagination ) {\n\t\t\t\tcopyNode( pagination, this.pagination );\n\t\t\t} else {\n\t\t\t\tthis.pagination.innerHTML = '';\n\t\t\t}\n\n\t\t\tif ( postTemplate ) {\n\t\t\t\tcopyNode( postTemplate, this.postTemplate );\n\t\t\t} else {\n\t\t\t\tthis.postTemplate.innerHTML = '';\n\t\t\t}\n\n\t\t\tif ( heading ) {\n\t\t\t\tcopyNode( heading, this.heading );\n\t\t\t} else {\n\t\t\t\tthis.postTemplate.innerHTML = '';\n\t\t\t}\n\n\t\t\t// re-initialize panels\n\t\t\tthis.node.querySelectorAll('.panels__panel').forEach( p => new Panel( p ) );\n\n\t\t\tthis.node.dispatchEvent( new CustomEvent( 'facet:reload', { bubbles: true, cancelable: false } ) )\n\n\t\t\tif ( history ) {\n\t\t\t\twindow.history.pushState( {}, '', url );\n\t\t\t}\n\t\t} ).catch( ( error ) => {\n\t\t\tconsole.error( error );\n\t\t\twindow.location.href = url;\n\t\t} ).finally( () => {\n\t\t\tthis.node.classList.remove('is-loading');\n\t\t\tthis.node.querySelectorAll('fieldset').forEach( facet => facet.removeAttribute('disabled') );\n\n\t\t\tif ( this.node.getBoundingClientRect().top < 0 ) {\n\t\t\t\tthis.node.scrollIntoView( { behavior: 'smooth' } );\n\t\t\t}\n\t\t} );\n\t}\n\n\ttoggle() {\n\t\treturn this.node.classList.contains( this.opts.openedClass ) ? this.close() : this.open();\n\t}\n\n\topen() {\n\t\tthis.node.classList.add( this.opts.openedClass );\n\t}\n\n\tclose() {\n\t\tthis.node.classList.remove( this.opts.openedClass );\n\t}\n}\n\ndocument.addEventListener( 'DOMContentLoaded', () => {\n\tArray.from( document.querySelectorAll('.advanced-query') ).map( node => new AdvancedQuery( node ) );\n} );\n"],"names":["copyNode","from","to","innerHTML","attribute","attributes","setAttribute","name","value","AdvancedQuery","constructor","node","opts","this","ajax","queryId","postTemplate","pagination","openedClass","opener","heading","paginationLink","form","facets","facetsOpened","facetsToggle","querySelector","document","opened","classList","contains","wasFocused","addEventListener","e","preventDefault","fetch","url","target","includes","type","matches","facet","closest","toggle","search","toLowerCase","replace","list","Array","children","filter","n","forEach","item","textContent","style","display","elem","elements","removeAttribute","href","window","location","bind","origin","pathname","formData","FormData","formSearchParams","URLSearchParams","urlSearchParams","map","el","v","delete","param","keys","values","getAll","has","append","get","length","history","add","querySelectorAll","disabled","then","response","text","html","doc","DOMParser","parseFromString","p","Panel","dispatchEvent","CustomEvent","bubbles","cancelable","pushState","catch","error","console","finally","remove","getBoundingClientRect","top","scrollIntoView","behavior","close","open"],"mappings":"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"}