MediaWiki:Common.js

Pokewiz讨论 | 贡献2024年9月24日 (二) 08:46的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
// 添加新按钮
function addToggleButton() {
    var navbarNav = document.querySelector('ul.nav.navbar-nav');
    if (!navbarNav) {
        console.error('未找到 ul.nav.navbar-nav 元素');
        return null;
    }
    var newButton = document.createElement('li');
    newButton.className = 'dropdown nav-item';
    newButton.innerHTML = 
        '<a class="nav-link" role="button" title="切换版本" href="#" id="toggleButton">' +
            '<span class="fa fa-exchange"></span>' +
            '<span class="hide-title">切换版本</span>' +
        '</a>';
    navbarNav.appendChild(newButton);
    console.log('新按钮已添加到导航栏');
    return document.getElementById('toggleButton');
}

// 切换显示/隐藏类
function toggleClasses(showHOTA) {
    var hotaElements = document.querySelectorAll('.onlyhota');
    var sodElements = document.querySelectorAll('.onlysod');
    
    for (var i = 0; i < hotaElements.length; i++) {
        hotaElements[i].style.display = showHOTA ? '' : 'none';
    }
    for (var j = 0; j < sodElements.length; j++) {
        sodElements[j].style.display = showHOTA ? 'none' : '';
    }
}

// 切换显示/隐藏类
function toggleTemplate(showHOTA) {
    // 获取 #mw-customcollapsible-hota 下的 .mw-collapsible-content 元素
    var hotaElements = document.querySelectorAll('#mw-customcollapsible-hota .mw-collapsible-content');
    // 获取 #mw-customcollapsible-sod 下的 .mw-collapsible-content 元素
    var sodElements = document.querySelectorAll('#mw-customcollapsible-sod .mw-collapsible-content');

    // 切换 HOTA 模板内容的显示/隐藏
    for (var i = 0; i < hotaElements.length; i++) {
        hotaElements[i].style.display = showHOTA ? '' : 'none';
    }

    // 切换 SOD 模板内容的显示/隐藏
    for (var j = 0; j < sodElements.length; j++) {
        sodElements[j].style.display = showHOTA ? 'none' : '';
    }
}

// 设置Cookie
function setCookie(name, value, days) {
    var expires = new Date(Date.now() + days * 864e5).toUTCString();
    document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=/';
}

// 获取Cookie
function getCookie(name) {
    return document.cookie.split('; ').reduce(function(r, v) {
        var parts = v.split('=');
        return parts[0] === name ? decodeURIComponent(parts[1]) : r;
    }, '');
}

// 主函数
function initToggleButton() {
    console.log('初始化切换按钮');
    var button = addToggleButton();
    if (!button) {
        console.error('添加按钮失败');
        return;
    }

    var isHOTA = getCookie('isHOTA') !== 'false'; // 修复:将字符串 'false' 转换为布尔值

    function updateButtonText() {
        button.querySelector('.hide-title').textContent = isHOTA ? '切换至死亡阴影' : '切换至深渊号角';
    }

    function toggleVersion() {
        isHOTA = !isHOTA;
        toggleClasses(isHOTA);
        toggleTemplate(isHOTA);
        updateButtonText();
        setCookie('isHOTA', isHOTA, 30); // 修复:将布尔值存储为字符串 'true' 或 'false'
        console.log('版本已切换,当前状态:', isHOTA ? 'HOTA' : 'SOD');
    }

    button.addEventListener('click', function(e) {
        e.preventDefault();
        toggleVersion();
    });

    // 初始化
    toggleClasses(isHOTA);
    toggleTemplate(isHOTA);
    updateButtonText();
    console.log('切换按钮初始化完成');
}

// 确保DOM完全加载后执行初始化
if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initToggleButton);
} else {
    initToggleButton();
}

// 添加一个全局函数用于手动触发初始化(以防其他方法失败)
window.manualInitToggleButton = initToggleButton;