## Как мы чинили поиск на сайте
Я: Теперь переход на страницу поиска всегда со светлой темой. А сам поиск не работает.
Нейронка: Страница поиска не работает, потому что скрипт был удалён из-за CSP. Давайте пересоздадим страницу поиска с внешним скриптом.
Создаём внешний JS-файл:
(function() { var theme = localStorage.getItem('appearance'); if (theme === 'light' || theme === 'dark') { document.body.className = theme; } else { document.body.className = 'dark'; } fetch('/index.json') .then(function(r) { return r.json(); }) .then(function(data) { var input = document.getElementById('search-input'); var results = document.getElementById('search-results'); input.addEventListener('input', function() { var q = this.value.trim().toLowerCase(); if (q.length < 2) { results.innerHTML = ''; return; } var found = data.filter(function(item) { return (item.title || '').toLowerCase().indexOf(q) !== -1 || (item.content || '').toLowerCase().indexOf(q) !== -1 || (item.summary || '').toLowerCase().indexOf(q) !== -1; }); if (found.length === 0) { results.innerHTML = '<p>Ничего не найдено</p>'; return; } var html = ''; found.forEach(function(item) { html += '<div class="result-item">'; html += '<a href="' + item.url + '">' + item.title + '</a>'; html += '<p>' + (item.summary || '').replace(/<[^>]*>/g, '') + '</p>'; html += '</div>'; }); results.innerHTML = html; }); }); })();Я: Теперь поиск работает, но страница всегда в тёмной теме.
Нейронка: Проверим localStorage. Blowfish использует ключ
appearance, а неpref-theme.Исправляем скрипт:
sed -i "s|localStorage.getItem('pref-theme')|localStorage.getItem('appearance')|" static/js/search.jsСобираем и загружаем:
cd ~/Рабочий\ стол/infoguardtech-blog && /usr/local/bin/hugo && \ ssh myvps "sudo rm -rf /var/www/infoguardtech.ru/* && sudo cp -r /tmp/new-site/* /var/www/infoguardtech.ru/" && \ echo "ГОТОВО"Я: Готово. Бекапимся.
Теперь поиск работает в обеих темах. Потребовалось найти правильный ключ localStorage (appearance) и вынести скрипт во внешний файл, чтобы обойти ограничения Content Security Policy.