// ==UserScript==
// @name INARA Cargo Ext
// @namespace http://tampermonkey.net/
// @version 0.2
// @author DrFreez
// @match http://inara.cz/cmdr-cargo/*
// @match http://inara.cz/cmdr-cargo
// @match https://inara.cz/cmdr-cargo/*
// @match https://inara.cz/cmdr-cargo
// @description Cargo Calc
// ==/UserScript==
(function() {
'use strict';
var $conteiner = $('.inventorymaterialcont');
var $input = $('<input class="spinner retries inara-cargo-ext" type="number" step="1" />');
var materialType = {};
var lastType;
$('> div', $conteiner).each(function(){
var $el = $(this);
if($el.hasClass('inventorytitle')){
lastType = $el.text();
} else if ($el.hasClass('inventorymaterial')) {
materialType[$('a', $el).text()] = lastType;
}
});
$('.flexmiddle').prepend('<h2 class="header">crafting materials</h2><div class="mainblock tableblocksub"><table class="subtable tablesorter" id="inara-cargo-ext"><thead><tr><th class="lineright">Material</th><th class="lineright">Type</th><th class="lineright">Need</th><th class="lineright">Have</th><th></th></tr></thead><tbody></tbody></table></div>');
var $blueprintList = $('.flexrightwide .mainblock');
var $table = $('#inara-cargo-ext');
var $tbody = $('tbody', $table);
var checkHaveNeed = function() {
$('tr', $tbody).each(function(){
var $tr = $(this);
if (parseInt($('td:eq(3) input', $tr).val()) >= parseInt($('td:eq(2)', $tr).text())) {
$('td:eq(0) a', $tr).addClass('positive');
$('td:eq(4) span', $tr).html('✔').removeClass('negative').addClass('positive');
} else {
$('td:eq(0) a', $tr).removeClass('positive');
$('td:eq(4) span', $tr).html('✘').removeClass('positive').addClass('negative');
}
});
};
var calculateNeed = function () {
var materials = {};
$blueprintList.each(function(){
var $block = $(this);
var $input = $('input', $block);
var blueprintsTries = parseInt($input.val());
$('> span', $block).each(function(){
var $el = $(this);
var materialName;
if ($el.data('name') === undefined) {
materialName = 'Material ' + $('a', $el).text();
$el.data('name', materialName);
} else {
materialName = $el.data('name');
}
var materialNeed = parseInt(($('> span', $el).text().replace(/x$/i, '')));
if (materials[materialName] === undefined) {
materials[materialName] = 0;
}
materials[materialName] += blueprintsTries * materialNeed;
});
});
$.each(materials, function(materialName, need){
$('tr[data-name="' + materialName + '"] td:eq(2)', $tbody).empty().append(need);
});
};
var saveValues = function() {
var data = {};
$('input.inara-cargo-ext').each(function(){
var $input = $(this);
data[$input.attr('name')] = $input.val();
});
localStorage.setItem('inara-cargo-ext', JSON.stringify(data));
};
var loadValues = {
data: JSON.parse(localStorage.getItem('inara-cargo-ext')),
get: function(name, defaultValue) {
if (loadValues.data !== null && loadValues.data[name] !== undefined) {
return loadValues.data[name];
}
return defaultValue;
}
};
$blueprintList.each(function(){
var $block = $(this);
var blueprintName = 'Blueprint ' + $block.prev('h3').text();
$('.textright', $block).empty().append($input.clone().attr('name', blueprintName).val(loadValues.get(blueprintName, 1))).css('height', 20);
$('> span', $block).each(function(){
var $el = $(this);
var $elClone = $el.clone();
var materialName = 'Material ' + $('a', $elClone).text();
var $tr = $('tr[data-name="' + materialName + '"]', $table);
if ($tr.length === 0) {
$tr = $('<tr data-name="' + materialName + '"><td class="lineright"></td><td class="lineright"></td><td class="lineright"></td><td class="lineright"></td><td></td></tr>');
$('> span', $elClone).remove();
$elClone.contents().filter(function() {
return this.nodeType == 3;
}).remove();
$('td:eq(0)', $tr).css({height: 20}).append($el.prev().clone());
$('td:eq(0)', $tr).append($elClone);
$('td:eq(1)', $tr).append(materialType[$('a', $elClone).text()]);
$('td:eq(3)', $tr).css({width: 70}).append($input.clone().attr('name', materialName).val(loadValues.get(materialName, 0)));
$('td:eq(4)', $tr).css({textAlign: 'center'}).append('<span></span>');
$tbody.append($tr);
}
});
});
$('input.inara-cargo-ext').parent().hover(function() {
$(this).find(".spinner").spinner({min: 0});
}, function() {
$(this).find(".spinner").spinner("destroy");
});
$('body').on('click', '.ui-spinner-button', function(){
$('input.inara-cargo-ext', $(this).parent()).change();
});
$('body').on('change', 'input.inara-cargo-ext', function(){
saveValues();
calculateNeed();
checkHaveNeed();
});
calculateNeed();
checkHaveNeed();
})();