跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
分类索引
最近更改
随便看看
灵兰秘典
捐助本站
帮助
帮助
联系我们
关于本站
MediaWiki帮助
USER-SIDEBAR
GROUP-SIDEBAR
CATEGORY-SIDEBAR
中医百科
搜索
搜索
外观
登录
个人工具
登录
查看“︁MediaWiki:Gadget-PrintOptions.js”︁的源代码
系统消息
讨论
English
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
←
MediaWiki:Gadget-PrintOptions.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
(function () { 'use strict'; var windowManager; var printDialog; var printOptions = { install: function () { var $printLink = $('#t-print a'); if ($printLink.length === 0) { return; } // ⚠️ 修复点:移除捕获阶段监听,改用标准事件绑定 $printLink .text('可打印版本') .off('click') .one('click', function (e) { // 🔧 修复点:确保仅在点击时加载资源并触发弹窗 mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']) .then(function () { printOptions.createWindow(); }) .catch(function (err) { mw.log.error('打印对话框加载失败:', err); }); e.preventDefault(); e.stopPropagation(); }); // 🚀 预加载资源(不影响主流程) mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']); }, createWindow: function () { // 🔒 防止重复初始化 if (printDialog) { windowManager.openWindow(printDialog); return; } // 🖥️ 对话框类定义 function PrintDialog(config) { PrintDialog.super.call(this, config); } OO.inheritClass(PrintDialog, OO.ui.ProcessDialog); PrintDialog.static.name = 'printdialog'; PrintDialog.static.title = '打印此页面'; PrintDialog.static.actions = [ { action: 'print', label: '打印', flags: ['primary', 'progressive'] }, { action: 'cancel', label: '取消', flags: 'safe' } ]; PrintDialog.prototype.initialize = function () { PrintDialog.super.prototype.initialize.apply(this, arguments); this.panel = new OO.ui.PanelLayout({ padded: true, expanded: false }); this.content = new OO.ui.FieldsetLayout(); // ✅ 动态生成选项 printOptions.questions.forEach(function (question) { if (question.type === 'checkbox') { var checkbox = new OO.ui.CheckboxInputWidget({ selected: question.checked }); question.widget = checkbox; this.content.addItems([ new OO.ui.FieldLayout(checkbox, { label: question.label, align: 'inline' }) ]); } }, this); this.panel.$element.append(this.content.$element); this.$body.append(this.panel.$element); }; PrintDialog.prototype.getActionProcess = function (action) { if (action === 'print') { return new OO.ui.Process(function () { // 📝 保存用户选择 printOptions.questions.forEach(function (question) { if (question.type === 'checkbox' && question.widget) { printOptions[question.returnvalue] = question.widget.isSelected(); } }); return this.close({ action: action }).then(function () { // ⏳ 添加延迟确保弹窗关闭后再打印 setTimeout(function () { printOptions.changePrintCSS(); printOptions.otherEnhancements(); window.print(); setTimeout(function () { location.reload(); // 恢复页面状态 }, 500); }, 100); }); }.bind(this)); } return PrintDialog.super.prototype.getActionProcess.call(this, action); }; // 🌐 初始化窗口管理器 if (!windowManager) { windowManager = new OO.ui.WindowManager(); windowManager.$element.css('z-index', '100000'); // 确保在最顶层 $('body').append(windowManager.$element); } // 🆕 创建对话框实例(仅首次) printDialog = new PrintDialog({ size: 'medium' }); windowManager.addWindows([printDialog]); windowManager.openWindow(printDialog); // 🎯 关键修复:确保点击后才打开 }, changePrintCSS: function () { /* 原有样式处理逻辑(保持不变)*/ var printStyle = ''; if (this.enhanced === false) { // ...(样式表处理代码) } if (this.noimages) printStyle += 'img, .thumb { display:none !important; }\n'; if (this.norefs) printStyle += '.references, .reference { display:none !important; }\n'; if (this.notoc) printStyle += '#toc, .toc { display:none !important; }\n'; if (this.nobackground) printStyle += 'body { background: white !important; }\n'; if (this.blacktext) printStyle += '* { color: black !important; }\n'; if (printStyle) { $('head').append('<style media="print">' + printStyle + '</style>'); } }, otherEnhancements: function () { var $link = $('div.printfooter a'); try { $link.text(decodeURIComponent($link.text())); } catch (e) { mw.log.warn('URL解码失败:', e); } }, 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' } ] }; // 🚦 安全初始化(避免与其他脚本冲突) mw.hook('wikipage.content').add(function () { if (mw.config.get('wgNamespaceNumber') >= 0) { setTimeout(printOptions.install, 0); // 确保在最后执行 } }); })();
返回
MediaWiki:Gadget-PrintOptions.js
。