{"version":3,"file":"news-search.js","mappings":"s2DAKA,IAAMA,EAAoB,CACxBC,UAAW,CAAC,QAAS,UAMjBC,EAAU,SAAAC,GACd,SAAAD,EAAYE,GAAQ,IAAAC,EAMhB,O,4FANgBC,CAAA,KAAAJ,IAClBG,EAAAE,EAAA,KAAAL,EAAA,CAAME,KAEDI,aAAe,CAClBC,SAAU,UACVC,OAAQ,YACRL,CACJ,C,QAiIC,O,qRAzIaM,CAAAT,EAAAC,G,EAUdD,G,EAAA,EAAAU,IAAA,aAAAC,MAMA,SAAWC,GACT,IAAMC,EAAMC,SAASC,cAAc,YAEnC,OADAF,EAAIG,UAAYJ,EACTC,EAAIF,KACb,GAEA,CAAAD,IAAA,OAAAC,MAKA,WACEM,KAAKC,mBACLD,KAAKE,sCACLF,KAAKG,aACLH,KAAKI,iBACLJ,KAAKK,aAIL,IAFA,IAAMC,EAAU,GAAGC,EAAA,WAEd,I,IAAAC,G,EAAAC,EAAAC,G,EAAA,E,k5BAAOjB,EAAGe,EAAA,GAAQA,EAAA,GACdG,SAAQ,SAAAjB,GACbY,EAAQM,KAAK,OAADC,OAAQpB,EAAG,KAAAoB,OAAInB,GAC7B,GACF,EAJAgB,EAAA,EAAAD,EAA4BK,OAAOC,QAAQlC,GAAkB6B,EAAAD,EAAAO,OAAAN,IAAAH,IAM7DP,KAAKiB,aAAaX,QAAUA,EAAQY,KAAK,SAEzClB,KAAKmB,OAAOC,QAEZpB,KAAKqB,gBACP,GAEA,CAAA5B,IAAA,iBAAAC,MAGA,WACuB4B,OAAOC,SAASJ,OAEpBK,SAASxB,KAAKyB,YAC7BzB,KAAKf,OAAOyC,gBAEhB,GAEA,CAAAjC,IAAA,iBAAAC,MAGA,WACEM,KAAK2B,QAAQf,KAAKZ,KAAK4B,2BACzB,GAEA,CAAAnC,IAAA,qBAAAC,MAKA,WACEM,KAAK6B,WAAYA,EAAAA,EAAAA,GAAU,CACzBC,UAAW,wBACXC,YAAa,iBACbC,YAAY,GAEhB,GAEA,CAAAvC,IAAA,sCAAAC,MAGA,WACE,GAAKG,SAASoC,cAAc,8BAA5B,CAIA,IAAMC,GAAmBC,EAAAA,EAAAA,GAAeC,EAAAA,EAAgB,CACtDC,WAAY,CAAEC,KAAM,0BACpBC,WAAY,gBAGdvC,KAAK4B,2BAA6BM,EAAiB,CACjDJ,UAAW,6BACXU,UAAW,YACXC,MAAO,GACPC,UAAU,EACVC,cAAe,IACfC,OAAQ,CAAC,aAbX,CAeF,GAEA,CAAAnD,IAAA,uBAAAC,MAGA,WAAuB,IAAAmD,EAAA,KACrB7C,KAAK8C,aAAcC,EAAAA,EAAAA,GAAK,CACtBjB,UAAW,kBACXkB,UAAW,CAETC,KAAM,SAACC,EAAGC,GAAe,IAAXxD,EAAIwD,EAAJxD,KACJyD,EAAwCF,EAAxCE,YAAaC,EAA2BH,EAA3BG,KAAMC,EAAqBJ,EAArBI,MAAOC,EAAcL,EAAdK,UAClC,OAAO5D,EAAI6D,IAAAA,EAAAC,EAAA,8ZAAoBF,GAAaA,EAAUG,IAAM,iBAAmB,GAC3EH,GAAaA,EAAUG,IACrB/D,EAAIgE,IAAAA,EAAAF,EAAA,uRAC2BJ,EAEbE,EAAUG,IAAaH,EAAUK,KAInD,GAG6BP,EAASC,EAEdT,EAAKgB,WAAWT,GAGNC,EAG1C,IAIN,M,oEAACtE,CAAA,CAzIa,CAAS+E,EAAAA,SA4IzB,W","sources":["webpack://cornell-engineering/./static/js/components/algolia/news-search.js"],"sourcesContent":["import { searchBox, hits, refinementList } from 'instantsearch.js/es/widgets';\n\nimport GlobalSearch from './global-search';\nimport { createDropdown } from './vendor/dropdown';\n\nconst excludeFromSearch = {\n news_type: ['Award', 'Press'],\n};\n\n/**\n * NewsSearch\n */\nclass NewsSearch extends GlobalSearch {\n constructor(rootEl) {\n super(rootEl);\n\n this.resultsLabel = {\n singular: 'article',\n plural: 'articles',\n };\n }\n\n /**\n * Convert a string to a safe HTML free string with decoded entities.\n *\n * @param {String} html\n * @returns {String}\n */\n decodeHtml(html) {\n const txt = document.createElement('textarea');\n txt.innerHTML = html;\n return txt.value;\n }\n\n /**\n * Initialize the search\n *\n * @override GlobalSearch\n */\n init() {\n this.configureWidgets();\n this.configureNewsTypeRefinementDropdown();\n this.setWidgets();\n this.setNewsWidgets();\n this.addWidgets();\n\n const filters = [];\n\n for (const [key, values] of Object.entries(excludeFromSearch)) {\n values.forEach(value => {\n filters.push(`NOT ${key}:${value}`);\n });\n }\n\n this.searchParams.filters = filters.join(' AND ');\n\n this.search.start();\n\n this.scrollToSearch();\n }\n\n /**\n * Scroll to the search results if the search query is present\n */\n scrollToSearch() {\n const searchParams = window.location.search;\n\n if (searchParams.includes(this.indexName)) {\n this.rootEl.scrollIntoView();\n }\n }\n\n /**\n * Configure news-specific widgets\n */\n setNewsWidgets() {\n this.widgets.push(this.newsTypeRefinementDropdown);\n }\n\n /**\n * Configure the search box\n *\n * @override GlobalSearch\n */\n configureSearchBox() {\n this.searchBox = searchBox({\n container: '.js-news-search-input',\n placeholder: 'Search by name',\n showSubmit: false,\n });\n }\n\n /**\n * Configure the news type refinement dropdown\n */\n configureNewsTypeRefinementDropdown() {\n if (!document.querySelector('.js-search-news-type-input')) {\n return;\n }\n\n const newsTypeDropdown = createDropdown(refinementList, {\n cssClasses: { root: 'ais-Dropdown-news-type' },\n buttonText: 'All Content',\n });\n\n this.newsTypeRefinementDropdown = newsTypeDropdown({\n container: '.js-search-news-type-input',\n attribute: 'news_type',\n limit: 10,\n showMore: true,\n showMoreLimit: 100,\n sortBy: ['name:asc'],\n });\n }\n\n /**\n * Configure the results list\n */\n configureResultsList() {\n this.resultsList = hits({\n container: '.js-search-hits',\n templates: {\n /* eslint-disable */\n item: (hit, { html }) => {\n const { description, link, title, thumbnail } = hit;\n return html` <div class=\"hit ${thumbnail && thumbnail.src ? 'hit--has-image' : ''}\">\n ${thumbnail && thumbnail.src\n ? html` <div class=\"hit__art\">\n <a class=\"hit__link\" href=\"${link}\">\n <figure class=\"hit__figure\">\n <img src=\"${thumbnail.src}\" alt=\"${thumbnail.alt}\" class=\"hit__img\" />\n </figure>\n </a>\n </div>`\n : ''}\n <div class=\"hit__text\">\n <h3 class=\"hit__name\">\n <a class=\"hit__link\" href=\"${link}\">${title}</a>\n </h3>\n <p class=\"hit__excerpt\">${this.decodeHtml(description)}</p>\n </div>\n <div class=\"hit__button\">\n <a class=\"hit__button-link\" href=\"${link}\">View article</a>\n </div>\n </div>`;\n },\n /* eslint-enable */\n },\n });\n }\n}\n\nexport default NewsSearch;\n"],"names":["excludeFromSearch","news_type","NewsSearch","_GlobalSearch","rootEl","_this","_classCallCheck","_callSuper","resultsLabel","singular","plural","_inherits","key","value","html","txt","document","createElement","innerHTML","this","configureWidgets","configureNewsTypeRefinementDropdown","setWidgets","setNewsWidgets","addWidgets","filters","_loop","_Object$entries$_i","_Object$entries","_i","forEach","push","concat","Object","entries","length","searchParams","join","search","start","scrollToSearch","window","location","includes","indexName","scrollIntoView","widgets","newsTypeRefinementDropdown","searchBox","container","placeholder","showSubmit","querySelector","newsTypeDropdown","createDropdown","refinementList","cssClasses","root","buttonText","attribute","limit","showMore","showMoreLimit","sortBy","_this2","resultsList","hits","templates","item","hit","_ref","description","link","title","thumbnail","_templateObject","_taggedTemplateLiteral","src","_templateObject2","alt","decodeHtml","GlobalSearch"],"sourceRoot":""}