import Foundation let hobukeskusAppInjectedScript = #""" (function() { if (window.__hobukeskusIOSAppInstalled) return; window.__hobukeskusIOSAppInstalled = true; var searchDebounceTimer = null; var latestSearchQuery = ''; var latestSearchRequestId = 0; function injectAppStyles() { if (document.getElementById('hobukeskus-ios-app-style')) return; var style = document.createElement('style'); style.id = 'hobukeskus-ios-app-style'; style.innerHTML = ` body.hobukeskus-ios-app #masthead, body.hobukeskus-ios-app .header-wrapper, body.hobukeskus-ios-app .header-main, body.hobukeskus-ios-app .header-bottom, body.hobukeskus-ios-app .mobile-header, body.hobukeskus-ios-app .stuck .header-main, body.hobukeskus-ios-app .header-bg-container { display: none !important; height: 0 !important; min-height: 0 !important; max-height: 0 !important; overflow: hidden !important; } body.hobukeskus-ios-app .header-wrapper.stuck, body.hobukeskus-ios-app .sticky-wrapper { display: none !important; } body.hobukeskus-ios-app { padding-top: 0 !important; } /* App mode: never show WooCommerce/Flatsome sidebar filters on category/search pages */ body.hobukeskus-ios-app #shop-sidebar, body.hobukeskus-ios-app .shop-sidebar, body.hobukeskus-ios-app .woocommerce-sidebar, body.hobukeskus-ios-app .category-sidebar, body.hobukeskus-ios-app #secondary, body.hobukeskus-ios-app .widget-area, body.hobukeskus-ios-app .category-page-row > .large-3, body.hobukeskus-ios-app .category-page-row > .medium-3, body.hobukeskus-ios-app .category-page-row > .small-12.large-3 { display: none !important; } body.hobukeskus-ios-app .category-page-row > .large-9, body.hobukeskus-ios-app .category-page-row > .medium-9, body.hobukeskus-ios-app .category-page-row > .small-12.large-9, body.hobukeskus-ios-app .shop-container .large-9, body.hobukeskus-ios-app .shop-container .medium-9 { max-width: 100% !important; flex-basis: 100% !important; width: 100% !important; } #hobukeskus-app-search-overlay { position: fixed !important; z-index: 2147483647 !important; inset: 0 !important; background: rgba(255,255,255,0.96) !important; backdrop-filter: blur(12px) !important; -webkit-backdrop-filter: blur(12px) !important; display: none; padding: calc(env(safe-area-inset-top) + 28px) 18px 18px 18px !important; box-sizing: border-box !important; overflow-y: auto !important; } #hobukeskus-app-search-overlay.is-open { display: block !important; } #hobukeskus-app-search-card { background: #fff !important; border-radius: 22px !important; padding: 18px !important; box-shadow: 0 12px 34px rgba(0,0,0,0.18) !important; max-width: 680px !important; margin: 0 auto !important; box-sizing: border-box !important; } #hobukeskus-app-search-top { display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; margin-bottom: 14px !important; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } #hobukeskus-app-search-title { font-size: 18px !important; font-weight: 700 !important; color: #222 !important; } #hobukeskus-app-search-close { appearance: none !important; -webkit-appearance: none !important; border: 0 !important; background: #f1f1f1 !important; color: #333 !important; border-radius: 999px !important; padding: 9px 13px !important; font-size: 14px !important; font-weight: 700 !important; text-transform: uppercase !important; } #hobukeskus-app-search-form { display: flex !important; gap: 10px !important; align-items: center !important; margin: 0 !important; } #hobukeskus-app-search-input { flex: 1 !important; width: 100% !important; height: 52px !important; border: 1px solid #ddd !important; background: #f6f6f6 !important; border-radius: 14px !important; padding: 0 14px !important; font-size: 17px !important; color: #222 !important; box-sizing: border-box !important; outline: none !important; box-shadow: 0 3px 12px rgba(0,0,0,0.12) inset !important; } #hobukeskus-app-search-submit { width: 58px !important; min-width: 58px !important; height: 52px !important; border-radius: 14px !important; border: 0 !important; background: #ad74a2 !important; color: #fff !important; font-size: 24px !important; font-weight: 800 !important; display: flex !important; align-items: center !important; justify-content: center !important; } #hobukeskus-app-search-results { margin-top: 14px !important; max-height: calc(100vh - 230px) !important; overflow-y: auto !important; -webkit-overflow-scrolling: touch !important; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } .hobukeskus-app-search-status { padding: 14px 4px !important; color: #777 !important; font-size: 14px !important; } /* Guaven cloned results inside app overlay */ #hobukeskus-app-search-results .guaven_woos_suggestion { display: block !important; position: static !important; width: 100% !important; max-width: none !important; min-width: 0 !important; margin: 0 !important; padding: 0 !important; border: 0 !important; box-shadow: none !important; background: transparent !important; opacity: 1 !important; visibility: visible !important; transform: none !important; } #hobukeskus-app-search-results ul { list-style: none !important; margin: 0 !important; padding: 0 !important; } #hobukeskus-app-search-results .guaven_woos_suggestion_catul { margin-bottom: 10px !important; padding-bottom: 8px !important; border-bottom: 1px solid rgba(0,0,0,0.08) !important; } #hobukeskus-app-search-results .guaven_woos_suggestion_catul:before { content: "Kategooriad"; display: block !important; margin: 16px 0 8px 0 !important; font-size: 12px !important; font-weight: 800 !important; color: #999 !important; text-transform: uppercase !important; letter-spacing: 0.04em !important; } #hobukeskus-app-search-results .guaven_woos_final_results:before { content: "Tooted"; display: block !important; margin: 16px 0 8px 0 !important; font-size: 12px !important; font-weight: 800 !important; color: #999 !important; text-transform: uppercase !important; letter-spacing: 0.04em !important; } #hobukeskus-app-search-results .guaven_woos_suggestion_list { display: block !important; width: 100% !important; float: none !important; clear: both !important; padding: 10px 2px !important; margin: 0 !important; border-bottom: 1px solid rgba(0,0,0,0.08) !important; background: transparent !important; min-height: 0 !important; overflow: hidden !important; } #hobukeskus-app-search-results .guaven_woos_suggestion_list a { display: block !important; text-decoration: none !important; color: #2d405f !important; } #hobukeskus-app-search-results .guaven_woos_titlediv_cat { font-size: 16px !important; line-height: 1.3 !important; font-weight: 600 !important; color: #2d405f !important; padding: 0 !important; margin: 0 !important; } #hobukeskus-app-search-results .woos_cat_par_span { color: #888 !important; } #hobukeskus-app-search-results .guaven_woos_final_results .guaven_woos_suggestion_list { display: grid !important; grid-template-columns: 58px 1fr !important; gap: 12px !important; align-items: center !important; } #hobukeskus-app-search-results .guaven_woos_div { display: contents !important; } #hobukeskus-app-search-results .guaven_woos_img { width: 58px !important; height: 58px !important; object-fit: contain !important; border-radius: 10px !important; background: #f7f7f7 !important; grid-column: 1 !important; } #hobukeskus-app-search-results .guaven_woos_titlediv { grid-column: 2 !important; font-size: 15px !important; line-height: 1.25 !important; font-weight: 600 !important; color: #2d405f !important; margin: 0 !important; padding: 0 !important; } #hobukeskus-app-search-results .guaven_woos_hidden, #hobukeskus-app-search-results .guaven_woos_hidden_tags, #hobukeskus-app-search-results .woos_sku { display: none !important; } #hobukeskus-app-search-results .guaven_woos_showallli { display: block !important; padding: 14px 2px !important; margin-top: 8px !important; text-align: center !important; background: #f6f6f6 !important; border-radius: 14px !important; font-weight: 700 !important; color: #2d405f !important; } #hobukeskus-app-search-results .guaven_woos_showallli a { color: #2d405f !important; text-decoration: none !important; } /* App menu overlay */ #hobukeskus-app-menu-overlay { position: fixed !important; z-index: 2147483647 !important; inset: 0 !important; background: rgba(255,255,255,0.97) !important; backdrop-filter: blur(12px) !important; -webkit-backdrop-filter: blur(12px) !important; display: none; padding: calc(env(safe-area-inset-top) + 24px) 18px 18px 18px !important; box-sizing: border-box !important; overflow-y: auto !important; -webkit-overflow-scrolling: touch !important; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } #hobukeskus-app-menu-overlay.is-open { display: block !important; } #hobukeskus-app-menu-card { background: #fff !important; border-radius: 24px !important; padding: 18px !important; box-shadow: 0 12px 34px rgba(0,0,0,0.16) !important; max-width: 720px !important; margin: 0 auto 90px auto !important; box-sizing: border-box !important; } #hobukeskus-app-menu-top { display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; margin-bottom: 14px !important; } #hobukeskus-app-menu-title { font-size: 21px !important; font-weight: 700 !important; color: #555 !important; text-transform: uppercase !important; letter-spacing: 0.03em !important; } #hobukeskus-app-menu-close { appearance: none !important; -webkit-appearance: none !important; border: 0 !important; background: #f1f1f1 !important; color: #333 !important; border-radius: 999px !important; padding: 10px 14px !important; font-size: 14px !important; font-weight: 800 !important; text-transform: uppercase !important; } #hobukeskus-app-menu-status { padding: 14px 2px !important; color: #777 !important; font-size: 14px !important; } .hbk-app-menu-section { border-bottom: 1px solid rgba(0,0,0,0.10) !important; } .hbk-app-menu-section-toggle, .hbk-app-menu-link { width: 100% !important; min-height: 52px !important; display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; border: 0 !important; background: transparent !important; color: #555 !important; font-size: 17px !important; font-weight: 700 !important; text-align: left !important; text-decoration: none !important; padding: 14px 2px !important; box-sizing: border-box !important; text-transform: uppercase !important; letter-spacing: 0.02em !important; } .hbk-app-menu-link { border-bottom: 1px solid rgba(0,0,0,0.10) !important; } .hbk-app-menu-section-toggle:after { content: "+"; color: #ad74a2 !important; font-size: 28px !important; font-weight: 800 !important; line-height: 1 !important; } .hbk-app-menu-section.is-open > .hbk-app-menu-section-toggle:after { content: "−"; } .hbk-app-menu-section-content { display: none; padding: 0 0 14px 0 !important; } .hbk-app-menu-section.is-open > .hbk-app-menu-section-content { display: block !important; } .hbk-app-menu-html { color: #333 !important; font-size: 16px !important; line-height: 1.35 !important; } .hbk-app-menu-html .row, .hbk-app-menu-html .row-small, .hbk-app-menu-html .large-columns-4, .hbk-app-menu-html .medium-columns-3, .hbk-app-menu-html .small-columns-2 { display: block !important; width: 100% !important; max-width: 100% !important; margin-left: 0 !important; margin-right: 0 !important; } .hbk-app-menu-html .col, .hbk-app-menu-html .columns, .hbk-app-menu-html [class*="large-"], .hbk-app-menu-html [class*="medium-"], .hbk-app-menu-html [class*="small-"] { display: block !important; width: 100% !important; max-width: 100% !important; flex-basis: 100% !important; padding-left: 0 !important; padding-right: 0 !important; margin: 0 !important; } .hbk-app-menu-html h1, .hbk-app-menu-html h2, .hbk-app-menu-html h3, .hbk-app-menu-html h4, .hbk-app-menu-html h5, .hbk-app-menu-html h6, .hbk-app-menu-html .uppercase { margin: 14px 0 6px 0 !important; color: #111 !important; font-size: 13px !important; font-weight: 900 !important; text-transform: uppercase !important; letter-spacing: 0.02em !important; } .hbk-app-menu-html p, .hbk-app-menu-html ul, .hbk-app-menu-html ol { margin: 0 !important; padding: 0 !important; } .hbk-app-menu-html ul, .hbk-app-menu-html ol { list-style: none !important; } .hbk-app-menu-html li { list-style: none !important; margin: 0 !important; padding: 0 !important; border-bottom: 1px solid rgba(0,0,0,0.06) !important; } .hbk-app-menu-html a { display: block !important; min-height: 42px !important; padding: 10px 0 !important; color: #2d405f !important; font-size: 16px !important; font-weight: 600 !important; line-height: 1.25 !important; text-decoration: none !important; text-transform: uppercase !important; letter-spacing: 0.01em !important; } .hbk-app-menu-html img { max-width: 100% !important; height: auto !important; border-radius: 14px !important; margin: 8px 0 !important; } .hbk-app-menu-html .button, .hbk-app-menu-html button { width: 100% !important; border-radius: 14px !important; } .hbk-app-submenu { border-bottom: 1px solid rgba(0,0,0,0.08) !important; } .hbk-app-submenu-toggle { width: 100% !important; min-height: 48px !important; display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; appearance: none !important; -webkit-appearance: none !important; border: 0 !important; background: transparent !important; color: #555 !important; font-size: 16px !important; font-weight: 700 !important; text-align: left !important; padding: 12px 0 !important; text-transform: uppercase !important; letter-spacing: 0.02em !important; } .hbk-app-submenu-toggle:after { content: "+"; color: #ad74a2 !important; font-size: 23px !important; font-weight: 900 !important; line-height: 1 !important; } .hbk-app-submenu.is-open > .hbk-app-submenu-toggle:after { content: "−"; } .hbk-app-submenu-content { display: none; padding: 0 0 8px 0 !important; } .hbk-app-submenu.is-open > .hbk-app-submenu-content { display: block !important; } .hbk-app-submenu-content a { padding-left: 8px !important; } `; document.head.appendChild(style); } function markBody() { document.documentElement.classList.add('hobukeskus-ios-app'); if (document.body) { document.body.classList.add('hobukeskus-ios-app'); } } function ensureSearchOverlay() { var overlay = document.getElementById('hobukeskus-app-search-overlay'); if (overlay) return overlay; overlay = document.createElement('div'); overlay.id = 'hobukeskus-app-search-overlay'; overlay.innerHTML = `
Otsi tooteid
`; document.body.appendChild(overlay); overlay.addEventListener('click', function(event) { if (event.target === overlay) { closeSearchOverlay(); } }); var closeButton = overlay.querySelector('#hobukeskus-app-search-close'); if (closeButton) { closeButton.addEventListener('click', function() { closeSearchOverlay(); }); } var form = overlay.querySelector('#hobukeskus-app-search-form'); var input = overlay.querySelector('#hobukeskus-app-search-input'); if (form) { form.addEventListener('submit', function(event) { event.preventDefault(); var query = input ? input.value.trim() : ''; if (query.length > 0) { window.location.href = '/?s=' + encodeURIComponent(query) + '&post_type=product'; } }); } if (input) { input.addEventListener('input', function() { scheduleGuavenSearch(input.value); }); input.addEventListener('keyup', function() { scheduleGuavenSearch(input.value); }); input.addEventListener('search', function() { scheduleGuavenSearch(input.value); }); } return overlay; } function closeSearchOverlay() { var overlay = document.getElementById('hobukeskus-app-search-overlay'); if (overlay) overlay.classList.remove('is-open'); } function focusAppSearchInput() { var overlay = ensureSearchOverlay(); var input = overlay.querySelector('#hobukeskus-app-search-input'); if (!input) return false; try { input.removeAttribute('readonly'); input.focus({ preventScroll: false }); input.click(); if (typeof input.select === 'function') { input.select(); } return true; } catch (e) { return false; } } function setNativeInputValue(input, value) { try { var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set; nativeInputValueSetter.call(input, value); } catch (e) { input.value = value; } } function findOriginalGuavenInput() { if ( window.guaven_woos && window.guaven_woos.current_input_object && window.guaven_woos.current_input_object.length && window.guaven_woos.current_input_object[0] ) { return window.guaven_woos.current_input_object[0]; } var selectors = [ '#woocommerce-product-search-field-1', '#woocommerce-product-search-field-0', '.guaven_woos_search_input', 'input.guaven_woos_search_input', '#guaven_woos_s', '.header-search input[type="search"]', '.header-search input[name="s"]', '.searchform input[type="search"]', '.woocommerce-product-search input[type="search"]', 'input[type="search"][name="s"]', 'input[name="s"]' ]; for (var i = 0; i < selectors.length; i++) { var elements = document.querySelectorAll(selectors[i]); for (var j = 0; j < elements.length; j++) { var input = elements[j]; if (input.closest('#hobukeskus-app-search-overlay')) { continue; } return input; } } return null; } function fireSearchEvents(input, query) { setNativeInputValue(input, query); var events = [ 'focus', 'keydown', 'keypress', 'input', 'keyup', 'change' ]; for (var i = 0; i < events.length; i++) { try { input.dispatchEvent(new Event(events[i], { bubbles: true, cancelable: true })); } catch (e) {} } try { input.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, cancelable: true, key: query.slice(-1) || '', code: '', which: query.length ? query.charCodeAt(query.length - 1) : 0, keyCode: query.length ? query.charCodeAt(query.length - 1) : 0 })); } catch (e) {} if (window.jQuery) { try { window.jQuery(input) .val(query) .trigger('focus') .trigger('keydown') .trigger('input') .trigger('keyup') .trigger('change'); } catch (e) {} } } function findGuavenSuggestionSource() { var suggestions = document.querySelectorAll('.guaven_woos_suggestion'); for (var i = 0; i < suggestions.length; i++) { var suggestion = suggestions[i]; if (suggestion.closest('#hobukeskus-app-search-overlay')) { continue; } return suggestion; } return null; } function scheduleGuavenSearch(rawQuery) { var query = (rawQuery || '').trim(); var results = document.getElementById('hobukeskus-app-search-results'); latestSearchQuery = query; latestSearchRequestId++; clearTimeout(searchDebounceTimer); if (!results) return; if (query.length < 2) { results.innerHTML = '
Sisesta vähemalt 2 tähemärki.
'; return; } results.innerHTML = '
Otsin…
'; searchDebounceTimer = setTimeout(function() { runGuavenSearch(query, latestSearchRequestId); }, 120); } function runGuavenSearch(query, requestId) { var sourceInput = findOriginalGuavenInput(); var results = document.getElementById('hobukeskus-app-search-results'); if (!results) return; if (!window.guaven_woos) { results.innerHTML = `
Guaveni otsingumootorit ei leitud.
`; return; } if (!sourceInput) { results.innerHTML = `
Guaveni otsinguvälja ei leitud.
`; return; } setNativeInputValue(sourceInput, query); try { if (window.jQuery) { window.guaven_woos.current_input_object = window.jQuery(sourceInput); window.jQuery(sourceInput) .val(query) .trigger('focus') .trigger('input') .trigger('keyup') .trigger('change'); } } catch (e) {} try { window.guaven_woos.focused = 1; window.guaven_woos.tempval = query; window.guaven_woos.tempval_raw = query; } catch (e) {} try { if (typeof window.guaven_woos.runner === 'function') { window.guaven_woos.runner(); } } catch (e) {} setTimeout(function() { mirrorGuavenResults(query, requestId); }, 100); setTimeout(function() { mirrorGuavenResults(query, requestId); }, 250); setTimeout(function() { mirrorGuavenResults(query, requestId); }, 500); setTimeout(function() { mirrorGuavenResults(query, requestId); }, 900); } function mirrorGuavenResults(query, requestId) { var results = document.getElementById('hobukeskus-app-search-results'); var currentInput = document.getElementById('hobukeskus-app-search-input'); var currentQuery = currentInput ? currentInput.value.trim() : ''; if (!results) return; if ( requestId !== latestSearchRequestId || query !== latestSearchQuery || query !== currentQuery ) { return; } var source = findGuavenSuggestionSource(); if (!source) { results.innerHTML = `
Guaveni soovitusi ei leitud.
`; return; } var clone = source.cloneNode(true); clone.style.display = 'block'; clone.style.position = 'static'; clone.style.visibility = 'visible'; clone.style.opacity = '1'; clone.style.width = '100%'; Array.prototype.forEach.call(clone.querySelectorAll('a[href]'), function(a) { try { var href = a.getAttribute('href'); if (!href) return; if (href.indexOf('gwp=') === 0) { href = href.replace('gwp={gwsvid}', ''); } a.href = new URL(href, window.location.origin).href; } catch (e) {} }); Array.prototype.forEach.call(clone.querySelectorAll('img[src]'), function(img) { try { img.src = new URL(img.getAttribute('src'), window.location.origin).href; } catch (e) {} }); results.innerHTML = ''; results.appendChild(clone); } function escapeHTML(value) { return String(value || '') .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function escapeAttribute(value) { return escapeHTML(value).replace(/`/g, '`'); } function getAppMenuCacheKey() { return 'hbk_app_menu_cache_v4_' + getAppMenuLanguage(); } function getCachedAppMenu() { try { var raw = window.localStorage.getItem(getAppMenuCacheKey()); if (!raw) return null; var cached = JSON.parse(raw); if (!cached || !cached.savedAt || !cached.data) return null; var maxAgeMs = 24 * 60 * 60 * 1000; if ((Date.now() - cached.savedAt) > maxAgeMs) return null; return cached.data; } catch (e) { return null; } } function setCachedAppMenu(data) { try { window.localStorage.setItem(getAppMenuCacheKey(), JSON.stringify({ savedAt: Date.now(), data: data })); } catch (e) {} } function ensureAppMenuOverlay() { var overlay = document.getElementById('hobukeskus-app-menu-overlay'); if (overlay) return overlay; overlay = document.createElement('div'); overlay.id = 'hobukeskus-app-menu-overlay'; overlay.innerHTML = `
Menüü
Laen menüüd…
`; document.body.appendChild(overlay); overlay.addEventListener('click', function(event) { if (event.target === overlay) { closeAppMenuOverlay(); } }); var closeButton = overlay.querySelector('#hobukeskus-app-menu-close'); if (closeButton) { closeButton.addEventListener('click', function() { closeAppMenuOverlay(); }); } return overlay; } function closeAppMenuOverlay() { var overlay = document.getElementById('hobukeskus-app-menu-overlay'); if (overlay) overlay.classList.remove('is-open'); } function openAppMenuOverlay() { var overlay = ensureAppMenuOverlay(); overlay.classList.add('is-open'); loadAppMenu({ silent: false }); } function preloadAppMenu() { ensureAppMenuOverlay(); loadAppMenu({ silent: true }); } function getAppMenuLanguage() { try { if (document.documentElement.lang && document.documentElement.lang.toLowerCase().indexOf('en') === 0) { return 'en'; } } catch (e) {} return 'et'; } function loadAppMenu(options) { options = options || {}; var overlay = ensureAppMenuOverlay(); var content = overlay.querySelector('#hobukeskus-app-menu-content'); if (!content) return; if (content.getAttribute('data-loaded') === '1') { return; } var cached = getCachedAppMenu(); if (cached) { renderAppMenu(cached); return; } if (!options.silent) { content.innerHTML = '
Laen menüüd…
'; } var url = '/wp-json/hbk-app/v1/menu?lang=' + encodeURIComponent(getAppMenuLanguage()) + '&_=' + Date.now(); fetch(url, { method: 'GET', credentials: 'same-origin', cache: 'no-store', headers: { 'Accept': 'application/json', 'Cache-Control': 'no-cache' } }) .then(function(response) { if (!response.ok) { throw new Error('HTTP ' + response.status + ' ' + response.statusText); } return response.json(); }) .then(function(data) { setCachedAppMenu(data); renderAppMenu(data); }) .catch(function(error) { content.innerHTML = `
Menüüd ei saanud laadida.

Tehniline põhjus: ${escapeHTML(error && error.message ? error.message : String(error))}
`; }); } function isAppMenuHeadingNode(node) { if (!node || node.nodeType !== 1) return false; if (node.closest('.hbk-app-submenu')) return false; var tag = node.tagName ? node.tagName.toLowerCase() : ''; var cls = node.className ? String(node.className).toLowerCase() : ''; var text = (node.innerText || node.textContent || '').trim(); if (!text || text.length > 80) return false; if (tag === 'h1' || tag === 'h2' || tag === 'h3' || tag === 'h4' || tag === 'h5' || tag === 'h6') return true; if (cls.indexOf('ux-menu-title') !== -1) return true; if (cls.indexOf('uppercase') !== -1 && text === text.toUpperCase()) return true; return false; } function isIgnorableMenuNode(node) { if (!node) return true; if (node.nodeType === 3 && !node.textContent.trim()) return true; if (node.nodeType === 8) return true; return false; } function enhanceAppMenuBlock(root) { if (!root || root.getAttribute('data-submenu-enhanced') === '1') return; root.setAttribute('data-submenu-enhanced', '1'); var headings = Array.prototype.slice.call(root.querySelectorAll('h1,h2,h3,h4,h5,h6,.ux-menu-title,.uppercase')) .filter(isAppMenuHeadingNode); for (var i = 0; i < headings.length; i++) { var heading = headings[i]; if (!heading.parentNode || heading.closest('.hbk-app-submenu')) continue; var title = (heading.innerText || heading.textContent || '').trim(); if (!title) continue; var parent = heading.parentNode; var section = document.createElement('div'); section.className = 'hbk-app-submenu'; var toggle = document.createElement('button'); toggle.type = 'button'; toggle.className = 'hbk-app-submenu-toggle'; toggle.textContent = title; var body = document.createElement('div'); body.className = 'hbk-app-submenu-content'; parent.insertBefore(section, heading); section.appendChild(toggle); section.appendChild(body); var node = heading.nextSibling; parent.removeChild(heading); while (node) { var next = node.nextSibling; if (isAppMenuHeadingNode(node)) { break; } body.appendChild(node); node = next; } if (!body.textContent.trim() && body.querySelectorAll('a,img,button').length === 0) { section.parentNode.removeChild(section); continue; } toggle.addEventListener('click', function(event) { var submenu = event.currentTarget.closest('.hbk-app-submenu'); if (!submenu) return; submenu.classList.toggle('is-open'); }); } } function renderAppMenu(data) { var overlay = ensureAppMenuOverlay(); var content = overlay.querySelector('#hobukeskus-app-menu-content'); if (!content) return; var items = data && data.items ? data.items : []; if (!items.length) { content.innerHTML = '
Menüü on tühi.
'; return; } var html = ''; for (var i = 0; i < items.length; i++) { var item = items[i]; if (item.type === 'block') { html += `
${item.html || ''}
`; continue; } if (item.type === 'link') { html += ` ${escapeHTML(item.title || '')} `; } } content.innerHTML = html; content.setAttribute('data-loaded', '1'); Array.prototype.forEach.call(content.querySelectorAll('.hbk-app-menu-html'), function(blockRoot) { enhanceAppMenuBlock(blockRoot); }); Array.prototype.forEach.call(content.querySelectorAll('.hbk-app-menu-section-toggle'), function(button) { button.addEventListener('click', function() { var section = button.closest('.hbk-app-menu-section'); if (!section) return; section.classList.toggle('is-open'); }); }); Array.prototype.forEach.call(content.querySelectorAll('a[href]'), function(link) { link.addEventListener('click', function() { closeAppMenuOverlay(); }); }); // Menüü avaneb vaikimisi suletuna. Kasutaja avab soovitud osa + märgist. } function readCartCountFromPage() { var selectors = [ '.cart-icon strong', '.cart-icon .cart-count', '.header-cart-link .cart-icon strong', '.header-cart-link .cart-count', 'a.cart-contents .count', '.cart-contents .count', '.woocommerce-mini-cart__total', '.cart-count', '[data-icon-label]' ]; for (var i = 0; i < selectors.length; i++) { var elements = document.querySelectorAll(selectors[i]); for (var j = 0; j < elements.length; j++) { var el = elements[j]; var value = ''; if (el.getAttribute && el.getAttribute('data-icon-label')) { value = el.getAttribute('data-icon-label') || ''; } else { value = (el.innerText || el.textContent || '').trim(); } var match = value.match(/\d+/); if (match) { var parsed = parseInt(match[0], 10); if (!isNaN(parsed)) return parsed; } } } return 0; } function readWishlistHasItemsFromPage() { var countSelectors = [ '.wishlist_products_counter_number', '.wishlist-count', '.wishlist-counter', '.yith-wcwl-items-count', '.tinvwl-count', '[data-wishlist-count]', '[data-tinv-wl-count]' ]; for (var i = 0; i < countSelectors.length; i++) { var elements = document.querySelectorAll(countSelectors[i]); for (var j = 0; j < elements.length; j++) { var el = elements[j]; var value = ''; if (el.getAttribute && el.getAttribute('data-wishlist-count')) { value = el.getAttribute('data-wishlist-count') || ''; } else if (el.getAttribute && el.getAttribute('data-tinv-wl-count')) { value = el.getAttribute('data-tinv-wl-count') || ''; } else { value = (el.innerText || el.textContent || '').trim(); } var match = value.match(/\d+/); if (match && parseInt(match[0], 10) > 0) { return true; } } } var wishlistPageSelectors = [ '.wishlist_table tbody tr', '.shop_table.wishlist_table tbody tr', '.tinv-wishlist table tbody tr', '.wishlist-items-wrapper .product', '.woocommerce-wishlist .product' ]; for (var k = 0; k < wishlistPageSelectors.length; k++) { var rows = document.querySelectorAll(wishlistPageSelectors[k]); if (rows && rows.length > 0) { for (var r = 0; r < rows.length; r++) { var rowText = (rows[r].innerText || rows[r].textContent || '').toLowerCase(); if ( rowText.indexOf('no products') === -1 && rowText.indexOf('empty') === -1 && rowText.indexOf('tühi') === -1 ) { return true; } } } } return false; } function sendCartCount() { try { var count = readCartCountFromPage(); if ( window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.cartCount ) { window.webkit.messageHandlers.cartCount.postMessage(count); } } catch (e) {} } function sendWishlistState() { try { var hasItems = readWishlistHasItemsFromPage(); if ( window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.wishlistState ) { window.webkit.messageHandlers.wishlistState.postMessage(hasItems); } } catch (e) {} } window.HobukeskusAppOpenMenu = function() { openAppMenuOverlay(); return true; }; window.HobukeskusAppPreloadMenu = function() { preloadAppMenu(); return true; }; window.HobukeskusAppOpenSearch = function() { var overlay = ensureSearchOverlay(); overlay.classList.add('is-open'); var input = overlay.querySelector('#hobukeskus-app-search-input'); if (input) { latestSearchQuery = input.value.trim(); if (latestSearchQuery.length < 2) { var results = overlay.querySelector('#hobukeskus-app-search-results'); if (results) { results.innerHTML = '
Sisesta vähemalt 2 tähemärki.
'; } } else { scheduleGuavenSearch(latestSearchQuery); } } focusAppSearchInput(); setTimeout(focusAppSearchInput, 50); setTimeout(focusAppSearchInput, 180); setTimeout(focusAppSearchInput, 450); return true; }; window.HobukeskusAppSendCartCount = sendCartCount; window.HobukeskusAppSendWishlistState = sendWishlistState; markBody(); injectAppStyles(); sendCartCount(); sendWishlistState(); document.addEventListener('DOMContentLoaded', function() { markBody(); injectAppStyles(); sendCartCount(); sendWishlistState(); setTimeout(preloadAppMenu, 650); }); setTimeout(preloadAppMenu, 900); document.addEventListener('click', function() { setTimeout(sendCartCount, 700); setTimeout(sendCartCount, 1800); setTimeout(sendWishlistState, 700); setTimeout(sendWishlistState, 1800); }, true); var observer = new MutationObserver(function() { sendCartCount(); sendWishlistState(); }); function startObserver() { if (document.body) { observer.observe(document.body, { childList: true, subtree: true, characterData: true, attributes: true }); } } startObserver(); setInterval(function() { sendCartCount(); sendWishlistState(); }, 2500); })(); """#