MediaWiki:Mainpage.js:修订间差异

MediaWiki界面页面
无编辑摘要
(图片还是早点加载比较好。)
(未显示同一用户的9个中间版本)
第1行: 第1行:
$(function() {
var mainpageModule = (function() {
if (mw.config.get('wgPageName') == '首页') {
   /**
   /获取服务器人数 信息 */
   配置 信息
   function getServerStatus() {
   */
     if ($("#live-player-status").length > 0) {
   var config = {
$("#live-info-start").css("display" , "none");
     apiUrl: "https://api.hydcraft.cn/query/MainpageInfoQuery.php",
$("#live-info-stop").css("display" , "none");
     onlineStatusColor: {
    
       0: "var(--header-serverStatus-status--0)",
       $.getJSON("https://api.hydcraft.cn/query/NitrogenStatus.php", function(data) {
       1: "var(--header-serverStatus-status--1)",
       if (data.code == 200) {
       2: "var(--header-serverStatus-status--2)",
         if (data.status == 3) {
       3: "var(--header-serverStatus-status--3)"
           $("#live-info-start").css("display" , "block");
     },
           var curPlayers = data.players.now;
     tendersBlockIcons: {
           var maxPlayers = data.players.max;
       10: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/e/ee/Mainpage-Exchange.svg',
           var width = curPlayers / maxPlayers;
       11: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/3/35/Mainpage-Handshake.svg',
       12: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/5/5f/Mainpage-Construct.svg',
           var statusText = curPlayers + " / " + maxPlayers;
       13: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/d/d5/Mainpage-Done.svg'
     }
           $("#live-player-progress").css("background-color" , "#096dd9");
   };
 
           $("#live-player-status").html(statusText + " (" + (width * 100).toFixed(1) + "%)");
 
           $("#live-player-progress").width(width * 100 + '%');
 
         } else if (data.status == 2) {
   /**
           $("#live-info-stop").css("display" , "block");
   * 创建并返回一个招标信息的 HTML 字符串。
           var statusText = "服务器启动中";
  
           $("#live-player-status").html(statusText);
   * @param {Object} tender - 招标信息对象。
           $("#live-player-progress").width(0 + '%');
   * @param {number} tender.prefix_id - 招标状态ID。
         } else if (data.status == 1) {
   * @param {string} tender.view_url - 招标详情页面的 URL。
           $("#live-info-stop").css("display" , "block");
   * @param {string} tender.title - 招标标题。
           var statusText = "服务器关闭中";
   * @param {string} tender.post_date - 招标发布日期。
           $("#live-player-status").html(statusText);
   * @param {string} tender.user_view_url - 发布用户的页面 URL。
           $("#live-player-progress").width(0 + '%');
   * @param {string} [tender.user_avatar] - 发布用户的头像 URL。
         } else if (data.status == 0) {
   * @param {string} tender.username - 发布用户的用户名。
           $("#live-info-stop").css("display" , "block");
   * @returns {string} 招标信息的 HTML 字符串。
           var statusText = "服务器未启动";
   */
           $("#live-player-status").html(statusText);
   function createTenderBlock(tender) {
           $("#live-player-progress").width(0 + '%');
     var tendersBlockPrefixMap = {
         }
       10: ' 招标中',
       } else {
       11: '已中标',
         $("#live-info-stop").css("display" , "block");
       12: '开工中',
         var statusText = "API 无法连接服务器";
       13: '已交付'
         $("#live-player-status").html(statusText);
     };
         $("#live-player-progress").width(0 + '%');
 
       }
     var tendersBlockTemplate = `
       })
       <div class="nav-tenders-block">
         <div class="nav-tenders-block__top">
       .fail(function (xhr) {
           <div class="nav-tenders-block__prefix">${tendersBlockPrefixMap[tender.prefix_id]}</div>
         $("#live-player-status").html(" 无法获取服务器信息");
           <div class="nav-tenders-block__icon"><img src="${config.tendersBlockIcons[tender.prefix_id]}"></div>
         $("#live-player-progress").width(100 + '%');
         </div>
         $("#live-player-progress").css("background-color" , "#ff0000");
         <div class="nav-tenders-block__bottom">
       });
           <div class="nav-tenders-block__title"><a class="nav-tenders-block__link" href="${tender.view_url}">${tender.title}</a></div>
     }
           <div class="nav-tenders-block__user">
   }
             <div class="nav-tenders-block__time">${tender.post_date}</div>
             <a class="nav-tenders-block__username" href="${tender.user_view_url}"><img src="${tender.user_avatar ? tender.user_avatar : ''}">${tender.username}</a>
   getServerStatus();
           </div>
   setInterval(getServerStatus, 60000);
         </div>
       </div>
   var interval = setInterval(function() {
     `;
     if (typeof sakanaLoaded !== 'undefined' && sakanaLoaded) {
 
       clearInterval(interval);
     return tendersBlockTemplate;
       animate();
   }
     }
 
   }, 100);
 
 
   /* 获取 海报 */
   /**
if ($('body.page- 首页').length) {
   * 根据API返回的数据更新在线状态显示。
var newDiv = $('<div>', {
   *
'class': 'banner-image'
   * @param {Object} data - 从API 获取 的数据对象。
});
   * @param {Object} data.server_status - 服务器状态对象。
$('#content').before(newDiv);
   * @param {Object} data.server_status.nitrogen - 特定服务器的状态信息。
}
   */
   function updateOnlineStatus(data) {
   /* 字体动画 */
     var onlineStatus = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlineStatus");
   function animate() {
     var onlinePlayer = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlinePlayer");
     return new Promise(resolve => {
     if (data.server_status.nitrogen.code == 200) {
       let textBox = $('#title');
       var onlinePlayerIndex;
       let ani_index = 0;
       var onlineStatusText;
       let str = 'Welcome to HydCraft Wiki! :D';
 
       let len = str.length;
       if (data.server_status.nitrogen.status == 3) {
    
         if (data.server_status.nitrogen.players.now == -1 || data.server_status.nitrogen.max == -1) {
       function input() {
           onlinePlayerIndex = 2;
         textBox.html(str.substr(0, ani_index) + '<span class="animate">|</span>');
           onlineStatusText = `服崩了`;
         setTimeout(function() {
         } else {
           ani_index++;
           onlinePlayerIndex = 3;
           if (ani_index === len + 1) {
           onlineStatusText = `${data.server_status.nitrogen.players.now}/${data.server_status.nitrogen.players.max}`;
           $('.animate').addClass('on');
         }
           resolve(); // 动画执行完成后,调用 resolve() 以解析 Promise
       } else if (data.server_status.nitrogen.status == 2) {
           return;
         onlinePlayerIndex = 2;
           }
         onlineStatusText = `正在开`;
           input();
       } else if (data.server_status.nitrogen.status == 1) {
         }, Math.random() * 600);
         onlinePlayerIndex = 2;
       }
         onlineStatusText = `正在关`;
    
       } else if (data.server_status.nitrogen.status == 0) {
       input();
         onlinePlayerIndex = 1;
     });
         onlineStatusText = `服没开`;
   }
       }
   animate();
 
} else if (mw.config.get('wgPageName') == '首页副本') {
       onlineStatus.css("background", config.onlineStatusColor[onlinePlayerIndex]);
var mainpageModule = (function() {
       onlinePlayer.text(onlineStatusText);
   /**
     } else {
   * 插入头图
       onlineStatus.css("background", config.onlineStatusColor[0]);
   */
       onlinePlayer.text(`API 炸了`);
   $('<div>').addClass('banner-image').insertBefore('#content');
     }
   }
   /**
 
   * 请求首页信息
 
  
 
   * @param {void}
   /**
   * @returns {void}
   * 根据API返回的数据更新招标信息显示。
   */
  
   function mainpageInfoRequest() {
   * @param {Object} data - 包含招标信息的数据对象。
     let formattedToday = new Date().toISOString().split('T')[0];
   */
   function updateTendersInfo(data) {
     const onlineStatus = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlineStatus");
     var tendersWrapper = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-content");
     const onlinePlayer = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlinePlayer");
     var tendersCount = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-header .nav-tenders-header__count .nav-tenders-header__countvalue");
     const tendersWrapper = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-content");
 
     const tendersCount = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-header .nav-tenders-header__count .nav-tenders-header__countvalue");
     var formattedToday = new Date().toISOString().split('T')[0];
     const statisticsPlayerTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__playerTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
     let tendersMonthlyCount = 0;
     const statisticsEntTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__entTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
     tendersWrapper.empty();
     const statisticsLauncherCurrent = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__launcherCurrent .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
     $.each(data.server_community.server_tenders, function (index, tender) {
    
       if (tender.post_date.split(' ')[0] == formattedToday) {
     const onlineStatusColor = {
         tendersMonthlyCount++;
       0: "var(--header-serverStatus-status--0)",
       }
       1: "var(--header-serverStatus-status--1)",
       var tenderBlock = createTenderBlock(tender);
       2: "var(--header-serverStatus-status--2)",
       tendersWrapper.append(tenderBlock);
       3: "var(--header-serverStatus-status--3)",
     });
     };
     tendersCount.text(tendersMonthlyCount);
   }
     $.getJSON("https://api.hydcraft.cn/query/MainpageInfoQuery.php", function(data) {
 
       /**
 
       显示服务器人数
 
       */
   /**
       if (data.server_status.nitrogen.code == 200) {
   * 根据API返回的数据更新统计信息显示。
         let onlinePlayerIndex;
   *
         let onlineStatusText;
   * @param {Object} data - 包含统计信息的数据对象。
   */
         if (data.server_status.nitrogen.status == 3) {
   function updateStatistics(data) {
           if (data.server_status.nitrogen.players.now == -1 || data.server_status.nitrogen.max == -1) {
     var statisticsPlayerTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__playerTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
             onlinePlayerIndex = 2;
     var statisticsEntTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__entTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
             onlineStatusText = `服崩了`;
     var statisticsLauncherCurrent = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__launcherCurrent .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
           } else {
 
             onlinePlayerIndex = 3;
     statisticsPlayerTotal.text(data.server_count.player_total);
             onlineStatusText = `${data.server_status.nitrogen.players.now}/${data.server_status.nitrogen.players.max}`;
     statisticsEntTotal.text(data.server_count.enterprise_total);
           }
     statisticsLauncherCurrent.text(data.server_count.launcher_current.nitrogen);
         } else if (data.server_status.nitrogen.status == 2) {
   }
           onlinePlayerIndex = 2;
 
           onlineStatusText = `正在开`;
 
         } else if (data.server_status.nitrogen.status == 1) {
 
           onlinePlayerIndex = 2;
   /**
           onlineStatusText = `正在关`;
   请求主页信息,并更新页面上的在线状态、招标信息和统计信息。
         } else if (data.server_status.nitrogen.status == 0) {
   *
           onlinePlayerIndex = 1;
   * @param {void}
           onlineStatusText = `服没开`;
   */
         }
   function mainpageInfoRequest() {
     $.getJSON(config.apiUrl, function (data) {
         onlineStatus.css("background", onlineStatusColor[onlinePlayerIndex]);
       updateOnlineStatus(data);
         onlinePlayer.text(onlineStatusText);
       updateTendersInfo(data);
       } else {
       updateStatistics(data);
         onlineStatus.css("background", onlineStatusColor[0]);
     })
         onlinePlayer.text(`API 炸了`);
     .fail(function () {
       }
       updateOnlineStatus({ server_status: { nitrogen: { code: 0 } } });
     });
       /**
   }
       * 招标信息
 
       */
 
       let tendersMonthlyCount = 0;
 
       tendersWrapper.empty();
   /**
       $.each(data.server_community.server_tenders, function(index, tender) {
   * 控制水平工具栏的移动方向。
         if (tender.post_date.split(' ')[0] == tendersMonthlyCount)
   *
           tendersMonthlyCount++;
   * @param {string} direction - 移动方向,可以是 "left" 或 "right"。
   */
         let tendersBlockPrefixMap = {
   function navHorizonTool(direction) {
           10: '招标中',
     var horizonTool = $(".h2-nav .h2-nav__horizonTool");
           11: '已中标',
     var switchLeft = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick");
           12: '开工中',
     var switchRight = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick");
           13: '已交付'
     var horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
         };
     var horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");
 
         let tendersBlockPrefixIconMap = {
     var horizonToolIndex = parseInt(horizonTool.css("--nav-horizonTool-show-block"), 10);
           10: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/e/ee/Mainpage-Exchange.svg',
     var totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;
           11: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/3/35/Mainpage-Handshake.svg',
 
           12: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/5/5f/Mainpage-Construct.svg',
     if (direction === "left") {
           13: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/d/d5/Mainpage-Done.svg'
       horizonToolIndex = Math.max(0, horizonToolIndex - 1);
         }
     } else if (direction === "right") {
        
       horizonToolIndex = Math.min(totalSwitches, horizonToolIndex + 1);
         const tendersBlockTemplate = `
     }
           <div class="nav-tenders-block">
 
             <div class="nav-tenders-block__top">
     horizonTool.css("--nav-horizonTool-show-block", horizonToolIndex);
               <div class="nav-tenders-block__prefix">${tendersBlockPrefixMap[tender.prefix_id]}</div>
     switchLeft.toggleClass("comp-disabled", horizonToolIndex <= 0);
               <div class="nav-tenders-block__icon"><img src="${tendersBlockPrefixIconMap[tender.prefix_id]}"></div>
     switchRight.toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
             </div>
     horizonIndexNow.text(horizonToolIndex + 1);
             <div class="nav-tenders-block__bottom">
     horizonIndexMax.text(totalSwitches + 1);
               <div class="nav-tenders-block__title"><a class="nav-tenders-block__link" href="${tender.view_url}">${tender.title}</a></div>
   }
               <div class="nav-tenders-block__user">
 
                 <div class="nav-tenders-block__time">${tender.post_date}</div>
 
                 <a class="nav-tenders-block__username" href="${tender.user_view_url}"><img src="${tender.user_avatar}">${tender.username}</a>
 
               </div>
   /**
             </div>
   * 初始化。
           </div>
   */
         `;
   $(function() {
     mainpageInfoRequest();
         tendersWrapper.append(tendersBlockTemplate);
     setInterval(mainpageInfoRequest, 60 * 1000);
         tendersCount.text(tendersMonthlyCount);
   });
       });
 
 
       /**
 
       * 统计信息
   return {
       */
     navHorizonTool: navHorizonTool
       statisticsPlayerTotal.text(data.server_count.player_total);
   };
       statisticsEntTotal.text(data.server_count.enterprise_total);
})();
       statisticsLauncherCurrent.text(data.server_count.launcher_current.nitrogen);
 
     })
(function() {
   /**
     .fail(function(xhr) {
   * 插入头图。
       onlineStatus.css("background", onlineStatusColor[0]);
   */
       onlinePlayer.text(`查不到`);
   $('<div>').addClass('banner-image').insertBefore('#content');
 
       tendersWrapper.empty();
   $(function() {
       tendersCount.text(`-`);
     /**
     * 水平工具栏初始化按钮。
       statisticsPlayerTotal.text(`-`);
     */
       statisticsEntTotal.text(`-`);
     const horizonToolIndex = parseInt($(".h2-nav .h2-nav__horizonTool").css("--nav-horizonTool-show-block"));
       statisticsLauncherCurrent.text(`-`);
     const totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;
     });
     const horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
   }
     const horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");
  
   /**
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex <= 0);
   * 水平工具栏控制移动方向的函数
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
   *
    
   * @param { "left" | "right" } direction - 移动的方向,只能是 "left" 或 "right"
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").on("click", function() {
   * @returns {void}
       mainpageModule.navHorizonTool("left");
   */
     });
   function navHorizonTool(direction) {
  
     const horizonTool = $(".h2-nav .h2-nav__horizonTool");
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").on("click", function() {
     const switchLeft = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick");
       mainpageModule.navHorizonTool("right");
     const switchRight = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick");
     });
     const horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
  
     const horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");
     horizonIndexNow.text(horizonToolIndex + 1);
    
     horizonIndexMax.text(totalSwitches + 1);
     var horizonToolIndex = parseInt(horizonTool.css("--nav-horizonTool-show-block"));
   });
     const totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;
})();
     if (direction == "left") {
       horizonToolIndex = Math.max(0, horizonToolIndex - 1);
     } else if (direction == "right") {
       horizonToolIndex = Math.min(totalSwitches, horizonToolIndex + 1);
     }
     horizonTool.css("--nav-horizonTool-show-block", horizonToolIndex);
     switchLeft.toggleClass("comp-disabled", horizonToolIndex <= 0);
     switchRight.toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
     horizonIndexNow.text(horizonToolIndex + 1);
     horizonIndexMax.text(totalSwitches + 1);
   }
   $(function() {
     /**
     * 水平工具栏初始化按钮
     */
     const horizonToolIndex = parseInt($(".h2-nav .h2-nav__horizonTool").css("--nav-horizonTool-show-block"));
     const totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;
     const horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
     const horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex <= 0);
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
    
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").on("click", function() {
       navHorizonTool("left");
     });
     $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").on("click", function() {
       navHorizonTool("right");
     });
     horizonIndexNow.text(horizonToolIndex + 1);
     horizonIndexMax.text(totalSwitches + 1);
   });
   mainpageInfoRequest();
   setInterval(mainpageInfoRequest, 60 * 1000);
   return {
     navHorizonTool: navHorizonTool
   }
})();
}
});

