LLWiki正在建设中,欢迎加入我们!
“MediaWiki:Gadget-mainpage-edit.js”的版本间差异
跳转到导航
跳转到搜索
小 |
小 (更新了mw.menu()方法) |
||
第15行: | 第15行: | ||
}) ); |
}) ); |
||
let items = [], $table; |
let items = [], $table; |
||
const |
const menu = mw.menu([ {text: "µ's", data: 'muse'}, {text: 'Aqours', data: 'aqours'}, |
||
{text: ' |
{text: 'Saint Snow', data: 'saint snow'}, {text: mw.msg( 'gadget-ma-niji' ), data: 'nijigaku'}, |
||
{text: |
{text: 'Liella!', data: 'liella'}, {text: 'SIF', data: 'sif'}, {text: 'AS', data: 'as'} |
||
⚫ | |||
{text: 'Liella!', data: {color: '#a5469c', name: 'liella'}}, |
|||
$menu = menu.$element, |
|||
{text: 'SIF', data: {color: '#77d2af'}}, {text: 'AS', data: {color: '#ff91af'}} |
|||
colors = { muse: '#e4007f', aqours: '#32aaff', 'saint snow': '#cb3935', nijigaku: '#f39800', liella: '#a5469c', |
|||
⚫ | |||
sif: '#77d2af', as: '#ff91af' |
|||
}, |
|||
dict = {ll: 'muse', llss: 'aqours', llspst: 'liella'}, |
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 = () => { |
writeText = () => { |
||
const wikitext = items.map(ele => |
const wikitext = items.map(ele => |
||
第72行: | 第72行: | ||
} else { $table = $('.mw-parser-output table'); } |
} 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('choose', option => { |
|||
$menu.prev( '.mainpage-tag' ).css('background-color', |
$menu.prev( '.mainpage-tag' ).css('background-color', colors[ option.getData() ]); |
||
items[ $menu.closest( 'tr' ).index() ][0] = |
items[ $menu.closest( 'tr' ).index() ][0] = option.getData(); |
||
}); |
}); |
||
$table.on('dblclick', 'td:first-child', function() { |
$table.on('dblclick', 'td:first-child', function() { |
||
$menu.appendTo( this ); |
$menu.appendTo( this ); |
||
const name = items[ $(this).parent().index() ][0].toLowerCase(); |
|||
menu.selectItemByData( dict[name] || name ); |
|||
menu.toggle( true ); |
|||
}).on('dblclick', 'td:last-child', function() { |
}).on('dblclick', 'td:last-child', function() { |
||
const $this = $(this), |
const $this = $(this), |
2021年2月23日 (二) 05:33的版本
//<nowiki> "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-topic': '首页/当年今日', 'gadget-ma-protect': '保护页面失败!错误原因:$1' }, { 'gadget-ma-summary': '使用Mainpage小工具快速編輯', 'gadget-ma-niji': '虹學會', 'gadget-ma-preview': '預覽', 'gadget-ma-prompt': '請輸入新的行號(從1開始計數)順序,以空格分隔。未包括的行將被刪除,不存在的空行將被創建。', 'gadget-ma-error': '輸入內容錯誤!只接受以空格分割的正整數。', 'gadget-ma-topic': '首頁/當年今日', 'gadget-ma-protect': '保護頁面失敗!錯誤原因:$1' }) ); let items = [], $table; const menu = mw.menu([ {text: "µ's", data: 'muse'}, {text: 'Aqours', data: 'aqours'}, {text: 'Saint Snow', data: 'saint snow'}, {text: mw.msg( 'gadget-ma-niji' ), data: 'nijigaku'}, {text: 'Liella!', data: 'liella'}, {text: 'SIF', data: 'sif'}, {text: 'AS', data: 'as'} ]), $menu = menu.$element, colors = { muse: '#e4007f', aqours: '#32aaff', 'saint snow': '#cb3935', nijigaku: '#f39800', liella: '#a5469c', sif: '#77d2af', as: '#ff91af' }, dict = {ll: 'muse', llss: 'aqours', llspst: 'liella'}, writeText = () => { const wikitext = items.map(ele => '{{首页/标签|' + ele[0] + '}}' + (ele[2] ? ele[2].getValue() : ele[1] || '') + '\n').join(''), colorMod = ['rin', 'keke'].filter(chara => new RegExp('{{' + chara + '\/', 'i').test( wikitext )); return '{{#widget:首页}}' + (colorMod.length ? '{{colorMod|' + colorMod.map(chara => chara + '=1').join('|') + '}}' : '') + '\n{|\n' + wikitext + '|}'; }, 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'})}), '<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(() => { (mw.config.get( 'wgRestrictionEdit' ) != 'sysop' || mw.config.get( 'wgRestrictionMove' ) != 'sysop' ? api.postWithEditToken({action: 'protect', title: pagename, protections: 'edit=sysop|move=sysop'}) : Promise.resolve() ).then(() => { location.reload(); }, reason => { mw.notify( mw.msg('gadget-ma-protect', reason), {type: 'error', autoHideSeconds: 'long'}); } ); }, reason => { if (reason != 'editConflict') { btns[0].setDisabled( false ); } }); }), new OO.ui.ButtonWidget({label: mw.msg( 'gadget-ma-preview' )}).on('click', () => { mw.timedParse(api, {text: writeText()}, mw.msg( 'gadget-ma-topic' )).then(data => { $table.html( $(data.parse.text).find( 'tbody' ) ); }, () => {}); }), new OO.ui.ButtonWidget({label: '更多'}).on('click', () => { mw.prompt( mw.msg( 'gadget-ma-prompt' ), 'progressive' ).then(result => { if (result === null) { return; } 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( $table ); } else { $table = $('.mw-parser-output table'); } mw.loader.addStyleTag( '.mainpage-flex td:last-child { width: calc(' + width + 'px - 1.2em); }' ); menu.on('choose', option => { $menu.prev( '.mainpage-tag' ).css('background-color', colors[ option.getData() ]); items[ $menu.closest( 'tr' ).index() ][0] = option.getData(); }); $table.on('dblclick', 'td:first-child', function() { $menu.appendTo( this ); const name = items[ $(this).parent().index() ][0].toLowerCase(); menu.selectItemByData( dict[name] || name ); menu.toggle( true ); }).on('dblclick', 'td:last-child', function() { const $this = $(this), item = items[ $this.parent().index() ]; item[2] = 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>', {id: 'mainpage-btns', html: btns.map(ele => ele.$element)}).appendTo( '.mainpage-flex' ); }); //</nowiki>