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

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

来自OGAS数据中枢
弃权者留言 | 贡献
无编辑摘要
弃权者留言 | 贡献
无编辑摘要
 
(未显示同一用户的4个中间版本)
第3行: 第3行:
     function initSwitcher() {
     function initSwitcher() {
         var api = (window.mw && mw.Api) ? new mw.Api() : null;
         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;
第14行: 第13行:
             var viewBtn = box.querySelector('.gf-view-original');
             var viewBtn = box.querySelector('.gf-view-original');


             if (toggle && overlay) {
             if (toggle) toggle.onclick = function() { overlay.classList.toggle('collapsed'); };
                toggle.addEventListener('click', function() {
                    overlay.classList.toggle('collapsed');
                });
            }


             function getImgPath(filename, currentSrc, callback) {
             function getImgPath(filename, currentSrc, callback) {
                 if (api) {
                 if (api) {
                     api.get({
                     api.get({ action: 'query', prop: 'imageinfo', titles: 'File:' + filename, iiprop: 'url' })
                        action: 'query',
                     .done(function (data) {
                        prop: 'imageinfo',
                        titles: 'File:' + filename,
                        iiprop: 'url'
                     }).done(function (data) {
                         var pages = data.query.pages;
                         var pages = data.query.pages;
                         for (var id in pages) {
                         for (var id in pages) { if (pages[id].imageinfo) { callback(pages[id].imageinfo[0].url); return; } }
                            if (pages[id].imageinfo) {
                                callback(pages[id].imageinfo[0].url);
                                return;
                            }
                        }
                         tryFallback();
                         tryFallback();
                     }).fail(tryFallback);
                     }).fail(tryFallback);
                 } else {
                 } else tryFallback();
                    tryFallback();
                }


                 function tryFallback() {
                 function tryFallback() {
                     if (!currentSrc) { callback(null); return; }
                     if (!currentSrc) { callback(null); return; }
                     var currentFileName = currentSrc.substring(currentSrc.lastIndexOf('/') + 1);
                     var curName = currentSrc.substring(currentSrc.lastIndexOf('/') + 1);
                     var guessedUrl = currentSrc.replace(currentFileName, filename.replace(/ /g, '_'));
                     callback(currentSrc.replace(curName, filename.replace(/ /g, '_')));
                    callback(guessedUrl);
                 }
                 }
             }
             }


            if (!container) return;
            // 原图按钮逻辑
             if (viewBtn) {
             if (viewBtn) {
                 viewBtn.addEventListener('click', function(e) {
                 viewBtn.onclick = function(e) {
                     e.stopPropagation();
                     e.stopPropagation();
                     var img = container.querySelector('img');
                     var activeBtn = box.querySelector('.gf-switch-btn.active');
                     if (img && img.src) {
                     if (activeBtn) {
                         window.open(img.src, '_blank');
                        var filename = activeBtn.dataset.filename;
                        var isDmg = activeBtn.dataset.state === 'damage';
                        var target = isDmg ? filename.substring(0, filename.lastIndexOf('.')) + '_D' + filename.substring(filename.lastIndexOf('.')) : filename;
                         window.open(mw.config.get('wgArticlePath').replace('$1', 'File:' + target), '_blank');
                     }
                     }
                 });
                 };
             }
             }


            // 重创切换
             container.onclick = function() {
             container.addEventListener('click', function() {
                 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;
                 if (!img || !activeBtn) return;
 
                 var base = activeBtn.dataset.filename;
                 var baseFile = activeBtn.dataset.filename;
                 var isDmg = activeBtn.dataset.state === 'damage';
                 var isCurrentlyDamage = activeBtn.dataset.state === 'damage';
                 var target = isDmg ? base : base.substring(0, base.lastIndexOf('.')) + '_D' + base.substring(base.lastIndexOf('.'));
               
                 var dotIndex = baseFile.lastIndexOf('.');
                var damageFile = baseFile.substring(0, dotIndex) + '_D' + baseFile.substring(dotIndex);
                var targetFile = isCurrentlyDamage ? baseFile : damageFile;
                  
                  
                 container.classList.add('loading');
                 container.classList.add('loading');
                 getImgPath(targetFile, img.src, function(url) {
                 getImgPath(target, img.src, function(url) {
                     if (!url) {
                     if (url) {
                         container.classList.remove('loading');
                         var t = new Image();
                        return;
                        t.onload = function() {  
                    }
                            img.src = url;  
                    var tempImg = new Image();
                            activeBtn.dataset.state = isDmg ? 'normal' : 'damage';  
                    tempImg.onload = function() {
                            container.classList.remove('loading');  
                        img.src = url;
                        };
                        activeBtn.dataset.state = isCurrentlyDamage ? 'normal' : 'damage';
                        t.onerror = function() { container.classList.remove('loading'); };
                        container.classList.remove('loading');
                        t.src = url;
                    };
                    } else container.classList.remove('loading');
                    tempImg.onerror = function() { container.classList.remove('loading'); };
                    tempImg.src = url;
                 });
                 });
             });
             };


             btns.forEach(function (btn) {
             btns.forEach(function (btn) {
                 btn.addEventListener('click', function (e) {
                 btn.onclick = function (e) {
                     e.stopPropagation();
                     e.stopPropagation();
                     if (btn.classList.contains('active')) return;
                     if (btn.classList.contains('active')) return;
                     var filename = btn.dataset.filename;
                     var filename = btn.dataset.filename;
                     btn.dataset.state = 'normal';
                     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';
                     getImgPath(filename, (oldImg ? oldImg.src : null), function(url) {
                     getImgPath(filename, (oldImg ? oldImg.src : null), function(url) {
                         if (!url) return;
                         if (url) {
                        setTimeout(function () {
                            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;">';
                                container.innerHTML = '<div class="gf-main-img"><img src="' + url + '" style="opacity:0;"></div>';
                            // 重新补回查看原图按钮(因为innerHTML被覆盖了)
                                container.appendChild(viewBtn);
                            container.appendChild(viewBtn);
                                var n = container.querySelector('img');
                            var newImg = container.querySelector('img');
                                 n.onload = function () { n.style.opacity = '1'; };
                            if (newImg) {
                                 if (n.complete) n.style.opacity = '1';
                                 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'); });
                     btn.classList.add('active');
                     btn.classList.add('active');
                 });
                 };
             });
             });
         });
         });
     }
     }


     if (window.mw && mw.loader) {
     var r = 0;
        mw.loader.using(['mediawiki.api']).then(initSwitcher);
    var c = setInterval(function() {
    } else {
        r++;
        var checkInterval = setInterval(function() {
        if (window.mw && mw.Api && mw.loader && mw.loader.using) {
            if (window.jQuery && window.mw && mw.Api) {
            clearInterval(c);
                clearInterval(checkInterval);
            mw.loader.using(['mediawiki.api']).then(initSwitcher);
                initSwitcher();
        } else if (r > 60) { clearInterval(c); if (window.jQuery) initSwitcher(); }
            }
    }, 100);
        }, 100);
    }
})();
})();
</script>
</script>

