//---controls the bottom floating bar behaviour const floatingBar = document.getElementById("floating-bar"); const searchBar = document.getElementById("searchbar"); const shareBtn = document.getElementById("sharebutton"); const closeBtn = document.getElementById("closebutton"); const shareCloseBtn = document.getElementById("shareclosebutton"); const searchTxt = document.getElementById("searchtext"); const searchInput = document.getElementById("searchinput"); const windowWrapper = document.getElementById("floatingwindowwrapper"); const searchWin = document.getElementById("searchwindow"); const shareWin = document.getElementById("sharewindow"); const searchDef = document.getElementById("defresults"); const searchRes = document.getElementById("searchresults"); const spinner = document.getElementById("spinnercont"); const spinnerQr = document.getElementById("qrspinnercont"); const qrCode = document.getElementById("pageqrcode"); const linkInput = document.getElementById("pageurlinput"); const embedCode = document.getElementById("embedcodetag"); const mobileFloatingBar = document.getElementById("mobile-floating-bar"); const mobileFloatingShare = document.getElementById("mobile-floating-share"); const mobileSearchBtn = document.getElementById("mobilesearchbutton"); const mobileShareBtn = document.getElementById("mobilesharebutton"); const mobileShareCloseBtn = document.getElementById("mobileshareclose"); const basePath = document.getElementById('phpHostBasePath').dataset.basePath; let lastScrollTop = 0, isSearchActive = false, isShareActive = false; window.addEventListener("scroll", function () { const st = window.pageYOffset || document.documentElement.scrollTop; if (st > lastScrollTop) { // Scrolling down floatingBar.classList.remove("floatingbar-click-slide-down"); floatingBar.classList.add("floatingbar-slide-down"); floatingBar.classList.remove("floatingbar-slide-up"); mobileFloatingBar.classList.add("floatingbar-slide-down"); mobileFloatingBar.classList.remove("floatingbar-slide-up"); mobileFloatingShare.classList.remove("floatingshare-slide-down"); mobileFloatingShare.classList.add("floatingshare-slide-up"); } else { // Scrolling up floatingBar.classList.remove("floatingbar-click-slide-down"); floatingBar.classList.remove("floatingbar-slide-down"); floatingBar.classList.add("floatingbar-slide-up"); mobileFloatingBar.classList.remove("floatingbar-slide-down"); mobileFloatingBar.classList.add("floatingbar-slide-up"); mobileFloatingShare.classList.remove("floatingshare-slide-up"); mobileFloatingShare.classList.add("floatingshare-slide-down"); } lastScrollTop = st <= 0 ? 0 : st; }); // function to open floating search window function activate_search() { isSearchActive = true; mobileFloatingBar.classList.remove("flex", "lg:hidden"); mobileFloatingBar.classList.add("hidden"); if(window.innerWidth < 1024) { floatingBar.classList.remove("hidden", "lg:flex"); floatingBar.classList.add("flex"); } floatingBar.classList.remove("floatingbar-click-slide-down"); floatingBar.classList.add("floatingbar-click-slide-up"); searchBar.classList.remove("searchbar-click-decrease-width"); searchBar.classList.add("searchbar-click-increase-width"); closeBtn.classList.remove("hidden"); shareBtn.classList.add("hidden"); searchTxt.classList.add("hidden"); searchInput.classList.remove("hidden"); searchInput.focus(); document.body.classList.add("overflow-hidden"); windowWrapper.classList.remove("hidden"); windowWrapper.classList.add("flotingbar-window-wrapper-show"); searchWin.classList.add("floatingsearch-window-show"); } // function to close floating search window function close_search() { mobileFloatingBar.classList.remove("hidden"); mobileFloatingBar.classList.add("flex", "lg:hidden"); if(window.innerWidth < 1024) { floatingBar.classList.remove("flex"); floatingBar.classList.add("hidden", "lg:flex"); } floatingBar.classList.remove("floatingbar-click-slide-up"); floatingBar.classList.add("floatingbar-click-slide-down"); searchBar.classList.remove("searchbar-click-increase-width"); searchBar.classList.add("searchbar-click-decrease-width"); closeBtn.classList.add("hidden"); shareBtn.classList.remove("hidden"); searchTxt.classList.remove("hidden"); searchInput.classList.add("hidden"); document.body.classList.remove("overflow-hidden"); windowWrapper.classList.remove("flotingbar-window-wrapper-show"); windowWrapper.classList.add("hidden"); searchWin.classList.remove("floatingsearch-window-show"); isSearchActive = false; } // when the search icon is clicked searchBar.addEventListener("click", function () { if(!isShareActive) { activate_search(); } else { close_share(); activate_search(); } }); // when the search icon is clicked on mobile view mobileSearchBtn.addEventListener("click", function () { if(!isShareActive) { activate_search(); } else { close_share(); activate_search(); } }); // when ALT + K shortcut key is pressed document.addEventListener("keydown", function(event) { if (event.altKey && event.key === "k") { if(!isShareActive) { activate_search(); } else { close_share(); activate_search(); } } }); // when close button is clicked closeBtn.addEventListener("click", function () { close_search(); }); // when ESC key is pressed document.addEventListener("keydown", function(event) { if (event.key === "Escape") { if(isSearchActive) { close_search(); } else if(isShareActive) { close_share(); } } }); //---controls search window results function perform_search() { searchDef.classList.remove("flex"); searchDef.classList.add("hidden"); searchRes.classList.remove("hidden"); searchRes.classList.add("flex"); spinner.classList.remove("hidden"); spinner.classList.add("flex"); let searchString = searchInput.value; $.ajax({ url: 'core/handle_search.php', type: 'POST', dataType: 'json', data: { keyword: searchString }, success: function(response) { if(response.results && response.results === "none") { inject_no_results(response, searchString); } else { const resultTags = [...new Set(response.map(item => item.tag))]; const result = {}; resultTags.forEach(tag => { result[tag] = response.filter(item => item.tag === tag); }); inject_search_results(result, searchString); } }, error: function(error) { console.error('error:', error); }, complete: function() { spinner.classList.remove("flex"); spinner.classList.add("hidden"); } }); } // function to display default search results function fallback_search() { searchDef.classList.remove("hidden"); searchDef.classList.add("flex"); searchRes.classList.remove("flex"); searchRes.classList.add("hidden"); } // function to inject proper search results with category based styling function inject_search_results (results, keyword) { searchRes.innerHTML = `
SEARCH RESULTS for '${keyword.toUpperCase()}'
`; // search result category: projects if(typeof(results.project) !== 'undefined') { let projectDivTitle = document.createElement("p"); projectDivTitle.className = "text-xs text-accent_three mt-3 mb-2 mx-1"; projectDivTitle.innerHTML = "PROJECTS"; searchRes.appendChild(projectDivTitle); results.project.forEach(function(result) { let projectDiv = document.createElement("div"); projectDiv.className = "group resultitem w-full flex justify-between items-center my-1 p-1 cursor-pointer hover:bg-bg_third transition transform duration-200 rounded-lg"; projectDiv.setAttribute("onclick", "window.open('" + result.link + "', '_blank')"); projectDiv.innerHTML = `${result.name.charAt(0).toUpperCase()}
${result.description}
${'#' + result.tag} `; searchRes.appendChild(projectDiv); }); } // search result category: socials if(typeof(results.social) !== 'undefined') { let socialDivTitle = document.createElement("p"); socialDivTitle.className = "text-xs text-accent_three mt-3 mb-2 mx-1"; socialDivTitle.innerHTML = "SOCIAL LINKS"; searchRes.appendChild(socialDivTitle); results.social.forEach(function(result) { let socialDiv = document.createElement("div"); socialDiv.className = "group resultitem w-full flex justify-between items-center my-1 p-1 cursor-pointer hover:bg-bg_third transition transform duration-200 rounded-lg"; socialDiv.setAttribute("onclick", "window.open('" + result.link + "', '_blank')"); socialDiv.innerHTML = `${result.platform}
${'#' + result.tag} `; searchRes.appendChild(socialDiv); }); } // search result category: site pages if(typeof(results.page) !== 'undefined') { let pageDivTitle = document.createElement("p"); pageDivTitle.className = "text-xs text-accent_three mt-3 mb-2 mx-1"; pageDivTitle.innerHTML = "SITE PAGES"; searchRes.appendChild(pageDivTitle); results.page.forEach(function(result) { let pageDiv = document.createElement("div"); pageDiv.className = "group resultitem w-full flex justify-between items-center my-1 p-1 cursor-pointer hover:bg-bg_third transition transform duration-200 rounded-lg"; pageDiv.setAttribute("onclick", "location.href='" + basePath + result.link + "'"); pageDiv.innerHTML = `${result.name}
${'#' + result.tag} `; searchRes.appendChild(pageDiv); }); } // search result category: quick actions if(typeof(results.action) !== 'undefined') { let actionDivTitle = document.createElement("p"); actionDivTitle.className = "text-xs text-accent_three mt-3 mb-2 mx-1"; actionDivTitle.innerHTML = "QUICK ACTIONS"; searchRes.appendChild(actionDivTitle); results.action.forEach(function(result) { let actionDiv = document.createElement("div"); actionDiv.className = "group resultitem w-full flex justify-between items-center my-1 p-1 cursor-pointer hover:bg-bg_third transition transform duration-200 rounded-lg"; actionDiv.setAttribute("onclick", "window.open('" + result.link + "', '_blank')"); actionDiv.innerHTML = `${result.name}
${'#' + result.tag} `; searchRes.appendChild(actionDiv); }); } // search result category: my profiles if(typeof(results.profile) !== 'undefined') { let profileDivTitle = document.createElement("p"); profileDivTitle.className = "text-xs text-accent_three mt-3 mb-2 mx-1"; profileDivTitle.innerHTML = "PROFILES"; searchRes.appendChild(profileDivTitle); results.profile.forEach(function(result) { let profileDiv = document.createElement("div"); profileDiv.className = "group resultitem w-full flex justify-between items-center my-1 p-1 cursor-pointer hover:bg-bg_third transition transform duration-200 rounded-lg"; profileDiv.setAttribute("onclick", "window.open('" + result.link + "', '_blank')"); profileDiv.innerHTML = `${result.description}
${'#' + result.tag} `; searchRes.appendChild(profileDiv); }); } //add an extra bottom spacer item for better appearance const bottomSpacer = document.createElement("div"); bottomSpacer.className = "bottomspacer w-full h-[10px]"; searchRes.appendChild(bottomSpacer); } // function to display NO RESULTS FOUND as result function inject_no_results(results, keyword) { searchRes.innerHTML = `SEARCH RESULTS for '${keyword.toUpperCase()}'
${results.message}