Content added Content deleted
No edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
/*************************************************************************** |
/*************************************************************************** |
||
* Calculation helpers |
|||
* Helpers |
|||
*/ |
*/ |
||
function estimateNumberOfEvents( days ) { |
|||
// the median event length is 8 |
|||
// the average event length is 8.16 |
|||
return Math.ceil( days / 8 ); |
|||
⚫ | |||
function getNumberOfCheerfulCarnivals( startDay, endDay ) { |
|||
⚫ | |||
} |
|||
function estimateNumberOfEventSongs( numberOfEvents ) { |
|||
// mixed events are roughtly 1/3 of all events |
|||
return Math.ceil( 2 * numberOfEvents / 3); |
|||
} |
|||
⚫ | |||
* General helpers |
|||
⚫ | |||
function getTodayAsString() { |
|||
⚫ | |||
} |
|||
function getDateFromString( dateString ) { |
function getDateFromString( dateString ) { |
||
var date = new Date( dateString ).getTime(); |
var date = new Date( dateString ).getTime(); |
||
Line 23: | Line 45: | ||
var startDateWidget = new mw.widgets.DateInputWidget( { |
var startDateWidget = new mw.widgets.DateInputWidget( { |
||
type: 'date', |
type: 'date', |
||
value: getTodayAsString(), |
|||
⚫ | |||
mustBeAfter: getTodayAsString(), |
|||
inputFormat: 'YYYY-MM-DD', |
|||
displayFormat: 'YYYY-MM-DD' |
|||
} ); |
} ); |
||
var endDateWidget = new mw.widgets.DateInputWidget( { |
var endDateWidget = new mw.widgets.DateInputWidget( { |
||
type: 'date' |
type: 'date', |
||
mustBeAfter: getTodayAsString(), |
|||
inputFormat: 'YYYY-MM-DD', |
|||
displayFormat: 'YYYY-MM-DD' |
|||
} ); |
} ); |
||
Line 101: | Line 129: | ||
* Song |
* Song |
||
*/ |
*/ |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
var songRankOptions = [ 'S', 'A', 'B', 'C' ]; |
var songRankOptions = [ 'S', 'A', 'B', 'C' ]; |
||
var songRankWidget = new OO.ui.ButtonSelectWidget( { |
var songRankWidget = new OO.ui.ButtonSelectWidget( { |
||
Line 152: | Line 186: | ||
label: 'Songs', |
label: 'Songs', |
||
items: [ |
items: [ |
||
⚫ | |||
songCoverWidget, |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
new OO.ui.FieldLayout( |
new OO.ui.FieldLayout( |
||
songRankWidget, |
songRankWidget, |
||
Line 201: | Line 242: | ||
{ |
{ |
||
label: 'Crystals selected as Challenge Stamp reward?', |
label: 'Crystals selected as Challenge Stamp reward?', |
||
⚫ | |||
} |
|||
) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* Intermediate values |
|||
⚫ | |||
⚫ | |||
⚫ | |||
} ); |
|||
var ivSongsWidgets = new OO.ui.NumberInputWidget( { |
|||
⚫ | |||
} ); |
|||
var intermediateFieldset = new OO.ui.FieldsetLayout( { |
|||
label: 'Intermediate values', |
|||
items: [ |
|||
⚫ | |||
ivEventsWidgets, |
|||
⚫ | |||
label: 'Number of events', |
|||
align: 'inline' |
|||
} |
|||
⚫ | |||
new OO.ui.FieldLayout( |
|||
ivSongsWidgets, |
|||
⚫ | |||
⚫ | |||
align: 'inline' |
align: 'inline' |
||
} |
} |
Revision as of 23:14, 24 August 2022
( function ( $, mw ) {
var calculationValues = {
days: undefined,
events: undefined,
songs: undefined
};
/***************************************************************************
* Calculation helpers
*/
function estimateNumberOfEvents( days ) {
// the median event length is 8
// the average event length is 8.16
return Math.ceil( days / 8 );
}
function getNumberOfCheerfulCarnivals( startDay, endDay ) {
}
function estimateNumberOfEventSongs( numberOfEvents ) {
// mixed events are roughtly 1/3 of all events
return Math.ceil( 2 * numberOfEvents / 3);
}
/***************************************************************************
* General helpers
*/
function getTodayAsString() {
return new Date().toISOString().split('T')[0];
}
function getDateFromString( dateString ) {
var date = new Date( dateString ).getTime();
if ( isNaN( date ) ) {
return undefined;
}
return date;
}
/***************************************************************************
* Date range
*/
var startDateWidget = new mw.widgets.DateInputWidget( {
type: 'date',
value: getTodayAsString(),
mustBeAfter: getTodayAsString(),
inputFormat: 'YYYY-MM-DD',
displayFormat: 'YYYY-MM-DD'
} );
var endDateWidget = new mw.widgets.DateInputWidget( {
type: 'date',
mustBeAfter: getTodayAsString(),
inputFormat: 'YYYY-MM-DD',
displayFormat: 'YYYY-MM-DD'
} );
function handleDateRangeChange() {
var startDate = getDateFromString(startDateWidget.getValue());
var endDate = getDateFromString(endDateWidget.getValue());
var dateDiff = endDate - startDate;
}
var dateFieldset = new OO.ui.FieldsetLayout( {
label: 'Date range',
items: [
new OO.ui.FieldLayout(
startDateWidget,
{
label: 'Start date',
align: 'inline',
help: 'test'
}
),
new OO.ui.FieldLayout(
endDateWidget,
{
label: 'End date',
align: 'inline'
}
)
]
} );
/***************************************************************************
* Event
*/
var eventTierOptions = [
'T1-10',
'T20-100',
'T200-500',
'T1000',
'T2000-5000',
'T10000-50000',
'T100000',
'T200000',
'T300000',
'T500000',
'T1000000',
'None'
];
var eventTierWidget = new OO.ui.ButtonSelectWidget( {
items: eventTierOptions.map( function( tier, index ) {
return new OO.ui.ButtonOptionWidget( {
data: index,
label: tier,
selected: index === 0
} );
} ),
} );
var eventFieldset = new OO.ui.FieldsetLayout( {
label: 'Events',
items: [
new OO.ui.FieldLayout(
eventTierWidget,
{
label: 'Average tier',
align: 'inline'
}
)
]
} );
/***************************************************************************
* Song
*/
var songCoverWidget = new OO.ui.NumberInputWidget( {
min: 0,
value: 0
} );
var songRankOptions = [ 'S', 'A', 'B', 'C' ];
var songRankWidget = new OO.ui.ButtonSelectWidget( {
items: songRankOptions.map( function( rank, index ) {
return new OO.ui.ButtonOptionWidget( {
data: index,
label: rank,
selected: index === 0
} );
} )
} );
var songComboOptions = [
'Combo 4 (full combo)',
'Combo 3',
'Combo 2',
'Combo 1',
'None',
];
var songComboHardWidget = new OO.ui.ButtonSelectWidget( {
items: songComboOptions.map( function( option, index ) {
return new OO.ui.ButtonOptionWidget( {
data: index,
label: option,
selected: index === 0
} );
} )
} );
var songComboExpertWidget = new OO.ui.ButtonSelectWidget( {
items: songComboOptions.map( function( option, index ) {
return new OO.ui.ButtonOptionWidget( {
data: index,
label: option,
selected: index === 0
} );
} )
} );
var songComboMasterWidget = new OO.ui.ButtonSelectWidget( {
items: songComboOptions.map( function( option, index ) {
return new OO.ui.ButtonOptionWidget( {
data: index,
label: option,
selected: index === 0
} );
} )
} );
var songFieldset = new OO.ui.FieldsetLayout( {
label: 'Songs',
items: [
new OO.ui.FieldLayout(
songCoverWidget,
{
label: 'New cover songs',
align: 'inline'
}
),
new OO.ui.FieldLayout(
songRankWidget,
{
label: 'Average score rank',
align: 'inline'
}
),
new OO.ui.FieldLayout(
songComboHardWidget,
{
label: 'Average combo milestone (on hard)',
align: 'inline'
}
),
new OO.ui.FieldLayout(
songComboExpertWidget,
{
label: 'Average combo milestone (on expert)',
align: 'inline'
}
),
new OO.ui.FieldLayout(
songComboMasterWidget,
{
label: 'Average combo milestone (on master)',
align: 'inline'
}
)
]
} );
/***************************************************************************
* Challenge Stamp
*/
var clStampWidget = new OO.ui.RadioSelectInputWidget( {
options: [
{ data: 'true', label: 'Yes' },
{ data: 'false', label: 'No' }
],
value: 'true'
} );
var clFieldset = new OO.ui.FieldsetLayout( {
label: 'Challenge Live',
items: [
new OO.ui.FieldLayout(
clStampWidget,
{
label: 'Crystals selected as Challenge Stamp reward?',
align: 'inline'
}
)
]
} );
/***************************************************************************
* Everything
*/
var submitButton = new OO.ui.ButtonInputWidget( {
label: 'Calculate',
flags: [ 'primary', 'progressive' ],
align: 'left',
icon: 'mathematics'
} );
function calculate() {
console.log(startDateWidget.getValue());
console.log(endDateWidget.getValue());
console.log(eventTierWidget.findSelectedItems().getData());
console.log(songRankWidget.findSelectedItems().getData());
console.log(songComboHardWidget.findSelectedItems().getData());
console.log(songComboExpertWidget.findSelectedItems().getData());
console.log(songComboMasterWidget.findSelectedItems().getData());
console.log(clStampWidget.getValue());
console.log(ivEventsWidgets.getValue());
console.log(ivSongsWidgets.getValue());
}
submitButton.on( 'click', calculate );
var fieldset = new OO.ui.FieldsetLayout( {
items: [
dateFieldset,
eventFieldset,
songFieldset,
clFieldset,
intermediateFieldset,
new OO.ui.FieldLayout(
submitButton
)
]
} );
$( '#calculator' ).append( fieldset.$element );
} )( jQuery, mediaWiki );