diff --git a/plugins/player-tracker.user.js b/plugins/player-tracker.user.js index 20be22a4..f93cff87 100644 --- a/plugins/player-tracker.user.js +++ b/plugins/player-tracker.user.js @@ -2,7 +2,7 @@ // @id iitc-plugin-player-tracker@breunigs // @name IITC Plugin: Player tracker // @category Layer -// @version 0.9.6.@@DATETIMEVERSION@@ +// @version 0.10.0.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -62,12 +62,20 @@ window.plugin.playerTracker.setup = function() { }); } }); - plugin.playerTracker.oms = new OverlappingMarkerSpiderfier(map); + plugin.playerTracker.oms = new OverlappingMarkerSpiderfier(map, {keepSpiderfied: true, legWeight: 3.5}); plugin.playerTracker.oms.legColors = {'usual': '#FFFF00', 'highlighted': '#FF0000'}; - plugin.playerTracker.oms.legWeight = 3.5; + + var playerPopup = new L.Popup({offset: L.point([0,-20])}); plugin.playerTracker.oms.addListener('click', function(player) { window.renderPortalDetails(player.options.referenceToPortal); + playerPopup.setContent(player.options.desc); + playerPopup.setLatLng(player.getLatLng()); + map.openPopup(playerPopup) }); + plugin.playerTracker.oms.addListener('spiderfy', function(markers) { + map.closePopup(); + }); + addHook('publicChatDataAvailable', window.plugin.playerTracker.handleData); @@ -226,6 +234,7 @@ window.plugin.playerTracker.processNewData = function(data) { } window.plugin.playerTracker.getLatLngFromEvent = function(ev) { +//TODO? add weight to certain events, or otherwise prefer them, to give better locations? var lats = 0; var lngs = 0; $.each(ev.latlngs, function() { @@ -275,13 +284,13 @@ window.plugin.playerTracker.drawData = function() { polyLineByAgeEnl[ageBucket].push(line); } - // tooltip for marker + // popup for marker var evtsLength = playerData.events.length; var last = playerData.events[evtsLength-1]; var ago = plugin.playerTracker.ago; var cssClass = playerData.team === 'RESISTANCE' ? 'res' : 'enl'; var title = '' + playerData.nick + ''; - + if(window.plugin.guessPlayerLevels !== undefined && window.plugin.guessPlayerLevels.fetchLevelByPlayer !== undefined) { var playerLevel = window.plugin.guessPlayerLevels.fetchLevelByPlayer(pguid); @@ -298,7 +307,7 @@ window.plugin.playerTracker.drawData = function() { title += '
' + ago(last.time, now) + ' ago
' + window.chat.getChatPortalName(last); - // show previous data in tooltip + // show previous data in popup var minsAgo = '\t ago\t'; if(evtsLength >= 2) title += '
 
previous locations:
'; @@ -329,19 +338,13 @@ window.plugin.playerTracker.drawData = function() { // marker itself var icon = playerData.team === 'RESISTANCE' ? new plugin.playerTracker.iconRes() : new plugin.playerTracker.iconEnl(); - var m; - if (typeof android !== 'undefined' && android) { - m = L.marker(gllfe(last), {icon: icon, referenceToPortal: closestPortal, opacity: absOpacity}); - m.bindPopup(title); - } else { - m = L.marker(gllfe(last), {title: title, icon: icon, referenceToPortal: closestPortal, opacity: absOpacity}); - // ensure tooltips are closed, sometimes they linger - m.on('mouseout', function() { $(this._icon).tooltip('close'); }); - } +// as per OverlappingMarkerSpiderfier docs, click events (popups, etc) must be handled via it rather than the standard +// marker click events. so store the popup text in the options, then display it in the oms click handler + var m = L.marker(gllfe(last), {icon: icon, referenceToPortal: closestPortal, opacity: absOpacity, desc: title}); +// m.bindPopup(title); + m.addTo(playerData.team === 'RESISTANCE' ? plugin.playerTracker.drawnTracesRes : plugin.playerTracker.drawnTracesEnl); plugin.playerTracker.oms.addMarker(m); - // jQueryUI doesn’t automatically notice the new markers - window.setupTooltips($(m._icon)); }); // draw the poly lines to the map @@ -378,13 +381,6 @@ window.plugin.playerTracker.handleData = function(data) { plugin.playerTracker.discardOldData(); plugin.playerTracker.processNewData(data); - // remove old popups - plugin.playerTracker.drawnTracesEnl.eachLayer(function(layer) { - if(layer._icon) $(layer._icon).tooltip('destroy'); - }); - plugin.playerTracker.drawnTracesRes.eachLayer(function(layer) { - if(layer._icon) $(layer._icon).tooltip('destroy'); - }); plugin.playerTracker.oms.clearMarkers(); plugin.playerTracker.drawnTracesEnl.clearLayers(); plugin.playerTracker.drawnTracesRes.clearLayers();