/* jshint esversion: 6 */ jQuery(function ($) { 'use strict'; // ── TOC Toggle ──────────────────────────────────────────────────────── $(document).on('click', '.wmw-toc__title, .wmw-toc__toggle', function () { var $toc = $(this).closest('.wmw-toc'); var $btn = $toc.find('.wmw-toc__toggle'); $toc.toggleClass('is-collapsed'); $btn.text($toc.hasClass('is-collapsed') ? '▶' : '▼'); }); // ── TOC Active Heading Highlight ────────────────────────────────────── if ($('.wmw-toc').length && $('[id]').length) { var headingIds = []; $('.wmw-toc a').each(function () { var href = $(this).attr('href'); if (href && href.startsWith('#')) { headingIds.push(href.substring(1)); } }); var $tocLinks = $('.wmw-toc a'); function highlightToc() { var scrollTop = $(window).scrollTop() + 120; var active = null; headingIds.forEach(function (id) { var $el = $('#' + id); if ($el.length && $el.offset().top <= scrollTop) { active = id; } }); $tocLinks.removeClass('is-active'); if (active) { $tocLinks.filter('[href="#' + active + '"]').addClass('is-active'); } } $(window).on('scroll.wmwToc', highlightToc); highlightToc(); } // ── AJAX Search ─────────────────────────────────────────────────────── var searchTimer = null; $(document).on('input', '.wmw-search__input', function () { var $input = $(this); var $wrap = $input.closest('.wmw-search'); var $results = $wrap.find('.wmw-search__results'); var $inner = $wrap.find('.wmw-search__results-inner'); var query = $input.val().trim(); var wikiId = $wrap.data('wiki-id') || 0; clearTimeout(searchTimer); if (query.length < 2) { $results.attr('hidden', ''); return; } searchTimer = setTimeout(function () { $inner.html('
🔍 Suche…
'); $results.removeAttr('hidden'); $.post(wmwPublic.ajaxUrl, { action: 'wmw_search', query: query, wiki_id: wikiId, nonce: wmwPublic.nonce, }, function (res) { if (!res.success) { $inner.html('
Fehler bei der Suche.
'); return; } var results = res.data.results; if (!results || results.length === 0) { $inner.html('
Keine Ergebnisse für „' + escHtml(query) + '"
'); return; } var html = ''; results.forEach(function (r) { html += ''; html += '' + r.icon + ''; html += '
'; if (r.wiki) html += '
' + escHtml(r.wiki) + '
'; html += '
' + r.title + '
'; if (r.excerpt) html += '
' + r.excerpt + '
'; html += '
'; }); $inner.html(html); }); }, 280); }); // Close search on outside click $(document).on('click', function (e) { if (!$(e.target).closest('.wmw-search').length) { $('.wmw-search__results').attr('hidden', ''); } }); // Prevent closing when clicking inside results $(document).on('click', '.wmw-search__results', function (e) { e.stopPropagation(); }); // ── Smooth Scroll for TOC links ─────────────────────────────────────── $(document).on('click', '.wmw-toc a', function (e) { var href = $(this).attr('href'); if (href && href.startsWith('#')) { var $target = $(href); if ($target.length) { e.preventDefault(); $('html, body').animate({ scrollTop: $target.offset().top - 80 }, 400); } } }); // ── Helper ──────────────────────────────────────────────────────────── function escHtml(str) { return str.replace(/[&<>"']/g, function (c) { return { '&':'&','<':'<','>':'>','"':'"',"'":''' }[c]; }); } });