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

Widget:GF立绘切换:修订间差异

来自OGAS数据中枢
弃权者留言 | 贡献
无编辑摘要
弃权者留言 | 贡献
无编辑摘要
第2行: 第2行:
(function () {
(function () {
     function initSwitcher() {
     function initSwitcher() {
        // 确保 mw 对象可用
        var api = (window.mw && mw.Api) ? new mw.Api() : null;
         document.querySelectorAll('.gf-infobox-new').forEach(function (box) {
         document.querySelectorAll('.gf-infobox-new').forEach(function (box) {
             if (box.dataset.ready) return;
             if (box.dataset.ready) return;
第15行: 第18行:
                     overlay.classList.toggle('collapsed');
                     overlay.classList.toggle('collapsed');
                 });
                 });
            }
            // 获取 MediaWiki 图片真实路径的辅助函数
            function getImgPath(filename, callback) {
                if (!api) {
                    // 如果 Api 不可用,退回到基础路径猜测(不推荐)
                    callback(null);
                    return;
                }
                api.get({
                    action: 'query',
                    prop: 'imageinfo',
                    titles: 'File:' + filename,
                    iiprop: 'url'
                }).done(function (data) {
                    var pages = data.query.pages;
                    for (var id in pages) {
                        if (pages[id].imageinfo) {
                            callback(pages[id].imageinfo[0].url);
                            return;
                        }
                    }
                    callback(null);
                }).fail(function() { callback(null); });
             }
             }


第20行: 第47行:


             container.addEventListener('click', function() {
             container.addEventListener('click', function() {
                console.log("--- 触发主图点击事件 ---");
                 var img = container.querySelector('img');
                 var img = container.querySelector('img');
                 var activeBtn = box.querySelector('.gf-switch-btn.active');
                 var activeBtn = box.querySelector('.gf-switch-btn.active');
                if (!img || !activeBtn) return;
                var baseFile = activeBtn.dataset.filename;
                var isCurrentlyDamage = activeBtn.dataset.state === 'damage';
                  
                  
                 if (!img) { console.error("未找到 img 标签"); return; }
                 // 拼接重创文件名: pic.png -> pic_D.png
                 if (!activeBtn) { console.error("未找到处于 active 状态的按钮"); return; }
                var dotIndex = baseFile.lastIndexOf('.');
                 var damageFile = baseFile.substring(0, dotIndex) + '_D' + baseFile.substring(dotIndex);


                 var normalSrc = activeBtn.dataset.src;
                 var targetFile = isCurrentlyDamage ? baseFile : damageFile;
                var damageSrc = activeBtn.dataset.damage;
                  
 
                 console.log("--- 重创切换调试 ---");
                console.log("当前图片 SRC:", img.src);
                 console.log("原始参数文件名:", baseFile);
                 console.log("按钮原始图路径:", normalSrc);
                 console.log("目标尝试文件名:", targetFile);
                 console.log("按钮重创图路径:", damageSrc);
 
                if (!damageSrc || damageSrc.length < 5) {
                    console.warn("重创图路径无效或未定义,请确认是否存在后缀为 _D 的图片。");
                    return;
                }
 
                // 统一处理 URL,防止因为绝对路径/相对路径导致匹配失败
                var isCurrentDamage = img.src.indexOf(damageSrc) !== -1;
                var targetSrc = isCurrentDamage ? normalSrc : damageSrc;
 
                 console.log("判定结果:", isCurrentDamage ? "当前是重创态 -> 切换回正常" : "当前是正常态 -> 切换至重创");
                 console.log("正在加载目标图片:", targetSrc);


                 container.classList.add('loading');
                 container.classList.add('loading');
                 var tempImg = new Image();
                  
                 tempImg.onload = function() {
                 getImgPath(targetFile, function(url) {
                     img.src = targetSrc;
                     if (!url) {
                    container.classList.remove('loading');
                        console.error("无法获取文件路径,请确认文件是否存在: File:" + targetFile);
                     console.log("图片加载成功并已替换。");
                        container.classList.remove('loading');
                };
                        return;
                tempImg.onerror = function() {
                    }
                    console.error("加载失败,请检查该 URL 是否可访问:", targetSrc);
                   
                    container.classList.remove('loading');
                     console.log("最终获取的真实 URL:", url);
                };
                    var tempImg = new Image();
                tempImg.src = targetSrc;
                    tempImg.onload = function() {
                        img.src = url;
                        activeBtn.dataset.state = isCurrentlyDamage ? 'normal' : 'damage';
                        container.classList.remove('loading');
                    };
                    tempImg.src = url;
                });
             });
             });


第65行: 第89行:
                     if (btn.classList.contains('active')) return;
                     if (btn.classList.contains('active')) return;


                     var src = btn.dataset.src;
                     var filename = btn.dataset.filename;
                     console.log("切换立绘组,新图路径:", src);
                     btn.dataset.state = 'normal'; // 重置状态
 
                   
                     var oldImg = container.querySelector('img');
                     var oldImg = container.querySelector('img');
                     if (oldImg) oldImg.style.opacity = '0';
                     if (oldImg) oldImg.style.opacity = '0';


                     setTimeout(function () {
                     getImgPath(filename, function(url) {
                        container.innerHTML = '<img src="' + src + '" style="max-width:100%;max-height:500px;object-fit:contain;opacity:0;transition:opacity 0.3s;height:auto;width:auto;">';
                        if (!url) return;
                        var newImg = container.querySelector('img');
                        setTimeout(function () {
                        if (newImg) {
                            container.innerHTML = '<img src="' + url + '" style="max-width:100%;max-height:500px;object-fit:contain;opacity:0;transition:opacity 0.3s;height:auto;width:auto;">';
                            newImg.onload = function () { newImg.style.opacity = '1'; };
                            var newImg = container.querySelector('img');
                            if (newImg.complete) newImg.style.opacity = '1';
                            if (newImg) {
                         }
                                newImg.onload = function () { newImg.style.opacity = '1'; };
                     }, 150);
                                if (newImg.complete) newImg.style.opacity = '1';
                            }
                         }, 150);
                     });


                     btns.forEach(function (b) { b.classList.remove('active'); });
                     btns.forEach(function (b) { b.classList.remove('active'); });
第87行: 第114行:
     }
     }


     if (document.readyState === 'loading') {
    // 更加稳健的加载时机控制
     if (window.mw && mw.loader) {
        mw.loader.using(['mediawiki.api', 'mediawiki.jqueryMsg']).then(initSwitcher);
    } else {
         document.addEventListener('DOMContentLoaded', initSwitcher);
         document.addEventListener('DOMContentLoaded', initSwitcher);
    } else {
        initSwitcher();
    }
    if (window.mw) {
        mw.hook('wikipage.content').add(initSwitcher);
     }
     }
})();
})();
</script>
</script>

