LLWiki正在建设中,欢迎加入我们

“MediaWiki:Gadget-SettingsDialog.js”的版本间差异

跳转到导航 跳转到搜索
// 使用Wikiplus小工具快速编辑
(// 使用Wikiplus小工具快速编辑)
标签移动版网页编辑 移动版编辑
 
(未显示同一用户的4个中间版本)
"use strict";
/* global OO, hljs, wgULS */
mw.gadgets = mw.gadgets || {};
// 1. 设置繁简文字信息
mw.messages.set( wgULS({
var ready = false, dialog; // 是否是第一次打开对话框
const isUser = mw.config.get( 'wgUserGroups' ).includes( 'user' ),
gadgets = mw.gadgets,
$helpPage = $('<a>', {target: '_blank', text: mw.msg('gadget-sd-helptext')}), // 需要动态设置href
$help = $('<div>', {html: [ mw.msg('gadget-sd-help'), $helpPage, ',或',
]}),
$btns = $('<div>', {id: 'settingsDialog-btns', html: [
new OO.ui.ButtonWidget({label: mw.msg('gadget-sd-back'), flags: 'destructive'}).on('click', function() {
.on('click', function() { dialog.clearOptions(); }).$element,
new OO.ui.ButtonWidget({label: mw.msg('gadget-sd-export'), flags: 'progressive', disabled: !isUser})
.on('click', function() {
// 3. 准备私有工具函数
deleteKeys = function(arr, obj) { arr.forEach(function(ele) { delete obj[ele]; }); },
buildWidget = function(obj, settings) { // 生成单个OOUI widget
obj.widget = new OO.ui[obj.type + 'InputWidget']( $.extend({value: (settings || {})[ obj.key ]}, obj.config) );
const layout = new OO.ui.FieldLayout(obj.widget, {label: mw.msg( obj.label ), help: obj.help});
deleteKeys(['config', 'label', 'help'], obj);
buildForm = function(params, $element) {
if (!params.ready) { // 生成表单,只需要执行一次,不用写成SettingsDialog的内置方法
const settings = gadgets[ params.name ];
$element.append( (params.items || []).map(function(ele) { return buildWidget(ele, settings).$element; }) );
$element.append( (params.fields || []).map(function(ele) {
const field = new OO.ui.FieldsetLayout({ label: mw.msg( ele.label ), help: ele.help, helpInline: true,
items: (ele.items || []).map(function(e) { return buildWidget(e, settings[ ele.key ]); }) });
deleteKeys(['label', 'help'], ele);
return field.$element;
SettingsDialog.prototype.getActionProcess = function(action) {
const dialog = this, // ES5不允许箭头函数,无法直接使用this关键字
gadgetsgadget = this.gadgets.filter(function(ele) { return ele.ready; }); // 忽略未加载的小工具
if (action == 'save') { gadgetsgadget.forEach(function(ele) { dialog.saveOptions( ele ); }); }
else { gadgetsgadget.forEach(function(ele) { dialog.clearOptions( ele ); }); }
this.close();
return new OO.ui.Process();
// 添加按钮,注意手机版的执行时机
if (mw.config.get('skin') == 'minerva') {
$(mw.addMobileLinks( {icon: 'user-cog', msg: 'gadget-sd-title'} )).click( openDialog )
mw.hook( 'mobile.menu' ).add(function($menu) {
.appendTo( $menu('#mw-mf-page-left').find('ul:not(.hlist)').last() );
console.log('Hook: mobile.menu, 开始添加小工具设置按钮');
$(mw.addMobileLinks( {icon: 'user-cog', msg: 'gadget-sd-title'} )).click( openDialog )
.appendTo( $menu.find('ul:not(.hlist)').last() );
});
}
else { $( mw.util.addPortletLink('p-cactions', '#', mw.msg('gadget-sd-title')) ).click( openDialog ); }
const name = this.getName(arg),
settings = this.generateOptions( name );
mw.gadgets[ name ] = settings;
mw.storage.setObject('gadget-' + name, settings);
mw.notify(mw.msg( 'gadget-sd-notify' ), {type: 'success', tag: 'gadget-settings'});
SettingsDialog.prototype.clearOptions = function(arg) {
const gadget = this.getObject(arg),
settings = mw.gadgets[ gadget.name ];
clearWidgets(gadget.items, settings);
(gadget.fields || []).forEach(function(ele) { clearWidgets(ele.items, settings[ ele.key ]); });
16,874

个编辑

导航菜单