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

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

来自LLWiki
跳转到导航 跳转到搜索
第2行: 第2行:
/* jshint jquery:true */
/* jshint jquery:true */
/* global mw, OO, wgULS */
/* global mw, OO, wgULS */
(() => {
function formalize(options) {
const formalize = function(options) {
return options.map(ele => ({data: ele[0], label: ele[1]}));
return options.map(ele => ({data: ele[0], label: ele[1]}));
}
};

class SettingsDialog extends OO.ui.ProcessDialog {
class SettingsDialog extends OO.ui.ProcessDialog {
constructor(config) {
config.classes = [...(config.classes || []), 'settingsDialog'];
constructor(config) {
config.classes = [...(config.classes || []), 'settingsDialog']; // jshint ignore: line
super(config);
this.name = config.name;
super(config);
mw.gadgets = mw.gadgets || {};
this.name = config.name;
const settings = mw.gadgets[ this.name ] || {};
mw.gadgets = mw.gadgets || {};
const settings = mw.gadgets[ this.name ] || {};
// checkbox输入:[data, label],输出:{data, label, widget}
this.checkboxes = (config.checkboxes || []).map(ele => ({data: ele[0], label: ele[1],
// checkbox输入:[data, label],输出:{data, label, widget}
widget: new OO.ui.CheckboxInputWidget( {selected: settings[ ele[0] ] || ele[2]} )}));
this.checkboxes = (config.checkboxes || []).map(ele => ({data: ele[0], label: ele[1],
widget: new OO.ui.CheckboxInputWidget( {selected: settings[ ele[0] ] || ele[2]} )}));
// radio输入:[data, label, options],输出:{data, label, widget}
this.radios = (config.radios || []).map(ele => ({ data: ele[0], label: ele[1],
// radio输入:[data, label, options],输出:{data, label, widget}
widget: new OO.ui.RadioSelectInputWidget({options: formalize(ele.options),
this.radios = (config.radios || []).map(ele => ({ data: ele[0], label: ele[1],
widget: new OO.ui.RadioSelectInputWidget({options: formalize(ele.options),
value: settings[ ele[0] ] || ele[2]}) })); // 初始值不正确时会自动选取第一个选项
value: settings[ ele[0] ] || ele[2]}) })); // 初始值不正确时会自动选取第一个选项
}
initialize() {
}
super.initialize();
initialize() {
this.$body.append( [
super.initialize();
this.$body.append( [
...this.checkboxes.map(ele => new OO.ui.FieldLayout(ele.widget, {label: ele.label, align: 'inline'}))
...this.checkboxes.map(ele => new OO.ui.FieldLayout(ele.widget, {label: ele.label, align: 'inline'})
.$element,
'<hr>',
.$element),
...this.radios.map(ele => $('<div>', {class: 'multioptions-wrap',
'<hr>',
html: [$('<b>', {text: ele.label}), ele.widget.$element]}))
...this.radios.map(ele => $('<div>', {class: 'multioptions-wrap',
html: [$('<b>', {text: ele.label}), ele.widget.$element]}))
] );
}
] );
}
getActionProcess(action) {
if (action == 'save') {
getActionProcess(action) {
if (action == 'save') {
mw.notify(wgULS('您的设置已保存!', '您的設置已保存!'), {type: 'success'});
mw.notify(wgULS('您的设置已保存!', '您的設置已保存!'), {type: 'success'});
this.saveOptions();
this.saveOptions();
}
this.close();
return new OO.ui.Process();
}
saveOptions() {
const settings = Object.fromEntries( [...this.checkboxes.map(ele => [ele.data, ele.widget.isSelected()]),
...this.radios.map(ele => [ele.data, ele.widget.getValue()])] );
mw.gadgets[ this.name ] = settings;
mw.storage.setObject(`gadget-${this.name}`, settings);
mw.hook( 'settings.update' ).fire( this.name );
}
}
this.close();
return new OO.ui.Process();
}
saveOptions() {
const settings = Object.fromEntries( [...this.checkboxes.map(ele => [ele.data, ele.widget.isSelected()]),
...this.radios.map(ele => [ele.data, ele.widget.getValue()])] );
mw.gadgets[ this.name ] = settings;
mw.storage.setObject(`gadget-${this.name}`, settings);
mw.hook( 'settings.update' ).fire( this.name );
}
}
// Safari不支持static属性
}
// Safari不支持static属性
SettingsDialog.static = {
name: 'settingsDialog',
SettingsDialog.static = {
name: 'settingsDialog',
tagName: 'div',
title: wgULS('小工具设置', '小工具設置'),
tagName: 'div',
actions: [
title: wgULS('小工具设置', '小工具設置'),
{action: 'save', label: '保存', flags: ['primary', 'progressive']},
actions: [
{action: 'save', label: '保存', flags: ['primary', 'progressive']},
{action: 'cancel', label: '取消', flags: 'safe'}
]
{action: 'cancel', label: '取消', flags: 'safe'}
]
};
};
}) ();

2021年1月14日 (四) 14:28的版本

"use strict";
/* jshint jquery:true */
/* global mw, OO, wgULS */
(() => {
    const formalize = function(options) {
        return options.map(ele => ({data: ele[0], label: ele[1]}));
    };
    
    class SettingsDialog extends OO.ui.ProcessDialog {
        constructor(config) {
            config.classes = [...(config.classes || []), 'settingsDialog']; // jshint ignore: line
            super(config);
            this.name = config.name;
            mw.gadgets = mw.gadgets || {};
            const settings = mw.gadgets[ this.name ] || {};
            // checkbox输入:[data, label],输出:{data, label, widget}
            this.checkboxes = (config.checkboxes || []).map(ele => ({data: ele[0], label: ele[1],
                widget: new OO.ui.CheckboxInputWidget( {selected: settings[ ele[0] ] || ele[2]} )}));
            // radio输入:[data, label, options],输出:{data, label, widget}
            this.radios = (config.radios || []).map(ele => ({ data: ele[0], label: ele[1],
                widget: new OO.ui.RadioSelectInputWidget({options: formalize(ele.options),
                    value: settings[ ele[0] ] || ele[2]}) })); // 初始值不正确时会自动选取第一个选项
        }
        initialize() {
            super.initialize();
            this.$body.append( [
                ...this.checkboxes.map(ele => new OO.ui.FieldLayout(ele.widget, {label: ele.label, align: 'inline'})
                    .$element),
                '<hr>',
                ...this.radios.map(ele => $('<div>', {class: 'multioptions-wrap',
                    html: [$('<b>', {text: ele.label}), ele.widget.$element]}))
            ] );
        }
        getActionProcess(action) {
            if (action == 'save') {
                mw.notify(wgULS('您的设置已保存!', '您的設置已保存!'), {type: 'success'});
                this.saveOptions();
            }
            this.close();
            return new OO.ui.Process();
        }
        saveOptions() {
            const settings = Object.fromEntries( [...this.checkboxes.map(ele => [ele.data, ele.widget.isSelected()]),
                ...this.radios.map(ele => [ele.data, ele.widget.getValue()])] );
            mw.gadgets[ this.name ] = settings;
            mw.storage.setObject(`gadget-${this.name}`, settings);
            mw.hook( 'settings.update' ).fire( this.name );
        }
    }
    // Safari不支持static属性
    SettingsDialog.static = {
        name: 'settingsDialog',
        tagName: 'div',
        title: wgULS('小工具设置', '小工具設置'),
        actions: [
            {action: 'save', label: '保存', flags: ['primary', 'progressive']},
            {action: 'cancel', label: '取消', flags: 'safe'}
        ]
    };
}) ();