2026年5月15日 (五) 23:24的版本

<script> (function () {

   function initSwitcher() {
       // 确保 mw 对象可用
       var api = (window.mw && mw.Api) ? new mw.Api() : null;
       document.querySelectorAll('.gf-infobox-new').forEach(function (box) {
           if (box.dataset.ready) return;
           box.dataset.ready = '1';
           var container = box.querySelector('.gf-image-container');
           var btns = box.querySelectorAll('.gf-switch-btn');
           var overlay = box.querySelector('.gf-switcher-overlay');
           var toggle = box.querySelector('.gf-switcher-toggle');
           if (toggle && overlay) {
               toggle.addEventListener('click', function() {
                   overlay.classList.toggle('collapsed');
               });
           }
           // 获取 MediaWiki 图片真实路径的辅助函数
           function getImgPath(filename, callback) {
               if (!api) {
                   // 如果 Api 不可用,退回到基础路径猜测(不推荐)
                   callback(null);
                   return;
               }
               api.get({
                   action: 'query',
                   prop: 'imageinfo',
                   titles: 'File:' + filename,
                   iiprop: 'url'
               }).done(function (data) {
                   var pages = data.query.pages;
                   for (var id in pages) {
                       if (pages[id].imageinfo) {
                           callback(pages[id].imageinfo[0].url);
                           return;
                       }
                   }
                   callback(null);
               }).fail(function() { callback(null); });
           }
           if (!container) return;
           container.addEventListener('click', function() {
               var img = container.querySelector('img');
               var activeBtn = box.querySelector('.gf-switch-btn.active');
               if (!img || !activeBtn) return;
               var baseFile = activeBtn.dataset.filename;
               var isCurrentlyDamage = activeBtn.dataset.state === 'damage';
               
               // 拼接重创文件名: pic.png -> pic_D.png
               var dotIndex = baseFile.lastIndexOf('.');
               var damageFile = baseFile.substring(0, dotIndex) + '_D' + baseFile.substring(dotIndex);
               var targetFile = isCurrentlyDamage ? baseFile : damageFile;
               
               console.log("--- 重创切换调试 ---");
               console.log("原始参数文件名:", baseFile);
               console.log("目标尝试文件名:", targetFile);
               container.classList.add('loading');
               
               getImgPath(targetFile, function(url) {
                   if (!url) {
                       console.error("无法获取文件路径,请确认文件是否存在: File:" + targetFile);
                       container.classList.remove('loading');
                       return;
                   }
                   
                   console.log("最终获取的真实 URL:", url);
                   var tempImg = new Image();
                   tempImg.onload = function() {
                       img.src = url;
                       activeBtn.dataset.state = isCurrentlyDamage ? 'normal' : 'damage';
                       container.classList.remove('loading');
                   };
                   tempImg.src = url;
               });
           });
           btns.forEach(function (btn) {
               btn.addEventListener('click', function (e) {
                   e.stopPropagation();
                   if (btn.classList.contains('active')) return;
                   var filename = btn.dataset.filename;
                   btn.dataset.state = 'normal'; // 重置状态
                   
                   var oldImg = container.querySelector('img');
                   if (oldImg) oldImg.style.opacity = '0';
                   getImgPath(filename, function(url) {
                       if (!url) return;
                       setTimeout(function () {
                           container.innerHTML = '<img src="' + url + '" style="max-width:100%;max-height:500px;object-fit:contain;opacity:0;transition:opacity 0.3s;height:auto;width:auto;">';
                           var newImg = container.querySelector('img');
                           if (newImg) {
                               newImg.onload = function () { newImg.style.opacity = '1'; };
                               if (newImg.complete) newImg.style.opacity = '1';
                           }
                       }, 150);
                   });
                   btns.forEach(function (b) { b.classList.remove('active'); });
                   btn.classList.add('active');
               });
           });
       });
   }
   // 更加稳健的加载时机控制
   if (window.mw && mw.loader) {
       mw.loader.using(['mediawiki.api', 'mediawiki.jqueryMsg']).then(initSwitcher);
   } else {
       document.addEventListener('DOMContentLoaded', initSwitcher);
   }

})(); </script>