Add a tool to compute the number of fields, links, points, that a player can get from a particular area.
// ==UserScript==
// @name IngressBuilderRevenue
// @namespace notableTieView
// @description Add a tool to compute the number of fields, links, points, that a player can get from a particular area.
// @include https://www.ingress.com/
// @version 1.0
// @grant none
// ==/UserScript==
// add functions and variable that are to be available on the page
function wrapper() {
window.toggleDisplay = function (selector) {
item = $(selector);
if (item.hasClass('invisible')) {
item.removeClass('invisible');
} else {
item.addClass('invisible');
}
};
window.addCommas = function(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
};
window.addLineData = function(selector, num, ap) {
rowTds=$(selector);
rowTds.eq(1).text(addCommas(num));
rowTds.eq(2).text(addCommas(ap));
};
window.computeStatistics = function() {
portals=parseInt($('#numPortals').val());
portalsOnKonvexHull=parseInt($('#numBorder').val());
if (isNaN(portals) || isNaN(portalsOnKonvexHull)) {
alert("Please enter valid numbers.");
return;
}
numFields=2*portals - portalsOnKonvexHull -2;
numLinks = 3*portals -portalsOnKonvexHull -3;
numResos = 8*portals;
numMods = 2*portals;
apFields=numFields*1250;
apMods = numMods*150;
apResos = numResos*125+portals*(500+250);
apLinks = numLinks*313;
sum=apFields+apMods+apResos+apLinks;
addLineData('#ingressMods td', numMods, apMods);
addLineData('#ingressResos td', numResos, apResos);
addLineData('#ingressFields td', numFields, apFields);
addLineData('#ingressLinks td', numLinks, apLinks);
addLineData('#ingressSum td', '', sum);
};
// ...
}
var script = document.createElement('script');
script.appendChild(document.createTextNode('(' + wrapper + ')();'));
(document.body || document.head || document.documentElement).appendChild(script);
function addGlobalStyle(css) {
var head,
style;
head = document.getElementsByTagName('head') [0];
if (!head) {
return;
}
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
addGlobalStyle('.invisible { display:none !important; }');
addGlobalStyle('#compute {\
background-color: rgba(31,31,31,0.9);\
color: rgb(17, 236, 247);\
z-index: 100;\
height: 320px;\
margin-top: 100px;\
left:50%;\
width: 340px;\
margin-left: -170px;\
position:fixed;\
padding:10px;\
border-width: 1px;\
border-style: solid;\
font-family: coda_regular,sans-serif;\
}');
addGlobalStyle('#revenueButton,#intelButton {\
font-size: 16px;\
margin: 0.75em 0px;\
padding: 0.7em 1em;\
position: relative;\
cursor: pointer;\
font-weight: 700;\
border-width: 1px;\
border-style: solid;\
font-family: sans-serif;\
text-decoration: none;\
z-index:999;\
position:fixed;\
right:10px;\
background-color: #11ECf7;\
color: black;\
}');
addGlobalStyle('#intelButton {\
margin-top:3.75em;\
}');
addGlobalStyle('.ingressAP {\
text-align:right;\
}');
addGlobalStyle('.ingressCount {\
text-align:right;\
}');
addGlobalStyle('#numPortals, #numBorder {\
width:50px;\
margin-right:10px;\
}');
addGlobalStyle('#builderHeading {\
font-size:2.3em;\
}');
addGlobalStyle('#revenueTable {\
width: 80%;\
margin-left: 5%;\
border-spacing: 20px 0px;\
table-layout: fixed;\
}');
addGlobalStyle('th {\
text-align:left;\
}');
$('body').append(' <a id="revenueButton" onclick="toggleDisplay(\'#compute\')">Compute Area AP</a>');
$('body').append(' <a id="intelButton" href="/intel">Intel</a>');
$('body').append('\
<div id="compute" class="invisible">\
<div id="builderHeading">Builder Revenue</div>\
<p>Enter the number of portals in the area and the number of portals (thereof) which form the border (all other portals are inside the polygon they form).</p>\
<p>\
<label>Portals:</label>\
<input type="number" id="numPortals"/>\
<label>Border:</label>\
<input type="number" id="numBorder"/>\
<button type="button" id="computeButton" onclick="computeStatistics()">Compute</button>\
</p>\
<table id="revenueTable">\
<tr>\
<th class="ingressEntity">Entity</th><th class="ingressCount">Number</th><th class="ingressAP">AP</th>\
</tr>\
<tr id="ingressResos">\
<td class="ingressEntity">Resos</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
</tr>\
<tr id="ingressLinks">\
<td class="ingressEntity">Links</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
</tr>\
<tr id="ingressFields">\
<td class="ingressEntity">Fields</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
</tr>\
<tr id="ingressMods">\
<td class="ingressEntity">Mods</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
</tr>\
<tr id="ingressSum">\
<td class="ingressEntity">Total</td><td class="ingressCount">0</td><td class="ingressAP">0</td>\
</tr>\
</table>\
</div>'
);