document.querySelector('html').classList.add('search'); document.addEventListener('DOMContentLoaded', function() { let searchTerm = new URLSearchParams(window.location.search).get('q'); let fetchingElem = document.getElementById('bing-results-container'); if (!searchTerm) { if (fetchingElem) fetchingElem.style.display = 'none'; } }); window.renderGoogleSearchResults = () => { var cx = '013288817511911618469:elfqqbqldzg'; var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true; gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//cse.google.com/cse.js?cx=' + cx; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); } window.renderPageFindSearchResults = () => { let urlParams = new URLSearchParams(window.location.search); let searchTerm = urlParams.get("q") || ""; let sidebarSearch = document.querySelector('.td-sidebar__search'); if (sidebarSearch) { sidebarSearch.remove(); } document.getElementById('search').style.display = 'block'; pagefind = new PagefindUI({ element: "#search", showImages: false }); if (searchTerm) { pagefind.triggerSearch(searchTerm); } document.querySelector("#search input").addEventListener("input", function() { var inputValue = this.value; var queryStringVar = "q"; updateQueryString(queryStringVar, inputValue); }); } function updateQueryString(key, value) { var baseUrl = window.location.href.split("?")[0]; var queryString = window.location.search.slice(1); var urlParams = new URLSearchParams(queryString); if (urlParams.has(key)) { urlParams.set(key, value); } else { urlParams.append(key, value); } var newUrl = baseUrl + "?" + urlParams.toString(); // Update the browser history (optional) history.replaceState(null, '', newUrl); } // China Verification. var path = "path=/;" d = new Date() d.setTime(d.getTime() + (7 * 24 * 60 * 60 * 1000)) expires = "expires=" + d.toUTCString() function getCookie(name) { var value = "; " + document.cookie; var parts = value.split("; " + name + "="); if (parts.length == 2) return parts.pop().split(";").shift(); else return ""; } async function checkBlockedSite(url) { const controller = new AbortController(); const timeout = setTimeout(() => { controller.abort(); }, 5000); // Timeout set to 5000ms (5 seconds) try { const response = await fetch(url, { method: 'HEAD', mode: 'no-cors', signal: controller.signal }); // If we reach this point, the site is accessible (since mode: 'no-cors' doesn't allow us to check response.ok) clearTimeout(timeout); return false; } catch (error) { // If an error occurs, it's likely the site is blocked return true; } } async function loadSearch() { if (getCookie("can_google") === "") { const isGoogleBlocked = await checkBlockedSite("https://www.google.com/favicon.ico"); if ( isGoogleBlocked ) { // Google is blocked. document.cookie = "can_google=false;" + path + expires window.renderPageFindSearchResults() } else { // Google is not blocked. document.cookie = "can_google=true;" + path + expires window.renderGoogleSearchResults() } } else if (getCookie("can_google") == "false") { window.renderPageFindSearchResults() } else { window.renderGoogleSearchResults() } } window.onload = loadSearch;