MediaWiki:Gadget-mmgkc-core.js
After saving, you may need to bypass your browser's cache to see the changes. For further information, see Wikipedia:Bypass your cache.
- In most Windows and Linux browsers: Hold down Ctrl and press F5.
- In Safari: Hold down ⇧ Shift and click the Reload button.
- In Chrome and Firefox for Mac: Hold down both ⌘ Cmd+⇧ Shift and press R.
// Gets and sets items in local storage for the KPH amount
// This allows for repeat visits to use the same KPH.
// KPH is saved in local storage with the key "{Subpage name}-mmg-kph"
// For ex. "Money making guide/Drinking irresponsibly" would go to the key "Drinking irresponsibly-mmg-kph"
// If the page is NOT a subpage, we will not save LS. This might be confusing but is preferable to all TL pages using the same LS key.
function parseMmgFloat(x) {
var _x = parseFloat(x);
if (isNaN(_x)) {
return 0;
}
return _x;
}
function formatNum(x) {
var _x = Math.abs(x);
if (_x > 99) {
// if over 100
// round to 0 dp and format with commas if needed
_x = Math.round(x);
_x = _x.toLocaleString('en');
} else if (_x < 0.1) {
// if under 0.1
// round to 2 sf
var n = Math.floor(Math.log10(x)) - 1;
_x = Math.pow(10, n) * Math.round(x/Math.pow(10,n));
// cull binary representation error
// probably a better way to do this
_x = String(_x);
_x = _x.replace(/([1-9])0000+\d$/, '$1');
} else {
// if between 99 and 0.1 (inclusive)
// round to 2 dp
_x = Math.round(x*100)/100;
}
return _x;
}
function coinsClasses($e, x) {
$e.removeClass('coins-pos coins-neg');
if (x > 0) {
$e.addClass('coins-pos');
} else if (x < 0) {
$e.addClass('coins-neg');
}
}
var $this, defaultKPH, kphField, layout;
function updateEverything() {
var val = kphField.getNumericValue();
if (isNaN(val)) val = defaultKPH;
$('.mmg-kph.mmg-variable').each(function(i,e){
$(e).text(formatNum(val));
});
$('.mmg-varieswithkph').each(function(i,e) {
var $e = $(e);
if ($e.hasClass('mmg-itemline')) {
var newValue = parseMmgFloat($e.find('.mmg-cost').attr('data-mmg-cost-pk'))*val;
$e.find('.mmg-quantity').text(formatNum(parseMmgFloat($e.find('.mmg-quantity').attr('data-mmg-qty'))*val));
$e.find('.mmg-cost > span.coins').text(formatNum(newValue));
coinsClasses($e.find('.mmg-cost > span.coins'), newValue);
} else if ($e.hasClass('mmg-xpline')) {
$e.find('.scp')[0].lastChild.nodeValue = ' ' + formatNum(parseMmgFloat($e.attr('data-mmg-xp-ph')) + parseMmgFloat($e.attr('data-mmg-xp-pk')) * val) + ' ';
} else {
var $e2 = $e.find('> span.coins'),
newValue = parseMmgFloat($e.attr('data-mmg-cost-ph')) + parseMmgFloat($e.attr('data-mmg-cost-pk')) * val,
fNewVal = formatNum(newValue);
if ($e2.length) {
$e2.text(fNewVal);
coinsClasses($e2, newValue);
} else {
$e.text(fNewVal);
}
}
});
}
function init() {
$this = $('.mmg-table.mmg-isperkill');
var pageName = mw.config.get('wgTitle');
defaultKPH = $this.attr('data-default-kph');
defaultKPHname = $this.attr('data-default-kph-name');
kphField = new OO.ui.NumberInputWidget({
min: 0,
input: { value: getKphLocalStorage(pageName) || defaultKPH },
classes: ['mmg-kph-selector-field']
});
// We need to updateEverything since the KPH might not be the default
updateEverything();
var resetButton = new OO.ui.ButtonWidget( {
icon: 'reload',
label: 'Reset',
invisibleLabel: true,
classes: ['mmg-kph-refresh-field'],
disabled: (getKphLocalStorage(pageName) || defaultKPH) === defaultKPH
});
resetButton.on('click', function() {
// Reset the key AFTER setValue since setValue would otherwise write default_kph to LS
kphField.setValue(defaultKPH);
resetButton.setDisabled( true )
resetKphLocalStorage(pageName);
});
function saveToLocalStorageAndUpdate() {
setKphLocalStorage(pageName, kphField.getValue());
resetButton.setDisabled( kphField.getValue() === defaultKPH );
updateEverything();
}
kphField.on('change', saveToLocalStorageAndUpdate ).on('enter', saveToLocalStorageAndUpdate);
layout = new OO.ui.ActionFieldLayout( kphField, resetButton, {
label: defaultKPHname,
classes: ['mmg-kph-div'],
help: 'Change the amount per hour you get here to update the numbers in the guide below.'
});
$this.before(layout.$element);
}
function getLSKeyNameForMmg(mmgName) {
// mmgName should always have a "Money making guide/" prefix
// This will work for anything that is a subpage and we could have some default for a top level page, but I don't want to pollute LS
var mmg = mmgName.split('/')[1];
if (mmg === undefined)
return undefined;
return mmg + '-mmg-kph';
}
function getKphLocalStorage(mmgName) {
var lsKey = getLSKeyNameForMmg(mmgName);
if (lsKey !== undefined)
return localStorage.getItem(lsKey);
}
function setKphLocalStorage(mmgName, valueToUse) {
var lsKey = getLSKeyNameForMmg(mmgName);
if (lsKey !== undefined)
localStorage.setItem(lsKey, valueToUse);
}
function resetKphLocalStorage(mmgName) {
var lsKey = getLSKeyNameForMmg(mmgName);
if (lsKey !== undefined)
localStorage.removeItem(lsKey);
}
$(init);