MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

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

跳到导航 跳到搜索
// Edit via Wikiplus
(// Edit via Wikiplus)
第1行: 第1行:
"use strict";
"use strict";
(() => {
 
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
 
(function () {
   // src/utils/resource.ts
   // src/utils/resource.ts
   function addStyleUrl(url, key) {
   function addStyleUrl(url, key) {
     let style;
     var style = void 0;
     if (key && document.getElementById(key) instanceof HTMLLinkElement) {
     if (key && document.getElementById(key) instanceof HTMLLinkElement) {
       style = document.getElementById(key);
       style = document.getElementById(key);
第10行: 第13行:
       style.rel = "stylesheet";
       style.rel = "stylesheet";
       style.type = "text/css";
       style.type = "text/css";
       if (key)
       if (key) style.id = key;
        style.id = key;
     }
     }
     if (style.href === url)
     if (style.href === url) return;
      return;
     style.href = url;
     style.href = url;
     document.head.appendChild(style);
     document.head.appendChild(style);
   }
   }
   function addStyle(css) {
   function addStyle(css) {
     const style = document.createElement("style");
     var style = document.createElement("style");
     style.textContent = css;
     style.textContent = css;
     document.head.appendChild(style);
     document.head.appendChild(style);
   }
   }
   function loadWikiStyle(page, key) {
   function loadWikiStyle(page, key) {
     addStyleUrl(`https://mcbbs.wiki/index.php?title=${page}&action=raw&ctype=text/css`, key);
     addStyleUrl("https://mcbbs.wiki/index.php?title=" + page + "&action=raw&ctype=text/css", key);
   }
   }


第32行: 第33行:
       try {
       try {
         return JSON.parse(str);
         return JSON.parse(str);
       } catch (e) {
       } catch (e) {}
      }
     }
     }
     return null;
     return null;
第41行: 第41行:
   }
   }
   function unsafeRead(key) {
   function unsafeRead(key) {
     const storage = localStorage.getItem(key);
     var storage = localStorage.getItem(key);
     return parse(storage);
     return parse(storage);
   }
   }
   function listen(listener, options = { passive: true }) {
   function listen(listener) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { passive: true };
 
     window.addEventListener("storage", listener, options);
     window.addEventListener("storage", listener, options);
     return () => window.removeEventListener("storage", listener, options);
     return function () {
      return window.removeEventListener("storage", listener, options);
    };
   }
   }
   function readAndListen(props) {
   function readAndListen(props) {
     const {
     var key = props.key,
      key,
        defaultValue = props.defaultValue,
      defaultValue,
        listener = props.listener,
      listener,
        _props$callOnChange = props.callOnChange,
      callOnChange = true,
        callOnChange = _props$callOnChange === undefined ? true : _props$callOnChange,
      options = { passive: true }
        _props$options = props.options,
    } = props;
        options = _props$options === undefined ? { passive: true } : _props$options;
     let v = unsafeRead(key);
 
     var v = unsafeRead(key);
     if (defaultValue !== void 0 && v === null) {
     if (defaultValue !== void 0 && v === null) {
       write(key, defaultValue);
       write(key, defaultValue);
       v = defaultValue;
       v = defaultValue;
     }
     }
     const fn = (ev) => {
     var fn = function fn(ev) {
       if (ev.key !== key || ev.storageArea !== localStorage)
       if (ev.key !== key || ev.storageArea !== localStorage) return;
        return;
       var newValue = parse(ev.newValue);
       const newValue = parse(ev.newValue);
       var oldValue = parse(ev.oldValue);
       const oldValue = parse(ev.oldValue);
       if (callOnChange && newValue === oldValue) return;
       if (callOnChange && newValue === oldValue)
       var encapsulatedEvent = {
        return;
         key: key,
       const encapsulatedEvent = {
         newValue: newValue,
         key,
         oldValue: oldValue,
         newValue,
         oldValue,
         storageArea: ev.storageArea,
         storageArea: ev.storageArea,
         url: ev.url
         url: ev.url
第77行: 第80行:
       listener(encapsulatedEvent);
       listener(encapsulatedEvent);
     };
     };
     const off = listen(fn, options);
     var off = listen(fn, options);
     return [v, off];
     return [v, off];
   }
   }
第83行: 第86行:
   // src/utils/utils.ts
   // src/utils/utils.ts
   function clickOutside(el, callback) {
   function clickOutside(el, callback) {
     const cb = (ev) => {
     var cb = function cb(ev) {
       const { target } = ev;
       var target = ev.target;
       if (!(target instanceof Element))
 
        return;
       if (!(target instanceof Element)) return;
       if (target === el)
       if (target === el) return;
        return;
       var obj = target.parentElement;
       let obj = target.parentElement;
       while (obj && obj !== el && obj.parentElement) {
       while (obj && obj !== el && obj.parentElement) {
         obj = obj.parentElement;
         obj = obj.parentElement;
       }
       }
       if (obj !== el)
       if (obj !== el) callback();
        callback();
     };
     };
     window.addEventListener("click", cb, true);
     window.addEventListener("click", cb, true);
     return () => window.removeEventListener("click", cb);
     return function () {
      return window.removeEventListener("click", cb);
    };
   }
   }


   // widget/VectorThemeLoader/SwitchPanel.ts
   // widget/VectorThemeLoader/SwitchPanel.ts
   function createPanel(props, ...innerElements) {
   function createPanel(props) {
     const {
     var className = props.className,
      className,
        _props$position = props.position,
      position: { x, y }
        x = _props$position.x,
    } = props;
        y = _props$position.y;
     const panel = document.createElement("div");
 
     panel.className = `salt-panel ${className || ""}`;
     var panel = document.createElement("div");
     panel.className = "salt-panel " + (className || "");
     panel.style.position = "absolute";
     panel.style.position = "absolute";
     for (const el of innerElements)
 
       panel.appendChild(el);
     for (var _len = arguments.length, innerElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      innerElements[_key - 1] = arguments[_key];
    }
 
    var _iteratorNormalCompletion = true;
    var _didIteratorError = false;
    var _iteratorError = undefined;
 
    try {
       for (var _iterator = innerElements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
        var el = _step.value;
 
        panel.appendChild(el);
      }
    } catch (err) {
      _didIteratorError = true;
      _iteratorError = err;
    } finally {
      try {
        if (!_iteratorNormalCompletion && _iterator.return) {
          _iterator.return();
        }
      } finally {
        if (_didIteratorError) {
          throw _iteratorError;
        }
      }
    }
 
     document.body.appendChild(panel);
     document.body.appendChild(panel);
     const { offsetWidth, offsetHeight } = panel;
     var offsetWidth = panel.offsetWidth,
     panel.style.left = `${Math.max(x - offsetWidth / 2, 0)}px`;
        offsetHeight = panel.offsetHeight;
     panel.style.top = `${y + 2}px`;
 
     const cancel = clickOutside(panel, () => {
     panel.style.left = Math.max(x - offsetWidth / 2, 0) + "px";
     panel.style.top = y + 2 + "px";
     var cancel = clickOutside(panel, function () {
       console.log("awa");
       console.log("awa");
       panel.remove();
       panel.remove();
第124行: 第158行:


   // widget/VectorThemeLoader/widget.t.scss
   // widget/VectorThemeLoader/widget.t.scss
   var widget_t_default = `
   var widget_t_default = "\n.salt-panel.style-list {\n  padding: 8px 12px;\n  border-radius: 4px;\n  background-color: var(--lightcolor, #f9f9f9);\n  box-shadow: 1px 2px 5px 0 rgba(153, 153, 153, 0.4);\n  font-size: 1rem;\n  z-index: 9999;\n}\n.salt-panel.style-list, .salt-panel.style-list * {\n  box-sizing: border-box;\n}\n.salt-panel.style-list .style-list-item {\n  display: block;\n  min-width: 196px;\n  margin: 4px 0;\n  list-style: none;\n  overflow: hidden;\n}\n.salt-panel.style-list .style-list-item .theme-list {\n  padding: 2px 4px;\n  margin: 0;\n  overflow: hidden;\n}\n.salt-panel.style-list .style-list-item .theme-list .theme-list-item {\n  padding: 4px 8px;\n  list-style: none;\n  overflow: hidden;\n  user-select: none;\n  cursor: pointer;\n}\n.salt-panel.style-list .style-list-item .theme-list .theme-list-item:hover {\n  background-color: rgba(153, 153, 153, 0.0666666667);\n}\n.salt-panel.style-list .style-list-item .theme-list .theme-list-item:active {\n  background-color: rgba(153, 153, 153, 0.2);\n}\n.salt-panel.style-list .style-list-item .theme-list .theme-list-item .theme-list-item-img {\n  display: inline-block;\n  width: 1rem;\n  height: 1rem;\n  vertical-align: middle;\n  margin-right: 4px;\n}\n.salt-panel.style-list .style-list-item .theme-list .theme-list-item .theme-list-item-name {\n  display: inline;\n}";
.salt-panel.style-list {
  padding: 8px 12px;
  border-radius: 4px;
  background-color: var(--lightcolor, #f9f9f9);
  box-shadow: 1px 2px 5px 0 rgba(153, 153, 153, 0.4);
  font-size: 1rem;
  z-index: 9999;
}
.salt-panel.style-list, .salt-panel.style-list * {
  box-sizing: border-box;
}
.salt-panel.style-list .style-list-item {
  display: block;
  min-width: 196px;
  margin: 4px 0;
  list-style: none;
  overflow: hidden;
}
.salt-panel.style-list .style-list-item .theme-list {
  padding: 2px 4px;
  margin: 0;
  overflow: hidden;
}
.salt-panel.style-list .style-list-item .theme-list .theme-list-item {
  padding: 4px 8px;
  list-style: none;
  overflow: hidden;
  user-select: none;
  cursor: pointer;
}
.salt-panel.style-list .style-list-item .theme-list .theme-list-item:hover {
  background-color: rgba(153, 153, 153, 0.0666666667);
}
.salt-panel.style-list .style-list-item .theme-list .theme-list-item:active {
  background-color: rgba(153, 153, 153, 0.2);
}
.salt-panel.style-list .style-list-item .theme-list .theme-list-item .theme-list-item-img {
  display: inline-block;
  width: 1rem;
  height: 1rem;
  vertical-align: middle;
  margin-right: 4px;
}
.salt-panel.style-list .style-list-item .theme-list .theme-list-item .theme-list-item-name {
  display: inline;
}`;


   // widget/VectorThemeLoader/widget.ts
   // widget/VectorThemeLoader/widget.ts
第199行: 第187行:
   var styleKey = isLegacy ? "mcbbs-wiki-skin-vector-legacy-style" : "mcbbs-wiki-skin-vector-style";
   var styleKey = isLegacy ? "mcbbs-wiki-skin-vector-legacy-style" : "mcbbs-wiki-skin-vector-style";
   var themeKey = isLegacy ? "mcbbs-wiki-skin-vector-legacy-theme" : "mcbbs-wiki-skin-vector-theme";
   var themeKey = isLegacy ? "mcbbs-wiki-skin-vector-legacy-theme" : "mcbbs-wiki-skin-vector-theme";
   var loadThemeStyle = (style, theme) => {
   var loadThemeStyle = function loadThemeStyle(style, theme) {
     const styleMap = themeMap[style] || themeMap[defaultStyle];
     var styleMap = themeMap[style] || themeMap[defaultStyle];
     const currentCommonStyle = styleMap.common;
     var currentCommonStyle = styleMap.common;
     if (currentCommonStyle)
     if (currentCommonStyle) loadWikiStyle(currentCommonStyle, "salt-wiki-style-common");
      loadWikiStyle(currentCommonStyle, "salt-wiki-style-common");
     var currentTheme = theme === "default" || !styleMap.other[theme] ? styleMap.default : styleMap.other[theme];
     const currentTheme = theme === "default" || !styleMap.other[theme] ? styleMap.default : styleMap.other[theme];
     loadWikiStyle(currentTheme.css, "salt-wiki-style-theme");
     loadWikiStyle(currentTheme.css, "salt-wiki-style-theme");
   };
   };
   var initTheme = () => {
   var initTheme = function initTheme() {
     const current = { style: defaultStyle, theme: "default" };
     var current = { style: defaultStyle, theme: "default" };
     const [style] = readAndListen({
 
     var _readAndListen = readAndListen({
       key: styleKey,
       key: styleKey,
       defaultValue: defaultStyle,
       defaultValue: defaultStyle,
       listener: (ev) => {
       listener: function listener(ev) {
         if (ev.newValue) {
         if (ev.newValue) {
           current.style = ev.newValue;
           current.style = ev.newValue;
第218行: 第206行:
         }
         }
       }
       }
     });
     }),
     const [theme] = readAndListen({
        _readAndListen2 = _slicedToArray(_readAndListen, 1),
        style = _readAndListen2[0];
 
     var _readAndListen3 = readAndListen({
       key: themeKey,
       key: themeKey,
       defaultValue: "default",
       defaultValue: "default",
       listener: (ev) => {
       listener: function listener(ev) {
         if (ev.newValue) {
         if (ev.newValue) {
           current.theme = ev.newValue;
           current.theme = ev.newValue;
第228行: 第219行:
         }
         }
       }
       }
     });
     }),
        _readAndListen4 = _slicedToArray(_readAndListen3, 1),
        theme = _readAndListen4[0];
 
     current.style = style;
     current.style = style;
     current.theme = theme;
     current.theme = theme;
     const loadCurrentTheme = () => {
     var loadCurrentTheme = function loadCurrentTheme() {
       const { style: style2, theme: theme2 } = current;
       var style2 = current.style,
          theme2 = current.theme;
 
       loadThemeStyle(style2, theme2);
       loadThemeStyle(style2, theme2);
     };
     };
第238行: 第234行:
   };
   };
   initTheme();
   initTheme();
   var handleSwitchBtn = (ev) => {
   var handleSwitchBtn = function handleSwitchBtn(ev) {
     const { top, left } = $(btn).offset();
     var _$$offset = $(btn).offset(),
        top = _$$offset.top,
        left = _$$offset.left;
 
     console.log(ev);
     console.log(ev);
     const innerElements = [];
     var innerElements = [];
     const createThemeSwitch = (style, themeCode, theme) => {
     var createThemeSwitch = function createThemeSwitch(style, themeCode, theme) {
       const { name, img: imgSrc } = theme;
       var name = theme.name,
       const handleClick = () => {
          imgSrc = theme.img;
 
       var handleClick = function handleClick() {
         write(styleKey, style);
         write(styleKey, style);
         write(themeKey, themeCode);
         write(themeKey, themeCode);
         loadThemeStyle(style, themeCode);
         loadThemeStyle(style, themeCode);
       };
       };
       const li2 = document.createElement("li");
       var li2 = document.createElement("li");
       li2.className = "theme-list-item";
       li2.className = "theme-list-item";
       li2.addEventListener("click", handleClick);
       li2.addEventListener("click", handleClick);
       if (imgSrc) {
       if (imgSrc) {
         const img = document.createElement("img");
         var img = document.createElement("img");
         img.src = imgSrc;
         img.src = imgSrc;
         img.className = "theme-list-item-img";
         img.className = "theme-list-item-img";
         li2.appendChild(img);
         li2.appendChild(img);
       }
       }
       const div = document.createElement("div");
       var div = document.createElement("div");
       div.textContent = name;
       div.textContent = name;
       div.className = "theme-list-item-name";
       div.className = "theme-list-item-name";
第264行: 第265行:
       return li2;
       return li2;
     };
     };
     for (const style in themeMap) {
     for (var style in themeMap) {
       const li2 = document.createElement("li");
       var li2 = document.createElement("li");
       li2.className = "style-list-item";
       li2.className = "style-list-item";
       const title = document.createElement("div");
       var title = document.createElement("div");
       title.className = "style-list-item-title";
       title.className = "style-list-item-title";
       title.textContent = themeMap[style].name;
       title.textContent = themeMap[style].name;
       const ul = document.createElement("ul");
       var ul = document.createElement("ul");
       ul.className = "theme-list";
       ul.className = "theme-list";
       const themeList = [];
       var themeList = [];
       const defaultTheme = themeMap[style].default;
       var defaultTheme = themeMap[style].default;
       themeList.push(createThemeSwitch(style, "default", defaultTheme));
       themeList.push(createThemeSwitch(style, "default", defaultTheme));
       for (const themeCode in themeMap[style].other) {
       for (var themeCode in themeMap[style].other) {
         themeList.push(createThemeSwitch(style, themeCode, themeMap[style].other[themeCode]));
         themeList.push(createThemeSwitch(style, themeCode, themeMap[style].other[themeCode]));
       }
       }
       for (const el of themeList)
       var _iteratorNormalCompletion2 = true;
        ul.appendChild(el);
      var _didIteratorError2 = false;
      var _iteratorError2 = undefined;
 
      try {
        for (var _iterator2 = themeList[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
          var el = _step2.value;
 
          ul.appendChild(el);
        }
      } catch (err) {
        _didIteratorError2 = true;
        _iteratorError2 = err;
      } finally {
        try {
          if (!_iteratorNormalCompletion2 && _iterator2.return) {
            _iterator2.return();
          }
        } finally {
          if (_didIteratorError2) {
            throw _iteratorError2;
          }
        }
      }
 
       li2.appendChild(title);
       li2.appendChild(title);
       li2.appendChild(ul);
       li2.appendChild(ul);
       innerElements.push(li2);
       innerElements.push(li2);
     }
     }
     createPanel({
     createPanel.apply(undefined, [{
       className: "style-list",
       className: "style-list",
       position: { x: left, y: top + btn.offsetHeight }
       position: { x: left, y: top + btn.offsetHeight }
     }, ...innerElements);
     }].concat(innerElements));
   };
   };
   var headLogoutBtn = document.getElementById("pt-logout");
   var headLogoutBtn = document.getElementById("pt-logout");
   var btn = document.createElement("a");
   var btn = document.createElement("a");
   btn.textContent = "切换主题";
   btn.textContent = "主题";
   btn.title = "切换主题";
   btn.title = "主题";
   btn.onclick = handleSwitchBtn;
   btn.onclick = handleSwitchBtn;
   var li = document.createElement("li");
   var li = document.createElement("li");
维护员、​界面管理员、​巡查员、​监督员、​小部件编辑者
3,469

个编辑

我们提供服务需要使用Cookie。您使用我们的服务,即表示您同意我们使用Cookie。

导航菜单