From 1a8d15d1c59efe4f5ddb7a9d7e1e08e5c06110a1 Mon Sep 17 00:00:00 2001 From: Julien Roncaglia Date: Tue, 9 Apr 2013 22:40:34 +0200 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 4/4] 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){