MediaWiki:Gadget-CollapsibleSidebar.js:修订间差异

H萌娘,万物皆可H的百科全书!
跳到导航 跳到搜索
imported>=海豚=
无编辑摘要
→‎top:​bad link repair, replaced: hmoegirl.com → hmoegirl.info
 
(未显示1个用户的5个中间版本)
第1行: 第1行:
(function($, mw) {
/**
$(function() {
* 侧边栏隐藏工具
var sidebarCookieName = 'sidebarHidden';
* 本工具参考自维百的同功能小工具——https://zh.wikipedia.org/wiki/MediaWiki:Gadget-CollapsibleSidebar.js
var commonImgUrl = 'https://upload.wikimedia.org/wikipedia/commons/thumb';
* [[User:AnnAngela]]/[[User:850710247liu]]做了一点改进
var localImgUrl = 'https://zh.wikipedia.org/static/images/mobile/copyright/wikipedia-wordmark-';
* 此处代码已转化为可通过mw检测的格式,源码可在 https://zh.moegirl.org.cn/User:AnnAngela/js/sidebarHidden.js 找到
var imgLogoLang = ['ca', 'cs', 'cy', 'el', 'en', 'et', 'hi', 'hy', 'ja', 'ka', 'la', 'ru', 'szl', 'th', 'uk', 'uz', 'zh'].indexOf(mw.config.get('wgContentLanguage')) > -1 ? mw.config.get('wgContentLanguage') : 'en';
*/
var img = {
/* eslint-disable prefer-arrow-callback */
logo: localImgUrl + imgLogoLang + '.svg',
/* eslint-disable prefer-template */
logo_zh_hans: localImgUrl + 'zh-hans.svg',
/* eslint-disable comma-dangle */
next: commonImgUrl + '/9/95/Icons8_flat_next.svg/15px-Icons8_flat_next.svg.png',
/* eslint-disable no-var */
prev: commonImgUrl + '/b/bd/Icons8_flat_previous.svg/15px-Icons8_flat_previous.svg.png'
/* global $, mw, localforage*/
};
"use strict";
var isMobile = /(Android|iPad|iPhone|Mobile)/i.test(navigator.userAgent);
$(function () {
var cookieExpires = 365;
   if (mw.config.get("skin") !== "vector" || mw.config.get("wgCanonicalSpecialPageName") === "Blankpage" || getComputedStyle(document.body).direction !== "ltr") {
var sidebarHidden = false;
     return;
var sidebarGadgetLoaded = false;
   }
 
   mw.loader.using(["ext.gadget.localforage"]).then(function () {
function hideSidebar() {
     var test = localforage.createInstance({
sidebarHidden = true;
       name: "AnnTools",
$('#sidebarCollapse').attr('src', img.next);
       storeName: "IndexedDB-test",
updatePos();
       driver: [localforage.INDEXEDDB]
$('#content').css('margin-left', '1em');
     });
$('#footer').css('margin-left', '1em');
     return new Promise(function (res) {
$('#mw-panel').hide();
       var random = Math.random().toString().substring(2);
$('#sliderCollapseLogo').show();
       var fired = false;
$.cookie(sidebarCookieName, 'true', {
       test.setItem("test", random).then(function () {
expires: cookieExpires,
         return test.getItem("test");
path: '/'
       }).then(function (result) {
})
         if (!fired) {
}
           fired = true;
 
           res(result === random);
function showSidebar() {
         }
sidebarHidden = false;
       });
$('#sidebarCollapse').attr('src', img.prev);
       setTimeout(function () {
updatePos();
         if (!fired) {
$('#content').css('margin-left', '');
           fired = true;
$('#footer').css('margin-left', '');
           res(false);
$('#mw-panel').show();
         }
$('#sliderCollapseLogo').hide();
       }, 137);
$.cookie(sidebarCookieName, 'false', {
     });
expires: cookieExpires,
   }).then(function (indexedDBCanRun) {
path: '/'
     var store = localforage.createInstance({
})
       name: "AnnTools",
}
       storeName: "SidebarHidden",
 
       driver: indexedDBCanRun ? [localforage.INDEXEDDB] : [localforage.LOCALSTORAGE]
function updatePosHelper(arr) {
     });
var divList = ['#sidebarCollapse', '#sliderCollapseLogo'];
     store.getItem("hidden").then(function (_hidden) {
for (var i = 0; i < arr.length; i++) {
       var hidden = _hidden;
if (arr[i] === null) continue;
       var saving = false;
var bDiv = divList[i];
       var generateImageObject = function (svg) {
var bLeft = $(bDiv).css('left');
         return URL.createObjectURL(new Blob([svg], {
var bSize = arr[i];
           type: "image/svg+xml"
if (bLeft !== bSize) $(bDiv).css('left', bSize)
         }));
}
       };
}
       var logoPic = "https://www.hmoegirl.info/images/b/bc/Hmoegirl_logo.png";
 
       var arrowRightSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="17.1,5 14,8.1 29.9,24 14,39.9 17.1,43 36,24"/></svg>');
function updatePos() {
       var arrowLeftSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="30.9,43 34,39.9 18.1,24 34,8.1 30.9,5 12,24"/></svg>');
var bWidth = 0;
       var $body = $(document.body);
if (isMobile) {
       var $mwNavigation = $("#mw-navigation");
bWidth = window.outerWidth > 0 ? window.outerWidth : $('body').width
       var $mwWikiLogo = $(".mw-wiki-logo");
} else {
       var $logoLink = $mwWikiLogo.clone(false);
bWidth = window.innerWidth > 0 ? window.innerWidth : $('body').width
       var $logo = $("<img>").attr({
}
         id: "sidebarHidden-logo",
if (bWidth >= 982) {
         src: logoPic
updatePosHelper(sidebarHidden ? ['0.3em', '3em'] : ['11.6em', null])
       });
} else {
       var $arrow = $("<img>").attr({
updatePosHelper(sidebarHidden ? ['0.3em', '2.5em'] : ['9.3em', null])
         id: "sidebarHidden-arrow",
}
         src: arrowLeftSvg
}
       });
 
       $logoLink.empty().removeAttr("class").attr("id", "sidebarHidden-logo-link").append($logo);
function sidebarHiddenProc() {
       var hide = function () {
sidebarGadgetLoaded = true;
       if ($(".toc-custom").length > 0){
 
       document.querySelector(".toc-custom").style.transform="translate(-100%, 0)";
var sidebarCollapse = $('<img>').attr({
       }
'id': 'sidebarCollapse',
         if (saving) {
'src': img.prev
           return;
}).css({
         }
'position': 'fixed',
         hidden = true;
'float': 'right',
         saving = true;
'z-index': '10',
         $body.addClass("sidebarHidden");
'width': '0.8em',
         $arrow.attr("src", arrowRightSvg);
'height': '0.8em',
         store.setItem("hidden", hidden).then(function () {
'top': '7.2em',
           saving = false;
'cursor': 'pointer',
         });
'padding': '0.3em',
       };
'-webkit-border-radius': '50px',
       var show = function () {
'-moz-border-radius': '50px',
              if ($(".toc-custom").length > 0){
'border-radius': '50px',
       document.querySelector(".toc-custom").style.transform="translate(0, 0)";
'text-align': 'center',
              }
'border': '1px solid #a7d7f9',
         if (saving) {
'background': '#fff'
           return;
});
         }
 
         saving = true;
var newLink = $('<a>').attr({
         hidden = false;
'id': 'newLink',
         $body.removeClass("sidebarHidden");
'href': '/wiki',
         $arrow.attr("src", arrowLeftSvg);
'title': $('.mw-wiki-logo').attr('title')
         store.setItem("hidden", hidden).then(function () {
});
           saving = false;
 
         });
if (mw.config.get('wgNoticeProject') === 'wikipedia') {
       };
$('<img>').attr({
       $mwNavigation.append($arrow).append($logoLink);
'id': 'sliderCollapseLogo',
       if (hidden) {
'src': "https://zh.wikipedia.org/static/images/mobile/copyright/wikipedia-wordmark-zh.svg"
         hide();
}).css({
       }
'display': 'none',
       $arrow.on("click", function () {
'position': 'absolute',
         (hidden ? show : hide)();
'top': '3.375em',
       });
'cursor': 'pointer',
     });
'float': 'none',
   });
'width': '6em'
});
}).appendTo(newLink);
}
 
sidebarCollapse.appendTo('#mw-navigation');
newLink.appendTo('#mw-navigation');
 
if ($.cookie(sidebarCookieName) === 'true') hideSidebar();
updatePos();
 
$(window).resize(function() {
updatePos()
});
 
$('#sidebarCollapse').mouseover(function() {
$(this).css('background', 'rgb(223, 245, 255)')
}).mouseout(function() {
$(this).css('background', 'white')
}).click(function() {
sidebarHidden ? showSidebar() : hideSidebar()
})
}
 
function sidebarHiddenInit() {
if (mw.config.get('skin') !== 'vector' || $('.mw-special-Blankpage').length !== 0 || $('#mw-sidebar-button').length > 0) return;
if (['ar', 'arc', 'arz', 'bo', 'ckb', 'dv', 'dz', 'glk', 'ks', 'mzn', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi'].indexOf(mw.config.get('wgContentLanguage')) > -1) return;
if ($('#mw-navigation').length === 0) {
var obs = new MutationObserver(function (mutations, observer) {
if (sidebarGadgetLoaded) return;
for (var i = 0; i < mutations.length; ++i) {
for (var j = 0; j < mutations[i].addedNodes.length; ++j) {
if (mutations[i].addedNodes[j].id === 'mw-navigation') {
sidebarHiddenProc();
break;
}
}
}
});
obs.observe(document.body, {
childList: true
});
return
}
sidebarHiddenProc()
}
sidebarHiddenInit()
})
})(jQuery, mw);

