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

Страница интерфейса MediaWiki
Нет описания правки
Нет описания правки
Метка: ручная отмена
 
(не показано 465 промежуточных версий 2 участников)
Строка 1: Строка 1:
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
/*Подгрузка внешних css js*/
mw.loader.using('mediawiki.util', function () {
    var files = mw.util.getParamValue('use'),
        userName = mw.config.get('wgUserName') || '', // Обрабатываем null
        FileRE = new RegExp('^(?:MediaWiki:|User:' + mw.util.escapeRegExp(userName) + '/)?[^&<>=%#]*\\.(js|css)$'),
        path = mw.config.get('wgServer').replace(/^http:/, 'https:') + mw.config.get('wgScript') + '?action=raw&ctype=text/';


function insertAfter(newNode, referenceNode) {
     if (!files) return;
     referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}


// Код данте ниже
     $.each(files.split('|'), function (k, v) {
function setupTabs() {
         var file = $.trim(v), match = FileRE.exec(file);
     const tabHeaders = document.querySelectorAll('.tab-header');
        if (match) {
    const tabContents = document.querySelectorAll('.tab-content');
             switch (match[1]) {
    console.log("Количество заголовков вкладок:", tabHeaders.length);
                 case 'js':
    console.log("Количество содержимого вкладок:", tabContents.length);
                    mw.loader.load(path + 'javascript&title=' + encodeURIComponent(file), 'text/javascript');
    tabHeaders.forEach(function(header, index) {
                    break;
         header.addEventListener('click', function() {
                 case 'css':
            console.log("Клик по вкладке:", index);
                    mw.loader.load(path + 'css&title=' + encodeURIComponent(file), 'text/css');
             tabHeaders.forEach(function(h) {
                    break;
                 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');
var logoElement = document.getElementsByClassName('citizen-header__logo')[0];
     });
if (logoElement) {
     logoElement.innerHTML = '<div class="logo1"><a href="https://spacestories.club/index.php?title=Заглавная страница" class="mw-logo citizen-header__button" title="Перейти на заглавную страницу"><img class="mw-logo-icon" src="/resources/assets/logo.png" alt="" aria-hidden="true" height="32" width="32"></a></div><div class="logo2"><a href="https://spacestories.club/index.php?title=Colonial_Marines" class="mw-logo citizen-header__button" title="Перейти на заглавную страницу CM"><img class="mw-logo-icon" src="/images/0/0d/CMlog.png" alt="" aria-hidden="true" height="32" width="32"></a></div>';
}
}


// Функция для форматирования содержимого блоков <code>
/* Перенос page-info в конец footer-places */
function formatCodeBlocks() {
var footerPlaces = document.getElementById('footer-places');
    var codeBlocks = document.querySelectorAll('code:not(.formatted)');
var pageInfo = document.getElementsByClassName('page-info')[0];
 
if (footerPlaces && pageInfo) {
    codeBlocks.forEach(function(block) {
    footerPlaces.insertAdjacentHTML('afterEnd', pageInfo.innerHTML);
        // Заменяем пробелы на неразрывные пробелы и вставляем <br> для переносов строк
    pageInfo.innerHTML = '';
        block.innerHTML = block.textContent.replace(/ /g, '\u00A0').replace(/\n/g, '<br>');
        block.classList.add('formatted');
    });
}
}


function formatNullDocsAbout() {
/* Логика цвета через headerColor */
    $('.docs-about').each(function() {
var headerColorElement = document.getElementsByClassName('headerColor')[0];
         if ($(this).html().includes("{{{Примечание документа}}}")) {
if (headerColorElement) {
            $(this).hide();
    var isValidColor = function (color) {
         }
         var el = document.createElement('div');
     });
        el.style.backgroundColor = color;
}
         return !!el.style.backgroundColor;
     };


// Вызываем функции после загрузки страницы
    var headerContent = headerColorElement.innerHTML;
mw.hook('wikipage.content').add(formatCodeBlocks);
    var colorBorder = '', colorBtn = '', i = 0;
mw.hook('wikipage.content').add(addCopyButtons);
mw.hook('wikipage.content').add(formatNullDocsAbout);


    while (headerContent[i] !== '|' && i < headerContent.length) {
        colorBorder += headerContent[i++];
    }
    i++;
    while (i < headerContent.length) {
        colorBtn += headerContent[i++];
    }


document.addEventListener("DOMContentLoaded", function() {
    if (isValidColor(colorBorder) && isValidColor(colorBtn)) {
    var headers = document.querySelectorAll("h3");
        var headerRender = function (colorBorder, colorBtn) {
    headers.forEach(function(header) {
            var headers = document.querySelectorAll('h1, h2, h3, h4, h5');
        header.style.cursor = "pointer";
            for (var j = 0; j < headers.length; j++) {
        header.addEventListener("click", function() {
                var header = headers[j];
            var nextElement = header.nextElementSibling;
                if (header.className === 'citizen-section-heading') {
            if (nextElement.style.display === "none") {
                    var indicator = header.querySelector('.citizen-sections-enabled, .citizen-section-indicator');
                nextElement.style.display = "block";
                    var headline = header.querySelector('.mw-headline');
            } else {
                    if (indicator) {
                nextElement.style.display = "none";
                        indicator.style.background = colorBtn;
                        indicator.style.boxShadow = '0 0 20px 0px ' + colorBtn + 'cc';
                    }
                    if (headline) {
                        headline.style.borderImage = 'linear-gradient(to right top, ' + colorBorder + ', black)';
                        headline.style.borderImageSlice = '1';
                    }
                } else if (header.className === 'citizen-section-heading citizen-section-heading--collapsed') {
                    var collapsedIndicator = header.querySelector('.citizen-sections-enabled, .citizen-section-heading--collapsed, .citizen-section-indicator');
                    if (collapsedIndicator) {
                        collapsedIndicator.style.background = 'black';
                        collapsedIndicator.style.boxShadow = 'unset';
                    }
                }
             }
             }
        };
        headerRender(colorBorder, colorBtn);
        document.body.addEventListener('click', function () {
            headerRender(colorBorder, colorBtn);
         });
         });
    }
}
/* Sidebar для ролей */
var jobsContainer = document.getElementsByClassName('JobsTableContainer')[0];
if (jobsContainer) {
    var bodyContent = document.getElementById('bodyContent');
    if (bodyContent) {
        bodyContent.insertAdjacentHTML('beforebegin', jobsContainer.innerHTML);
    }
    var jobTable = document.getElementById('IdJobsTableContainer1');
    if (jobTable) {
        jobTable.id = 'IdJobsTableContainer2';
    }
}
/* Главное меню лора */
document.querySelectorAll('.custom-item').forEach(function (item) {
    item.addEventListener('click', function () {
        var link = item.querySelector('a');
        if (link) {
            window.location.href = link.getAttribute('href');
        }
     });
     });
});
});


 
/* Хронология */
     document.addEventListener('DOMContentLoaded', function() {
if (typeof $ === 'function') {
        const buttons = document.querySelectorAll('.custom-button');
     $(document).ready(function () {
 
        $('.timeline-header').click(function () {
        buttons.forEach(button => {
            var content = $(this).next('.timeline-content');
            button.addEventListener('click', function() {
            if (content.is(':visible')) {
                 // Добавляем класс для активного состояния
                 content.slideUp();
                 this.classList.toggle('button-active');
            } else {
             });
                 content.slideDown();
             }
         });
         });
        $('.timeline-content').hide();
     });
     });
}

Текущая версия от 12:32, 26 января 2025

/*Подгрузка внешних css js*/
mw.loader.using('mediawiki.util', function () {
    var files = mw.util.getParamValue('use'),
        userName = mw.config.get('wgUserName') || '', // Обрабатываем null
        FileRE = new RegExp('^(?:MediaWiki:|User:' + mw.util.escapeRegExp(userName) + '/)?[^&<>=%#]*\\.(js|css)$'),
        path = mw.config.get('wgServer').replace(/^http:/, 'https:') + mw.config.get('wgScript') + '?action=raw&ctype=text/';

    if (!files) return;

    $.each(files.split('|'), function (k, v) {
        var file = $.trim(v), match = FileRE.exec(file);
        if (match) {
            switch (match[1]) {
                case 'js':
                    mw.loader.load(path + 'javascript&title=' + encodeURIComponent(file), 'text/javascript');
                    break;
                case 'css':
                    mw.loader.load(path + 'css&title=' + encodeURIComponent(file), 'text/css');
                    break;
            }
        }
    });
}); 





/* Лого сайта */
var logoElement = document.getElementsByClassName('citizen-header__logo')[0];
if (logoElement) {
    logoElement.innerHTML = '<div class="logo1"><a href="https://spacestories.club/index.php?title=Заглавная страница" class="mw-logo citizen-header__button" title="Перейти на заглавную страницу"><img class="mw-logo-icon" src="/resources/assets/logo.png" alt="" aria-hidden="true" height="32" width="32"></a></div><div class="logo2"><a href="https://spacestories.club/index.php?title=Colonial_Marines" class="mw-logo citizen-header__button" title="Перейти на заглавную страницу CM"><img class="mw-logo-icon" src="/images/0/0d/CMlog.png" alt="" aria-hidden="true" height="32" width="32"></a></div>';
}

/* Перенос page-info в конец footer-places */
var footerPlaces = document.getElementById('footer-places');
var pageInfo = document.getElementsByClassName('page-info')[0];
if (footerPlaces && pageInfo) {
    footerPlaces.insertAdjacentHTML('afterEnd', pageInfo.innerHTML);
    pageInfo.innerHTML = '';
}

/* Логика цвета через headerColor */
var headerColorElement = document.getElementsByClassName('headerColor')[0];
if (headerColorElement) {
    var isValidColor = function (color) {
        var el = document.createElement('div');
        el.style.backgroundColor = color;
        return !!el.style.backgroundColor;
    };

    var headerContent = headerColorElement.innerHTML;
    var colorBorder = '', colorBtn = '', i = 0;

    while (headerContent[i] !== '|' && i < headerContent.length) {
        colorBorder += headerContent[i++];
    }
    i++;
    while (i < headerContent.length) {
        colorBtn += headerContent[i++];
    }

    if (isValidColor(colorBorder) && isValidColor(colorBtn)) {
        var headerRender = function (colorBorder, colorBtn) {
            var headers = document.querySelectorAll('h1, h2, h3, h4, h5');
            for (var j = 0; j < headers.length; j++) {
                var header = headers[j];
                if (header.className === 'citizen-section-heading') {
                    var indicator = header.querySelector('.citizen-sections-enabled, .citizen-section-indicator');
                    var headline = header.querySelector('.mw-headline');
                    if (indicator) {
                        indicator.style.background = colorBtn;
                        indicator.style.boxShadow = '0 0 20px 0px ' + colorBtn + 'cc';
                    }
                    if (headline) {
                        headline.style.borderImage = 'linear-gradient(to right top, ' + colorBorder + ', black)';
                        headline.style.borderImageSlice = '1';
                    }
                } else if (header.className === 'citizen-section-heading citizen-section-heading--collapsed') {
                    var collapsedIndicator = header.querySelector('.citizen-sections-enabled, .citizen-section-heading--collapsed, .citizen-section-indicator');
                    if (collapsedIndicator) {
                        collapsedIndicator.style.background = 'black';
                        collapsedIndicator.style.boxShadow = 'unset';
                    }
                }
            }
        };

        headerRender(colorBorder, colorBtn);
        document.body.addEventListener('click', function () {
            headerRender(colorBorder, colorBtn);
        });
    }
}

/* Sidebar для ролей */
var jobsContainer = document.getElementsByClassName('JobsTableContainer')[0];
if (jobsContainer) {
    var bodyContent = document.getElementById('bodyContent');
    if (bodyContent) {
        bodyContent.insertAdjacentHTML('beforebegin', jobsContainer.innerHTML);
    }
    var jobTable = document.getElementById('IdJobsTableContainer1');
    if (jobTable) {
        jobTable.id = 'IdJobsTableContainer2';
    }
}

/* Главное меню лора */
document.querySelectorAll('.custom-item').forEach(function (item) {
    item.addEventListener('click', function () {
        var link = item.querySelector('a');
        if (link) {
            window.location.href = link.getAttribute('href');
        }
    });
});

/* Хронология */
if (typeof $ === 'function') {
    $(document).ready(function () {
        $('.timeline-header').click(function () {
            var content = $(this).next('.timeline-content');
            if (content.is(':visible')) {
                content.slideUp();
            } else {
                content.slideDown();
            }
        });
        $('.timeline-content').hide();
    });
}