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