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

勤求古训,博采众方
删除的内容 添加的内容
 
无编辑摘要
标签已被回退
第1行: 第1行:
/**
/**
* Copyright (c) 2021-present, 安忆.
* SPDX-License-Identifier: GPL-3.0-or-later
* _addText: '{{Gadget Header|license=GPL-3.0-or-later}}'
*
*
* @author 安忆 [[zh:U:安忆]]
* @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/ScrollUpButton}
* @author 安忆 <i@anyi.in>
* @file scrollUpButton.js
* @license GPL-3.0-or-later {@link https://www.qiuwenbaike.cn/wiki/H:GPL-3.0}
* @license GPL v3
*/
*/
$(function scrollUpButton() {

var $window = $(window);
/**
var scrollButtonIcon = '//zybkcn.com/images/f/f0/Scroll-button.svg';
* Copyright (C) 安忆
if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1')) {
*
scrollButtonIcon = '//zybkcn.com/images/thumb/f/f0/Scroll-button.svg/32px-Scroll-button.svg.png';
* This program is free software: you can redistribute it and/or modify
* 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 changeOpacity = function changeOpacity(event) {
var o, a = true, u = false;
event.currentTarget.style.opacity = event.type === 'mouseenter' ? '1' : '0.7';
return { s: function() {
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.React"), 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) {
};
$('html, body').animate({
var i18nMessages = getI18nMessages();
scrollTop: height
var getMessage = (key) => {
}, 660);
return i18nMessages[key] || key;
};
};
var $scrollButton = $('<img>').addClass('noprint').attr({
//! src/ScrollUpButton/components/scrollButton.tsx
draggable: 'false',
var import_ext_gadget3 = require("ext.gadget.Util");
src: scrollButtonIcon
function ScrollButton(props) {
const {
}).css({
additionalClassName,
display: 'none',
alt,
position: 'fixed',
ariaLabel,
right: '18px',
onClick,
cursor: 'pointer',
onMouseEnter,
opacity: '0.7',
'-moz-user-select': 'none',
onMouseLeave
'-webkit-user-select': 'none',
} = props;
'user-select': 'none'
return /* @__PURE__ */ import_ext_gadget2.default.createElement("img", {
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 () {
}
scrollTop(($(document).height() || 0) - ($window.height() || 0));
var TO_BOTTOM = getMessage("ToBottom");
});
var TO_TOP = getMessage("ToTop");
var $scrollUpButton = $scrollButton.clone().attr('id', 'scrollUpButton-zhwiki').on('click', function () {
var ScrollDownButton = (onMouseEnterMouseLeave) => /* @__PURE__ */ import_ext_gadget2.default.createElement(ScrollButton, {
scrollTop(0);
additionalClassName: CLASS_NAME_DOWN,
});
alt: TO_BOTTOM,
var $elements = [$scrollDownButton, $scrollUpButton];
ariaLabel: TO_BOTTOM,
$elements.forEach(function ($element) {
onClick: () => {
$element.on('mouseenter mouseleave', changeOpacity).appendTo(document.body);
var _$$height, _$$height2;
});
(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() {
},
$elements.forEach(function ($element) {
onMouseEnter: onMouseEnterMouseLeave,
$element.fadeIn('slow');
onMouseLeave: onMouseEnterMouseLeave
});
});
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);
};
};
var fadeOut = function fadeOut() {
const scrollDownButton = ScrollDownButton(onMouseEnterMouseLeave);
$elements.forEach(function ($element) {
const scrollUpButton2 = ScrollUpButton(onMouseEnterMouseLeave);
$element.fadeOut('slow');
for (var _i = 0, _arr = [scrollDownButton, scrollUpButton2]; _i < _arr.length; _i++) {
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);
}
}
}
var scrollButtonTimer;
const scrollListener = () => {
$window.on('scroll selectionchange', function () {
let downButtonButtom;
var dingHeight = $('#bluedeck_ding>div').height() || 0;
let upButtonButtom;
var vector2022Height = isVector2022Match ? 24 : 0;
if (document.querySelector("#proveit") || document.querySelector(".gadget-cat_a_lot-container") || document.querySelector("#gadget-word_count-tip")) {
$scrollDownButton.css('bottom', dingHeight + vector2022Height + 24 + 'px');
downButtonButtom = "85px";
$scrollUpButton.css('bottom', dingHeight + vector2022Height + 65 + 'px');
upButtonButtom = "127px";
if (mw.config.get('wgGEHelpPanelEnabled') && $('#mw-ge-help-panel-cta-button').length || $('#cat_a_lot').length || $('#proveit').length || $('.wordcount').length) {
left(10);
} else {
} else {
downButtonButtom = "45px";
left();
upButtonButtom = "85px";
}
}
var windowScrollTop = $window.scrollTop() || 0;
scrollDownButton.style.bottom = downButtonButtom;
if (windowScrollTop > 60) {
scrollUpButton2.style.bottom = upButtonButtom;
fadeIn();
};
} else {
const scrollListenerWithThrottle = mw.util.throttle(scrollListener, 200);
fadeOut();
$(window).on("scroll selectionchange", scrollListenerWithThrottle);
}
};
clearTimeout(scrollButtonTimer);
//! src/ScrollUpButton/ScrollUpButton.ts
scrollButtonTimer = setTimeout(fadeOut, 2000);
void (0, import_ext_gadget6.getBody)().then(function scrollUpButton($body) {
});
insertElementandListener($body);
$elements.forEach(function ($element) {
$element.on('mouseenter', function () {
clearTimeout(scrollButtonTimer);
});
});
});
});

})();

