跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
中医百科
搜索
搜索
登录
个人工具
登录
深色模式
查看“MediaWiki:Gadget-PrintOptions.js”的源代码
系统消息
讨论
English
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
清除缓存
常规
链入页面
相关更改
特殊页面
页面信息
页面值
←
MediaWiki:Gadget-PrintOptions.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
/** * SPDX-License-Identifier: CC-BY-SA-4.0 * _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}' * * @base {@link https://en.wikipedia.org/wiki/MediaWiki:Gadget-PrintOptions.js} * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/PrintOptions} * @author Derk-Jan Hartman, English Wikipedia Contributors and Qiuwen Baike Contributors. */ /** * Print options is a Gadget writen by Derk-Jan Hartman * * Licensed MIT and/or CC-BY-SA-4.0 * * Copyright (c) 2010-2017 Derk-Jan Hartman * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * @license CC-BY-SA-4.0 {@link https://www.qiuwenbaike.cn/wiki/H:CC-BY-SA-4.0} */ /** * +------------------------------------------------------------+ * | === 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/PrintOptions/PrintOptions.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; 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; } //! src/PrintOptions/PrintOptions.ts var import_ext_gadget2 = require("ext.gadget.Util"); //! src/PrintOptions/modules/i18n.ts var import_ext_gadget = require("ext.gadget.i18n"); var getI18nMessages = () => { return { Print: (0, import_ext_gadget.localize)({ en: "Print", ja: "印刷", "zh-hans": "打印", "zh-hant": "列印" }), "Print this page": (0, import_ext_gadget.localize)({ en: "Print this page", ja: "このページを印刷に", "zh-hans": "打印此页面", "zh-hant": "列印此頁面" }), Cancel: (0, import_ext_gadget.localize)({ en: "Cancel", ja: "キャンセル", zh: "取消" }) }; }; var i18nMessages = getI18nMessages(); var getMessage = (key) => { return i18nMessages[key] || key; }; //! src/PrintOptions/PrintOptions.ts var getPrintOptions = ($body) => { let windowManager; let printDialog; const printOptions = { enhanced: true, noimages: false, norefs: false, notoc: false, nobackground: false, blacktext: true, install: () => { var _$printLink$off$get; const $printLink = $body.find("#t-print a"); if (!$printLink.length) { return; } (_$printLink$off$get = $printLink.off("click").get(0)) === null || _$printLink$off$get === void 0 || _$printLink$off$get.addEventListener( "click", (event) => { event.stopPropagation(); event.preventDefault(); printOptions.createWindow(); }, // Use capturing phase, to beat the other click listener true ); }, createWindow: () => { class PrintDialog extends OO.ui.ProcessDialog { panel; content; $body; questions = [{ label: "隐藏界面元素", type: "checkbox", checked: true, returnvalue: "enhanced" }, { label: "隐藏图片", type: "checkbox", checked: false, returnvalue: "noimages" }, { label: "隐藏参考文献", type: "checkbox", checked: false, returnvalue: "norefs" }, { label: "隐藏目录", type: "checkbox", checked: false, returnvalue: "notoc" }, { label: "移除背景(您的浏览器或可以覆盖本设置)", type: "checkbox", checked: false, returnvalue: "nobackground" }, { label: "强制将所有文字设置为黑色", type: "checkbox", checked: true, returnvalue: "blacktext" }]; initialize() { let checkboxInputWidget; const fieldLayouts = []; super.initialize(); this.panel = new OO.ui.PanelLayout({ expanded: false, padded: true }); this.content = new OO.ui.FieldsetLayout(); var _iterator = _createForOfIteratorHelper(this.questions), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { const question = _step.value; const { checked, label, type } = question; if (type !== "checkbox") { continue; } checkboxInputWidget = new OO.ui.CheckboxInputWidget({ selected: checked }); question.widget = checkboxInputWidget; fieldLayouts[fieldLayouts.length] = new OO.ui.FieldLayout(checkboxInputWidget, { label, align: "inline" }); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } this.content.addItems(fieldLayouts); this.panel.$element.append(this.content.$element); this.panel.$element.appendTo(this.$body); return this; } getActionProcess(action) { const self = this; if (action === "print") { return new OO.ui.Process(() => { var _iterator2 = _createForOfIteratorHelper(this.questions), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { const question = _step2.value; if (question.type === "checkbox" && question.widget) { Object.defineProperty(printOptions, question.returnvalue, { value: question.widget.isSelected(), writable: true }); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } void self.close({ action }).closed.then(() => { printOptions.changePrintCSS(); printOptions.otherEnhancements(); window.print(); }); }); } return super.getActionProcess(action); } } PrintDialog.static = { ...OO.ui.ProcessDialog.static }; PrintDialog.static.name = "PrintDialog"; PrintDialog.static.title = getMessage("Print this page"); PrintDialog.static.actions = [{ action: "print", label: getMessage("Print"), flags: ["primary", "progressive"] }, { label: getMessage("Cancel"), flags: ["safe", "close"] }]; if (!windowManager) { windowManager = new OO.ui.WindowManager(); $body.append(windowManager.$element); } if (!printDialog) { printDialog = new PrintDialog({ size: "medium" }); windowManager.addWindows([printDialog]); } void windowManager.openWindow(printDialog); }, changePrintCSS() { if (this.enhanced === false) { var _iterator3 = _createForOfIteratorHelper(document.styleSheets), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { const stylesheet = _step3.value; const { media } = stylesheet; if (!media) { continue; } if (media.mediaText && media.mediaText.includes("print")) { if (!media.mediaText.includes("screen")) { stylesheet.disabled = true; } } else if (media.mediaText && media.mediaText.includes("screen") && !media.mediaText.includes("print")) { try { media.appendMedium("print"); } catch { media.mediaText += ",print"; } } let rules; try { rules = stylesheet.cssRules || stylesheet.rules; } catch { mw.log.warn("Not possible to correct stylesheet due to cross origin restrictions."); continue; } if (!rules) { continue; } for (let j = 0; j < rules.length; j++) { const rule = rules[j]; let hasPrint = false; let hasScreen = false; if (!rule) { continue; } if (rule.type === CSSRule.MEDIA_RULE && rule.media) { var _iterator4 = _createForOfIteratorHelper(rule.media), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { const ruleMedia = _step4.value; if (ruleMedia === "print") { hasPrint = true; } else if (ruleMedia === "screen") { hasScreen = true; } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } else { continue; } if (hasPrint && !hasScreen) { stylesheet.deleteRule(j); j--; } else if (rule && hasScreen && !hasPrint) { try { rule.media.appendMedium("print"); } catch { rule.media.mediaText += ",print"; } } } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } let printStyle = ""; if (this.noimages) { printStyle += "img,.thumb{display:none}"; } if (this.norefs) { printStyle += '.mw-headline[id="References"],ol.references,.reference{display:none}'; } if (this.notoc) { printStyle += "#toc,.toc{display:none}"; } if (this.nobackground) { printStyle += "*{background:none !important}"; } if (this.blacktext) { printStyle += "*{color:#000 !important}"; } if (printStyle) { var _document$querySelect; (_document$querySelect = document.querySelector("#printStyle")) === null || _document$querySelect === void 0 || _document$querySelect.remove(); const styleTag = document.createElement("style"); styleTag.id = "printStyle"; styleTag.media = "print"; styleTag.append(document.createTextNode(printStyle)); document.head.append(styleTag); } }, /* Rewrite the "retrieved from" url to be readable */ otherEnhancements: () => { const link = $body.find("div.printfooter a"); link.text(decodeURI(link.text())); } }; return printOptions; }; void (0, import_ext_gadget2.getBody)().then(function printOptionsLoad($body) { if (mw.config.get("wgNamespaceNumber") < 0) { return; } const printOptions = getPrintOptions($body); setTimeout(printOptions.install, 0); }); })();
该页面使用的模板:
Template:Gadget Header
(
查看源代码
)
返回
MediaWiki:Gadget-PrintOptions.js
。
开关有限宽度模式