2026年5月16日 (六) 00:30的最新版本

<script> (function () {

   function initSwitcher() {
       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');
           var viewBtn = box.querySelector('.gf-view-original');
           if (toggle) toggle.onclick = function() { overlay.classList.toggle('collapsed'); };
           function getImgPath(filename, currentSrc, callback) {
               if (api) {
                   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; } }
                       tryFallback();
                   }).fail(tryFallback);
               } else tryFallback();
               function tryFallback() {
                   if (!currentSrc) { callback(null); return; }
                   var curName = currentSrc.substring(currentSrc.lastIndexOf('/') + 1);
                   callback(currentSrc.replace(curName, filename.replace(/ /g, '_')));
               }
           }
           if (viewBtn) {
               viewBtn.onclick = function(e) {
                   e.stopPropagation();
                   var activeBtn = box.querySelector('.gf-switch-btn.active');
                   if (activeBtn) {
                       var filename = activeBtn.dataset.filename;
                       var isDmg = activeBtn.dataset.state === 'damage';
                       var target = isDmg ? filename.substring(0, filename.lastIndexOf('.')) + '_D' + filename.substring(filename.lastIndexOf('.')) : filename;
                       window.open(mw.config.get('wgArticlePath').replace('$1', 'File:' + target), '_blank');
                   }
               };
           }
           container.onclick = function() {
               var img = container.querySelector('img');
               var activeBtn = box.querySelector('.gf-switch-btn.active');
               if (!img || !activeBtn) return;
               var base = activeBtn.dataset.filename;
               var isDmg = activeBtn.dataset.state === 'damage';
               var target = isDmg ? base : base.substring(0, base.lastIndexOf('.')) + '_D' + base.substring(base.lastIndexOf('.'));
               
               container.classList.add('loading');
               getImgPath(target, img.src, function(url) {
                   if (url) {
                       var t = new Image();
                       t.onload = function() { 
                           img.src = url; 
                           activeBtn.dataset.state = isDmg ? 'normal' : 'damage'; 
                           container.classList.remove('loading'); 
                       };
                       t.onerror = function() { container.classList.remove('loading'); };
                       t.src = url;
                   } else container.classList.remove('loading');
               });
           };
           btns.forEach(function (btn) {
               btn.onclick = 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, (oldImg ? oldImg.src : null), function(url) {
                       if (url) {
                           setTimeout(function () {

container.innerHTML = '

<img src="' + url + '" style="opacity:0;">

';

                               container.appendChild(viewBtn);
                               var n = container.querySelector('img');
                               n.onload = function () { n.style.opacity = '1'; };
                               if (n.complete) n.style.opacity = '1';
                           }, 150);
                       }
                   });
                   btns.forEach(function (b) { b.classList.remove('active'); });
                   btn.classList.add('active');
               };
           });
       });
   }
   var r = 0;
   var c = setInterval(function() {
       r++;
       if (window.mw && mw.Api && mw.loader && mw.loader.using) {
           clearInterval(c);
           mw.loader.using(['mediawiki.api']).then(initSwitcher);
       } else if (r > 60) { clearInterval(c); if (window.jQuery) initSwitcher(); }
   }, 100);

})(); </script>