2024年3月24日 (日) 14:02的版本

var mainpageModule = (function() {
    /**
     * 配置信息
     */
    var config = {
        apiUrl: "https://api.hydcraft.cn/query/MainpageInfoQuery.php",
        onlineStatusColor: {
            0: "var(--header-serverStatus-status--0)",
            1: "var(--header-serverStatus-status--1)",
            2: "var(--header-serverStatus-status--2)",
            3: "var(--header-serverStatus-status--3)"
        },
        tendersBlockIcons: {
            10: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/e/ee/Mainpage-Exchange.svg',
            11: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/3/35/Mainpage-Handshake.svg',
            12: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/5/5f/Mainpage-Construct.svg',
            13: 'https://h2-wiki-1254268741.cos.ap-shanghai.myqcloud.com/d/d5/Mainpage-Done.svg'
        }
    };



    /**
     * 创建并返回一个招标信息的 HTML 字符串。
     * 
     * @param {Object} tender - 招标信息对象。
     * @param {number} tender.prefix_id - 招标状态ID。
     * @param {string} tender.view_url - 招标详情页面的 URL。
     * @param {string} tender.title - 招标标题。
     * @param {string} tender.post_date - 招标发布日期。
     * @param {string} tender.user_view_url - 发布用户的页面 URL。
     * @param {string} [tender.user_avatar] - 发布用户的头像 URL。
     * @param {string} tender.username - 发布用户的用户名。
     * @returns {string} 招标信息的 HTML 字符串。
     */
    function createTenderBlock(tender) {
        var tendersBlockPrefixMap = {
            10: '招标中',
            11: '已中标',
            12: '开工中',
            13: '已交付'
        };

        var tendersBlockTemplate = `
            <div class="nav-tenders-block">
                <div class="nav-tenders-block__top">
                    <div class="nav-tenders-block__prefix">${tendersBlockPrefixMap[tender.prefix_id]}</div>
                    <div class="nav-tenders-block__icon"><img src="${config.tendersBlockIcons[tender.prefix_id]}"></div>
                </div>
                <div class="nav-tenders-block__bottom">
                    <div class="nav-tenders-block__title"><a class="nav-tenders-block__link" href="${tender.view_url}">${tender.title}</a></div>
                    <div class="nav-tenders-block__user">
                        <div class="nav-tenders-block__time">${tender.post_date}</div>
                        <a class="nav-tenders-block__username" href="${tender.user_view_url}"><img src="${tender.user_avatar ? tender.user_avatar : ''}">${tender.username}</a>
                    </div>
                </div>
            </div>
        `;

        return tendersBlockTemplate;
    }



    /**
     * 根据API返回的数据更新在线状态显示。
     * 
     * @param {Object} data - 从API获取的数据对象。
     * @param {Object} data.server_status - 服务器状态对象。
     * @param {Object} data.server_status.nitrogen - 特定服务器的状态信息。
     */
    function updateOnlineStatus(data) {
        var onlineStatus = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlineStatus");
        var onlinePlayer = $(".h2-header > .h2-header__toolbar .h2-header__serverStatus .header-serverStatus-onlinePlayer");
        if (data.server_status.nitrogen.code == 200) {
            var onlinePlayerIndex;
            var onlineStatusText;

            if (data.server_status.nitrogen.status == 3) {
                if (data.server_status.nitrogen.players.now == -1 || data.server_status.nitrogen.max == -1) {
                    onlinePlayerIndex = 2;
                    onlineStatusText = `服崩了`;
                } else {
                    onlinePlayerIndex = 3;
                    onlineStatusText = `${data.server_status.nitrogen.players.now}/${data.server_status.nitrogen.players.max}`;
                }
            } else if (data.server_status.nitrogen.status == 2) {
                onlinePlayerIndex = 2;
                onlineStatusText = `正在开`;
            } else if (data.server_status.nitrogen.status == 1) {
                onlinePlayerIndex = 2;
                onlineStatusText = `正在关`;
            } else if (data.server_status.nitrogen.status == 0) {
                onlinePlayerIndex = 1;
                onlineStatusText = `服没开`;
            }

            onlineStatus.css("background", config.onlineStatusColor[onlinePlayerIndex]);
            onlinePlayer.text(onlineStatusText);
        } else {
            onlineStatus.css("background", config.onlineStatusColor[0]);
            onlinePlayer.text(`API 炸了`);
        }
    }



    /**
     * 根据API返回的数据更新招标信息显示。
     * 
     * @param {Object} data - 包含招标信息的数据对象。
     */
    function updateTendersInfo(data) {
        var tendersWrapper = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-content");
        var tendersCount = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__tenders .nav-tenders-header .nav-tenders-header__count .nav-tenders-header__countvalue");

        var formattedToday = new Date().toISOString().split('T')[0];
        let tendersMonthlyCount = 0;
        tendersWrapper.empty();
        $.each(data.server_community.server_tenders, function (index, tender) {
            if (tender.post_date.split(' ')[0] == formattedToday) {
                tendersMonthlyCount++;
            }
            var tenderBlock = createTenderBlock(tender);
            tendersWrapper.append(tenderBlock);
        });
        tendersCount.text(tendersMonthlyCount);
    }



    /**
     * 根据API返回的数据更新统计信息显示。
     * 
     * @param {Object} data - 包含统计信息的数据对象。
     */
    function updateStatistics(data) {
        var statisticsPlayerTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__playerTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
        var statisticsEntTotal = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__entTotal .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");
        var statisticsLauncherCurrent = $(".h2-nav .h2-nav__horizonTool .nav-horizonTool-block--1 > .h2-nav__statistics .nav-horizon-block--statistics__cardWrapper .nav-horizon-block--statistics__launcherCurrent .nav-horizon-block--statistics__content .nav-horizon-block--statistics__count");

        statisticsPlayerTotal.text(data.server_count.player_total);
        statisticsEntTotal.text(data.server_count.enterprise_total);
        statisticsLauncherCurrent.text(data.server_count.launcher_current.nitrogen);
    }



    /**
     * 请求主页信息,并更新页面上的在线状态、招标信息和统计信息。
     * 
     * @param {void}
     */
    function mainpageInfoRequest() {
        $.getJSON(config.apiUrl, function (data) {
            updateOnlineStatus(data);
            updateTendersInfo(data);
            updateStatistics(data);
        })
        .fail(function () {
            updateOnlineStatus({ server_status: { nitrogen: { code: 0 } } });
        });
    }



    /**
     * 控制水平工具栏的移动方向。
     * 
     * @param {string} direction - 移动方向,可以是 "left" 或 "right"。
     */
    function navHorizonTool(direction) {
        var horizonTool = $(".h2-nav .h2-nav__horizonTool");
        var switchLeft = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick");
        var switchRight = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick");
        var horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
        var horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");

        var horizonToolIndex = parseInt(horizonTool.css("--nav-horizonTool-show-block"), 10);
        var totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;

        if (direction === "left") {
            horizonToolIndex = Math.max(0, horizonToolIndex - 1);
        } else if (direction === "right") {
            horizonToolIndex = Math.min(totalSwitches, horizonToolIndex + 1);
        }

        horizonTool.css("--nav-horizonTool-show-block", horizonToolIndex);
        switchLeft.toggleClass("comp-disabled", horizonToolIndex <= 0);
        switchRight.toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
        horizonIndexNow.text(horizonToolIndex + 1);
        horizonIndexMax.text(totalSwitches + 1);
    }



    /**
     * 初始化。
     */
    $(function() {
        mainpageInfoRequest();
        setInterval(mainpageInfoRequest, 60 * 1000);
    });



    return {
        navHorizonTool: navHorizonTool
    };
})();

