// ==UserScript==
// @id iitc-plugin-favorite-portals@soulBit
// @name IITC plugin: Favorite Portals
// @version 0.01
// @description Allows you to save a list of portals, to speed up switching from one area of the map to another.
// @include https://www.ingress.com/intel*
// @include http://www.ingress.com/intel*
// @match https://www.ingress.com/intel*
// @match http://www.ingress.com/intel*
// @grant none
// ==/UserScript==
function wrapper() {
if(typeof window.plugin !== 'function') window.plugin = function() {};
// PLUGIN START ////////////////////////////////////////////////////////
window.plugin.favoritePortals = function() {};
window.plugin.favoritePortals.portalList = {};
window.plugin.favoritePortals.LOCAL_STORAGE_KEY = "plugin-favorite-portals";
window.plugin.favoritePortals.hasLocalStorage = ('localStorage' in window && window['localStorage'] !== null);
window.plugin.favoritePortals.dialogBox = null; //Keep reference for closing later on
window.plugin.favoritePortals.onDetailsUpdated = function(data) {
$('.linkdetails').prepend("
");
if(window.plugin.favoritePortals.portalList[window.selectedPortal]) {
$('.toggle-favorite-portal').addClass( 'portal-on' );
window.plugin.favoritePortals.portalList[window.selectedPortal] = window.portals[window.selectedPortal].options;
window.plugin.favoritePortals.savePortals();
}
}
window.plugin.favoritePortals.display = function() {
var output = '';
if (!window.plugin.favoritePortals.hasLocalStorage) {
output += "Favorite portals cannot save any data, please try another browser that supports 'localStorage'.";
} else {
if ($.isEmptyObject(window.plugin.favoritePortals.portalList)) {
output += "No portals have been marked as favorite, click the blue square in the bottom left corner of the portal details to save one.";
} else {
output += "";
output += "";
var portals = [], dataChanged = false, portalData;
$.each( window.plugin.favoritePortals.portalList, function(i, portal) {
if(window.portals[i]) {
dataChanged = true;
window.plugin.favoritePortals.portalList[ i ] = window.portals[i].options;
}
portalData = (window.portals[i]) ? window.portals[i].options : portal;
portals.push({'guid': i, 'portalData': portalData});
});
if(dataChanged)
window.plugin.favoritePortals.savePortals();
portals.sort(function(a,b) {
var nameA = a.portalData.details.portalV2.descriptiveText.TITLE.toLowerCase();
var nameB = b.portalData.details.portalV2.descriptiveText.TITLE.toLowerCase();
return (nameA < nameB) ? -1 : (nameA > nameB) ? 1 : 0;
});
output += "
";
var teamName, energy;
$.each(portals, function(i, portal) {
portalData = portal.portalData;
output += "- ";
output += "X";
output += "" + portalData.details.portalV2.descriptiveText.TITLE + "";
teamName = portalData.details.controllingTeam.team;
output += " - L" + Math.floor( portalData.level );
energy = Math.floor( window.getCurrentPortalEnergy(portalData.details) / window.getPortalEnergy(portalData.details) * 100 );
if(!isNaN(energy))
output += " @" + energy + "%";
output += ": " + ( (teamName === "ALIENS") ? "Enlightened" : teamName[0] + teamName.slice(1).toLowerCase() );
if(portalData.details.portalV2.linkedEdges.length > 0 || portalData.details.portalV2.linkedFields.length > 0)
output += ", " + portalData.details.portalV2.linkedEdges.length + " links & " + portalData.details.portalV2.linkedFields.length + " fields";
output += "
";
});
output += "
"
output += "
";
}
}
window.plugin.favoritePortals.dialogBox = alert("" + output + "
", true );
}
window.plugin.favoritePortals.onDelete = function(guid) {
delete window.plugin.favoritePortals.portalList[ guid ];
if(window.selectedPortal && window.selectedPortal === guid)
$('.toggle-favorite-portal').removeClass( 'portal-on' ).addClass( 'portal-off' );
$("li[name='" + guid + "']").remove();
window.plugin.favoritePortals.savePortals();
}
window.plugin.favoritePortals.onPortalClicked = function(guid, coords) {
window.zoomToAndShowPortal(guid, coords);
window.plugin.favoritePortals.dialogBox.dialog('close');
}
window.plugin.favoritePortals.togglePortal = function() {
if(window.plugin.favoritePortals.portalList[window.selectedPortal]) {
$('.toggle-favorite-portal').removeClass('portal-on').addClass('portal-off');
delete window.plugin.favoritePortals.portalList[ window.selectedPortal ];
} else {
$('.toggle-favorite-portal').removeClass('portal-off').addClass('portal-on');
window.plugin.favoritePortals.portalList[window.selectedPortal] = window.portals[window.selectedPortal].options;
}
window.plugin.favoritePortals.savePortals();
}
window.plugin.favoritePortals.savePortals = function() {
var portalsObject = {'portals': window.plugin.favoritePortals.portalList};
var portalListJSON = JSON.stringify(portalsObject);
localStorage[window.plugin.favoritePortals.LOCAL_STORAGE_KEY] = portalListJSON;
}
window.plugin.favoritePortals.loadPortals = function() {
var portalListJSON = localStorage[window.plugin.favoritePortals.LOCAL_STORAGE_KEY];
if(!portalListJSON) return;
var portalsObject = JSON.parse(portalListJSON);
window.plugin.favoritePortals.portalList = portalsObject.portals;
}
window.plugin.favoritePortals.setup = function() {
window.plugin.favoritePortals.loadPortals();
window.addHook('portalDetailsUpdated', window.plugin.favoritePortals.onDetailsUpdated);
$('#toolbox').append("Favorite Portals");
$("