LLWiki正在建设中,欢迎加入我们!
“MediaWiki:Gadget-mainpage-edit.js”的版本间差异
跳转到导航
跳转到搜索
小 |
|||
第3行: | 第3行: | ||
mw.loader.using( ['mediawiki.api', 'oojs-ui-windows', 'ext.gadget.site-lib'] ).then(() => { |
mw.loader.using( ['mediawiki.api', 'oojs-ui-windows', 'ext.gadget.site-lib'] ).then(() => { |
||
mw.messages.set( wgULS({ |
mw.messages.set( wgULS({ |
||
'gadget-ma-summary': '使用Mainpage小工具快速编辑', 'gadget-ma-niji': '虹学会', |
'gadget-ma-summary': '使用Mainpage小工具快速编辑', 'gadget-ma-niji': '虹学会', 'gadget-ma-preview': '预览', |
||
'gadget-ma-prompt': '请输入新的行号(从1开始计数)顺序,以空格分隔。未包括的行将被删除,不存在的空行将被创建。' |
'gadget-ma-prompt': '请输入新的行号(从1开始计数)顺序,以空格分隔。未包括的行将被删除,不存在的空行将被创建。', |
||
'gadget-ma-error': '输入内容错误!只接受以空格分隔的正整数。' |
|||
}, { |
}, { |
||
'gadget-ma-summary': '使用Mainpage小工具快速編輯', 'gadget-ma-niji': '虹學會', |
'gadget-ma-summary': '使用Mainpage小工具快速編輯', 'gadget-ma-niji': '虹學會', 'gadget-ma-preview': '預覽', |
||
'gadget-ma-prompt': '請輸入新的行號(從1開始計數)順序,以空格分隔。未包括的行將被刪除,不存在的空行將被創建。' |
'gadget-ma-prompt': '請輸入新的行號(從1開始計數)順序,以空格分隔。未包括的行將被刪除,不存在的空行將被創建。', |
||
'gadget-ma-error': '輸入內容錯誤!只接受以空格分割的正整數。' |
|||
}) ); |
}) ); |
||
let items = []; |
let items = [], $table; |
||
const $menu = mw.menu([ {text: "µ's", data: {color: '#e4007f', name: 'muse'}}, |
const $menu = mw.menu([ {text: "µ's", data: {color: '#e4007f', name: 'muse'}}, |
||
{text: 'Aqours', data: {color: '#32aaff'}}, {text: 'Saint Snow', data: {color: '#cb3935'}}, |
{text: 'Aqours', data: {color: '#32aaff'}}, {text: 'Saint Snow', data: {color: '#cb3935'}}, |
||
第25行: | 第27行: | ||
isMobile = mw.config.get( 'skin' ) == 'minerva', |
isMobile = mw.config.get( 'skin' ) == 'minerva', |
||
width = $('#mw-content-text').width() * (isMobile ? 1 : 0.32) - (isMobile ? 68 : 36), |
width = $('#mw-content-text').width() * (isMobile ? 1 : 0.32) - (isMobile ? 68 : 36), |
||
⚫ | |||
$('<td>', {html: $('<span>', {class: 'mainpage-tag'}).css('background-color', '#e4007f')}), |
|||
'<td>' |
|||
⚫ | |||
api = new mw.Api(), |
api = new mw.Api(), |
||
btns = [ new OO.ui.ButtonWidget({label: '保存', flags: ['primary', 'progressive']}).on('click', () => { |
btns = [ new OO.ui.ButtonWidget({label: '保存', flags: ['primary', 'progressive']}).on('click', () => { |
||
第31行: | 第37行: | ||
location.reload(); |
location.reload(); |
||
}, reason => { if (reason != 'editConflict') { btns[0].setDisabled( false ); } }); |
}, reason => { if (reason != 'editConflict') { btns[0].setDisabled( false ); } }); |
||
}), |
|||
new OO.ui.ButtonWidget({label: '更多'}).on('click', () => { |
|||
mw.prompt( mw.msg( 'gadget-ma-prompt' ), 'progressive' ).then(result => { |
|||
if (/[^\d\s]/.test( result )) { |
|||
mw.notify( mw.msg( 'gadget-ma-error' ), {type: 'error', autoHideSeconds: 'long'} ); |
|||
return; |
|||
} |
|||
const order = result.split(' ').filter(i => i).map(i => i - 1), |
|||
$tr = $table.find( 'tr' ); |
|||
items = order.map(i => items[i] || ['muse', '']); |
|||
$table.children( 'tbody' ).html( order.map(i => $tr[i] || $newTr.clone()) ); |
|||
}); |
|||
}) ]; |
}) ]; |
||
if (id === 0) { |
if (id === 0) { |
||
$table = $('<table>', {html: '<tbody>'}); |
|||
$('.noarticletext').toggleClass( 'noarticletext mw-parser-output mainpage-flex' ) |
$('.noarticletext').toggleClass( 'noarticletext mw-parser-output mainpage-flex' ).html( ); |
||
⚫ | |||
} else { $table = $('.mw-parser-output table'); } |
|||
⚫ | |||
mw.loader.addStyleTag( '.mainpage-flex td:last-child { width: calc(' + width + 'px - 1.2em); }' ); |
mw.loader.addStyleTag( '.mainpage-flex td:last-child { width: calc(' + width + 'px - 1.2em); }' ); |
||
$menu.on('click', 'a', function() { |
$menu.on('click', 'a', function() { |
||
第41行: | 第59行: | ||
items[ $menu.closest( 'tr' ).index() ][0] = getName( this ); |
items[ $menu.closest( 'tr' ).index() ][0] = getName( this ); |
||
}).css('z-index', 2); |
}).css('z-index', 2); |
||
$ |
$table.on('dblclick', 'td:first-child', function() { |
||
$menu.appendTo( this ); |
$menu.appendTo( this ); |
||
$menu.setSelected( findSelected( items[ $(this).parent().index() ][0].toLowerCase() ) ).open(); |
$menu.setSelected( findSelected( items[ $(this).parent().index() ][0].toLowerCase() ) ).open(); |
2021年2月22日 (一) 10:56的版本
"use strict"; /* global OO, wgULS */ mw.loader.using( ['mediawiki.api', 'oojs-ui-windows', 'ext.gadget.site-lib'] ).then(() => { mw.messages.set( wgULS({ 'gadget-ma-summary': '使用Mainpage小工具快速编辑', 'gadget-ma-niji': '虹学会', 'gadget-ma-preview': '预览', 'gadget-ma-prompt': '请输入新的行号(从1开始计数)顺序,以空格分隔。未包括的行将被删除,不存在的空行将被创建。', 'gadget-ma-error': '输入内容错误!只接受以空格分隔的正整数。' }, { 'gadget-ma-summary': '使用Mainpage小工具快速編輯', 'gadget-ma-niji': '虹學會', 'gadget-ma-preview': '預覽', 'gadget-ma-prompt': '請輸入新的行號(從1開始計數)順序,以空格分隔。未包括的行將被刪除,不存在的空行將被創建。', 'gadget-ma-error': '輸入內容錯誤!只接受以空格分割的正整數。' }) ); let items = [], $table; const $menu = mw.menu([ {text: "µ's", data: {color: '#e4007f', name: 'muse'}}, {text: 'Aqours', data: {color: '#32aaff'}}, {text: 'Saint Snow', data: {color: '#cb3935'}}, {text: mw.msg( 'gadget-ma-niji' ), data: {color: '#f39800', name: 'nijigaku'}}, {text: 'Liella!', data: {color: '#a5469c', name: 'liella'}}, {text: 'SIF', data: {color: '#77d2af'}}, {text: 'AS', data: {color: '#ff91af'}} ], {}, 1), dict = {ll: 'muse', llss: 'aqours', llspst: 'liella'}, getName = (ele) => $(ele).data( 'name' ) || ele.textContent.toLowerCase(), findSelected = (name) => [...$menu.children()].find(ele => getName( ele ) == (dict[name] || name)), writeText = () => '{{#widget:首页}}\n{|\n' + items.filter(ele => ele[0]) .map(ele => '{{首页/标签|' + ele[0] + '}}' + (ele[2] ? ele[2].getValue() : ele[1] || '') + '\n').join('') + '|}', id = mw.config.get( 'wgArticleId' ), pagename = mw.config.get( 'wgPageName' ), isMobile = mw.config.get( 'skin' ) == 'minerva', width = $('#mw-content-text').width() * (isMobile ? 1 : 0.32) - (isMobile ? 68 : 36), $newTr = $('<tr>', {html: [ $('<td>', {html: $('<span>', {class: 'mainpage-tag'}).css('background-color', '#e4007f')}), '<td>' ]}), api = new mw.Api(), btns = [ new OO.ui.ButtonWidget({label: '保存', flags: ['primary', 'progressive']}).on('click', () => { btns[0].setDisabled( true ); mw.safeEdit(api, null, {title: pagename, text: writeText(), summary: mw.msg('gadget-ma-summary')}).then(() => { location.reload(); }, reason => { if (reason != 'editConflict') { btns[0].setDisabled( false ); } }); }), new OO.ui.ButtonWidget({label: '更多'}).on('click', () => { mw.prompt( mw.msg( 'gadget-ma-prompt' ), 'progressive' ).then(result => { if (/[^\d\s]/.test( result )) { mw.notify( mw.msg( 'gadget-ma-error' ), {type: 'error', autoHideSeconds: 'long'} ); return; } const order = result.split(' ').filter(i => i).map(i => i - 1), $tr = $table.find( 'tr' ); items = order.map(i => items[i] || ['muse', '']); $table.children( 'tbody' ).html( order.map(i => $tr[i] || $newTr.clone()) ); }); }) ]; if (id === 0) { $table = $('<table>', {html: '<tbody>'}); $('.noarticletext').toggleClass( 'noarticletext mw-parser-output mainpage-flex' ).html( ); } else { $table = $('.mw-parser-output table'); } mw.loader.addStyleTag( '.mainpage-flex td:last-child { width: calc(' + width + 'px - 1.2em); }' ); $menu.on('click', 'a', function() { $menu.prev( '.mainpage-tag' ).css('background-color', $(this).data( 'color' )); items[ $menu.closest( 'tr' ).index() ][0] = getName( this ); }).css('z-index', 2); $table.on('dblclick', 'td:first-child', function() { $menu.appendTo( this ); $menu.setSelected( findSelected( items[ $(this).parent().index() ][0].toLowerCase() ) ).open(); }).on('dblclick', 'td:last-child', function() { const $this = $(this), item = items[ $this.parent().index() ]; item[2] = new OO.ui.MultilineTextInputWidget({autosize: true, value: item[1]}); $this.html( item[2].$element ); }); (id ? mw.standardQuery( api ) : Promise.resolve()).then(data => { items = data ? [...data.query.pages[0].revisions[0].content.matchAll( /首[页頁]\/[标標][签籤]\|(.+?)}}(.+?)\n/g )] .map(ele => [ele[1].trim(), ele[2].trim()]) : []; }); $('<div>', {html: btns.map(ele => ele.$element)}).appendTo( '.mainpage-flex' ).css('text-align', 'center'); });