MediaWiki:Common.js: различия между версиями

Страница интерфейса MediaWiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
<script>
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
// Функция для обработки кликов по элементам
function handleLinkClick(event) {
    // Предотвращаем стандартное поведение, если есть
    event.preventDefault();


     // Получаем целевой элемент
function insertAfter(newNode, referenceNode) {
     const target = event.currentTarget;
     referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}
 
// Код данте ниже
function setupTabs() {
    const tabHeaders = document.querySelectorAll('.tab-header');
     const tabContents = document.querySelectorAll('.tab-content');
    console.log("Количество заголовков вкладок:", tabHeaders.length);
    console.log("Количество содержимого вкладок:", tabContents.length);
    tabHeaders.forEach(function(header, index) {
        header.addEventListener('click', function() {
            console.log("Клик по вкладке:", index);
            tabHeaders.forEach(function(h) {
                h.classList.remove('active');
            });
            tabContents.forEach(function(c) {
                c.classList.remove('active');
            });
            header.classList.add('active');
            tabContents[index].classList.add('active');
        });
    });
}
mw.hook('wikipage.content').add(setupTabs);
// выше, ниже мой недо скрип
 
// Конец данте


     // Извлекаем значение из data-link атрибута
function addCopyButtons() {
     const link = target.getAttribute('data-link');
     var codeBlocks = document.querySelectorAll('code:not(.copy-processed)');
 
    codeBlocks.forEach(function(block) {
        var copyButton = document.createElement('button');
        copyButton.textContent = 'Copy';
        copyButton.className = 'copy-button';
 
        copyButton.addEventListener('click', function() {
            var textArea = document.createElement('textarea');
            textArea.value = block.textContent;
            document.body.appendChild(textArea);
            textArea.select();
            document.execCommand('copy');
            document.body.removeChild(textArea);
            alert('Содержимое скопировано!');
        });
 
        insertAfter(copyButton, block);
        block.classList.add('copy-processed');
    });
}
 
// Функция для форматирования содержимого блоков <code>
function formatCodeBlocks() {
    var codeBlocks = document.querySelectorAll('code:not(.formatted)');
 
     codeBlocks.forEach(function(block) {
        // Заменяем пробелы на неразрывные пробелы и вставляем <br> для переносов строк
        block.innerHTML = block.textContent.replace(/ /g, '\u00A0').replace(/\n/g, '<br>');
        block.classList.add('formatted');
    });
}


    // Выполняем перенаправление
function formatNullDocsAbout() {
     if (link) {
     $('.docs-about').each(function() {
         window.location.href = link;
         if ($(this).html().includes("{{{Примечание документа}}}")) {
     }
            $(this).hide();
        }
     });
}
}


// Ищем все элементы с классом link-item
// Вызываем функции после загрузки страницы
document.querySelectorAll('.link-item').forEach(item => {
mw.hook('wikipage.content').add(formatCodeBlocks);
    // Добавляем обработчик клика для каждого элемента
mw.hook('wikipage.content').add(addCopyButtons);
    item.addEventListener('click', handleLinkClick);
mw.hook('wikipage.content').add(formatNullDocsAbout);
});
</script>

Версия от 18:30, 30 августа 2024

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */

function insertAfter(newNode, referenceNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

// Код данте ниже
function setupTabs() {
    const tabHeaders = document.querySelectorAll('.tab-header');
    const tabContents = document.querySelectorAll('.tab-content');
    console.log("Количество заголовков вкладок:", tabHeaders.length);
    console.log("Количество содержимого вкладок:", tabContents.length);
    tabHeaders.forEach(function(header, index) {
        header.addEventListener('click', function() {
            console.log("Клик по вкладке:", index);
            tabHeaders.forEach(function(h) {
                h.classList.remove('active');
            });
            tabContents.forEach(function(c) {
                c.classList.remove('active');
            });
            header.classList.add('active');
            tabContents[index].classList.add('active');
        });
    });
}
mw.hook('wikipage.content').add(setupTabs);
// выше, ниже мой недо скрип

// Конец данте

function addCopyButtons() {
    var codeBlocks = document.querySelectorAll('code:not(.copy-processed)');

    codeBlocks.forEach(function(block) {
        var copyButton = document.createElement('button');
        copyButton.textContent = 'Copy';
        copyButton.className = 'copy-button';

        copyButton.addEventListener('click', function() {
            var textArea = document.createElement('textarea');
            textArea.value = block.textContent;
            document.body.appendChild(textArea);
            textArea.select();
            document.execCommand('copy');
            document.body.removeChild(textArea);
            alert('Содержимое скопировано!');
        });

        insertAfter(copyButton, block);
        block.classList.add('copy-processed');
    });
}

// Функция для форматирования содержимого блоков <code>
function formatCodeBlocks() {
    var codeBlocks = document.querySelectorAll('code:not(.formatted)');

    codeBlocks.forEach(function(block) {
        // Заменяем пробелы на неразрывные пробелы и вставляем <br> для переносов строк
        block.innerHTML = block.textContent.replace(/ /g, '\u00A0').replace(/\n/g, '<br>');
        block.classList.add('formatted');
    });
}

function formatNullDocsAbout() {
    $('.docs-about').each(function() {
        if ($(this).html().includes("{{{Примечание документа}}}")) {
            $(this).hide();
        }
    });
}

// Вызываем функции после загрузки страницы
mw.hook('wikipage.content').add(formatCodeBlocks);
mw.hook('wikipage.content').add(addCopyButtons);
mw.hook('wikipage.content').add(formatNullDocsAbout);