{"version":3,"sources":["webpack:///D:/a/1/s/frontend/src/views/blocks/siteHeader/js/siteHeader.js","webpack:///./api.js"],"names":["Api","__webpack_require__","BLK","SiteHeader","$el","_classCallCheck3","default","this","textInput","document","getElementById","_this","setSiteHeader","$","data","window","onscroll","siteHeaderScroll","header","sticky","offsetTop","pageYOffset","classList","add","addClass","remove","removeClass","_this2","$blk","searchIcon","pcCloseIcon","find","menu","on","e","currentTarget","siblings","attr","setTimeout","toggleFixedBody","collapse","toggleClass","i","_","debounce","getSearchResults","bind","initDropdown","hover","searchField","target","searchWrapper","closest","resultsContainer","searchTerm","val","loadingImage","length","getsearchResultsCall","then","isSuccessful","res","hits","endpoint","empty","result","append","encodeURIComponent","query","catch","error","getApi","$body","$html","iOSBrowser","navigator","userAgent","match","width","hasClass","url","fetch","headers","Content-Type","response","json","_promise2","resolve","reject","callApi","arguments","undefined","method","body","_stringify2","Headers","credentials","status","successful"],"mappings":"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","file":"block-91.b9f88d4cffa17521b332.js","sourcesContent":["// CONSTANTS are all caps.\nconst NS = 'SiteHeader';\nconst CLS = 'siteHeader';\nconst BLK = '.' + CLS + '-';\n\n// Import stuff here if you need to or even better to import them dynamically\n// for ex. of dynamic import check out ./loadBlk.js using Webpack dynamic imports as chunks.\n// import $ from 'jquery'\n// import rSiteHeader from './SiteHeader.jsx';\n// import React from 'react';\n// import ReactDOM from 'react-dom';\nimport * as Api from '../../../../global/js/api';\nimport _ from 'lodash';\nimport {timeout} from 'q';\n\nexport class SiteHeader {\n\tconstructor($el) {\n\t\t// $el is the blk node return by the loadSiteHeader function\n\t\tthis.$el = $el;\n\t\tthis.textInput = document.getElementById('siteSearch');\n\t}\n\n\tinit() {\n\t\tthis.setSiteHeader();\n\t\tconst $blk = $(this.$el);\n\t\tif($blk.data('sticky')) {\n\t\t\twindow.onscroll = () => {\n\t\t\t\tthis.siteHeaderScroll();\n\t\t\t};\n\t\t}\n\t}\n\n\tsiteHeaderScroll() {\n\t\t// console.log('zenmeshuo');\n\t\tlet header = this.$el;\n\t\tlet sticky = header.offsetTop;\n\n\t\tif (window.pageYOffset > sticky) {\n\t\t\theader.classList.add('sticky');\n\t\t\t$('main').addClass('scrollPadding');\n\t\t} else {\n\t\t\theader.classList.remove('sticky');\n\t\t\t$('main').removeClass('scrollPadding');\n\t\t}\n\t}\n\n\tsetSiteHeader() {\n\t\tconst $blk = $(this.$el);\n\t\tconst This = this;\n\t\tconst delay = 500;\n\t\tlet searchIcon = $('.navbarSearch');\n\t\tlet pcCloseIcon = $blk.find(BLK + 'pcSearchPanel .icon-close');\n\t\tlet menu = $('.siteHeader-menu');\n\n\t\t$(`${BLK}topbar-item`).on('click', (e) => {\n\t\t\t$(e.currentTarget).siblings(`${BLK}topbar-item`).removeClass('active');\n\t\t\t$(e.currentTarget).addClass('active');\n\t\t});\n\n\t\tmenu.on('click', () => {\n\t\t\t$('.navbarSearchPanel').removeClass('show');\n\t\t\tsearchIcon.attr('aria-expanded', 'false');\n\t\t\tsetTimeout(()=> {\n\t\t\t\tthis.toggleFixedBody();\n\t\t\t}, delay);\n\t\t});\n\n\t\tsearchIcon.on('click', (e) => {\n\t\t\t$('.navbarCollapse').collapse('hide');\n\t\t\tmenu.attr('aria-expanded', 'false');\n\t\t\t$('.navbarSearchPanel').toggleClass('show');\n\t\t\tsearchIcon.attr('aria-expanded', function(i, attr) {\n\t\t\t\treturn attr == 'true' ? 'false' : 'true';\n\t\t\t});\n\n\t\t\t$(`${BLK}pcSearchPanel`).toggleClass('show');\n\t\t\tsetTimeout(()=> {\n\t\t\t\tthis.toggleFixedBody();\n\t\t\t}, delay);\n\t\t\t// if(!$blk.data('sticky')) {\n\t\t\t// \tif ($('.navbarSearchPanel').hasClass('show')) {\n\t\t\t// \t\tThis.fixCollapsedElementsAndHeader();\n\t\t\t// \t} else {\n\t\t\t// \t\tThis.unfixCollapsedElementsAndHeader();\n\t\t\t// \t}\n\t\t\t// }\n\t\t});\n\n\t\tpcCloseIcon.on('click', (e) => {\n\t\t\t$(`${BLK}pcSearchPanel`).toggleClass('show');\n\t\t\tsetTimeout(()=> {\n\t\t\t\tthis.toggleFixedBody();\n\t\t\t}, delay);\n\t\t});\n\n\t\t// listen to input changes and debounce them to avoid calling\n\t\t// the api excessively\n\t\t$blk.find('.site-search-input').on('input', _.debounce(This.getSearchResults.bind(This), 300));\n\n\t\t// listen to collapse events\n\t\t// if($blk.data('sticky')) {\n\t\t// \tThis.fixCollapsedElementsAndHeader();\n\t\t// } else {\n\t\t// \t$blk.find(`.${CLS}-mobile`).each(function() {\n\t\t// \t\t$(this).find('.navbar-collapse').on('shown.bs.collapse', () => {\n\t\t// \t\t\tThis.fixCollapsedElementsAndHeader();\n\t\t// \t\t});\n\n\t\t// \t\t$(this).find('.navbar-collapse').on('hidden.bs.collapse', () => {\n\t\t// \t\t\tif (!$('.navbarSearchPanel').hasClass('show')) {\n\t\t// \t\t\t\tThis.unfixCollapsedElementsAndHeader();\n\t\t// \t\t\t}\n\t\t// \t\t});\n\t\t// \t});\n\t\t// }\n\n\t\tthis.initDropdown();\n\n\t\tthis.toggleFixedBody();\n\n\t\t$(window).on('resize', (e)=> {\n\t\t\tsetTimeout(()=> {\n\t\t\t\tthis.toggleFixedBody();\n\t\t\t}, delay);\n\t\t});\n\t}\n\n\t// fixCollapsedElementsAndHeader() {\n\t// \t// const $blk = $(this.$el);\n\t// \t// let h = $blk.outerHeight(true);\n\n\t// \t// $(`.${CLS}-mobile .navbar-collapse`).attr('style', 'top: ' + h + 'px !important;');\n\n\t// \t// $blk.addClass('fixedState');\n\n\t// \t// $('body').attr('style', 'padding-top: ' + h + 'px;');\n\t// }\n\n\t// unfixCollapsedElementsAndHeader() {\n\t// \t// const $blk = $(this.$el);\n\t// \t// $blk.removeClass('fixedState');\n\t// \t// $('body').attr('style', '');\n\t// }\n\n\tinitDropdown() {\n\t\tconst $blk = $(this.$el);\n\t\t$blk.find('.menuItem-wrapper').hover( function() {\n\t\t\t$(this).find('.dropdown-menu-custom').toggleClass('show');\n\t\t});\n\t}\n\n\tgetSearchResults(e) {\n\t\tconst This = this;\n\t\tlet searchField = $(e.target);\n\t\tlet searchWrapper = searchField.closest('.site-search-wrapper');\n\t\tlet resultsContainer = searchWrapper.find('ul');\n\t\tlet searchTerm = searchField.val();\n\t\tlet loadingImage = searchWrapper.find('.loading-image');\n\n\t\tif (searchTerm.length < 3) {\n\t\t\tresultsContainer.addClass('d-none');\n\t\t\treturn;\n\t\t}\n\n\t\tconst $blk = $(this.$el);\n\t\tloadingImage.removeClass('d-none');\n\n\t\tThis.getsearchResultsCall(searchTerm).then((data) => {\n\t\t\tif (Api.isSuccessful(data)) {\n\t\t\t\t// successful call and status\n\t\t\t\tlet res = data.hits || [];\n\t\t\t\tif (res.length > 0) {\n\t\t\t\t\t// found results, iterate and construct the list\n\t\t\t\t\tlet endpoint = $blk.data('searchPage');\n\t\t\t\t\tresultsContainer.removeClass('d-none');\n\t\t\t\t\tresultsContainer.empty();\n\t\t\t\t\tfor (let i = 0; i < res.length; i++) {\n\t\t\t\t\t\tlet result = res[i];\n\t\t\t\t\t\tresultsContainer.append(`\n\t\t\t\t\t\t\t
  • ${result.query}
  • \n\t\t\t\t\t\t`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// show a not-found message\n\t\t\t\t\tresultsContainer.addClass('d-none');\n\t\t\t\t}\n\t\t\t}\n\t\t\tloadingImage.addClass('d-none');\n\t\t}).catch((error) => {\n\t\t\t// call failed\n\t\t\tresultsContainer.append(`\n\t\t\t\t
  • There was an error.
  • \n\t\t\t`);\n\t\t\tloadingImage.addClass('d-none');\n\t\t});\n\t}\n\n\tgetsearchResultsCall(searchTerm) {\n\t\tif (!searchTerm || searchTerm == '') return;\n\n\t\tconst $blk = $(this.$el);\n\t\tlet endpoint = $blk.data('searchEndpoint');\n\t\treturn Api.getApi(endpoint + '?prefix=' + encodeURIComponent(searchTerm) + '&size=5');\n\t}\n\n\ttoggleFixedBody() {\n\t\tconst $body = $('body');\n\t\tconst $html = $('html');\n\t\tconst iOSBrowser = navigator.userAgent.match(/iPhone|iPad/i);\n\t\tif ($(window).width() <= 991) {\n\t\t\tif ($('.navbar-collapse').hasClass('show')) {\n\t\t\t\tif (iOSBrowser) $html.addClass('fixed');\n\t\t\t\t$body.addClass('fixed');\n\t\t\t} else {\n\t\t\t\tif (iOSBrowser) $html.removeClass('fixed');\n\t\t\t\t$body.removeClass('fixed');\n\t\t\t}\n\t\t} else {\n\t\t\tif (iOSBrowser) $html.removeClass('fixed');\n\t\t\t$body.removeClass('fixed');\n\t\t}\n\t}\n\t// Add more functions like on above here\n}\n","// fetch with GET does not allow body data\nexport function getApi(url) {\n\treturn fetch(url, {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t})\n\t\t.then((response) => response.json())\n\t\t.then((response) => Promise.resolve(response))\n\t\t.catch((error) => {\n\t\t\tPromise.reject(error);\n\t\t});\n}\n\n// fetch with POST and others (DELETE, etc.)\nexport function callApi(url, data = {}, method = 'POST', headers = {}) {\n\theaders['Content-Type'] = 'application/json';\n\n\treturn fetch(url, {\n\t\tmethod: method,\n\t\tbody: JSON.stringify(data),\n\t\theaders: new Headers(headers),\n\t\tcredentials: 'same-origin',\n\t})\n\t.then((response) => response && response.json())\n\t.then((response) => Promise.resolve(response))\n\t.catch((error) => Promise.reject(error));\n}\n\n\nexport function isSuccessful(data) {\n\treturn (data.status == 200 || data.status == 'ok' || data.status == 'SUCCESS' || data.successful == true);\n}\n"],"sourceRoot":""}