This commit is contained in:
Jon Atkins 2013-04-11 16:19:35 +01:00
commit 9b4eaaf4e8
4 changed files with 79 additions and 6 deletions

View File

@ -241,6 +241,14 @@ window.chat.renderFull = function(oldMsgsWereAdded) {
// common
//
window.chat.nicknameClicked = function(event, nickname) {
var hookData = { event: event, nickname: nickname };
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 += $('<div/>').html($('<span/>')
.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 = ['<span class="invisep">&lt;</span>', '<span class="invisep">&gt;</span>'];
return '<tr><td>'+t+'</td><td>'+i[0]+'<mark class="nickname" onclick="window.chat.addNickname(\'@' + nick + '\')" ' + s + '>'+ nick+'</mark>'+i[1]+'</td><td>'+msg+'</td></tr>';
return '<tr><td>'+t+'</td><td>'+i[0]+'<mark class="nickname" onclick="window.chat.nicknameClicked(event, \'' + nick + '\')" ' + s + '>'+ nick+'</mark>'+i[1]+'</td><td>'+msg+'</td></tr>';
}
window.chat.addNickname= function(nick){

View File

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

View File

@ -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;
if(!_hooks[event]) return true;
var interupted = false;
$.each(_hooks[event], function(ind, callback) {
callback(data);
if (callback(data) === false) {
interupted = true;
return false;
}
});
return !interupted;
}

View File

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