“User:Bhsd/widget/list.js”的版本间差异

添加1,456字节 、​ 2023年3月10日 (五) 02:23
转移GitHub repository
(转移GitHub repository)
 
(未显示同一用户的15个中间版本)
//<nowiki>
// 用于[[Widget:歌曲数据库]],可以使用ES6语法
/**
* @Function: 用于筛选[[LoveLive!学园偶像祭歌曲列表]]中出现的歌曲,并自动生成相应的Wiki代码
* @Dependencies: oojs-ui-core
* @Author: [[User:Bhsd]]
*/
"use strict";
/* global mw, $, OO */
(() => {
let mw.sifdata, = data[0]$output;
const main = (data) => {
const attr = ['s', 'p', 'c'], // 依次为Smile/Pure/Cool属性
mw.sifdata = data[0];
diff = ['easy', 'normal', 'hard', 'expert', 'exran', 'master'],
const mapJa = mw.sifdata.map(ele => ele.j).filter(ele => ele).slice(0, 5),
// 以m:ss的格式输出歌曲时长
mapZh = mw.sifdata.map(ele => ele.c).filter(ele => ele).slice(0, 5),
convertTime = (t) => `${Math.floor(t / 60)}:${ (t % 60).toString().padStart(2, 0) }`,
buildOptions = (map) =>
// 从数组生成下拉菜单的选项
Object.keys( map ).sort().map(ele => new OO.ui.MenuOptionWidget({data: ele, label: ele}) ),
buildOptions = (list, key) optionsJa=> list.map(ele => buildOptionsele[key]).filter(ele mapJa=> ele),
optionsZh.map(ele => buildOptionsnew OO.ui.MenuOptionWidget({data: ele, mapZhlabel: ele})),
// 根据选中的歌曲修改输出的Wiki代码。这个函数需要sifdata。
$output = $('<div>'),
change = attr(value) => ['s', 'p', 'c'],{
const term = diffsifdata.find(ele => ['easy',ele.j 'normal',== 'hard',value 'expert',|| 'exran',ele.c == 'master']value),
$outputarray = $('<div>'),[];
if (!term) { return; } // 不用清空上一次的输出
$output.text( `{{sif-song-tablerow|${ term.j }|${ attr[term.a] }|${ convertTime( term.t ) }` +
buildOptions = term.s.map(map)ele => {
const levelswing = diff[ ele.dis ? 'swing' : ]'';
let level = `${ele.k || ''}${ele.ia ? 'ac' : ''}${ diff[ele.d - 1] }`; // 判定5键或是AC
if (array.includes( level )) { level += 'melo'; } // 无法直接判定歌melo
termarray.s.mappush(ele =>level {);
return `|d-${ level }=${ ele.s }${ swing }|c-${ level }=${ ele.c }${ swing }`;
}).join( '' ) + '|条件=}}'
});
},
// 分团体建立ComboBox。这个函数需要sifdata。
$(buildSelect = (group) => {
const mapJalist = mw.sifdata.mapfilter(ele => ele.j).filter(eleg => ele).slice(0,= 5group),
optionsJa = buildOptions(list, 'j'),
optionsZh = buildOptions(list, 'c'),
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 => {change);
const term = mw.sifdataoptionsJa.findforEach(ele => ele.j == value ||{ ele.c$element.attr('lang', =='ja'); value});
// 添加清空按钮
$output.text( `{{sif-song-tablerow|${ term.j }|${ attr[term.a] }|${ term.t }` +
return select.$element.append( $('<i>', {class: 'fas fa-backspace'}).click(() => { select.setValue(''); }) );
term.s.map(ele => {
},
const level = diff[ ele.d ];
const main = (data) => {
return `|d-${ level }=${ ele.s }|c-${ level }=${ ele.c }`;
sifdata = }).join( '' )data[0];
const selectSet = [1, 2, 3, 4].map( buildSelect );
mw.hook( 'wikipage.content' ).add($content => {
});
console.log('Hook: wikipage.content, 开始建立歌曲数据库UI');
$(() => {
select.$elementoutput = $content.prependTofind( '#mwsif-contentsong-text .mw-parser-outputtablerow' );
// 前4个三级标题固定为输入项,输出项未来可能会添加更多
.append( $('<i>', {class: 'fas fa-backspace'}).click(() => { select.setValue(''); }) )
$content.find( 'h3' ).slice(0, 4).after(i $output=> selectSet[i]);
optionsJa.forEach(ele => { ele.$element.attr('lang', 'ja'); });
});
},
init = () => {
mw.widget = mw.widget || {};
if (mw.widget.list) { return; }
Promise.all([ $.ajax({ dataType: 'json', cache: true,
url: '/zh?title=user:bhsd/widget/listraw.githubusercontent.com/LLWiki/FrontEnd/main/json&action=raw&ctype=application/list.json'
}), mw.loader.using( 'oojs-ui-core' ) ]).then( main );
mw.widget.list = true;
};
if (window.jQuery) { init(); }
else { window.addEventListener('jquery', init); }
}) ();
//</nowiki>
// [[category:jQuery小部件]] {{DEFAULTSORT:list}}
16,874

个编辑