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

MediaWiki:Gadget-calculator-crystals-core.js

MediaWiki interface page
Revision as of 23:16, 24 August 2022 by ChaoticShadow (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
( 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(songCoverWidget.getValue());
		console.log(songRankWidget.findSelectedItems().getData());
		console.log(songComboHardWidget.findSelectedItems().getData());
		console.log(songComboExpertWidget.findSelectedItems().getData());
		console.log(songComboMasterWidget.findSelectedItems().getData());
		console.log(clStampWidget.getValue());
	}
	
	submitButton.on( 'click', calculate );
	
	var fieldset = new OO.ui.FieldsetLayout( {
		items: [
			dateFieldset,
			eventFieldset,
			songFieldset,
			clFieldset,
			new OO.ui.FieldLayout(
				submitButton
			)
		]
	} );

	$( '#calculator' ).append( fieldset.$element );
	
} )( jQuery, mediaWiki );
Cookies help us deliver our services. By using our services, you agree to our use of cookies.