Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Gadget-database-songs-core.js: Difference between revisions

MediaWiki interface page
Content added Content deleted
mNo edit summary
(updated master diffs)
 
(38 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', 'mw.Api', 'mediawiki.widgets.DateInputWidget'] ).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,
'Other': false
delimiter: ';',
},
items: [
{ label: 'VIRTUAL SINGER' },
mvs: {
'3D': undefined,
{ 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,
minDate: '',
{ 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],
disabled: true
} );
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: [
new OO.ui.ButtonOptionWidget({ data: undefined, label: 'Any' }),
{ label: 'Any', data: ' ' },
new OO.ui.ButtonOptionWidget({ data: true, label: 'Yes' }),
{ label: 'Yes', data: '1' },
new OO.ui.ButtonOptionWidget({ data: false, label: 'No' }),
{ label: 'No', data: '0' }
],
],
align: 'left'
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: 'Unit',
{ 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 diffs'] = getDiffs(this.queryParams.easyDiffs);
resQuery['normal diffs'] = getDiffs(this.queryParams.normalDiffs);
resQuery['hard diffs'] = getDiffs(this.queryParams.hardDiffs);
resQuery['expert diffs'] = getDiffs(this.queryParams.expertDiffs);
resQuery['master diffs'] = 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,
var api = new mw.Api();
{ label: diff.label },
{
var queryOptions = new QueryOptions();
multiselect: true,
var displayOptions = new DisplayOptions();
items: diffItems
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 )
] );
$( '.test-options' ).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 = '{{Datatable song\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) {
$('.test-table').empty().append($(results.parse.text['*']));
});
}
}
});
);
} );
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 );
Cookies help us deliver our services. By using our services, you agree to our use of cookies.