{"version":3,"file":"search.bundle.js","mappings":"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","sources":["webpack:///./components/search.js"],"sourcesContent":["import { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\n\nfunction searchInit() {\n const searchButton = document.getElementById(\"jSearch\");\n const searchInput = document.getElementById(\"search\");\n const blogWrapper = document.getElementById(\"jBlogWrapper\");\n const searchLabels = document.getElementsByClassName(\"search-label\");\n const loading = document.getElementsByClassName(\"loading\")[0];\n\n const loadMoreWrapper = document.getElementById(\"LoadMoreWrapper\");\n const loadMoreButton = document.getElementById(\"jLoadMore\");\n const loadMoreText = document.getElementById(\"jLoadMoreText\");\n const loadMoreSpinner = document.getElementById(\"jLoadMoreSpinner\");\n\n let isLoading = false;\n\n addAnimation(blogWrapper);\n\n searchButton.addEventListener(\"touchstart\", handleSearch);\n searchButton.addEventListener(\"click\", handleSearch);\n\n Array.from(searchLabels).forEach(searchLabel => {\n searchLabel.addEventListener(\"touchstart\", handleSearchLabel);\n searchLabel.addEventListener(\"click\", handleSearchLabel);\n });\n\n initLoadMore(loadMoreButton);\n\n searchInput.addEventListener(\"keypress\",\n function (event) {\n if (event.key === \"Enter\") {\n event.preventDefault();\n searchButton.click();\n }\n });\n\n function handleSearch(evt) {\n if (isLoading === true) return;\n\n isLoading = true;\n const author = document.querySelector(\"input[name='author']:checked\").dataset.value;\n const category = document.querySelector(\"input[name='category']:checked\").dataset.value;\n const searchTerm = document.getElementById(\"search\").value;\n const pageSize = parseInt(searchButton.dataset.pageSize);\n const parent = searchButton.dataset.parent;\n\n loading.classList.remove(\"d-none\");\n blogWrapper.innerHTML = \"\";\n\n loadMoreButton.dataset.author = author;\n loadMoreButton.dataset.tag = category;\n loadMoreButton.dataset.searchTerm = searchTerm;\n\n const postData = {\n \"Author\": author,\n \"SearchTerm\": searchTerm,\n \"PageIndex\": 0,\n \"Parent\": parent,\n \"Tag\": category,\n \"Take\": pageSize\n };\n\n const url = new URL(window.location);\n searchTerm !== \"\" ? url.searchParams.set(\"searchTerm\", searchTerm) : url.searchParams.delete(\"searchTerm\");\n category !== \"\" ? url.searchParams.set(\"category\", category) : url.searchParams.delete(\"category\");\n author !== \"\" ? url.searchParams.set(\"author\", author) : url.searchParams.delete(\"author\");\n window.history.pushState(null, \"\", url.toString());\n\n console.log(postData);\n searchPost(postData).then((data) => {\n blogWrapper.innerHTML = data;\n addAnimation(blogWrapper);\n loading.classList.add(\"d-none\");\n isLoading = false;\n });\n }\n\n function handleLoadMore(elem) {\n if (isLoading === true) return;\n isLoading = true;\n const author = elem.dataset.author;\n const category = elem.dataset.tag;\n const searchTerm = elem.dataset.searchTerm;\n const pageIndex = elem.dataset.pageIndex;\n const parent = searchButton.dataset.parent;\n const pageSize = parseInt(searchButton.dataset.pageSize);\n\n loadMoreText.classList.add(\"invisible\");\n loadMoreSpinner.classList.remove(\"d-none\");\n\n const postData = {\n \"Author\": author,\n \"SearchTerm\": searchTerm,\n \"PageIndex\": pageIndex,\n \"Parent\": parent,\n \"Tag\": category,\n \"Take\": pageSize\n };\n\n console.log(postData);\n searchPost(postData).then((data) => {\n blogWrapper.innerHTML += data;\n addAnimation(blogWrapper.getElementsByClassName(\"slide-animate\")[0]);\n loadMoreText.classList.remove(\"invisible\");\n loadMoreSpinner.classList.add(\"d-none\");\n elem.dataset.pageIndex = parseInt(elem.dataset.pageIndex) + 1;\n isLoading = false;\n });\n }\n\n function handleSearchLabel(evt) {\n const details = this.closest(\"details\");\n details.removeAttribute(\"open\");\n const isDefault = this.dataset.value === \"default\";\n if (isDefault) {\n details.classList.add(\"default\");\n } else {\n details.classList.remove(\"default\");\n }\n setTimeout(() => {\n searchButton.click();\n },\n 100);\n }\n\n function addAnimation(container) {\n const searchTl = gsap.timeline();\n\n searchTl.fromTo(container,\n {\n marginTop: \"30vh\",\n opacity: 0\n },\n {\n duration: 0.3,\n marginTop: 0,\n opacity: 1\n });\n\n searchTl.play();\n }\n\n function initLoadMore(elem) {\n window.addEventListener(\"scroll\",\n function (event) {\n if (isInViewPort(elem)) {\n const blogListItems = document.getElementsByClassName(\"blog-list-item\");\n const totalResultsObject = document.getElementsByClassName(\"total-results\")[0];\n\n if (totalResultsObject !== undefined && totalResultsObject !== null) {\n if (blogListItems.length < totalResultsObject.dataset.total) {\n handleLoadMore(elem);\n }\n }\n }\n },\n false);\n }\n\n function isInViewPort(element) {\n // Get the bounding client rectangle position in the viewport\n const bounding = element.getBoundingClientRect();\n\n // Checking part. Here the code checks if it's *fully* visible\n // Edit this part if you just want a partial visibility\n if (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth) &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)\n ) {\n console.log(\"In the viewport! :)\");\n return true;\n } else {\n console.log(\"Not in the viewport. :(\");\n return false;\n }\n }\n\n window.addEventListener(\"popstate\",\n function (event) {\n location.reload();\n });\n}\n\nfunction searchPost(postData) {\n return fetch(\"/umbraco/surface/BlogSearchSurface/BlogSearch\",\n {\n method: \"post\",\n body: JSON.stringify(postData),\n headers: {\n 'Accept': \"application/json\",\n 'Content-Type': \"application/json\"\n }\n }).then((response) => {\n return response.text().then((data) => {\n return data;\n }).catch((error) => {\n console.log(error);\n });\n });\n}\n\nsearchInit();"],"names":["searchPost","postData","fetch","method","body","JSON","stringify","headers","then","response","text","data","catch","error","console","log","searchButton","document","getElementById","searchInput","blogWrapper","searchLabels","getElementsByClassName","loading","loadMoreButton","loadMoreText","loadMoreSpinner","isLoading","elem","handleSearch","evt","author","querySelector","dataset","value","category","searchTerm","pageSize","parseInt","parent","classList","remove","innerHTML","tag","url","URL","window","location","searchParams","set","delete","history","pushState","toString","addAnimation","add","handleSearchLabel","details","this","closest","removeAttribute","setTimeout","click","container","searchTl","fromTo","marginTop","opacity","duration","play","addEventListener","Array","from","forEach","searchLabel","event","element","bounding","getBoundingClientRect","top","left","right","innerWidth","documentElement","clientWidth","bottom","innerHeight","clientHeight","isInViewPort","blogListItems","totalResultsObject","length","total","pageIndex","handleLoadMore","key","preventDefault","reload","searchInit"],"sourceRoot":""}