2022年12月20日 (二) 16:16的最新版本

/**
 * 侧边栏隐藏工具
 * 本工具参考自维百的同功能小工具——https://zh.wikipedia.org/wiki/MediaWiki:Gadget-CollapsibleSidebar.js
 * [[User:AnnAngela]]/[[User:850710247liu]]做了一点改进
 * 此处代码已转化为可通过mw检测的格式,源码可在 https://zh.moegirl.org.cn/User:AnnAngela/js/sidebarHidden.js 找到
 */
/* eslint-disable prefer-arrow-callback */
/* eslint-disable prefer-template */
/* eslint-disable comma-dangle */
/* eslint-disable no-var */
/* global $, mw, localforage*/
"use strict";
$(function () {
    if (mw.config.get("skin") !== "vector" || mw.config.get("wgCanonicalSpecialPageName") === "Blankpage" || getComputedStyle(document.body).direction !== "ltr") {
        return;
    }
    mw.loader.using(["ext.gadget.localforage"]).then(function () {
        var test = localforage.createInstance({
            name: "AnnTools",
            storeName: "IndexedDB-test",
            driver: [localforage.INDEXEDDB]
        });
        return new Promise(function (res) {
            var random = Math.random().toString().substring(2);
            var fired = false;
            test.setItem("test", random).then(function () {
                return test.getItem("test");
            }).then(function (result) {
                if (!fired) {
                    fired = true;
                    res(result === random);
                }
            });
            setTimeout(function () {
                if (!fired) {
                    fired = true;
                    res(false);
                }
            }, 137);
        });
    }).then(function (indexedDBCanRun) {
        var store = localforage.createInstance({
            name: "AnnTools",
            storeName: "SidebarHidden",
            driver: indexedDBCanRun ? [localforage.INDEXEDDB] : [localforage.LOCALSTORAGE]
        });
        store.getItem("hidden").then(function (_hidden) {
            var hidden = _hidden;
            var saving = false;
            var generateImageObject = function (svg) {
                return URL.createObjectURL(new Blob([svg], {
                    type: "image/svg+xml"
                }));
            };
            var logoPic = "https://www.hmoegirl.info/images/b/bc/Hmoegirl_logo.png";
            var arrowRightSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="17.1,5 14,8.1 29.9,24 14,39.9 17.1,43 36,24"/></svg>');
            var arrowLeftSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="30.9,43 34,39.9 18.1,24 34,8.1 30.9,5 12,24"/></svg>');
            var $body = $(document.body);
            var $mwNavigation = $("#mw-navigation");
            var $mwWikiLogo = $(".mw-wiki-logo");
            var $logoLink = $mwWikiLogo.clone(false);
            var $logo = $("<img>").attr({
                id: "sidebarHidden-logo",
                src: logoPic
            });
            var $arrow = $("<img>").attr({
                id: "sidebarHidden-arrow",
                src: arrowLeftSvg
            });
            $logoLink.empty().removeAttr("class").attr("id", "sidebarHidden-logo-link").append($logo);
            var hide = function () {
            	if ($(".toc-custom").length > 0){
            document.querySelector(".toc-custom").style.transform="translate(-100%, 0)";
            	}
                if (saving) {
                    return;
                }
                hidden = true;
                saving = true;
                $body.addClass("sidebarHidden");
                $arrow.attr("src", arrowRightSvg);
                store.setItem("hidden", hidden).then(function () {
                    saving = false;
                });
            };
            var show = function () {
            	            	if ($(".toc-custom").length > 0){
            document.querySelector(".toc-custom").style.transform="translate(0, 0)";
            	            	}
                if (saving) {
                    return;
                }
                saving = true;
                hidden = false;
                $body.removeClass("sidebarHidden");
                $arrow.attr("src", arrowLeftSvg);
                store.setItem("hidden", hidden).then(function () {
                    saving = false;
                });
            };
            $mwNavigation.append($arrow).append($logoLink);
            if (hidden) {
                hide();
            }
            $arrow.on("click", function () {
                (hidden ? show : hide)();
            });
        });
    });
});