Search History //search const searchBox = document.querySelector('.search'); const searchBtn = document.querySelector('.search-btn'); const searchBtnclose = document.querySelector('.search-close') const overlay = document.querySelector('.overlay') const htmlTag = document.documentElement; const searchInput = document.getElementById('searchinput'); const searchList = document.querySelector('.search-list'); const searchSuggest = document.querySelector('.search-suggestion'); function disableScroll() { scrollTop = window.pageYOffset || document.documentElement.scrollTop; scrollLeft = window.pageXOffset || document.documentElement.scrollLeft; window.onscroll = function () { window.scrollTo(scrollLeft, scrollTop); }; } function enableScroll() { window.onscroll = function () {}; } searchBtn.addEventListener("click", (e) => { searchBox.classList.add('search__active'); overlay.classList.remove('hidden'); htmlTag.classList.add('overflow-hidden'); disableScroll(); _pt(e.currentTarget); }) searchBtnclose.addEventListener("click", (e) => { searchBox.classList.remove('search__active'); overlay.classList.add('hidden'); htmlTag.classList.remove('overflow-hidden'); enableScroll(); _pt(e.currentTarget); }) overlay.addEventListener("click", (e) => { if (overlay.classList.contains("hidden")) { return } searchBox.classList.remove('search__active'); overlay.classList.add('hidden'); htmlTag.classList.remove('overflow-hidden'); enableScroll(); }) // Debounce utility function useDebounce(callback, delay) { let timer; return function (...args) { clearTimeout(timer); timer = setTimeout(() => callback(...args), delay); }; } // DOM elements const suggestionsContainer = document.getElementById('suggestions'); // Fetch suggestions from Google's Suggest API async function fetchSuggestions(query) { try { const response = await fetch( `https://suggestqueries.google.com/complete/search?client=firefox&q=${encodeURIComponent(query)}` ); const data = await response.json(); return data[1]; // Suggestions array } catch (error) { console.error('Error fetching suggestions:', error); return []; } } function highlightKeyword(keyword, str) { const regex = new RegExp(`(${keyword})`, "gi"); // Case-insensitive match return str.replace(regex, "$1"); } // Render suggestions function renderSuggestions(suggestions, query) { suggestionsContainer.innerHTML = ''; // Clear previous suggestions if (suggestions.length === 0) { return; } let suggestionList = "" suggestions.forEach((suggestion) => { suggestionList += ` ${highlightKeyword(query, suggestion)} ` }); suggestionsContainer.innerHTML = suggestionList } function fetchSuggestionsJSONP(query, callback) { const script = document.createElement('script'); const callbackName = `jsonpCallback_${Date.now()}`; script.src = `https://suggestqueries.google.com/complete/search?client=chrome&q=${encodeURIComponent(query)}&callback=${callbackName}`; window[callbackName] = function (data) { callback(data[1], query); // Pass suggestions to callback delete window[callbackName]; // Clean up document.body.removeChild(script); // Remove script tag }; script.onerror = function () { console.error('Error fetching JSONP suggestions'); delete window[callbackName]; document.body.removeChild(script); }; document.body.appendChild(script); } // Debounced input handler const handleInput = useDebounce(async (event) => { const query = event.target.value.trim(); event.preventDefault(); if (query.length === 0) { searchList.classList.remove('hidden'); searchSuggest.classList.add('hidden'); return; } else { searchList.classList.add('hidden'); searchSuggest.classList.remove('hidden'); } const safeQuery = encodeURIComponent(query.toLowerCase()); fetchSuggestionsJSONP(safeQuery, (suggestions, query) => { renderSuggestions(suggestions, query); }); }, 200); // debounce delay value searchInput.addEventListener('keyup', handleInput); function setSearchKeywords(keywords) { document.cookie = `lastSearchKeyword=${encodeURIComponent(JSON.stringify(keywords))}; path=/`; } function getSearchKeywords() { const cookies = document.cookie.split('; '); for (let cookie of cookies) { let [name, value] = cookie.split('='); if (name === 'lastSearchKeyword') { return JSON.parse(decodeURIComponent(value)); } } return []; } let searchHistoryCookie = getSearchKeywords() if (!Array.isArray(searchHistoryCookie)) { searchHistoryCookie = [] } let searchHistoryList = ""; if (searchHistoryCookie.length > 0) { for (let i = 0; i ${searchHistoryCookie[i]} `; } } const elLastSearch = document.getElementById("cnnSearchHistory"); elLastSearch.innerHTML = searchHistoryList; Loading... $(document).ready(function() { detikConnectAutoLogin('10027', false, onLoginClient); }); function onLoginClient (data){ $('.loader').remove() const dcUrl = 'https://connect.detik.com/dashboard/'; document.dispatchEvent(new CustomEvent('login:client', { detail: data })); if (data.is_login) { $('#connectDetikAvatar').css({'background-image': `url(${data.avatar})`, 'background-size': '100% auto'}); $('#dropdown').append(` ${data.first_name} ${data.last_name} Keluar `); iFrameResize({ log: false }, '#alloCardIframe') } else { const loginUrl = `https://connect.detik.com/oauth/authorize?clientId=10027&redirectUrl=https%3A%2F%2Fwww.cnnindonesia.com%2Fauthorize%3Fu%3Dhttps%3A%2F%2Fwww.cnnindonesia.com%2Folahraga%2F20261010124325-160-1413835%2Fsuasana-paddock-sirkuit-pertamina-mandalika-jelang-sprint-race&backURL=https%3A%2F%2Fwww.cnnindonesia.com%2Folahraga%2F20261010124325-160-1413835%2Fsuasana-paddock-sirkuit-pertamina-mandalika-jelang-sprint-race`; $('#dropdown').append(` Daftar Masuk `); } } .verticalThumbnail { width: 100%; top: 0; left: 0; bottom: 0; object-fit: cover; transition: opacity 0.3s ease-in-out; } .video-detail-panel-content { opacity: 0; transform: translateY(50px); transition: transform 500ms cubic-bezier(0.22, 1, 0.36, 1), opacity 500ms cubic-bezier(0.22, 1, 0.36, 1); will-change: transform, opacity; backface-visibility: hidden; } .video-detail-panel-content.is-shown { opacity: 1; transform: translateY(0); } 25 VIDEO Suasana Paddock Sirkuit Pertamina Mandalika Jelang Sprint Race CNN Indonesia/ Muhammad Hirzan Ibnurrusyd CNN Indonesia Sabtu, 10 Okt 2026 13:15 WIB Suasana paddock Sirkuit Pertamina Mandalika ramai penggemar menjelang sprint race pada Sabtu (10/10).Para rider seperti Pedro Acosta, Brad Binder dan Maverick Vinales tampak lalu lalang di paddock.Antusias penggemar yang hadir di paddock, langsung menyerbu para rider untuk meminta selfie dan tanda tangan.Jelang balapan, Raul Fernandez berhasil meraih posisi pole di sesi kualifikasi, diikuti Marco Bezzecchi dan Fabio Di Giannantonio.
Suasana Paddock Sirkuit Pertamina Mandalika Jelang Sprint Race
Transparansi Jurnalisme & Hak Cipta
Diverifikasi Resmi
Artikel ini disajikan kembali secara informatif oleh Uhuy News dari jaringan kantor berita CNN Indonesia. Hak kekayaan intelektual naskah dan materi foto sepenuhnya merupakan milik penerbit resmi terkait.
Warta Terkait Lainnya
Lihat Semua Berita →
Terkini • CNN Indonesia
Serangan Houthi, Saudi Konfirmasi Satu Pilot Tewas
Otoritas Arab Saudi telah mengidentifikasi satu pilot yang tewas akibat serangan rudal Houthi di Bandara King Khalid, Riyadh, pada Kamis (8/10).
Terkini • CNN Indonesia
Status Anak Krakatau Naik ke Level III Siaga, Warga Diminta Waspada
Badan Penanggulangan Bencana Daerah Provinsi Lampung mengumumkan bahwa telah terjadi kenaikan status Gunung Anak Krakatau (GAK) menjadi siaga atau level III.
Terkini • CNN Indonesia
Syahrini Cerita Kisah Asal-usul Gong dan Partai Baru di Pestapora
Syahrini menceritakan sejumlah gimik komedi yang ia tampilkan dalam rangkaian ajang comeback di panggung festival Pestapora 2026.
Terkini • CNN Indonesia
VIDEO: Karhutla Meluas, Pembakar Lahan Jadi Tersangka
Karhutla Meluas, Pembakar Lahan Jadi Tersangka