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

User:Bhsd/widget/list.js

来自LLWiki
< User:Bhsd‎ | widget
Bhsd讨论 | 贡献2021年4月22日 (四) 09:10的版本
跳转到导航 跳转到搜索

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

  • 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 mw, $, OO */
(() => {
    const main = (data) => {
        mw.sifdata = data[0];
        const buildOptions = (key) =>
            mw.sifdata.map(ele => ele[key]).filter(ele => ele).slice(0, 5).sort()
            .map(ele => new OO.ui.MenuOptionWidget({data: ele, label: ele})),
            optionsJa = buildOptions( 'j' ),
            optionsZh = buildOptions( 'c' ),
            $output = $('<div>'),
            attr = ['s', 'p', 'c'],
            diff = ['easy', 'normal', 'hard', 'expert', 'exran', 'master'],
            convertTime = (t) => `${ Math.floor(t / 60) }:${ (t % 60).toString().padStart(2, 0) }`,
            select = new OO.ui.ComboBoxInputWidget({ menu: {items: [
            new OO.ui.MenuSectionOptionWidget({label: '原名'}), ...optionsJa,
            new OO.ui.MenuSectionOptionWidget({label: '中文名'}), ...optionsZh,
        ], width: '100%', filterFromInput: true, filterMode: 'substring'} }).on('change', value => {
            const term = mw.sifdata.find(ele => ele.j == value || ele.c == value);
            $output.text( `{{sif-song-tablerow|${ term.j }|${ attr[term.a] }|${ convertTime( term.t ) }` +
                term.s.map(ele => {
                    const level = diff[ele.d - 1];
                    return `|d-${ level }=${ ele.s }|c-${ level }=${ ele.c }`;
                }).join( '' ) + '|条件=}}'
            );
        });
        $(() => {
            select.$element.prependTo( '#mw-content-text .mw-parser-output' )
                .append( $('<i>', {class: 'fas fa-backspace'}).click(() => { select.setValue(''); }) )
                .after( $output );
            optionsJa.forEach(ele => { ele.$element.attr('lang', 'ja'); });
        });
    },
        init = () => {
        Promise.all([ $.ajax({ dataType: 'json', cache: true,
            url: '/zh?title=user:bhsd/widget/list.json&action=raw&ctype=application/json'
        }), mw.loader.using( 'oojs-ui-core' ) ]).then( main );
    };
    if (window.jQuery) { init(); }
    else { window.addEventListener('jquery', init); }
}) ();