From 1a8d15d1c59efe4f5ddb7a9d7e1e08e5c06110a1 Mon Sep 17 00:00:00 2001 From: Julien Roncaglia Date: Tue, 9 Apr 2013 22:40:34 +0200 Subject: [PATCH 01/27] Add 2 new hooks: geoSearch and nicknameClicked For both of them returning false will interupt the default action 'geoSearch' is called when something is entered in the search box. The argument is the string entered in the search box 'nicknameClicked' is called when a nickname is cliked. The argument is an object with 2 properties: - 'event' contain the standard event object - 'nickname' contain the nick of the user --- code/chat.js | 13 +++++++++++-- code/geosearch.js | 9 ++++++++- code/hooks.js | 10 ++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/code/chat.js b/code/chat.js index ccdb0fbd..92dc8173 100644 --- a/code/chat.js +++ b/code/chat.js @@ -241,6 +241,14 @@ window.chat.renderFull = function(oldMsgsWereAdded) { // common // +window.chat.nicknameClicked = function(event, nickname) { + var hookData = { event: event, nickname: nickname.replace(/^@/, '') }; + + if (window.runHooks('nicknameClicked', hookData)) { + window.chat.addNickname(nickname); + } +} + window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel) { $.each(newData.result, function(ind, json) { // avoid duplicates @@ -283,9 +291,10 @@ window.chat.writeDataToHash = function(newData, storageHash, isPublicChannel) { case 'AT_PLAYER': var thisToPlayer = (markup[1].plain == ('@'+window.PLAYER.nickname)); var spanClass = thisToPlayer ? "pl_nudge_me" : (markup[1].team + " pl_nudge_player"); + var atPlayerName = markup[1].plain.replace(/^@/, ""); msg += $('
').html($('') .attr('class', spanClass) - .attr('onclick',"window.chat.addNickname('"+markup[1].plain+"')") + .attr('onclick',"window.chat.nicknameClicked(event, '"+atPlayerName+"')") .text(markup[1].plain)).html(); msgToPlayer = msgToPlayer || thisToPlayer; break; @@ -401,7 +410,7 @@ window.chat.renderMsg = function(msg, nick, time, team, msgToPlayer, systemNarro var s = 'style="cursor:pointer; color:'+color+'"'; var title = nick.length >= 8 ? 'title="'+nick+'" class="help"' : ''; var i = ['<', '>']; - return ''+t+''+i[0]+''+ nick+''+i[1]+''+msg+''; + return ''+t+''+i[0]+''+ nick+''+i[1]+''+msg+''; } window.chat.addNickname= function(nick){ diff --git a/code/geosearch.js b/code/geosearch.js index 4e5df1b7..0f8f5776 100644 --- a/code/geosearch.js +++ b/code/geosearch.js @@ -4,7 +4,14 @@ window.setupGeosearch = function() { $('#geosearch').keypress(function(e) { if((e.keyCode ? e.keyCode : e.which) != 13) return; - $.getJSON(NOMINATIM + encodeURIComponent($(this).val()), function(data) { + + var search = $(this).val(); + + if (!runHooks('geoSearch', search)) { + return; + } + + $.getJSON(NOMINATIM + encodeURIComponent(search), function(data) { if(!data || !data[0]) return; var b = data[0].boundingbox; if(!b) return; diff --git a/code/hooks.js b/code/hooks.js index 435792db..84013e28 100644 --- a/code/hooks.js +++ b/code/hooks.js @@ -59,15 +59,21 @@ window._hooks = {} window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated', 'publicChatDataAvailable', 'factionChatDataAvailable', 'portalDataLoaded', - 'beforePortalReRender', 'checkRenderLimit', 'requestFinished']; + 'beforePortalReRender', 'checkRenderLimit', 'requestFinished', 'nicknameClicked', + 'geoSearch']; window.runHooks = function(event, data) { if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event); if(!_hooks[event]) return; + var interupted = false; $.each(_hooks[event], function(ind, callback) { - callback(data); + if (callback(data) === false) { + interupted = true; + return false; + } }); + return !interupted; } From 1f2fa7ac84aadf1f557df07c6fbeb8fc1d4b7796 Mon Sep 17 00:00:00 2001 From: Julien Roncaglia Date: Tue, 9 Apr 2013 22:44:16 +0200 Subject: [PATCH 02/27] Add a find by name feature to player-tracker It search for an user name and if the user is found, center the map on it's last known position. The feature can be triggered by: - Entering the user nickname in the search box preceded by '@' - Ctrl+Clicking on an user name in the chat --- plugins/player-tracker.user.js | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/plugins/player-tracker.user.js b/plugins/player-tracker.user.js index 3dd37476..1ba99cd3 100644 --- a/plugins/player-tracker.user.js +++ b/plugins/player-tracker.user.js @@ -62,6 +62,8 @@ window.plugin.playerTracker.setup = function() { window.plugin.playerTracker.zoomListener(); }); window.plugin.playerTracker.zoomListener(); + + plugin.playerTracker.setupUserSearch(); } window.plugin.playerTracker.stored = {}; @@ -341,8 +343,57 @@ window.plugin.playerTracker.handleData = function(data) { plugin.playerTracker.drawData(); } +window.plugin.playerTracker.findUserPosition = function(nick) { + nick = nick.toLowerCase(); + var foundPlayerData = undefined; + $.each(plugin.playerTracker.stored, function(pguid, playerData) { + if (playerData.nick.toLowerCase() === nick) { + foundPlayerData = playerData; + return false; + } + }); + + if (!foundPlayerData) { + return false; + } + + var evtsLength = foundPlayerData.events.length; + var last = foundPlayerData.events[evtsLength-1]; + return plugin.playerTracker.getLatLngFromEvent(last); +} +window.plugin.playerTracker.centerMapOnUser = function(nick) { + var position = plugin.playerTracker.findUserPosition(nick); + + if (position === false) { + return false; + } + + map.setView(position, map.getZoom()); +} +window.plugin.playerTracker.onNicknameClicked = function(info) { + if (info.event.ctrlKey) { + plugin.playerTracker.centerMapOnUser(info.nickname); + return false; + } +} + +window.plugin.playerTracker.onGeoSearch = function(search) { + if (/^@/.test(search)) { + plugin.playerTracker.centerMapOnUser(search.replace(/^@/, '')); + return false; + } +} + +window.plugin.playerTracker.setupUserSearch = function() { + addHook('nicknameClicked', window.plugin.playerTracker.onNicknameClicked); + addHook('geoSearch', window.plugin.playerTracker.onGeoSearch); + + var geoSearch = $('#geosearch'); + var beforeEllipsis = /(.*)…/.exec(geoSearch.attr('placeholder'))[1]; + geoSearch.attr('placeholder', beforeEllipsis + ' or @player…'); +} var setup = plugin.playerTracker.setup; From c6118a47c23ae9c35a17cb4c45cabfbdd9108f22 Mon Sep 17 00:00:00 2001 From: Julien Roncaglia Date: Wed, 10 Apr 2013 07:10:29 +0200 Subject: [PATCH 03/27] Fix click on player name in chat doing nothing It only worked when player tracker wasn't installed --- code/hooks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/hooks.js b/code/hooks.js index 84013e28..04ca1fd7 100644 --- a/code/hooks.js +++ b/code/hooks.js @@ -65,7 +65,7 @@ window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated', window.runHooks = function(event, data) { if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event); - if(!_hooks[event]) return; + if(!_hooks[event]) return true; var interupted = false; $.each(_hooks[event], function(ind, callback) { if (callback(data) === false) { From f13985b1f9ba1092843aed36293609a527301759 Mon Sep 17 00:00:00 2001 From: Julien Roncaglia Date: Wed, 10 Apr 2013 07:14:09 +0200 Subject: [PATCH 04/27] Fix clicking on cited player name inserting the nickname without '@' in the chat --- code/chat.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/chat.js b/code/chat.js index 92dc8173..04796de1 100644 --- a/code/chat.js +++ b/code/chat.js @@ -242,10 +242,10 @@ window.chat.renderFull = function(oldMsgsWereAdded) { // window.chat.nicknameClicked = function(event, nickname) { - var hookData = { event: event, nickname: nickname.replace(/^@/, '') }; + var hookData = { event: event, nickname: nickname }; if (window.runHooks('nicknameClicked', hookData)) { - window.chat.addNickname(nickname); + window.chat.addNickname('@' + nickname); } } @@ -410,7 +410,7 @@ window.chat.renderMsg = function(msg, nick, time, team, msgToPlayer, systemNarro var s = 'style="cursor:pointer; color:'+color+'"'; var title = nick.length >= 8 ? 'title="'+nick+'" class="help"' : ''; var i = ['<', '>']; - return ''+t+''+i[0]+''+ nick+''+i[1]+''+msg+''; + return ''+t+''+i[0]+''+ nick+''+i[1]+''+msg+''; } window.chat.addNickname= function(nick){ From 15ea225d109a53a5bee985c2c492428ad5b78b18 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 10 Apr 2013 03:49:23 -0700 Subject: [PATCH 05/27] Fix url links for zoom, add ll param support from stock intel link button --- code/location.js | 13 ++++++++++--- code/utils_misc.js | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/location.js b/code/location.js index 2860a9a5..efa85586 100644 --- a/code/location.js +++ b/code/location.js @@ -21,11 +21,18 @@ window.storeMapPosition = function() { // returns a map that shows the whole world. window.getPosition = function() { if(getURLParam('latE6') && getURLParam('lngE6')) { - console.log("mappos: reading URL params"); + console.log("mappos: reading email URL params"); var lat = parseInt(getURLParam('latE6'))/1E6 || 0.0; var lng = parseInt(getURLParam('lngE6'))/1E6 || 0.0; - // google seems to zoom in far more than leaflet - var z = parseInt(getURLParam('z'))+1 || 17; + var z = parseInt(getURLParam('z')) || 17; + return {center: new L.LatLng(lat, lng), zoom: z > 18 ? 18 : z}; + } + + if(getURLParam('ll')) { + console.log("mappos: reading stock Intel URL params"); + var lat = parseFloat(getURLParam('ll').split(",")[0]) || 0.0; + var lng = parseFloat(getURLParam('ll').split(",")[1]) || 0.0; + var z = parseInt(getURLParam('z')) || 17; return {center: new L.LatLng(lat, lng), zoom: z > 18 ? 18 : z}; } diff --git a/code/utils_misc.js b/code/utils_misc.js index f97ffdf6..51e61030 100644 --- a/code/utils_misc.js +++ b/code/utils_misc.js @@ -257,7 +257,7 @@ window.setPermaLink = function(elm) { var c = map.getCenter(); var lat = Math.round(c.lat*1E6); var lng = Math.round(c.lng*1E6); - var qry = 'latE6='+lat+'&lngE6='+lng+'&z=' + (map.getZoom()-1); + var qry = 'latE6='+lat+'&lngE6='+lng+'&z=' + map.getZoom(); $(elm).attr('href', '/intel?' + qry); } From f2df5643f965487cd91d66ddc4e7a5c7b6ee50bd Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 10 Apr 2013 05:33:43 -0700 Subject: [PATCH 06/27] Adds an optional callback function to alerts when being closed --- code/boot.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/boot.js b/code/boot.js index 5cab4e63..38b9b250 100644 --- a/code/boot.js +++ b/code/boot.js @@ -291,12 +291,13 @@ window.setupDialogs = function() { autoOpen: false, modal: true, buttons: [ - { text: 'OK', click: function() { $(this).dialog('close'); } } + { text: 'OK', click: function() { if($(this).data("closeCallback")) {$(this).data("closeCallback")();} $(this).dialog('close'); } } ] }); - window.alert = function(text, isHTML) { + window.alert = function(text, isHTML, closeCallback) { var h = isHTML ? text : window.convertTextToTableMagic(text); + $('#dialog').data("closeCallback", closeCallback); $('#dialog').html(h).dialog('open'); } } From 19a42b7c24615ecff68f052e80dee10414a8fe4e Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 10 Apr 2013 05:36:33 -0700 Subject: [PATCH 07/27] Fix plugins that use alert with css styling, remove unused divs in body --- plugins/portal-counts.user.js | 3 +-- plugins/portals-list.user.js | 5 ++--- plugins/scoreboard.user.js | 5 ++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/portal-counts.user.js b/plugins/portal-counts.user.js index fe8387b3..2a40807f 100644 --- a/plugins/portal-counts.user.js +++ b/plugins/portal-counts.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @id iitc-plugin-portals-count@yenky // @name IITC plugin: Show total counts of portals -// @version 0.0.6.@@DATETIMEVERSION@@ +// @version 0.0.7.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -99,7 +99,6 @@ window.plugin.portalcounts.getPortals = function(){ } var setup = function() { - $('body').append(''); $('#toolbox').append('Portalcounts'); $('head').append('