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

MediaWiki:Gadget-mainpage-edit.js

来自LLWiki
Bhsd讨论 | 贡献2021年2月22日 (一) 11:03的版本
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
"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-summary': '使用Mainpage小工具快速編輯', 'gadget-ma-niji': '虹學會', 'gadget-ma-preview': '預覽',
        'gadget-ma-prompt': '請輸入新的行號(從1開始計數)順序,以空格分隔。未包括的行將被刪除,不存在的空行將被創建。',
        'gadget-ma-error': '輸入內容錯誤!只接受以空格分割的正整數。', 'gadget-ma-topic': '首頁/當年今日'
    }) );
    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: 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 (/[^\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('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] = 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');
});