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
This commit is contained in:
Julien Roncaglia 2013-04-09 22:44:16 +02:00
parent 1a8d15d1c5
commit 1f2fa7ac84

View File

@ -62,6 +62,8 @@ window.plugin.playerTracker.setup = function() {
window.plugin.playerTracker.zoomListener(); window.plugin.playerTracker.zoomListener();
}); });
window.plugin.playerTracker.zoomListener(); window.plugin.playerTracker.zoomListener();
plugin.playerTracker.setupUserSearch();
} }
window.plugin.playerTracker.stored = {}; window.plugin.playerTracker.stored = {};
@ -341,8 +343,57 @@ window.plugin.playerTracker.handleData = function(data) {
plugin.playerTracker.drawData(); 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; var setup = plugin.playerTracker.setup;