MediaWiki:Gadget-resign-calculator.js: Difference between revisions
Drop the term/years note |
The league is NBA RealGM |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
/** | /** | ||
* | * NBA RealGM — re-sign salary calculator. | ||
* Implements the formula on [[NBA:Re-Signing]]. If the two ever disagree, | * Implements the formula on [[NBA:Re-Signing]]. If the two ever disagree, | ||
* the wiki page is the rule and this script is the bug. | * the wiki page is the rule and this script is the bug. | ||
| Line 105: | Line 105: | ||
var form = document.createElement( 'div' ); | var form = document.createElement( 'div' ); | ||
form.className = 'tc-calc'; | form.className = 'tc-calc'; | ||
/** | |||
* One labelled row. Controls live in their own flex wrapper so that on a | |||
* narrow screen the label can stack above them while they stay in a row. | |||
*/ | |||
function row( labelText, controls, extraClass ) { | |||
var r = document.createElement( 'div' ); | |||
r.className = 'tc-calc-row' + ( extraClass ? ' ' + extraClass : '' ); | |||
var l = document.createElement( 'label' ); | |||
l.textContent = labelText; | |||
var c = document.createElement( 'div' ); | |||
c.className = 'tc-calc-controls'; | |||
controls.forEach( function ( el ) { c.appendChild( el ); } ); | |||
r.appendChild( l ); | |||
r.appendChild( c ); | |||
form.appendChild( r ); | |||
return c; | |||
} | |||
// --- Fantrax scores --- | // --- Fantrax scores --- | ||
for ( var i = 0; i < 3; i++ ) { | for ( var i = 0; i < 3; i++ ) { | ||
var input = document.createElement( 'input' ); | var input = document.createElement( 'input' ); | ||
| Line 118: | Line 131: | ||
input.min = '0'; | input.min = '0'; | ||
input.placeholder = [ 'season 1', 'season 2', 'season 3' ][ i ]; | input.placeholder = [ 'season 1', 'season 2', 'season 3' ][ i ]; | ||
scoreInputs.push( input ); | scoreInputs.push( input ); | ||
} | } | ||
row( 'Fantrax scores', scoreInputs, 'tc-scores' ); | |||
// --- term --- | // --- term --- | ||
var term = document.createElement( 'select' ); | var term = document.createElement( 'select' ); | ||
[ 3, 4, 5 ].forEach( function ( y ) { | [ 3, 4, 5 ].forEach( function ( y ) { | ||
| Line 136: | Line 143: | ||
term.appendChild( o ); | term.appendChild( o ); | ||
} ); | } ); | ||
row( 'Contract length', [ term ] ); | |||
// --- | // --- first season, to generate the contract line --- | ||
var season = document.createElement( 'input' ); | var season = document.createElement( 'input' ); | ||
season.type = 'number'; | season.type = 'number'; | ||
| Line 150: | Line 151: | ||
season.placeholder = String( UPCOMING_SEASON ); | season.placeholder = String( UPCOMING_SEASON ); | ||
season.value = String( UPCOMING_SEASON ); | season.value = String( UPCOMING_SEASON ); | ||
row( 'First season', [ season ] ); | |||
// --- team and player, for the post block --- | |||
var team = document.createElement( 'input' ); | |||
team.type = 'text'; | |||
team.placeholder = 'Sonics'; | |||
team.className = 'tc-calc-wide'; | |||
row( 'Your team (optional)', [ team ] ); | |||
var name = document.createElement( 'input' ); | var name = document.createElement( 'input' ); | ||
name.type = 'text'; | name.type = 'text'; | ||
name.placeholder = 'Larry Bird'; | name.placeholder = 'Larry Bird'; | ||
name. | name.className = 'tc-calc-wide'; | ||
row( 'Player (optional)', [ name ] ); | |||
var out = document.createElement( 'div' ); | var out = document.createElement( 'div' ); | ||
| Line 235: | Line 234: | ||
var endYear = first + years - 1; | var endYear = first + years - 1; | ||
var | // "Sonics offer Larry Bird 5 years" — team and player drop out if blank. | ||
var tm = team.value.trim(), | |||
term_ = years + ( years === 1 ? ' year' : ' years' ), | |||
prefix = tm && who ? tm + ' offer ' + who : | |||
( who || ( tm ? tm + ' offer' : '' ) ); | |||
var lines = [ prefix ? prefix + ' ' + term_ : term_ ]; | |||
lines.push( '(' + scores.join( ', ' ) + ' = ' + | lines.push( '(' + scores.join( ', ' ) + ' = ' + | ||
( Number.isInteger( r.average ) ? r.average : r.average.toFixed( 2 ) ) + ')' ); | ( Number.isInteger( r.average ) ? r.average : r.average.toFixed( 2 ) ) + ')' ); | ||
| Line 245: | Line 247: | ||
} | } | ||
[].concat( scoreInputs, [ term, season, name ] ).forEach( function ( el ) { | [].concat( scoreInputs, [ term, season, team, name ] ).forEach( function ( el ) { | ||
el.addEventListener( 'input', render ); | el.addEventListener( 'input', render ); | ||
el.addEventListener( 'change', render ); | el.addEventListener( 'change', render ); | ||