打开/关闭菜单
6629
8
8126
OGAS数据中枢
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

Widget:Countdown:修订间差异

来自OGAS数据中枢
imported>弃权者
撤销弃权者讨论)的修订版本2092
imported>弃权者
无编辑摘要
第2行: 第2行:
"use strict";
"use strict";
(function() {
(function() {
    // 如果 moment 已经存在,直接初始化
     if (typeof moment !== 'undefined') {
     if (typeof moment !== 'undefined') {
         initCountdown();
         initCountdown();
第8行: 第7行:
     }
     }
      
      
    // 检查是否支持 mw.loader
     if (typeof mw !== 'undefined' && mw.loader && typeof mw.loader.using === 'function') {
     if (typeof mw !== 'undefined' && mw.loader && typeof mw.loader.using === 'function') {
         mw.loader.using('moment').then(initCountdown).catch(loadFromCDN);
         mw.loader.using('moment').then(initCountdown).catch(loadFromCDN);
     } else {
     } else {
        // mw.loader 不可用,直接从 CDN 加载
         loadFromCDN();
         loadFromCDN();
     }
     }
      
      
     function loadFromCDN() {
     function loadFromCDN() {
        // 国内 CDN 备选列表
         var script = document.createElement('script');
         var cdnList = [
        script.src = 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js';
            'https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.4/moment.min.js',
         script.onload = initCountdown;
            'https://cdn.staticfile.org/moment.js/2.29.4/moment.min.js',
         script.onerror = function() {
            'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js'
             document.querySelectorAll('.countdownNode').forEach(el => {
        ];
                el.textContent = '(无法加载时间库)';
          
                el.classList.add('error');
        tryLoadCDN(0);
             });
          
        };
        function tryLoadCDN(index) {
        document.head.appendChild(script);
             if (index >= cdnList.length) {
                // 所有 CDN 都失败
                document.querySelectorAll('.countdownNode').forEach(el => {
                    el.textContent = '(无法加载时间库)';
                    el.classList.add('error');
                });
                return;
             }
           
            var script = document.createElement('script');
            script.src = cdnList[index];
            script.onload = initCountdown;
            script.onerror = function() {
                tryLoadCDN(index + 1); // 尝试下一个 CDN
            };
            document.head.appendChild(script);
        }
     }
     }
      
      
     function initCountdown() {
     function initCountdown() {
        // 确保 DOM 加载完成
         if (document.readyState === 'loading') {
         if (document.readyState === 'loading') {
             document.addEventListener('DOMContentLoaded', setupCountdown);
             document.addEventListener('DOMContentLoaded', setupCountdown);
第130行: 第109行:
         const run = () => {
         const run = () => {
             if (typeof jQuery === 'undefined') {
             if (typeof jQuery === 'undefined') {
                // 如果没有 jQuery,使用原生方法
                 document.querySelectorAll(".countdownNode:not(.disabled)").forEach(ele => {
                 document.querySelectorAll(".countdownNode:not(.disabled)").forEach(ele => {
                     const time = moment(ele.dataset.target);
                     const time = moment(ele.dataset.target);
第138行: 第116行:
                 });
                 });
             } else {
             } else {
                // 有 jQuery 就用 jQuery
                 jQuery(".countdownNode:not(.disabled)").each((_, ele) => {
                 jQuery(".countdownNode:not(.disabled)").each((_, ele) => {
                     const self = jQuery(ele);
                     const self = jQuery(ele);
第146行: 第123行:
         };
         };
          
          
        // 初始化所有倒计时节点
         if (typeof jQuery === 'undefined') {
         if (typeof jQuery === 'undefined') {
            // 原生方式
             document.querySelectorAll(".countdownNode").forEach(ele => {
             document.querySelectorAll(".countdownNode").forEach(ele => {
                 const time = moment(ele.dataset.target);
                 const time = moment(ele.dataset.target);
第159行: 第134行:
             });
             });
         } else {
         } else {
            // jQuery 方式
             jQuery(".countdownNode").each((_, ele) => {
             jQuery(".countdownNode").each((_, ele) => {
                 const self = jQuery(ele),
                 const self = jQuery(ele),

2026年3月4日 (三) 12:31的版本

仅供{{Countdown}}使用。