From 75afa6e2f1d2be78467a4aa75c2e4021dc0d0c6d Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Mon, 1 Apr 2013 23:36:19 +0100 Subject: [PATCH 1/9] bump version number for new release --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index ded391fa..61656625 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ // ==UserScript== // @id ingress-intel-total-conversion@jonatkins // @name IITC: Ingress intel map total conversion -// @version 0.10.0.@@DATETIMEVERSION@@ +// @version 0.10.1.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ From 711fc74ed67d6a0c575280578c6ebdf68dc1f9c8 Mon Sep 17 00:00:00 2001 From: Peter Dietrich Date: Thu, 4 Apr 2013 11:18:49 +0200 Subject: [PATCH 2/9] new plugin ipas-link For opening a portal in IPAS - Ingress Portal Attack Simulator --- .gitignore | 1 + plugins/ipas-link.user.js | 60 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 plugins/ipas-link.user.js diff --git a/.gitignore b/.gitignore index 40577945..0642e5d0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ mobile/IngressIntelTC/bin build localbuildsettings.py *.pyc +*.swp diff --git a/plugins/ipas-link.user.js b/plugins/ipas-link.user.js new file mode 100644 index 00000000..e4ce2d59 --- /dev/null +++ b/plugins/ipas-link.user.js @@ -0,0 +1,60 @@ +// ==UserScript== +// @id iitc-plugin-ipas-link@graphracer +// @name IITC Plugin: simulate an attack on portal +// @version 0.1.0.@@DATETIMEVERSION@@ +// @namespace https://github.com/xosofox/IPAS +// @updateURL @@UPDATEURL@@ +// @downloadURL @@DOWNLOADURL@@ +// @description [@@BUILDNAME@@-@@BUILDDATE@@] Adds a link to the portal details to open the portal in IPAS - Ingress Portal Attack Simulator on http://ipas.graphracer.com +// @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== + + +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.ipasLink = function() {}; + +window.plugin.ipasLink.setupCallback = function() { + addHook('portalDetailsUpdated', window.plugin.ipasLink.addLink); +} + +window.plugin.ipasLink.addLink = function(d) { + $('.linkdetails').append(''); +} + +window.plugin.ipasLink.getHash = function(d) { + var hashParts=[]; + $.each(d.resonatorArray.resonators, function(ind, reso) { + hashParts.push(reso.level + "," + reso.distanceToPortal + "," + reso.energyTotal); + }); + return hashParts.join(";")+"|" + "0,0,0,0"; //shields not implemented yet +} + +var setup = function() { + window.plugin.ipasLink.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); + From a04214b74b85561bb920f03c193e13c08a253842 Mon Sep 17 00:00:00 2001 From: Peter Dietrich Date: Thu, 4 Apr 2013 13:38:01 +0200 Subject: [PATCH 3/9] change link layout and wording --- plugins/ipas-link.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ipas-link.user.js b/plugins/ipas-link.user.js index e4ce2d59..4aaa6227 100644 --- a/plugins/ipas-link.user.js +++ b/plugins/ipas-link.user.js @@ -27,7 +27,7 @@ window.plugin.ipasLink.setupCallback = function() { } window.plugin.ipasLink.addLink = function(d) { - $('.linkdetails').append(''); + $('.linkdetails').append(''); } window.plugin.ipasLink.getHash = function(d) { From 77cdac87df7cf9d18a20070e512753aab9878570 Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Thu, 4 Apr 2013 16:56:07 +0100 Subject: [PATCH 4/9] remove "your X on Y was destroyed by Z" messages from faction chat - #121 --- code/chat.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/chat.js b/code/chat.js index 62e8fee6..e0053d14 100644 --- a/code/chat.js +++ b/code/chat.js @@ -261,6 +261,14 @@ window.chat.writeDataToHash = function(newData, storageHash, skipSecureMsgs) { var time = json[1]; var team = json[2].plext.team === 'ALIENS' ? TEAM_ENL : TEAM_RES; var auto = json[2].plext.plextType !== 'PLAYER_GENERATED'; + var systemNarrowcast = json[2].plext.plextType === 'SYSTEM_NARROWCAST'; + + //remove "Your X on Y was destroyed by Z" from the faction channel + if (systemNarrowcast && !skipSecureMsgs) { + //NOTE: skipSecureMsgs is being used as a "is public channel" flag here + return true; + } + var msg = '', nick = '', pguid; $.each(json[2].plext.markup, function(ind, markup) { switch(markup[0]) { From 30549ea319d39ea1e3bcfd045c94c8de6ace17fb Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Thu, 4 Apr 2013 17:25:34 +0100 Subject: [PATCH 5/9] bump version number for published chat fix --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 61656625..c16effde 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ // ==UserScript== // @id ingress-intel-total-conversion@jonatkins // @name IITC: Ingress intel map total conversion -// @version 0.10.1.@@DATETIMEVERSION@@ +// @version 0.10.2.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ From e5e4a00589827c036ff5373a15c83d88c42cd59f Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Thu, 4 Apr 2013 23:04:00 +0100 Subject: [PATCH 6/9] faction chat data now includes messages about our own destroyed resonators, etc. these are filtered out for display therefore it makes sense to request more data in one go, as is done for the public chat --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index c16effde..cff6f108 100644 --- a/main.js +++ b/main.js @@ -129,7 +129,7 @@ window.VIEWPORT_PAD_RATIO = 0.3; // how many items to request each query window.CHAT_PUBLIC_ITEMS = 200; -window.CHAT_FACTION_ITEMS = 50; +window.CHAT_FACTION_ITEMS = 200; // how many pixels to the top before requesting new data window.CHAT_REQUEST_SCROLL_TOP = 200; window.CHAT_SHRINKED = 60; From 3a37667a7cdf00d2de5c671dd12a38593c12555f Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Fri, 5 Apr 2013 00:07:54 +0100 Subject: [PATCH 7/9] chat - oldest/newest timestamp handling rewrite this fixes an issue that, in theory, could have occured with the public chat fetching and over 200 sequential skipped ([secure]) messages. the recent change to skip SYSTEM_NARROWCAST for faction chat was much more likely to trigger the same issue also - lighten the red colour used in public chat - was almost impossible to read before - set the faction chat message count to 100 (it was 50, then bumpped to 200 briefly to work around chat issues) --- code/chat.js | 75 ++++++++++++++++++++++++---------------------------- main.js | 2 +- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/code/chat.js b/code/chat.js index e0053d14..420b2cf4 100644 --- a/code/chat.js +++ b/code/chat.js @@ -33,26 +33,12 @@ window.chat.handleTabCompletion = function() { } // -// timestamp and clear management +// clear management // -window.chat.getTimestamps = function(isFaction) { - var storage = isFaction ? chat._factionData : chat._publicData; - return $.map(storage, function(v, k) { return [v[0]]; }); -} - -window.chat.getOldestTimestamp = function(isFaction) { - var t = Math.min.apply(null, chat.getTimestamps(isFaction)); - return t === Infinity ? -1 : t; -} - -window.chat.getNewestTimestamp = function(isFaction) { - var t = Math.max.apply(null, chat.getTimestamps(isFaction)); - return t === -1*Infinity ? -1 : t; -} window.chat._oldBBox = null; -window.chat.genPostData = function(isFaction, getOlderMsgs) { +window.chat.genPostData = function(isFaction, storageHash, getOlderMsgs) { if(typeof isFaction !== 'boolean') throw('Need to know if public or faction chat.'); chat._localRangeCircle.setLatLng(map.getCenter()); @@ -68,8 +54,13 @@ window.chat.genPostData = function(isFaction, getOlderMsgs) { // need to reset these flags now because clearing will only occur // after the request is finished – i.e. there would be one almost // useless request. - chat._factionData = {}; - chat._publicData = {}; + chat._faction.data = {}; + chat._faction.oldestTimestamp = -1; + chat._faction.newestTimestamp = -1; + + chat._public.data = {}; + chat._public.oldestTimestamp = -1; + chat._public.newestTimestamp = -1; } chat._oldBBox = bbs; @@ -88,10 +79,10 @@ window.chat.genPostData = function(isFaction, getOlderMsgs) { if(getOlderMsgs) { // ask for older chat when scrolling up - data = $.extend(data, {maxTimestampMs: chat.getOldestTimestamp(isFaction)}); + data = $.extend(data, {maxTimestampMs: storageHash.oldestTimestamp}); } else { // ask for newer chat - var min = chat.getNewestTimestamp(isFaction); + var min = storageHash.newestTimestamp; // the inital request will have both timestamp values set to -1, // thus we receive the newest desiredNumItems. After that, we will // only receive messages with a timestamp greater or equal to min @@ -124,7 +115,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) { if(isIdle()) return renderUpdateStatus(); chat._requestFactionRunning = true; - var d = chat.genPostData(true, getOlderMsgs); + var d = chat.genPostData(true, chat._faction, getOlderMsgs); var r = window.postAjax( 'getPaginatedPlextsV2', d, @@ -138,7 +129,7 @@ window.chat.requestFaction = function(getOlderMsgs, isRetry) { } -window.chat._factionData = {}; +window.chat._faction = {data:{}, oldestTimestamp:-1, newestTimestamp:-1}; window.chat.handleFaction = function(data, textStatus, jqXHR) { chat._requestFactionRunning = false; @@ -149,11 +140,11 @@ window.chat.handleFaction = function(data, textStatus, jqXHR) { if(data.result.length === 0) return; - var old = chat.getOldestTimestamp(true); - chat.writeDataToHash(data, chat._factionData, false); - var oldMsgsWereAdded = old !== chat.getOldestTimestamp(true); + var old = chat._faction.oldestTimestamp; + chat.writeDataToHash(data, chat._faction, false); + var oldMsgsWereAdded = old !== chat._faction.oldestTimestamp; - runHooks('factionChatDataAvailable', {raw: data, processed: chat._factionData}); + runHooks('factionChatDataAvailable', {raw: data, processed: chat._faction.data}); window.chat.renderFaction(oldMsgsWereAdded); @@ -161,7 +152,7 @@ window.chat.handleFaction = function(data, textStatus, jqXHR) { } window.chat.renderFaction = function(oldMsgsWereAdded) { - chat.renderData(chat._factionData, 'chatfaction', oldMsgsWereAdded); + chat.renderData(chat._faction.data, 'chatfaction', oldMsgsWereAdded); } @@ -175,7 +166,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) { if(isIdle()) return renderUpdateStatus(); chat._requestPublicRunning = true; - var d = chat.genPostData(false, getOlderMsgs); + var d = chat.genPostData(false, chat._public, getOlderMsgs); var r = window.postAjax( 'getPaginatedPlextsV2', d, @@ -188,7 +179,7 @@ window.chat.requestPublic = function(getOlderMsgs, isRetry) { requests.add(r); } -window.chat._publicData = {}; +window.chat._public = {data:{}, oldestTimestamp:-1, newestTimestamp:-1}; window.chat.handlePublic = function(data, textStatus, jqXHR) { chat._requestPublicRunning = false; @@ -199,11 +190,11 @@ window.chat.handlePublic = function(data, textStatus, jqXHR) { if(data.result.length === 0) return; - var old = chat.getOldestTimestamp(false); - chat.writeDataToHash(data, chat._publicData, true); - var oldMsgsWereAdded = old !== chat.getOldestTimestamp(false); + var old = chat._public.oldestTimestamp; + chat.writeDataToHash(data, chat._public, true); + var oldMsgsWereAdded = old !== chat._public.oldestTimestamp; - runHooks('publicChatDataAvailable', {raw: data, processed: chat._publicData}); + runHooks('publicChatDataAvailable', {raw: data, processed: chat._public.data}); switch(chat.getActive()) { case 'public': window.chat.renderPublic(oldMsgsWereAdded); break; @@ -216,7 +207,7 @@ window.chat.handlePublic = function(data, textStatus, jqXHR) { window.chat.renderPublic = function(oldMsgsWereAdded) { // only keep player data - var data = $.map(chat._publicData, function(entry) { + var data = $.map(chat._public.data, function(entry) { if(!entry[1]) return [entry]; }); chat.renderData(data, 'chatpublic', oldMsgsWereAdded); @@ -224,7 +215,7 @@ window.chat.renderPublic = function(oldMsgsWereAdded) { window.chat.renderCompact = function(oldMsgsWereAdded) { var data = {}; - $.each(chat._publicData, function(guid, entry) { + $.each(chat._public.data, function(guid, entry) { // skip player msgs if(!entry[1]) return true; var pguid = entry[3]; @@ -239,7 +230,7 @@ window.chat.renderCompact = function(oldMsgsWereAdded) { window.chat.renderFull = function(oldMsgsWereAdded) { // only keep automatically generated data - var data = $.map(chat._publicData, function(entry) { + var data = $.map(chat._public.data, function(entry) { if(entry[1]) return [entry]; }); chat.renderData(data, 'chatfull', oldMsgsWereAdded); @@ -253,7 +244,7 @@ window.chat.renderFull = function(oldMsgsWereAdded) { window.chat.writeDataToHash = function(newData, storageHash, skipSecureMsgs) { $.each(newData.result, function(ind, json) { // avoid duplicates - if(json[0] in storageHash) return true; + if(json[0] in storageHash.data) return true; var skipThisEntry = false; var msgToPlayer = false; @@ -263,6 +254,10 @@ window.chat.writeDataToHash = function(newData, storageHash, skipSecureMsgs) { var auto = json[2].plext.plextType !== 'PLAYER_GENERATED'; var systemNarrowcast = json[2].plext.plextType === 'SYSTEM_NARROWCAST'; + //track oldest + newest timestamps + if (storageHash.oldestTimestamp === -1 || storageHash.oldestTimestamp > time) storageHash.oldestTimestamp = time; + if (storageHash.newestTimestamp === -1 || storageHash.newestTimestamp < time) storageHash.newestTimestamp = time; + //remove "Your X on Y was destroyed by Z" from the faction channel if (systemNarrowcast && !skipSecureMsgs) { //NOTE: skipSecureMsgs is being used as a "is public channel" flag here @@ -320,7 +315,7 @@ window.chat.writeDataToHash = function(newData, storageHash, skipSecureMsgs) { if(skipThisEntry) return true; // format: timestamp, autogenerated, HTML message, player guid - storageHash[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer), pguid]; + storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer), pguid]; window.setPlayerName(pguid, nick); // free nick name resolves }); @@ -468,8 +463,8 @@ window.chat.chooser = function(event) { break; case 'public': - input.css('cssText', 'color: red !important'); - mark.css('cssText', 'color: red !important'); + input.css('cssText', 'color: #f66 !important'); + mark.css('cssText', 'color: #f66 !important'); mark.text('broadcast:'); break; diff --git a/main.js b/main.js index cff6f108..ddb3c0b1 100644 --- a/main.js +++ b/main.js @@ -129,7 +129,7 @@ window.VIEWPORT_PAD_RATIO = 0.3; // how many items to request each query window.CHAT_PUBLIC_ITEMS = 200; -window.CHAT_FACTION_ITEMS = 200; +window.CHAT_FACTION_ITEMS = 100; // how many pixels to the top before requesting new data window.CHAT_REQUEST_SCROLL_TOP = 200; window.CHAT_SHRINKED = 60; From 1d55fc5d31c46af890e4c3b400b801910d137273 Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Fri, 5 Apr 2013 00:11:18 +0100 Subject: [PATCH 8/9] bump version number, for further chat fixes --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index ddb3c0b1..3b8a0fda 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ // ==UserScript== // @id ingress-intel-total-conversion@jonatkins // @name IITC: Ingress intel map total conversion -// @version 0.10.2.@@DATETIMEVERSION@@ +// @version 0.10.3.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ From a2a9d3458d19e81a06eb67a21d49e72d16b8d7ea Mon Sep 17 00:00:00 2001 From: Jon Atkins Date: Fri, 5 Apr 2013 00:36:38 +0100 Subject: [PATCH 9/9] add highlight to SYSTEM_NARROWCAST (your X on Y was destroyed by Z) messages --- code/chat.js | 10 +++++++--- style.css | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/chat.js b/code/chat.js index 420b2cf4..67c23ed8 100644 --- a/code/chat.js +++ b/code/chat.js @@ -315,7 +315,7 @@ window.chat.writeDataToHash = function(newData, storageHash, skipSecureMsgs) { if(skipThisEntry) return true; // format: timestamp, autogenerated, HTML message, player guid - storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer), pguid]; + storageHash.data[json[0]] = [json[1], auto, chat.renderMsg(msg, nick, time, team, msgToPlayer, systemNarrowcast), pguid]; window.setPlayerName(pguid, nick); // free nick name resolves }); @@ -365,14 +365,18 @@ window.chat.renderDivider = function(text) { } -window.chat.renderMsg = function(msg, nick, time, team, msgToPlayer) { +window.chat.renderMsg = function(msg, nick, time, team, msgToPlayer, systemNarrowcast) { var ta = unixTimeToHHmm(time); var tb = unixTimeToString(time, true); // help cursor via “#chat time” var t = ''; if ( msgToPlayer ) { - t = '
' + t + '
'; + t = '
' + t + '
'; + } + if (systemNarrowcast) + { + msg = '
' + msg + '
'; } var s = 'style="cursor:pointer; color:'+COLORS[team]+'"'; var title = nick.length >= 8 ? 'title="'+nick+'" class="help"' : ''; diff --git a/style.css b/style.css index 96ae1e92..d9feb73a 100644 --- a/style.css +++ b/style.css @@ -249,6 +249,10 @@ em { white-space: nowrap; } +#chat td .system_narrowcast { + color: #f66 !important; +} + mark { background: transparent; }