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

删除的内容 添加的内容
创建页面,内容为“* * Copyright (c) 2021-present, 安忆. * * @author 安忆 [[zh:U:安忆]] * @file scrollUpButton.js * @license GPL v3:​ $(function scrollUpButton() { var $window = $(window); var scrollButtonIcon = '//zybkcn.com/w/images/5/59/Font_Awesome_5_regular_arrow-circle-up_blue.svg'; if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1')) { scrollButtonIcon = '//zybkcn.com/w/images/5/59/Font_Awesome_5_regular_arrow…”
 
鹿野耕云移动页面MediaWiki:Gadget-scrollUpButton.jsMediaWiki:Gadget-ScrollUpButton.js,不留重定向
 
(未显示2个用户的8个中间版本)
第1行:
/**
* SPDX-License-Identifier: GPL-3.0-or-later
* Copyright (c) 2021-present, 安忆.
* _addText: '{{Gadget Header|license=GPL-3.0-or-later}}'
*
* @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/ScrollUpButton}
* @author 安忆 [[zh:U:安忆]]
* @fileauthor scrollUpButton安忆 <i@anyi.jsin>
* @license GPL-3.0-or-later v3{@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0}
*/
 
$(function scrollUpButton() {
/**
var $window = $(window);
* Copyright (C) 安忆
var scrollButtonIcon = '//zybkcn.com/w/images/5/59/Font_Awesome_5_regular_arrow-circle-up_blue.svg';
*
if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1')) {
* This program is free software: you can redistribute it and/or modify
scrollButtonIcon = '//zybkcn.com/w/images/5/59/Font_Awesome_5_regular_arrow-circle-up_blue.svg/32px-Font_Awesome_5_regular_arrow-circle-up_blue.svg.png';
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* +------------------------------------------------------------+
* | === WARNING: GLOBAL GADGET FILE === |
* +------------------------------------------------------------+
* | All changes should be made in the repository, |
* | otherwise they will be lost. |
* +------------------------------------------------------------+
* | Changes to this page may affect many users. |
* | Please discuss changes by opening an issue before editing. |
* +------------------------------------------------------------+
*/
/* <nowiki> */
 
(() => {
 
"use strict";
 
// dist/ScrollUpButton/ScrollUpButton.js
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var n = 0, F = function() {
};
return { s: F, n: function() {
return n >= r.length ? { done: true } : { done: false, value: r[n++] };
}, e: function(r2) {
throw r2;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o, a = true, u = false;
var changeOpacity = function changeOpacity(event) {
return { s: function() {
event.currentTarget.style.opacity = event.type === 'mouseenter' ? '1' : '0.7';
t = t.call(r);
}, n: function() {
var r2 = t.next();
return a = r2.done, r2;
}, e: function(r2) {
u = true, o = r2;
}, f: function() {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
} };
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
let key = _step.value;
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target,
mod
));
//! src/ScrollUpButton/ScrollUpButton.ts
var import_ext_gadget6 = require("ext.gadget.Util");
//! src/ScrollUpButton/modules/constant.ts
var CLASS_NAME = "gadget-scroll_up_button";
var CLASS_NAME_DOWN = "".concat(CLASS_NAME, "-down");
var CLASS_NAME_UP = "".concat(CLASS_NAME, "-up");
//! src/ScrollUpButton/components/scrollButton.tsx
var import_ext_gadget2 = __toESM(require("ext.gadget.JSX"), 1);
//! src/ScrollUpButton/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = () => {
return {
ToBottom: (0, import_ext_gadget.localize)({
en: "Scroll to the bottom",
"zh-hans": "滚动至页底",
"zh-hant": "滾動至頁底"
}),
ToTop: (0, import_ext_gadget.localize)({
en: "Go back to the top",
"zh-hans": "滚动至页顶",
"zh-hant": "滾動至頁頂"
})
};
};
var scrollTop = function scrollTop(height) {
var i18nMessages = getI18nMessages();
$('html, body').animate({
var getMessage = (key) => {
scrollTop: height
return i18nMessages[key] || key;
}, 660);
};
//! src/ScrollUpButton/components/scrollButton.tsx
var $scrollButton = $('<img>').addClass('noprint').attr({
var import_ext_gadget3 = require("ext.gadget.Util");
draggable: 'false',
function ScrollButton(props) {
src: scrollButtonIcon
}).css(const {
display: 'none'additionalClassName,
position: 'fixed'alt,
right: '18px'ariaLabel,
cursor: 'pointer'onClick,
opacity: '0.7'onMouseEnter,
onMouseLeave
'-moz-user-select': 'none',
} = props;
'-webkit-user-select': 'none',
return /* @__PURE__ */ import_ext_gadget2.default.createElement("img", {
'user-select': 'none'
className: [CLASS_NAME, additionalClassName, "noprint"],
src: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'%3E%3C/svg%3E",
width: "32",
height: "32",
draggable: false,
alt,
"aria-label": ariaLabel,
onClick,
onMouseEnter,
onMouseLeave
});
}
var $scrollDownButton = $scrollButton.clone().attr('id', 'scrollDownButton-zhwiki').css('transform', 'rotate(180deg)').on('click', function () {
var TO_BOTTOM = getMessage("ToBottom");
scrollTop(($(document).height() || 0) - ($window.height() || 0));
var TO_TOP = getMessage("ToTop");
});
var ScrollDownButton = (onMouseEnterMouseLeave) => /* @__PURE__ */ import_ext_gadget2.default.createElement(ScrollButton, {
var $scrollUpButton = $scrollButton.clone().attr('id', 'scrollUpButton-zhwiki').on('click', function () {
additionalClassName: CLASS_NAME_DOWN,
scrollTop(0);
alt: TO_BOTTOM,
});
ariaLabel: TO_BOTTOM,
var $elements = [$scrollDownButton, $scrollUpButton];
onClick: () => {
$elements.forEach(function ($element) {
var _$$height, _$$height2;
$element.on('mouseenter mouseleave', changeOpacity).appendTo(document.body);
(0, import_ext_gadget3.scrollTop)(((_$$height = $(document).height()) !== null && _$$height !== void 0 ? _$$height : 0) - ((_$$height2 = $(window).height()) !== null && _$$height2 !== void 0 ? _$$height2 : 0));
});
},
var fadeIn = function fadeIn() {
onMouseEnter: onMouseEnterMouseLeave,
$elements.forEach(function ($element) {
onMouseLeave: onMouseEnterMouseLeave
$element.fadeIn('slow');
});
var ScrollUpButton = (onMouseEnterMouseLeave) => /* @__PURE__ */ import_ext_gadget2.default.createElement(ScrollButton, {
additionalClassName: CLASS_NAME_UP,
alt: TO_TOP,
ariaLabel: TO_TOP,
onClick: () => {
(0, import_ext_gadget3.scrollTop)(0);
},
onMouseEnter: onMouseEnterMouseLeave,
onMouseLeave: onMouseEnterMouseLeave
});
//! src/ScrollUpButton/modules/insertElementAndListener.ts
var import_ext_gadget4 = require("ext.gadget.Util");
var import_ext_gadget5 = require("ext.gadget.Tippy");
var insertElementandListener = ($body) => {
const onMouseEnterMouseLeave = (event) => {
(0, import_ext_gadget4.changeOpacityWhenMouseEnterOrLeave)(event);
};
const scrollDownButton = ScrollDownButton(onMouseEnterMouseLeave);
var fadeOut = function fadeOut() {
const scrollUpButton2 = ScrollUpButton(onMouseEnterMouseLeave);
$elements.forEach(function ($element) {
for (var _i = 0, _arr = [scrollDownButton, scrollUpButton2]; _i < _arr.length; _i++) {
$element.fadeOut('slow');
const element = _arr[_i];
$body.append(element);
(0, import_ext_gadget5.tippy)(element, {
arrow: true,
content: element.getAttribute("alt"),
placement: "left"
});
};
var left = function left(px) {
$elements.forEach(function ($element) {
$element.css('left', px ? px + 'px' : 'unset');
});
};
var right = function right(px) {
$elements.forEach(function ($element) {
$element.css('right', px ? px + 'px' : 'unset');
});
};
var mediaQueryList = window.matchMedia('(min-width: 1400px)');
var isVector2022Match = false;
if (mw.config.get('skin') === 'vector-2022') {
var mediaQueryHandler = function mediaQueryHandler(event) {
if (event.matches) {
isVector2022Match = true;
right(8);
} else {
isVector2022Match = false;
right(18);
}
};
// Check mediaQueryList as Safari doesn't have support for mediaQueryList.addEventListener
try {
mediaQueryList.addEventListener('change', mediaQueryHandler);
} catch (e) {
mediaQueryList.addListener(mediaQueryHandler);
}
if (mediaQueryList.matches) {
isVector2022Match = true;
right(8);
}
}
const scrollListener = () => {
var scrollButtonTimer;
let downButtonButtom;
$window.on('scroll selectionchange', function () {
let upButtonButtom;
var dingHeight = $('#bluedeck_ding>div').height() || 0;
if (document.querySelector("#proveit") || document.querySelector(".gadget-cat_a_lot-container") || document.querySelector("#gadget-word_count-tip")) {
var vector2022Height = isVector2022Match ? 24 : 0;
downButtonButtom = "85px";
$scrollDownButton.css('bottom', dingHeight + vector2022Height + 24 + 'px');
upButtonButtom = "127px";
$scrollUpButton.css('bottom', dingHeight + vector2022Height + 65 + 'px');
if (mw.config.get('wgGEHelpPanelEnabled') && $('#mw-ge-help-panel-cta-button').length || $('#cat_a_lot').length || $('#proveit').length || $('.wordcount').length) {
left(10);
} else {
left()downButtonButtom = "45px";
upButtonButtom = "85px";
}
scrollDownButton.style.bottom = downButtonButtom;
var windowScrollTop = $window.scrollTop() || 0;
scrollUpButton2.style.bottom = upButtonButtom;
if (windowScrollTop > 60) {
};
fadeIn();
const scrollListenerWithThrottle = mw.util.throttle(scrollListener, 200);
} else {
$(window).on("scroll selectionchange", scrollListenerWithThrottle);
fadeOut();
};
}
//! src/ScrollUpButton/ScrollUpButton.ts
clearTimeout(scrollButtonTimer);
void (0, import_ext_gadget6.getBody)().then(function scrollUpButton($body) {
scrollButtonTimer = setTimeout(fadeOut, 2000);
insertElementandListener($body);
});
$elements.forEach(function ($element) {
$element.on('mouseenter', function () {
clearTimeout(scrollButtonTimer);
});
});
});
 
})();
 
/* </nowiki> */