<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://fsvps.aoasp.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://fsvps.aoasp.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://fsvps.aoasp.ru/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-05-08T16:19:20Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://fsvps.aoasp.ru/index.php?title=MediaWiki:Common.js&amp;diff=132&amp;oldid=prev</id>
		<title>Shihov: Новая страница: «/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */ $(document).ready(function () {     // Если текущая страница — главная, сбрасываем localStorage     if (mw.config.get(&#039;wgIsMainPage&#039;)) {         console.log(&quot;Находимся на главной, сбрасываем сохранённое де...»</title>
		<link rel="alternate" type="text/html" href="https://fsvps.aoasp.ru/index.php?title=MediaWiki:Common.js&amp;diff=132&amp;oldid=prev"/>
		<updated>2025-09-17T07:36:06Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&lt;span class=&quot;autocomment&quot;&gt;Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице: &lt;/span&gt; $(document).ready(function () {     // Если текущая страница — главная, сбрасываем localStorage     if (mw.config.get(&amp;#039;wgIsMainPage&amp;#039;)) {         console.log(&amp;quot;Находимся на главной, сбрасываем сохранённое де...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */&lt;br /&gt;
$(document).ready(function () {&lt;br /&gt;
    // Если текущая страница — главная, сбрасываем localStorage&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgIsMainPage&amp;#039;)) {&lt;br /&gt;
        console.log(&amp;quot;Находимся на главной, сбрасываем сохранённое дерево&amp;quot;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;categoryTreeHTML&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;lastOpenedPageTitle&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;highlightedCategory&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var highlightedCategory = localStorage.getItem(&amp;#039;highlightedCategory&amp;#039;);&lt;br /&gt;
if (highlightedCategory) {&lt;br /&gt;
    $(&amp;#039;#p-categorytree-portlet&amp;#039;).addClass(&amp;#039;category-hidden&amp;#039;);&lt;br /&gt;
    console.log(&amp;quot;Скрыли при восстановлении по цели:&amp;quot;, highlightedCategory);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//добавление кнопки вверх&lt;br /&gt;
$(document).ready(function () {&lt;br /&gt;
    // Создаём кнопку&lt;br /&gt;
    var $button = $(&amp;#039;&amp;lt;div id=&amp;quot;back-to-top&amp;quot;&amp;gt;Вверх&amp;lt;/div&amp;gt;&amp;#039;).appendTo(&amp;#039;body&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    // Показывать кнопку при прокрутке вниз&lt;br /&gt;
    $(window).scroll(function () {&lt;br /&gt;
        if ($(this).scrollTop() &amp;gt; 300) {&lt;br /&gt;
            $button.fadeIn();&lt;br /&gt;
        } else {&lt;br /&gt;
            $button.fadeOut();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Обработчик клика для плавного скролла вверх&lt;br /&gt;
    $button.click(function () {&lt;br /&gt;
        $(&amp;#039;html, body&amp;#039;).animate({ scrollTop: 0 }, 500);&lt;br /&gt;
        return false;&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//скрытие разделов и страниц если пусто&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    console.log(&amp;quot;JS скрипт для скрытия пустых разделов загружен.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    function hideEmptySection(sectionId, listId) {&lt;br /&gt;
        var section = document.getElementById(sectionId);&lt;br /&gt;
        var list = document.getElementById(listId);&lt;br /&gt;
&lt;br /&gt;
        if (!section || !list) {&lt;br /&gt;
            console.log(`Не найден элемент: ${section ? &amp;quot;список&amp;quot; : &amp;quot;заголовок&amp;quot;} для ${sectionId}`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        console.log(`Проверяем ${sectionId}: `, list.children.length, &amp;quot;элементов найдено.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (list.children.length === 0) {&lt;br /&gt;
            section.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
            console.log(`Скрываем заголовок: ${sectionId}`);&lt;br /&gt;
        } else {&lt;br /&gt;
            console.log(`Оставляем заголовок: ${sectionId}`);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Проверяем и скрываем, если пустые&lt;br /&gt;
    hideEmptySection(&amp;quot;section-header&amp;quot;, &amp;quot;sections-list&amp;quot;);&lt;br /&gt;
    hideEmptySection(&amp;quot;pages-header&amp;quot;, &amp;quot;page-list&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
	&lt;br /&gt;
    console.log(&amp;quot;Скрипт дерева категорий загружен.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Проверяем, авторизован ли пользователь&lt;br /&gt;
    var isUserLoggedIn = mw.config.get(&amp;#039;wgUserName&amp;#039;) !== null;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function saveTreeHTML() {&lt;br /&gt;
        console.log(&amp;quot;Сохраняем HTML дерева...&amp;quot;);&lt;br /&gt;
        var treeHTML = $(&amp;#039;#p-categorytree-portlet .CategoryTreeTag&amp;#039;).prop(&amp;#039;outerHTML&amp;#039;);&lt;br /&gt;
        localStorage.setItem(&amp;#039;categoryTreeHTML&amp;#039;, treeHTML);&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    function restoreTreeHTML() {&lt;br /&gt;
        console.log(&amp;quot;Восстанавливаем HTML дерева...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var treeHTML = localStorage.getItem(&amp;#039;categoryTreeHTML&amp;#039;);&lt;br /&gt;
        if (treeHTML &amp;amp;&amp;amp; treeHTML !== &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
            $(&amp;#039;#p-categorytree-portlet .CategoryTreeTag&amp;#039;).replaceWith(treeHTML);&lt;br /&gt;
&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            console.log(&amp;quot;Ошибка: Дерево категорий повреждено, сбрасываем...&amp;quot;);&lt;br /&gt;
            localStorage.removeItem(&amp;#039;categoryTreeHTML&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        attachCategoryEvents();&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function attachCategoryEvents() {&lt;br /&gt;
        console.log(&amp;quot;Навешиваем обработчики событий...&amp;quot;);&lt;br /&gt;
        $(&amp;#039;body&amp;#039;).off(&amp;#039;click&amp;#039;, &amp;#039;#p-categorytree-portlet .CategoryTreeItem&amp;#039;).on(&amp;#039;click&amp;#039;, &amp;#039;#p-categorytree-portlet .CategoryTreeItem&amp;#039;, function(event) {&lt;br /&gt;
            var $target = $(event.target);&lt;br /&gt;
            var $item = $(this);&lt;br /&gt;
            var $toggleButton = $item.find(&amp;#039;.CategoryTreeToggle&amp;#039;).first();&lt;br /&gt;
            var isCategory = !$item.find(&amp;#039;.CategoryTreePageBullet&amp;#039;).length;&lt;br /&gt;
&lt;br /&gt;
            if ($target.hasClass(&amp;#039;CategoryTreeToggle&amp;#039;)) return;&lt;br /&gt;
&lt;br /&gt;
            if ($target.is(&amp;#039;a&amp;#039;) &amp;amp;&amp;amp; isCategory) {&lt;br /&gt;
                event.preventDefault();&lt;br /&gt;
                $toggleButton.click();&lt;br /&gt;
            } else if (isCategory) {&lt;br /&gt;
                $toggleButton.click();&lt;br /&gt;
            } else {&lt;br /&gt;
                var link = $item.find(&amp;#039;a&amp;#039;).attr(&amp;#039;href&amp;#039;);&lt;br /&gt;
                if (link) {&lt;br /&gt;
                    saveTreeHTML();&lt;br /&gt;
                    localStorage.setItem(&amp;#039;lastOpenedPageTitle&amp;#039;, $item.text().trim());&lt;br /&gt;
                    window.location.href = link;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            saveTreeHTML();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    restoreTreeHTML();&lt;br /&gt;
&lt;br /&gt;
    function scrollToCategory(categoryTitle, callback) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        var $categoryItem = $(&amp;#039;#p-categorytree-portlet .CategoryTreeItem&amp;#039;).filter(function() {&lt;br /&gt;
            return $(this).text().trim() === categoryTitle;&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ($categoryItem.length) {&lt;br /&gt;
    console.log(&amp;quot;Категория найдена, прокручиваем без анимации...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    var $portlet = $(&amp;#039;#p-categorytree-portlet&amp;#039;);&lt;br /&gt;
	$portlet.addClass(&amp;#039;category-hidden&amp;#039;);&lt;br /&gt;
	&lt;br /&gt;
    // Выполняем прокрутку&lt;br /&gt;
    $portlet.scrollTop($categoryItem.position().top - 50);&lt;br /&gt;
&lt;br /&gt;
    // Подсветка&lt;br /&gt;
    $(&amp;#039;.CategoryTreeItem&amp;#039;).removeClass(&amp;#039;highlighted&amp;#039;);&lt;br /&gt;
    $categoryItem.addClass(&amp;#039;highlighted&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    // Показываем дерево&lt;br /&gt;
    setTimeout(function() {&lt;br /&gt;
        $portlet.removeClass(&amp;#039;category-hidden&amp;#039;);&lt;br /&gt;
        if (callback) callback(true);&lt;br /&gt;
    }, 0); // можно увеличить задержку при необходимости&lt;br /&gt;
&lt;br /&gt;
    localStorage.setItem(&amp;#039;highlightedCategory&amp;#039;, categoryTitle);&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        if (callback) callback(false);&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function searchAndExpandCategory(title, attempts = 0) {&lt;br /&gt;
        if (attempts &amp;gt; 1) {&lt;br /&gt;
            console.log(&amp;quot;Категория не найдена даже после подмены, прекращаем попытки.&amp;quot;);&lt;br /&gt;
         &lt;br /&gt;
        var $portlet = $(&amp;#039;#p-categorytree-portlet&amp;#039;);    &lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    	localStorage.removeItem(&amp;#039;categoryTreeHTML&amp;#039;);&lt;br /&gt;
    	localStorage.removeItem(&amp;#039;lastOpenedPageTitle&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;highlightedCategory&amp;#039;);&lt;br /&gt;
        console.log(&amp;quot;Очистили всё&amp;quot;);&lt;br /&gt;
        $portlet.removeClass(&amp;#039;category-hidden&amp;#039;);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (scrollToCategory(title)) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        console.log(`Категория &amp;#039;${title}&amp;#039; не найдена, пробуем &amp;#039;Категория:Начало&amp;#039;...`);&lt;br /&gt;
        setTimeout(() =&amp;gt; searchAndExpandCategory(&amp;quot;Категория:Начало&amp;quot;, attempts + 1), 100);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function recursiveSearchForCategory() {&lt;br /&gt;
        console.log(&amp;quot;Очищаем `localStorage` перед поиском...&amp;quot;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;lastOpenedPageTitle&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;highlightedCategory&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        var currentPageTitle = mw.config.get(&amp;#039;wgTitle&amp;#039;) || &amp;quot;Категория:Начало&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        console.log(&amp;quot;Начинаем поиск категории для:&amp;quot;, currentPageTitle);&lt;br /&gt;
        searchAndExpandCategory(currentPageTitle);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
recursiveSearchForCategory();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $(window).on(&amp;#039;beforeunload&amp;#039;, saveTreeHTML);&lt;br /&gt;
&lt;br /&gt;
    attachCategoryEvents();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, function () {&lt;br /&gt;
    var categoryTree = document.getElementById(&amp;quot;p-categorytree-portlet&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Проверяем, что дерево категорий существует и пользователь на мобильном устройстве&lt;br /&gt;
    if (categoryTree &amp;amp;&amp;amp; window.innerWidth &amp;lt;= 768) {&lt;br /&gt;
        var toggleButton = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
        toggleButton.id = &amp;quot;category-toggle&amp;quot;;&lt;br /&gt;
        toggleButton.innerHTML = &amp;quot;Категории ⋮&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // Вставляем кнопку перед деревом категорий&lt;br /&gt;
        categoryTree.parentNode.insertBefore(toggleButton, categoryTree);&lt;br /&gt;
&lt;br /&gt;
        // Обработчик клика&lt;br /&gt;
        toggleButton.addEventListener(&amp;quot;click&amp;quot;, function () {&lt;br /&gt;
            if (categoryTree.style.display === &amp;quot;none&amp;quot; || categoryTree.style.display === &amp;quot;&amp;quot;) {&lt;br /&gt;
                categoryTree.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
                toggleButton.innerHTML = &amp;quot;Категории ▲&amp;quot;;&lt;br /&gt;
            } else {&lt;br /&gt;
                categoryTree.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
                toggleButton.innerHTML = &amp;quot;Категории ⋮&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Обработчик Ctrl+F5 для очистки localStorage&lt;br /&gt;
$(document).keydown(function(event) {&lt;br /&gt;
    if (event.ctrlKey &amp;amp;&amp;amp; event.key === &amp;#039;F2&amp;#039;) {&lt;br /&gt;
        console.log(&amp;quot;Ctrl+F2 нажато, очищаем localStorage...&amp;quot;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;categoryTreeHTML&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;lastOpenedPageTitle&amp;#039;);&lt;br /&gt;
        localStorage.removeItem(&amp;#039;highlightedCategory&amp;#039;);&lt;br /&gt;
        $(&amp;#039;#p-categorytree-portlet .CategoryTreeTag&amp;#039;).remove(); // Удаляем дерево с страницы&lt;br /&gt;
        location.reload();&lt;br /&gt;
    }&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Shihov</name></author>
	</entry>
</feed>