ingress-intel-total-conversion/plugins/show-linked-portals.user.js

129 lines
5.5 KiB
JavaScript

// ==UserScript==
// @id iitc-plugin-show-linked-portals@fstopienski
// @name IITC plugin: Show linked portals
// @version 0.0.2.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
// @description [@@BUILDNAME@@-@@BUILDDATE@@] Tries to show the linked portals (image, name and address) in portal detail view and jump to linked portal on click
// @include https://www.ingress.com/intel*
// @include http://www.ingress.com/intel*
// @match https://www.ingress.com/intel*
// @match http://www.ingress.com/intel*
// ==/UserScript==
/*
* 0.0.1 initial release, show images, names and addresses of linked portal in portal detailview
* - mouse click of the linked portal image selected the portal and adjust map
* - click of "Linked Portal is out of range" zoom a step out
*/
function wrapper() {
// ensure plugin framework is there, even if iitc is not yet loaded
if (typeof window.plugin !== 'function') {
window.plugin = function () {
};
}
// PLUGIN START ////////////////////////////////////////////////////////
// use own namespace for plugin
window.plugin.showLinkedPortal = function () {
};
window.plugin.showLinkedPortal.handleUpdate = function () {
if (!requests.isLastRequest('getThinnedEntitiesV2')) {
return;
}
}
window.plugin.showLinkedPortal.portalDetail = function (data) {
var d = data.portalDetails.portalV2,
c = 1,
classAdd = '';
//get linked portals
$(d.linkedEdges).each(function () {
if (c < 5) {
classAdd = ' showLinkedPortalLinkLeft';
}
else {
classAdd = ' showLinkedPortalLinkRight';
}
var portalInfo = window.plugin.showLinkedPortal.getPortalByGuid(this.otherPortalGuid);
$('#portaldetails').append('<div class="showLinkedPortalLink showLinkedPortalLink' + c + ' ' + classAdd + '" id="showLinkedPortalLink_' + c + '" data-guid="' + this.otherPortalGuid + '">' + portalInfo + '</div>');
c = c + 1;
});
$('.showLinkedPortalLink:not(.outOfRange)').bind('click', function () {
var guid = $(this).attr('data-guid');
if (window.portals[guid] !== undefined) {
window.selectPortal($(this).attr('data-guid'));
window.renderPortalDetails(window.selectedPortal);
var portalDetails = window.portals[guid].options.details;
var lat0 = portalDetails.locationE6.latE6 / 1E6;
var lon0 = portalDetails.locationE6.lngE6 / 1E6;
var Rlatlng = [lat0, lon0];
map.setView(Rlatlng, map.getZoom());
}
else {
map.setZoom((map.getZoom() - 1));
}
});
}
window.plugin.showLinkedPortal.getPortalByGuid = function (guid) {
var portalInfoString = '<span class="outOfRange" title="Zoom out">Linked Portal out of range.</span>';
if (window.portals[guid] !== undefined) {
var portalDetails = window.portals[guid].options.details;
portalInfoString = '';
var portalNameAdressAlt = "'" + portalDetails.portalV2.descriptiveText.TITLE + "' (" + portalDetails.portalV2.descriptiveText.ADDRESS + ")";
var portalNameAdressTitle = "'<strong>" + portalDetails.portalV2.descriptiveText.TITLE + "</strong>'<br/> <em>(" + portalDetails.portalV2.descriptiveText.ADDRESS + ")</em>";
var imageUrl = (portalDetails.imageByUrl ? portalDetails.imageByUrl.imageUrl : '');
portalInfoString = '<img src="' + imageUrl + '" class="minImg" alt="' + portalNameAdressAlt + '" title="' + portalNameAdressTitle + '"/>';
}
return portalInfoString;
};
window.plugin.showLinkedPortal.setupCallback = function () {
// make the value update when the map data updates
var handleDataResponseOrig = window.handleDataResponse;
window.handleDataResponse = function (data, textStatus, jqXHR) {
handleDataResponseOrig(data, textStatus, jqXHR);
window.renderPortalDetails(window.selectedPortal);
}
}
var setup = function () {
window.addHook('requestFinished', window.plugin.showLinkedPortal.handleUpdate);
window.addHook('portalDetailsUpdated', window.plugin.showLinkedPortal.portalDetail);
$('head').append('<style>' +
'.showLinkedPortalLink{cursor: pointer; position: absolute; height: 40px; width: 50px; border:solid 1px; overflow: hidden; text-align: center; background: #0e3d4e;}' +
'.showLinkedPortalLink .minImg{height: 50px;}' +
'.showLinkedPortalLink span.outOfRange{font-size: 8px;}' +
'.showLinkedPortalLinkLeft{left: 10px; }' +
'.showLinkedPortalLinkRight{right: 25px; }' +
'.showLinkedPortalLink1,.showLinkedPortalLink5{top: 100px; }' +
'.showLinkedPortalLink2,.showLinkedPortalLink6{top: 144px; }' +
'.showLinkedPortalLink3,.showLinkedPortalLink7{top: 188px; }' +
'.showLinkedPortalLink4,.showLinkedPortalLink8{top: 232px; }' +
'#level{text-align:center; margin-right: 0px;}' +
'</style>');
window.plugin.showLinkedPortal.setupCallback();
}
// PLUGIN END //////////////////////////////////////////////////////////
if (window.iitcLoaded && typeof setup === 'function') {
setup();
} else {
if (window.bootPlugins)
window.bootPlugins.push(setup);
else
window.bootPlugins = [setup];
}
} // wrapper end
// inject code into site context
var script = document.createElement('script');
script.appendChild(document.createTextNode('(' + wrapper + ')();'));
(document.body || document.head || document.documentElement).appendChild(script);