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