diff --git a/plugins/show-linked-portals.user.js b/plugins/show-linked-portals.user.js
new file mode 100644
index 00000000..e39719cd
--- /dev/null
+++ b/plugins/show-linked-portals.user.js
@@ -0,0 +1,127 @@
+// ==UserScript==
+// @id iitc-plugin-show-linked-portals@fstopienski
+// @name IITC plugin: Show linked portals
+// @version 0.0.1.@@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('
' + portalInfo + '
');
+ 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 = 'Linked Portal out of range.';
+ 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 = "'" + portalDetails.portalV2.descriptiveText.TITLE + "'
(" + portalDetails.portalV2.descriptiveText.ADDRESS + ")";
+ portalInfoString = '
';
+ }
+ 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('');
+ 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);