2024年9月10日 (二) 21:21的版本

/**
 * Copyright (c) 2021-present, 安忆.
 *
 * @author 安忆 [[zh:U:安忆]]
 * @file scrollUpButton.js
 * @license GPL v3
 */
$(function scrollUpButton() {
  var $window = $(window);
  var scrollButtonIcon = '//zybkcn.com/images/f/f0/Scroll-button.svg';
  if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1')) {
    scrollButtonIcon = '//zybkcn.com/images/thumb/f/f0/Scroll-button.svg/32px-Scroll-button.svg.png';
  }
  var changeOpacity = function changeOpacity(event) {
    event.currentTarget.style.opacity = event.type === 'mouseenter' ? '1' : '0.7';
  };
  var scrollTop = function scrollTop(height) {
    $('html, body').animate({
      scrollTop: height
    }, 660);
  };
  var $scrollButton = $('<img>').addClass('noprint').attr({
    draggable: 'false',
    src: scrollButtonIcon
  }).css({
    display: 'none',
    position: 'fixed',
    right: '18px',
    cursor: 'pointer',
    opacity: '0.7',
    '-moz-user-select': 'none',
    '-webkit-user-select': 'none',
    'user-select': 'none'
  });
  var $scrollDownButton = $scrollButton.clone().attr('id', 'scrollDownButton-zhwiki').css('transform', 'rotate(180deg)').on('click', function () {
    scrollTop(($(document).height() || 0) - ($window.height() || 0));
  });
  var $scrollUpButton = $scrollButton.clone().attr('id', 'scrollUpButton-zhwiki').on('click', function () {
    scrollTop(0);
  });
  var $elements = [$scrollDownButton, $scrollUpButton];
  $elements.forEach(function ($element) {
    $element.on('mouseenter mouseleave', changeOpacity).appendTo(document.body);
  });
  var fadeIn = function fadeIn() {
    $elements.forEach(function ($element) {
      $element.fadeIn('slow');
    });
  };
  var fadeOut = function fadeOut() {
    $elements.forEach(function ($element) {
      $element.fadeOut('slow');
    });
  };
  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);
    }
  }
  var scrollButtonTimer;
  $window.on('scroll selectionchange', function () {
    var dingHeight = $('#bluedeck_ding>div').height() || 0;
    var vector2022Height = isVector2022Match ? 24 : 0;
    $scrollDownButton.css('bottom', dingHeight + vector2022Height + 24 + 'px');
    $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();
    }
    var windowScrollTop = $window.scrollTop() || 0;
    if (windowScrollTop > 60) {
      fadeIn();
    } else {
      fadeOut();
    }
    clearTimeout(scrollButtonTimer);
    scrollButtonTimer = setTimeout(fadeOut, 2000);
  });
  $elements.forEach(function ($element) {
    $element.on('mouseenter', function () {
      clearTimeout(scrollButtonTimer);
    });
  });
});