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; }