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

Страница интерфейса MediaWiki
(Отмена правки 14820, сделанной Dantes (обсуждение))
Метка: отмена
Нет описания правки
 
(не показаны 44 промежуточные версии 2 участников)
Строка 1: Строка 1:
/* ----------------------------------------------Блок Shegare ---------------------------------------------------------------------------------*/
/*Подгрузка внешних css js*/
/* Лого сайта
mw.loader.using('mediawiki.util', function () {
Shegare */
    var files = mw.util.getParamValue('use'),
document.getElementsByClassName('citizen-header__logo')[0].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>';
        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/';


/* Перенос page-info в конец footer-places
    if (!files) return;
Shegare */
document.getElementById('footer-places').insertAdjacentHTML('afterEnd', document.getElementsByClassName('page-info')[0].innerHTML);
document.getElementsByClassName('page-info')[0].innerHTML = null;


/* Begin логика цвета через headerColor
    $.each(files.split('|'), function (k, v) {
Shegare */
        var file = $.trim(v), match = FileRE.exec(file);
if (document.getElementsByClassName('headerColor').length >= 1) {
        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 isValidColor = function (color) {
    var el = document.createElement('div');
    el.style.backgroundColor = color;
    return el.style.backgroundColor ? true : false;
  };


  var header = document.getElementsByClassName('headerColor');
  var colorBorder = '';
  var colorBtn = '';
  var i = 0;


  for (; header[0].innerHTML[i] !== '|' && i < header[0].innerHTML.length; i++) {
    colorBorder += header[0].innerHTML[i];
  }
  i++;
  for (; i < header[0].innerHTML.length; i++) {
    colorBtn += header[0].innerHTML[i];
  }


  if (isValidColor(colorBorder) && isValidColor(colorBtn) && header[0].innerHTML.length > 0) {
    headerRender(colorBorder, colorBtn);
    document.body.addEventListener('click', function () {
      headerRender(colorBorder, colorBtn);
    });
  } else {
    throw "headerColor";
  }
}


function headerRender(colorBorder, colorBtn) {
/* Лого сайта */
  var array = document.querySelectorAll('h1, h2, h3 , h4, h5');
var logoElement = document.getElementsByClassName('citizen-header__logo')[0];
  for (var i = 0; i < array.length; i++) {
if (logoElement) {
     if (array[i].className === 'citizen-section-heading') {
     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>';
      array[i].querySelector('.citizen-sections-enabled,.citizen-section-indicator').style.background = colorBtn;
      array[i].querySelector('.citizen-sections-enabled,.citizen-section-indicator').style.boxShadow = ('0 0 20px 0px ' + colorBtn + 'cc');
      array[i].querySelector('.mw-headline').style.borderImage = ('linear-gradient(to right top, ' + colorBorder + ', black)');
      array[i].querySelector('.mw-headline').style.borderImageSlice = '1';
    } else if (array[i].className === 'citizen-section-heading citizen-section-heading--collapsed') {
      array[i].querySelector('.citizen-sections-enabled,.citizen-section-heading--collapsed,.citizen-section-indicator').style.background = 'black';
      array[i].querySelector('.citizen-sections-enabled,.citizen-section-heading--collapsed,.citizen-section-indicator').style.boxShadow = 'unset';
    }
  }
}
}
/* End логика цвета через headerColor
Shegare */


/* Begin sidebar для ролей
/* Перенос page-info в конец footer-places */
Shegare */
var footerPlaces = document.getElementById('footer-places');
if (document.getElementsByClassName('JobsTableContainer').length >= 1) {
var pageInfo = document.getElementsByClassName('page-info')[0];
    document.getElementById('bodyContent').insertAdjacentHTML('beforebegin', document.getElementsByClassName('JobsTableContainer')[0].innerHTML);
if (footerPlaces && pageInfo) {
     document.getElementById('IdJobsTableContainer1').id = 'IdJobsTableContainer2';
     footerPlaces.insertAdjacentHTML('afterEnd', pageInfo.innerHTML);
    pageInfo.innerHTML = '';
}
}


/* End sidebar для ролей
/* Логика цвета через headerColor */
Shegare */
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;


/*Год 25*/
    while (headerContent[i] !== '|' && i < headerContent.length) {
document.getElementsByClassName('citizen-header__logo')[0].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><div id="snow-toggle-container"><div id="snow-toggle">⛄</div></div>';
        colorBorder += headerContent[i++];
 
    }
