|
|
第1行: |
第1行: |
| mw.loader.using(['oojs-ui-core', 'oojs-ui-windows']).then(function () { | | // 等待页面加载完成 |
|
| | mw.loader.using(['vue', 'codex']).then(function() { |
| var btn_submit = new OO.ui.ButtonWidget({
| | // 创建 Vue 应用 |
| label: '提交页面',
| | const app = Vue.createApp({ |
| icon: 'check',
| | data() { |
| flags: [
| | return { |
| 'primary', | | showDialog: false |
| 'progressive'
| | }; |
| ]
| | }, |
| }),
| | methods: { |
| btn_code = new OO.ui.ButtonWidget({
| | openDialog() { |
| label: '生成源代码',
| | this.showDialog = true; |
| icon: 'code',
| | }, |
| flags: [
| | closeDialog() { |
| 'progressive' | | this.showDialog = false; |
| ]
| | } |
| }),
| | }, |
| btn_add = new OO.ui.ButtonWidget({
| | template: ` |
| label: '增加作品',
| | <div> |
| icon: 'add'
| | <cdx-button |
| }),
| | weight="primary" |
| btn_reduce = new OO.ui.ButtonWidget({
| | @click="openDialog" |
| label: '减少作品',
| | > |
| icon: 'subtract'
| | 打开对话框 |
| });
| | </cdx-button> |
|
| |
| var input_writer_name = new OO.ui.TextInputWidget( {
| |
| required: true,
| |
| validate: 'non-empty',
| |
| placeholder: '请输入文手名'
| |
| } ),
| |
| input_writer_tag = new OO.ui.DropdownInputWidget( {
| |
| placeholder: '请选择文手标签(默认:同人)',
| |
| options: [
| |
| { data: '同人', label: '同人' }
| |
| ]
| |
| } ),
| |
| input_writer_platform = new OO.ui.TextInputWidget( {
| |
| placeholder: '请输入文手活跃平台'
| |
| } ),
| |
| check_isoverwrite = new OO.ui.CheckboxInputWidget( {
| |
| selected: false
| |
| } );
| |
|
| |
|
| var result_area = new OO.ui.MultilineTextInputWidget({
| | <cdx-dialog |
| autosize: true,
| | v-model:open="showDialog" |
| rows: 10,
| | title="提示" |
| value: ''
| | @close="closeDialog" |
| });
| | > |
|
| | <p>这是一个使用 Codex 和 Vue 实现的对话框示例。</p> |
| var fieldset = new OO.ui.FieldsetLayout( {
| | <template #footer> |
| label: '文手页面快速生成器',
| | <cdx-button |
| classes: [ 'container' ]
| | weight="primary" |
| } ),
| | @click="closeDialog" |
| fieldset_work = new OO.ui.FieldsetLayout( {
| | > |
| classes: [ 'container' ]
| | 确定 |
| } );
| | </cdx-button> |
| | | </template> |
| fieldset.addItems( [
| | </cdx-dialog> |
| new OO.ui.FieldLayout( input_writer_name, {
| | </div> |
| label: '文手名:',
| | ` |
| align: 'top',
| | }); |
| help: '名称请使用符合URL规则的纯文本(可以使用unicode),不要使用任何wikitext、HTML之类的语法。由于MediaWiki限制,空格会被转为下划线',
| |
| helpInline: true
| |
| } ),
| |
|
| |
| new OO.ui.FieldLayout( input_writer_tag, {
| |
| label: '文手标签:',
| |
| align: 'top'
| |
| } ),
| |
| | |
| new OO.ui.FieldLayout( input_writer_platform, {
| |
| label: '文手活跃平台:',
| |
| align: 'top'
| |
| } ),
| |
| | |
| new OO.ui.FieldLayout( check_isoverwrite, {
| |
| label: '覆盖已存在的页面【危险!可能会覆盖手工加入的信息】',
| |
| align: 'inline' | |
| } ), | |
|
| |
|
| new OO.ui.FieldLayout( | | // 创建容器元素 |
| new OO.ui.Widget( {
| | const container = document.createElement('div'); |
| content: [ new OO.ui.HorizontalLayout( {
| | container.id = 'codex-demo'; |
| items: [
| | document.body.appendChild(container); |
| new OO.ui.FieldLayout( btn_add ),
| |
| new OO.ui.FieldLayout( btn_reduce ),
| |
| new OO.ui.FieldLayout( btn_code ),
| |
| new OO.ui.FieldLayout( btn_submit )
| |
| ]
| |
| } ) ]
| |
| } )
| |
| ),
| |
|
| |
|
| new OO.ui.FieldsetLayout( fieldset_work ), | | // 挂载 Vue 应用 |
| | | app.mount('#codex-demo'); |
| new OO.ui.FieldLayout( result_area, {
| |
| label: '生成结果:',
| |
| align: 'top'
| |
| } ),
| |
| ] );
| |
| | |
| const getWork = (no) => {
| |
| var input_work_name = new OO.ui.TextInputWidget( {
| |
| placeholder: '作品名称'
| |
| } );
| |
| var input_work_pub_date = new OO.ui.TextInputWidget( {
| |
| placeholder: '发布日期(yyyy-MM-dd)'
| |
| } );
| |
| var input_work_update_date = new OO.ui.TextInputWidget( {
| |
| placeholder: '更新日期(可选)'
| |
| } );
| |
| var input_work_platform = new OO.ui.TextInputWidget( {
| |
| placeholder: '发布平台'
| |
| } );
| |
| var input_work_url = new OO.ui.TextInputWidget( {
| |
| placeholder: '作品链接'
| |
| } );
| |
| var input_work_status = new OO.ui.TextInputWidget( {
| |
| placeholder: '存档情况'
| |
| } );
| |
| var input_work_note = new OO.ui.TextInputWidget( {
| |
| placeholder: '备注(支持wikitext)'
| |
| } );
| |
| | |
| var work_field = new OO.ui.FieldsetLayout( {
| |
| label: '作品信息'+no,
| |
| classes: [ 'container' ]
| |
| } );
| |
| work_field.addItems( [ | |
| new OO.ui.FieldLayout(
| |
| new OO.ui.Widget( {
| |
| content: [ new OO.ui.HorizontalLayout( {
| |
| items: [
| |
| new OO.ui.FieldLayout( input_work_name, {
| |
| label: '作品名称:',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_pub_date, {
| |
| label: '发布日期(yyyy-MM-dd):',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_update_date, {
| |
| label: '更新日期(可选):',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_platform, {
| |
| label: '发布平台:',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_url, {
| |
| label: '作品链接:',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_status, {
| |
| label: '存档情况:',
| |
| align: 'top'
| |
| }),
| |
| new OO.ui.FieldLayout( input_work_note, {
| |
| label: '备注(支持wikitext):',
| |
| align: 'top'
| |
| })
| |
| ]
| |
| } ) ]
| |
| } )
| |
| )
| |
| ] );
| |
| | |
| return {
| |
| input_work_name: input_work_name,
| |
| input_work_pub_date: input_work_pub_date,
| |
| input_work_update_date: input_work_update_date,
| |
| input_work_platform: input_work_platform,
| |
| input_work_url: input_work_url,
| |
| input_work_status: input_work_status,
| |
| input_work_note: input_work_note,
| |
| work_field: work_field
| |
| };
| |
| }
| |
| | |
| var work_list = [];
| |
| | |
| btn_add.on('click', function () {
| |
| new_work = getWork(work_list.length+1);
| |
| work_list.push(new_work);
| |
| fieldset_work.addItems( [ new_work.work_field ] );
| |
| })
| |
| | |
| btn_reduce.on('click', function () {
| |
| last_work = work_list.pop();
| |
| fieldset_work.removeItems( [last_work.work_field] );
| |
| })
| |
| | |
| btn_code.on('click', function () {
| |
| var writer_name = input_writer_name.getValue();
| |
| var windowManager = new OO.ui.WindowManager();
| |
| var messageDialog = new OO.ui.MessageDialog();
| |
| if (writer_name === null || writer_name === '') {
| |
| $('body').append(windowManager.$element);
| |
| windowManager.addWindows([messageDialog]);
| |
| windowManager.openWindow(messageDialog, {
| |
| message: '请输入文手名!',
| |
| title: '错误:'
| |
| });
| |
| return;
| |
| }
| |
| var writer_tag = input_writer_tag.getValue();
| |
| var writer_platform = input_writer_platform.getValue();
| |
| result = '{{文手信息\n|文手名 = '+writer_name;
| |
| result += '\n|文手标签 = '+writer_tag;
| |
| result += '\n|文手活跃平台 = '+writer_platform;
| |
| result += '\n}}\n== 发布文章 ==\n';
| |
| if (work_list.length > 0) {
| |
| result += '{{文章信息框架|列表=\n';
| |
| for (var i = 0; i < work_list.length; i++) {
| |
| var work = work_list[i];
| |
| console.log(work);
| |
| var work_name = work.input_work_name.getValue();
| |
| var work_pub_date = work.input_work_pub_date.getValue();
| |
| var work_update_date = work.input_work_update_date.getValue();
| |
| var work_platform = work.input_work_platform.getValue();
| |
| var work_url = work.input_work_url.getValue();
| |
| var work_status = work.input_work_status.getValue();
| |
| var work_note = work.input_work_note.getValue();
| |
|
| |
| work_str = '{{文章信息\n|作品名称 = '+work_name;
| |
| work_str += '\n|发布日期 = '+work_pub_date;
| |
| work_str += '\n|更新日期 = '+work_update_date;
| |
| work_str += '\n|发布平台 = '+work_platform;
| |
| work_str += '\n|作品链接 = '+work_url;
| |
| work_str += '\n|存档情况 = '+work_status;
| |
| work_str += '\n|备注 = '+work_note;
| |
| work_str += '\n}}';
| |
|
| |
| result += work_str + '\n';
| |
| }
| |
| result += '}}\n';
| |
| }
| |
| result += '\n==外部链接与注释==\n';
| |
| | |
| result_area.setValue(result);
| |
| }); | | }); |
|
| |
| btn_submit.on('click', function () {
| |
| var result = result_area.getValue()
| |
| var windowManager = new OO.ui.WindowManager();
| |
| var messageDialog = new OO.ui.MessageDialog();
| |
| var writer_name = input_writer_name.getValue();
| |
| if (writer_name === null || writer_name === '') {
| |
| $('body').append(windowManager.$element);
| |
| windowManager.addWindows([messageDialog]);
| |
| windowManager.openWindow(messageDialog, {
| |
| message: '请输入文手名!',
| |
| title: '错误:'
| |
| });
| |
| return;
| |
| }
| |
| if (result === null || result === '') {
| |
| $('body').append(windowManager.$element);
| |
| windowManager.addWindows([messageDialog]);
| |
| windowManager.openWindow(messageDialog, {
| |
| message: '请先点击生成代码,再创建页面!',
| |
| title: '创建页面:' + writer_name
| |
| });
| |
| return;
| |
| }
| |
| var api = new mw.Api();
| |
| var isoverwrite = check_isoverwrite.isSelected();
| |
| api.postWithToken('csrf', {
| |
| action: 'edit',
| |
| title: writer_name,
| |
| text: result,
| |
| createonly: !isoverwrite,
| |
| summary: '文手页面生成器 by 玲子'
| |
| }).done(function (data) {
| |
| $('body').append(windowManager.$element);
| |
| windowManager.addWindows([messageDialog]);
| |
| windowManager.openWindow(messageDialog, {
| |
| message: '页面创建成功!',
| |
| title: '创建页面:' + writer_name
| |
| });
| |
| }).fail(function (data) {
| |
| $('body').append(windowManager.$element);
| |
| windowManager.addWindows([messageDialog]);
| |
| windowManager.openWindow(messageDialog, {
| |
| message: '页面创建失败:' + JSON.stringify(data),
| |
| title: '创建页面:' + writer_name
| |
| });
| |
| });
| |
| });
| |
|
| |
| // 添加到页面顶部
| |
| $('#mw-content-text').prepend(
| |
| fieldset.$element
| |
| );
| |
| });
| |