{"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":""}