(function () {
    i++;
  var snowflakes = [];
    while (i < headerContent.length) {
  var numSnowflakes = 50;
        colorBtn += headerContent[i++];
  var snowActive = localStorage.getItem('snowActive') === 'true';
    }
  var toggleButton;
  var snowInterval;


  function createSnowflake() {
    if (isValidColor(colorBorder) && isValidColor(colorBtn)) {
    var snowflake = document.createElement('div');
        var headerRender = function (colorBorder, colorBtn) {
    snowflake.className = 'snowflake';
            var headers = document.querySelectorAll('h1, h2, h3, h4, h5');
    snowflake.innerHTML = '&#10052;';
            for (var j = 0; j < headers.length; j++) {
    snowflake.style.left = Math.random() * 100 + 'vw';
                var header = headers[j];
    snowflake.style.animationDuration = 5 + Math.random() * 5 + 's';
                if (header.className === 'citizen-section-heading') {
    snowflake.style.fontSize = Math.random() * 10 + 10 + 'px';
                    var indicator = header.querySelector('.citizen-sections-enabled, .citizen-section-indicator');
    snowflake.style.animationDelay = Math.random() * 5 + 's';
                    var headline = header.querySelector('.mw-headline');
    document.body.appendChild(snowflake);
                    if (indicator) {
    snowflakes.push(snowflake);
                        indicator.style.background = colorBtn;
    setTimeout(function () {
                        indicator.style.boxShadow = '0 0 20px 0px ' + colorBtn + 'cc';
      snowflake.parentNode.removeChild(snowflake);
                    }
      snowflakes.splice(snowflakes.indexOf(snowflake), 1);
                    if (headline) {
    }, 10000);
                        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';
                    }
                }
            }
        };


  function startSnowfall() {
        headerRender(colorBorder, colorBtn);
    if (snowActive) return;
        document.body.addEventListener('click', function () {
    snowActive = true;
            headerRender(colorBorder, colorBtn);
    localStorage.setItem('snowActive', 'true');
        });
    for (var i = 0; i < numSnowflakes; i++) {
      setTimeout(createSnowflake, i * 200);
     }
     }
    snowInterval = setInterval(createSnowflake, 300);
}
  }


  function stopSnowfall() {
/* Sidebar для ролей */
    snowActive = false;
var jobsContainer = document.getElementsByClassName('JobsTableContainer')[0];
    localStorage.setItem('snowActive', 'false');
if (jobsContainer) {
    clearInterval(snowInterval);
     var bodyContent = document.getElementById('bodyContent');
     for (var i = 0; i < snowflakes.length; i++) {
    if (bodyContent) {
      snowflakes[i].parentNode.removeChild(snowflakes[i]);
        bodyContent.insertAdjacentHTML('beforebegin', jobsContainer.innerHTML);
     }
     }
     snowflakes = [];
     var jobTable = document.getElementById('IdJobsTableContainer1');
  }
     if (jobTable) {
 
        jobTable.id = 'IdJobsTableContainer2';
  function toggleSnowfall() {
     if (snowActive) {
      stopSnowfall();
      toggleButton.className = 'snow-off';
    } else {
      startSnowfall();
      toggleButton.className = 'snow-on';
     }
     }
  }
}


  function createToggleButton() {
/* Главное меню лора */
    toggleButton = document.getElementById('snow-toggle');
document.querySelectorAll('.custom-item').forEach(function (item) {
    toggleButton.className = snowActive ? 'snow-on' : 'snow-off';
    item.addEventListener('click', function () {
    toggleButton.onclick = toggleSnowfall;
        var link = item.querySelector('a');
    if (snowActive) startSnowfall();
        if (link) {
  }
            window.location.href = link.getAttribute('href');
 
        }
  if (document.readyState === 'loading') {
    });
    document.addEventListener('DOMContentLoaded', createToggleButton);
  } else {
    createToggleButton();
  }
})();
 
/*Год 25*/
/* ----------------------------------------------------------Главное меню лора------------------------------------------------------------------------ */
document.querySelectorAll('.custom-item').forEach(function(item) {
  item.addEventListener('click', function() {
    window.location.href = item.querySelector('a').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();
    });
}

Текущая версия от 11:37, 18 января 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();
    });
}