(function() {
    /**
     * 插入头图。
     */
    $('<div>').addClass('banner-image').insertBefore('#content');

    $(function() {
        /**
         * 水平工具栏初始化按钮。
         */
        const horizonToolIndex = parseInt($(".h2-nav .h2-nav__horizonTool").css("--nav-horizonTool-show-block"));
        const totalSwitches = $(".h2-nav .h2-nav__horizonTool [class^='nav-horizonTool-block']").length - 1;
        const horizonIndexNow = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountNow");
        const horizonIndexMax = $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonTool-title .h2-nav__horizonTool-blockcount .h2-nav__horizonTool-blockcountMax");
    
        $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex <= 0);
        $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").toggleClass("comp-disabled", horizonToolIndex >= totalSwitches);
        
        $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchLeft .h2-comp-buttonClick").on("click", function() {
            mainpageModule.navHorizonTool("left");
        });
    
        $(".h2-nav .h2-nav__horizonTool .h2-nav__horizonToolSwitchRight .h2-comp-buttonClick").on("click", function() {
            mainpageModule.navHorizonTool("right");
        });
    
        horizonIndexNow.text(horizonToolIndex + 1);
        horizonIndexMax.text(totalSwitches + 1);
    });
})();
为了让您的浏览体验更加高效、方便和个性化,遵照《中华人民共和国网络安全法》和《信息安全技术个人信息安全规范》,我们需要您允许本站使用Cookies。在某些情况下,Cookies是使网站正常运行的必要条件。