|
Метки: очистка ручная отмена |
| (не показано 19 промежуточных версий 2 участников) |
| Строка 1: |
Строка 1: |
| mw.hook('wikipage.content').add(function () {
| |
| const themes = {
| |
| 'theme-nanotrasen': { name: 'Nanotrasen TGUI', logo: '/images/5/58/Nanotrasen-logo.png' },
| |
| 'theme-syndicate': { name: 'Syndicate TGUI', logo: mw.util.getUrl('Special:Redirect/file/Syndicate-logo.png') },
| |
| 'theme-plasmafire': { name: 'Plasmafire' },
| |
| 'theme-clockcult': { name: 'Clock Cult' },
| |
| 'theme-bloodcult': { name: 'Blood Cult' },
| |
| 'theme-heretic': { name: 'Heretic' },
| |
| 'theme-stddark': { name: 'Standard Dark' },
| |
| 'theme-default': { name: 'Standard Light' }
| |
| };
| |
|
| |
|
| function applyTheme(themeId) {
| |
| Object.keys(themes).forEach(id => document.body.classList.remove(id));
| |
| document.body.classList.remove('theme-active-dark');
| |
|
| |
| if (themeId && themes[themeId]) {
| |
| document.body.classList.add(themeId);
| |
| if (themeId !== 'theme-default') {
| |
| document.body.classList.add('theme-active-dark');
| |
| }
| |
| localStorage.setItem('mw-tg-theme', themeId);
| |
|
| |
| const logoImg = document.querySelector('.mw-wiki-logo, .vector-header-container .mw-logo-img, .vector-logo-img');
| |
| if (logoImg) {
| |
| if (logoImg.tagName === 'IMG') {
| |
| logoImg.src = themes[themeId].logo;
| |
| } else {
| |
| logoImg.style.backgroundImage = `url(${themes[themeId].logo})`;
| |
| }
| |
| }
| |
| }
| |
| }
| |
|
| |
| function injectSelector() {
| |
| if (document.getElementById('p-tg-theme')) return;
| |
|
| |
| const activeTheme = localStorage.getItem('mw-tg-theme') || 'theme-stddark';
| |
| applyTheme(activeTheme);
| |
|
| |
| let selectHtml = '<div id="p-tg-theme" class="vector-menu vector-dropdown vector-user-menu-logged-in" style="margin-right: 8px; display: inline-block !important; vertical-align: middle !important; position: relative;">';
| |
| selectHtml += '<input type="checkbox" id="p-tg-theme-dropdown-checkbox" role="button" aria-haspopup="true" class="vector-dropdown-checkbox">';
| |
| selectHtml += '<label id="p-tg-theme-dropdown-label" for="p-tg-theme-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--weight-quiet cdx-button--icon-only" aria-label="Смена темы" title="Выбрать тему фракции" style="display: flex !important; width: 32px !important; height: 32px !important; align-items: center; justify-content: center; border: 1px solid var(--border-color, #444) !important; background: var(--bg-input, #222) !important; cursor: pointer; padding: 0 !important; box-sizing: border-box !important;">';
| |
| selectHtml += '<span class="tg-custom-palette-icon" style="display: block !important; width: 26px !important; height: 26px !important;"></span>';
| |
| selectHtml += '</label>';
| |
| selectHtml += '<div class="vector-dropdown-content" style="padding: 8px; min-width: 180px; display: none; position: absolute; top: 100%; right: 0; z-index: 1000;">';
| |
| selectHtml += '<ul class="vector-menu-content-list" style="margin: 0; padding: 0; list-style: none;">';
| |
|
| |
| Object.keys(themes).forEach(id => {
| |
| const isSelected = id === activeTheme ? 'font-weight: bold; color: var(--accent) !important;' : '';
| |
| selectHtml += `<li style="margin: 4px 0;"><a href="#" class="tg-theme-item" data-theme="${id}" style="display: block; padding: 6px 8px; border-radius: 4px; text-decoration: none; ${isSelected}">${themes[id].name}</a></li>`;
| |
| });
| |
|
| |
| selectHtml += '</ul></div></div>';
| |
|
| |
| const targets = [
| |
| document.querySelector('.vector-user-links-main'),
| |
| document.getElementById('p-personal-more'),
| |
| document.getElementById('p-userlinks'),
| |
| document.querySelector('.vector-user-links'),
| |
| document.querySelector('.vector-header-end')
| |
| ];
| |
|
| |
| for (let target of targets) {
| |
| if (target) {
| |
| $(target).before(selectHtml);
| |
| break;
| |
| }
| |
| }
| |
| }
| |
|
| |
| const checkExist = setInterval(function() {
| |
| const userLinks = document.querySelector('.vector-user-links, .vector-header-end');
| |
| if (userLinks) {
| |
| injectSelector();
| |
| clearInterval(checkExist);
| |
| }
| |
| }, 100);
| |
| });
| |
|
| |
| $(document).on('change', '#p-tg-theme-dropdown-checkbox', function() {
| |
| const content = $(this).siblings('.vector-dropdown-content');
| |
| if (this.checked) {
| |
| content.css('display', 'block');
| |
| } else {
| |
| content.css('display', 'none');
| |
| }
| |
| });
| |
|
| |
| $(document).on('click', '.tg-theme-item', function (e) {
| |
| e.preventDefault();
| |
| const chosenTheme = $(this).data('theme');
| |
|
| |
| const classes = ['theme-stddark', 'theme-nanotrasen', 'theme-syndicate', 'theme-plasmafire', 'theme-clockcult', 'theme-bloodcult', 'theme-heretic', 'theme-default'];
| |
| classes.forEach(id => document.body.classList.remove(id));
| |
| document.body.classList.remove('theme-active-dark');
| |
|
| |
| document.body.classList.add(chosenTheme);
| |
| if (chosenTheme !== 'theme-default') {
| |
| document.body.classList.add('theme-active-dark');
| |
| }
| |
| localStorage.setItem('mw-tg-theme', chosenTheme);
| |
|
| |
| const logos = {
| |
| 'theme-nanotrasen': '/images/5/58/Nanotrasen-logo.png',
| |
| 'theme-syndicate': '/images/c/ce/Syndicate-logo.png',
| |
| };
| |
| const logoImg = document.querySelector('.mw-wiki-logo, .vector-header-container .mw-logo-img, .vector-logo-img');
| |
| if (logoImg) {
| |
| if (logoImg.tagName === 'IMG') { logoImg.src = logos[chosenTheme]; }
| |
| else { logoImg.style.backgroundImage = `url(${logos[chosenTheme]})`; }
| |
| }
| |
|
| |
| $('.tg-theme-item').css({'font-weight': 'normal', 'color': ''});
| |
| $(this).css({'font-weight': 'bold', 'color': 'var(--accent)'});
| |
| $('#p-tg-theme-dropdown-checkbox').prop('checked', false).trigger('change');
| |
| });
| |