Content added Content deleted
m (allow filter by unit) |
(updated master diffs) |
||
(29 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
( function ( $, mw, psw ) { |
|||
if (mw.config.get('wgArticleId') === 6851) { |
|||
'use strict'; |
|||
mw.loader.using( ['oojs-ui-core', 'oojs-ui-widgets', 'mediawiki.api', 'mediawiki.widgets.DateInputWidget', 'jquery.tablesorter'] ).done( function () { |
|||
function QueryOptions() { |
|||
var qOptions = new psw.db.QueryOptions(); |
|||
this.queryParams = { |
|||
var dOptions = new psw.db.DisplayOptions(); |
|||
units: { |
|||
'VIRTUAL SINGER': false, |
|||
qOptions.addButtonMultiInput( |
|||
'Leo/need': false, |
|||
'units', |
|||
'MORE MORE JUMP!': false, |
|||
{ label: 'Unit categories' }, |
|||
'Vivid BAD SQUAD': false, |
|||
{ |
|||
'Wonderlands×Showtime': false, |
|||
multiselect: true, |
|||
'25-ji, Nightcord de.': false, |
|||
delimiter: ';', |
|||
items: [ |
|||
{ label: 'VIRTUAL SINGER' }, |
|||
mvs: { |
|||
{ label: 'Leo/need' }, |
|||
{ label: 'MORE MORE JUMP!' }, |
|||
'2D': undefined, |
|||
{ label: 'Vivid BAD SQUAD' }, |
|||
'Original': undefined |
|||
{ label: 'Wonderlands×Showtime' }, |
|||
}, |
|||
{ label: '25-ji, Nightcord de.' }, |
|||
commissioned: undefined, |
|||
{ label: 'Other' } |
|||
] |
|||
maxDate: '', |
|||
} |
|||
easyDiffs: {}, |
|||
); |
|||
normalDiffs: {}, |
|||
hardDiffs: {}, |
|||
[ |
|||
expertDiffs: {}, |
|||
{ param: '3d mv', label: '3D MV?' }, |
|||
masterDiffs: {} |
|||
{ param: '2d mv', label: '2D MV?' }, |
|||
}; |
|||
{ param: 'original mv', label: 'Original MV?' } |
|||
var qParams = this.queryParams; |
|||
].forEach( function( paramLabel ) { |
|||
qOptions.addButtonMultiInput( |
|||
// Units |
|||
paramLabel.param, |
|||
var unitOptionButtons = Object.keys( qParams.units ).map( function(unitName) { |
|||
{ label: paramLabel.label }, |
|||
var btn = new OO.ui.ToggleButtonWidget( { |
|||
{ |
|||
label: unitName, |
|||
value: qParams.units[unitName] |
|||
} ); |
|||
btn.on( 'change', function(newVal) { |
|||
qParams.units[unitName] = newVal; |
|||
} ); |
|||
return btn; |
|||
} ); |
|||
var unitOptions = new OO.ui.ButtonGroupWidget( { |
|||
items: unitOptionButtons, |
|||
align: 'left' |
|||
} ); |
|||
// 3D MV |
|||
this._3d_mv = new OO.ui.ButtonSelectWidget( { |
|||
items: [ |
items: [ |
||
{ label: 'Any', data: ' ' }, |
|||
{ label: 'Yes', data: '1' }, |
|||
{ label: 'No', data: '0' } |
|||
], |
], |
||
selected: 'Any' |
|||
} ); |
|||
this._3d_mv.selectItemByLabel('Any'); |
|||
// 2D MV |
|||
this._2d_mv = new OO.ui.ButtonSelectWidget( { |
|||
items: [ |
|||
new OO.ui.ButtonOptionWidget({ data: undefined, label: 'Any' }), |
|||
new OO.ui.ButtonOptionWidget({ data: true, label: 'Yes' }), |
|||
new OO.ui.ButtonOptionWidget({ data: false, label: 'No' }), |
|||
], |
|||
align: 'left' |
|||
} ); |
|||
this._2d_mv.selectItemByLabel('Any'); |
|||
// Original MV |
|||
this._og_mv = new OO.ui.ButtonSelectWidget( { |
|||
items: [ |
|||
new OO.ui.ButtonOptionWidget({ data: undefined, label: 'Any' }), |
|||
new OO.ui.ButtonOptionWidget({ data: true, label: 'Yes' }), |
|||
new OO.ui.ButtonOptionWidget({ data: false, label: 'No' }), |
|||
], |
|||
align: 'left' |
|||
} ); |
|||
this._og_mv.selectItemByLabel('Any'); |
|||
// Commissioneed |
|||
this.commissioned = new OO.ui.ButtonSelectWidget( { |
|||
items: [ |
|||
new OO.ui.ButtonOptionWidget({ data: undefined, label: 'Any' }), |
|||
new OO.ui.ButtonOptionWidget({ data: true, label: 'Yes' }), |
|||
new OO.ui.ButtonOptionWidget({ data: false, label: 'No' }), |
|||
], |
|||
align: 'left' |
|||
} ); |
|||
this.commissioned.selectItemByLabel('Any'); |
|||
this.afterDateInput = new mw.widgets.DateInputWidget( { |
|||
type: 'date' |
|||
} ); |
|||
this.beforeDateInput = new mw.widgets.DateInputWidget( { |
|||
type: 'date' |
|||
} ); |
|||
function createDiffButtons(min, max, obj) { |
|||
var diffs = []; |
|||
for (var i = min; i <= max; i++) { |
|||
diffs.push(i); |
|||
} |
|||
var diffButtons = diffs.map( function(diff) { |
|||
var btn = new OO.ui.ToggleButtonWidget( { |
|||
label: diff.toString(), |
|||
value: false |
|||
} ); |
|||
btn.on( 'change', function(newVal) { |
|||
obj[diff] = newVal; |
|||
} ); |
|||
return btn; |
|||
} ); |
|||
return new OO.ui.ButtonGroupWidget( { |
|||
items: diffButtons, |
|||
align: 'left' |
|||
} ); |
|||
} |
} |
||
); |
|||
} ); |
|||
var easyOptions = createDiffButtons(5, 9, qParams.easyDiffs); |
|||
var normalOptions = createDiffButtons(10, 15, qParams.normalDiffs); |
|||
qOptions.addButtonMultiInput( |
|||
var hardOptions = createDiffButtons(15, 21, qParams.hardDiffs); |
|||
'types', |
|||
var expertOptions = createDiffButtons(22, 30, qParams.expertDiffs); |
|||
{ label: 'Type(s)' }, |
|||
var masterOptions = createDiffButtons(26, 33, qParams.masterDiffs); |
|||
{ |
|||
multiselect: true, |
|||
this.fieldset = new OO.ui.FieldsetLayout( { |
|||
items: [ |
|||
label: 'Query options', |
|||
{ label: 'Pre-existing', data: 'Pre-existing' }, |
|||
items: [ |
|||
{ label: 'Commissioned', data: 'Commissioned' }, |
|||
new OO.ui.FieldLayout( unitOptions, { |
|||
{ label: 'Contest winner', data: 'Contest winner' } |
|||
] |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this._3d_mv, { |
|||
label: '3D MV?', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this._2d_mv, { |
|||
label: '2D MV?', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this._og_mv, { |
|||
label: 'Original MV?', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this.commissioned, { |
|||
label: 'Commissioned?', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this.afterDateInput, { |
|||
label: 'Released after', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( this.beforeDateInput, { |
|||
label: 'Released before', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( easyOptions, { |
|||
label: 'Easy difficulties', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( normalOptions, { |
|||
label: 'Normal difficulties', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( hardOptions, { |
|||
label: 'Hard difficulties', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( expertOptions, { |
|||
label: 'Expert difficulties', |
|||
align: 'top' |
|||
} ), |
|||
new OO.ui.FieldLayout( masterOptions, { |
|||
label: 'Master difficulties', |
|||
align: 'top' |
|||
} ) |
|||
] |
|||
} ); |
|||
} |
} |
||
); |
|||
QueryOptions.prototype.getOptions = function() { |
|||
var resQuery = {}; |
|||
qOptions.addNumberInput( |
|||
'min game duration', |
|||
// Unit |
|||
{ label: 'Minimum game-size duration (seconds)' }, |
|||
var units = []; |
|||
{ min: 1, showButtons: false } |
|||
for (var unit in this.queryParams.units) { |
|||
); |
|||
if (this.queryParams.units[unit]) { |
|||
units.push(unit); |
|||
} |
|||
} |
|||
resQuery.unit = units.join(';'); |
|||
// 3D MV |
|||
var _3d_mv_val = this._3d_mv.findSelectedItem(); |
|||
if (_3d_mv_val !== null) { |
|||
var data = _3d_mv_val.getData(); |
|||
if (typeof data !== 'undefined') { |
|||
resQuery['3d mv'] = data; |
|||
} |
|||
} |
|||
// 2D MV |
|||
var _2d_mv_val = this._2d_mv.findSelectedItem(); |
|||
if (_2d_mv_val !== null) { |
|||
var data = _2d_mv_val.getData(); |
|||
if (typeof data !== 'undefined') { |
|||
resQuery['2d mv'] = data; |
|||
} |
|||
} |
|||
// Original MV |
|||
var _og_mv_val = this._og_mv.findSelectedItem(); |
|||
if (_og_mv_val !== null) { |
|||
var data = _og_mv_val.getData(); |
|||
if (typeof data !== 'undefined') { |
|||
resQuery['original mv'] = data; |
|||
} |
|||
} |
|||
// Commissioned |
|||
var commVal = this.commissioned.findSelectedItem(); |
|||
if (commVal !== null) { |
|||
var data = commVal.getData(); |
|||
if (typeof data !== 'undefined') { |
|||
resQuery.commissioned = data; |
|||
} |
|||
} |
|||
// Release date |
|||
resQuery.minDate = this.afterDateInput.getValue(); |
|||
resQuery.maxDate = this.beforeDateInput.getValue(); |
|||
function getDiffs(diffObj) { |
|||
var diffs = []; |
|||
for (var key in diffObj) { |
|||
if (diffObj[key]) { |
|||
diffs.push(key); |
|||
} |
|||
} |
|||
return diffs.join(','); |
|||
} |
|||
resQuery['easy diff'] = getDiffs(this.queryParams.easyDiffs); |
|||
resQuery['normal diff'] = getDiffs(this.queryParams.normalDiffs); |
|||
resQuery['hard diff'] = getDiffs(this.queryParams.hardDiffs); |
|||
resQuery['expert diff'] = getDiffs(this.queryParams.expertDiffs); |
|||
resQuery['master diff'] = getDiffs(this.queryParams.masterDiffs); |
|||
return resQuery; |
|||
}; |
|||
function DisplayOptions() { |
|||
var displayOptions = new OO.ui.CheckboxMultiselectWidget({ |
|||
items: [ |
|||
new OO.ui.CheckboxMultioptionWidget( { |
|||
selected: false, |
|||
label: 'Display jacket art', |
|||
disabled: true |
|||
} ), |
|||
], |
|||
align: 'left' |
|||
}); |
|||
qOptions.addNumberInput( |
|||
this.fieldset = new OO.ui.FieldsetLayout( { |
|||
'max game duration', |
|||
label: 'Display options', |
|||
{ label: 'Maximum game-size duration (seconds)' }, |
|||
items: [ |
|||
{ min: 1, showButtons: false } |
|||
displayOptions |
|||
); |
|||
] |
|||
} ); |
|||
qOptions.addDateInput( |
|||
'released after', |
|||
{ label: 'Released after' } |
|||
); |
|||
qOptions.addDateInput( |
|||
'released before', |
|||
{ label: 'Released before' } |
|||
); |
|||
[ |
|||
{ param: 'easy difficulties', label: 'Easy difficulties', min: 5, max: 9 }, |
|||
{ param: 'normal difficulties', label: 'Normal difficulties', min: 10, max: 15 }, |
|||
{ param: 'hard difficulties', label: 'Hard difficulties', min: 15, max: 24 }, |
|||
{ param: 'expert difficulties', label: 'Expert difficulties', min: 21, max: 31 }, |
|||
{ param: 'master difficulties', label: 'Master difficulties', min: 25, max: 37 }, |
|||
].forEach( function( diff ) { |
|||
var diffItems = []; |
|||
for ( var i = diff.min; i <= diff.max; i++ ) { |
|||
diffItems.push( { label: i.toString() } ); |
|||
} |
} |
||
DisplayOptions.prototype.getOptions = function() { |
|||
}; |
|||
qOptions.addButtonMultiInput( |
|||
$( function () { |
|||
diff.param, |
|||
console.log('loading query interface'); |
|||
{ label: diff.label }, |
|||
{ |
|||
var api = new mw.Api(); |
|||
multiselect: true, |
|||
items: diffItems |
|||
var queryOptions = new QueryOptions(); |
|||
var displayOptions = new DisplayOptions(); |
|||
var submitButton = new OO.ui.ButtonInputWidget( { |
|||
label: 'Search', |
|||
flags: [ 'primary', 'progressive' ], |
|||
align: 'left', |
|||
icon: 'search' |
|||
} ); |
|||
submitButton.on('click', function() { |
|||
go(api, queryOptions, displayOptions); |
|||
}); |
|||
var fieldset = new OO.ui.FieldsetLayout(); |
|||
fieldset.addItems( [ |
|||
queryOptions.fieldset, |
|||
displayOptions.fieldset, |
|||
new OO.ui.FieldLayout( submitButton ) |
|||
] ); |
|||
$( '#song-query' ).append( fieldset.$element ); |
|||
function go(api, queryOptions, displayOptions) { |
|||
const params = []; |
|||
const query = queryOptions.getOptions(); |
|||
for (var key in query) { |
|||
params.push('|' + key + ' = ' + query[key]); |
|||
} |
|||
var z = '{{Song datatable\n' + params.join('\n') + '\n}}'; |
|||
console.log(z); |
|||
api.get({ |
|||
action: 'parse', |
|||
title: mw.config.get('wgPageName'), |
|||
prop: 'text', |
|||
text: z, |
|||
maxage: 3600, |
|||
smaxage: 3600 |
|||
}).done(function(results) { |
|||
$('#song-results').empty().append($(results.parse.text['*'])); |
|||
$('#song-results table').tablesorter(); |
|||
}); |
|||
} |
} |
||
); |
|||
} ); |
|||
dOptions.addColumnSelector( |
|||
[ |
|||
{ name: 'producers', selected: true, label: 'Producer' }, |
|||
{ name: 'units', selected: true, label: 'Unit category' }, |
|||
{ name: 'bpm', selected: true, label: 'BPM' }, |
|||
{ name: 'game duration', selected: true, label: 'Duration (game-size)' }, |
|||
{ name: 'release date', selected: true, label: 'Release date' }, |
|||
{ name: 'type', selected: true, label: 'Type' }, |
|||
{ name: '3d mv', selected: true, label: '3D MV' }, |
|||
{ name: '2d mv', selected: true, label: '2D MV' }, |
|||
{ name: 'original mv', selected: true, label: 'Original MV' }, |
|||
{ name: 'easy difficulty', selected: false, label: 'Easy difficulty' }, |
|||
{ name: 'normal difficulty', selected: false, label: 'Normal difficulty' }, |
|||
{ name: 'hard difficulty', selected: false, label: 'Hard difficulty' }, |
|||
{ name: 'expert difficulty', selected: false, label: 'Expert difficulty' }, |
|||
{ name: 'master difficulty', selected: false, label: 'Master difficulty' }, |
|||
{ name: 'easy notes', selected: false, label: 'Easy notes' }, |
|||
{ name: 'normal notes', selected: false, label: 'Normal notes' }, |
|||
{ name: 'hard notes', selected: false, label: 'Hard notes' }, |
|||
{ name: 'expert notes', selected: false, label: 'Expert notes' }, |
|||
{ name: 'master notes', selected: false, label: 'Master notes' }, |
|||
], |
|||
{ } |
|||
); |
|||
$( function () { |
|||
var search = new psw.db.SearchWidget( |
|||
{ queryOptions: qOptions, displayOptions: dOptions }, |
|||
{ selector: '#song-results', template: 'Song datatable' } |
|||
); |
|||
$( '#song-query' ).append( search.fieldset.$element ); |
|||
}); |
}); |
||
} |
|||
} )( jQuery, mediaWiki, pswiki ); |
Latest revision as of 05:56, 1 May 2024
( function ( $, mw, psw ) {
'use strict';
var qOptions = new psw.db.QueryOptions();
var dOptions = new psw.db.DisplayOptions();
qOptions.addButtonMultiInput(
'units',
{ label: 'Unit categories' },
{
multiselect: true,
delimiter: ';',
items: [
{ label: 'VIRTUAL SINGER' },
{ label: 'Leo/need' },
{ label: 'MORE MORE JUMP!' },
{ label: 'Vivid BAD SQUAD' },
{ label: 'Wonderlands×Showtime' },
{ label: '25-ji, Nightcord de.' },
{ label: 'Other' }
]
}
);
[
{ param: '3d mv', label: '3D MV?' },
{ param: '2d mv', label: '2D MV?' },
{ param: 'original mv', label: 'Original MV?' }
].forEach( function( paramLabel ) {
qOptions.addButtonMultiInput(
paramLabel.param,
{ label: paramLabel.label },
{
items: [
{ label: 'Any', data: ' ' },
{ label: 'Yes', data: '1' },
{ label: 'No', data: '0' }
],
selected: 'Any'
}
);
} );
qOptions.addButtonMultiInput(
'types',
{ label: 'Type(s)' },
{
multiselect: true,
items: [
{ label: 'Pre-existing', data: 'Pre-existing' },
{ label: 'Commissioned', data: 'Commissioned' },
{ label: 'Contest winner', data: 'Contest winner' }
]
}
);
qOptions.addNumberInput(
'min game duration',
{ label: 'Minimum game-size duration (seconds)' },
{ min: 1, showButtons: false }
);
qOptions.addNumberInput(
'max game duration',
{ label: 'Maximum game-size duration (seconds)' },
{ min: 1, showButtons: false }
);
qOptions.addDateInput(
'released after',
{ label: 'Released after' }
);
qOptions.addDateInput(
'released before',
{ label: 'Released before' }
);
[
{ param: 'easy difficulties', label: 'Easy difficulties', min: 5, max: 9 },
{ param: 'normal difficulties', label: 'Normal difficulties', min: 10, max: 15 },
{ param: 'hard difficulties', label: 'Hard difficulties', min: 15, max: 24 },
{ param: 'expert difficulties', label: 'Expert difficulties', min: 21, max: 31 },
{ param: 'master difficulties', label: 'Master difficulties', min: 25, max: 37 },
].forEach( function( diff ) {
var diffItems = [];
for ( var i = diff.min; i <= diff.max; i++ ) {
diffItems.push( { label: i.toString() } );
}
qOptions.addButtonMultiInput(
diff.param,
{ label: diff.label },
{
multiselect: true,
items: diffItems
}
);
} );
dOptions.addColumnSelector(
[
{ name: 'producers', selected: true, label: 'Producer' },
{ name: 'units', selected: true, label: 'Unit category' },
{ name: 'bpm', selected: true, label: 'BPM' },
{ name: 'game duration', selected: true, label: 'Duration (game-size)' },
{ name: 'release date', selected: true, label: 'Release date' },
{ name: 'type', selected: true, label: 'Type' },
{ name: '3d mv', selected: true, label: '3D MV' },
{ name: '2d mv', selected: true, label: '2D MV' },
{ name: 'original mv', selected: true, label: 'Original MV' },
{ name: 'easy difficulty', selected: false, label: 'Easy difficulty' },
{ name: 'normal difficulty', selected: false, label: 'Normal difficulty' },
{ name: 'hard difficulty', selected: false, label: 'Hard difficulty' },
{ name: 'expert difficulty', selected: false, label: 'Expert difficulty' },
{ name: 'master difficulty', selected: false, label: 'Master difficulty' },
{ name: 'easy notes', selected: false, label: 'Easy notes' },
{ name: 'normal notes', selected: false, label: 'Normal notes' },
{ name: 'hard notes', selected: false, label: 'Hard notes' },
{ name: 'expert notes', selected: false, label: 'Expert notes' },
{ name: 'master notes', selected: false, label: 'Master notes' },
],
{ }
);
$( function () {
var search = new psw.db.SearchWidget(
{ queryOptions: qOptions, displayOptions: dOptions },
{ selector: '#song-results', template: 'Song datatable' }
);
$( '#song-query' ).append( search.fieldset.$element );
});
} )( jQuery, mediaWiki, pswiki );