Merge branch 'master' of github.com:jonatkins/ingress-intel-total-conversion

This commit is contained in:
Philipp Schaefer
2013-11-09 15:24:24 +01:00
3 changed files with 82 additions and 34 deletions

View File

@ -65,12 +65,14 @@ window.plugin.playerTracker.setup = function() {
plugin.playerTracker.oms = new OverlappingMarkerSpiderfier(map, {keepSpiderfied: true, legWeight: 3.5}); plugin.playerTracker.oms = new OverlappingMarkerSpiderfier(map, {keepSpiderfied: true, legWeight: 3.5});
plugin.playerTracker.oms.legColors = {'usual': '#FFFF00', 'highlighted': '#FF0000'}; plugin.playerTracker.oms.legColors = {'usual': '#FFFF00', 'highlighted': '#FF0000'};
var playerPopup = new L.Popup({offset: L.point([0,-20])}); var playerPopup = new L.Popup({offset: L.point([1,-34])});
plugin.playerTracker.oms.addListener('click', function(player) { plugin.playerTracker.oms.addListener('click', function(player) {
window.renderPortalDetails(player.options.referenceToPortal); window.renderPortalDetails(player.options.referenceToPortal);
playerPopup.setContent(player.options.desc); if (player.options.desc) {
playerPopup.setLatLng(player.getLatLng()); playerPopup.setContent(player.options.desc);
map.openPopup(playerPopup) playerPopup.setLatLng(player.getLatLng());
map.openPopup(playerPopup);
}
}); });
plugin.playerTracker.oms.addListener('spiderfy', function(markers) { plugin.playerTracker.oms.addListener('spiderfy', function(markers) {
map.closePopup(); map.closePopup();
@ -257,6 +259,8 @@ window.plugin.playerTracker.ago = function(time, now) {
} }
window.plugin.playerTracker.drawData = function() { window.plugin.playerTracker.drawData = function() {
var isTouchDev = window.isTouchDevice();
var gllfe = plugin.playerTracker.getLatLngFromEvent; var gllfe = plugin.playerTracker.getLatLngFromEvent;
var polyLineByAgeEnl = [[], [], [], []]; var polyLineByAgeEnl = [[], [], [], []];
@ -284,42 +288,45 @@ window.plugin.playerTracker.drawData = function() {
polyLineByAgeEnl[ageBucket].push(line); polyLineByAgeEnl[ageBucket].push(line);
} }
// tooltip for marker - no HYML - and not shown on touchscreen devices
var tooltip = isTouchDev ? '' : playerData.nick;
// popup for marker // popup for marker
var evtsLength = playerData.events.length; var evtsLength = playerData.events.length;
var last = playerData.events[evtsLength-1]; var last = playerData.events[evtsLength-1];
var ago = plugin.playerTracker.ago; var ago = plugin.playerTracker.ago;
var cssClass = playerData.team === 'RESISTANCE' ? 'res' : 'enl'; var cssClass = playerData.team === 'RESISTANCE' ? 'res' : 'enl';
var title = '<span class="nickname '+ cssClass+'" style="font-weight:bold;">' + playerData.nick + '</span>'; var popup = '<span class="nickname '+ cssClass+'" style="font-weight:bold;">' + playerData.nick + '</span>';
if(window.plugin.guessPlayerLevels !== undefined && if(window.plugin.guessPlayerLevels !== undefined &&
window.plugin.guessPlayerLevels.fetchLevelByPlayer !== undefined) { window.plugin.guessPlayerLevels.fetchLevelByPlayer !== undefined) {
var playerLevel = window.plugin.guessPlayerLevels.fetchLevelByPlayer(pguid); var playerLevel = window.plugin.guessPlayerLevels.fetchLevelByPlayer(pguid);
if(playerLevel !== undefined) { if(playerLevel !== undefined) {
title += '<span style="font-weight:bold;margin-left:10px;">Level ' popup += '<span style="font-weight:bold;margin-left:10px;">Level '
+ playerLevel + playerLevel
+ ' (guessed)' + ' (guessed)'
+ '</span>'; + '</span>';
} else { } else {
title += '<span style="font-weight:bold;margin-left:10px;">Level unknown</span>' popup += '<span style="font-weight:bold;margin-left:10px;">Level unknown</span>'
} }
} }
title += '<br>' popup += '<br>'
+ ago(last.time, now) + ' ago<br>' + ago(last.time, now) + ' ago<br>'
+ window.chat.getChatPortalName(last); + window.chat.getChatPortalName(last);
// show previous data in tooltip // show previous data in tooltip
if(evtsLength >= 2) { if(evtsLength >= 2) {
title += '<br>&nbsp;<br>previous locations:<br>' popup += '<br>&nbsp;<br>previous locations:<br>'
+ '<table style="border-spacing:0">'; + '<table style="border-spacing:0">';
} }
for(var i = evtsLength - 2; i >= 0 && i >= evtsLength - 10; i--) { for(var i = evtsLength - 2; i >= 0 && i >= evtsLength - 10; i--) {
var ev = playerData.events[i]; var ev = playerData.events[i];
title += '<tr align="left"><td>' + ago(ev.time, now) + '</td>' popup += '<tr align="left"><td>' + ago(ev.time, now) + '</td>'
+ '<td>ago</td>' + '<td>ago</td>'
+ '<td>' + window.chat.getChatPortalName(ev) + '</td></tr>'; + '<td>' + window.chat.getChatPortalName(ev) + '</td></tr>';
} }
if(evtsLength >= 2) if(evtsLength >= 2)
title += '</table>'; popup += '</table>';
// calculate the closest portal to the player // calculate the closest portal to the player
var eventPortal = [] var eventPortal = []
@ -345,11 +352,16 @@ window.plugin.playerTracker.drawData = function() {
var icon = playerData.team === 'RESISTANCE' ? new plugin.playerTracker.iconRes() : new plugin.playerTracker.iconEnl(); var icon = playerData.team === 'RESISTANCE' ? new plugin.playerTracker.iconRes() : new plugin.playerTracker.iconEnl();
// as per OverlappingMarkerSpiderfier docs, click events (popups, etc) must be handled via it rather than the standard // 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 // 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}); var m = L.marker(gllfe(last), {icon: icon, referenceToPortal: closestPortal, opacity: absOpacity, desc: popup, title: tooltip});
// m.bindPopup(title); // m.bindPopup(title);
m.addTo(playerData.team === 'RESISTANCE' ? plugin.playerTracker.drawnTracesRes : plugin.playerTracker.drawnTracesEnl); m.addTo(playerData.team === 'RESISTANCE' ? plugin.playerTracker.drawnTracesRes : plugin.playerTracker.drawnTracesEnl);
plugin.playerTracker.oms.addMarker(m); plugin.playerTracker.oms.addMarker(m);
// jQueryUI doesnt automatically notice the new markers
if (!isTouchDev) {
window.setupTooltips($(m._icon));
}
}); });
// draw the poly lines to the map // draw the poly lines to the map

View File

@ -19,8 +19,6 @@ function getMobileVersion ( $apkfile )
$archive = $apkinfo->getApkArchive(); $archive = $apkinfo->getApkArchive();
$stream = $archive->getStream ( "assets/total-conversion-build.user.js" ); $stream = $archive->getStream ( "assets/total-conversion-build.user.js" );
if ( ! $stream )
$stream = $archive->getStream ( "assets/iitc.js" );
if ( $stream ) if ( $stream )
{ {

View File

@ -2,12 +2,13 @@
include_once "code/userscript.php"; include_once "code/userscript.php";
include_once "code/url/url_to_absolute.php"; include_once "code/url/url_to_absolute.php";
include_once "code/apk/ApkParser.php";
$response = Array(); $response = Array();
$build = $_REQUEST['build']; $build = $_REQUEST['build'];
$mobile = isset($_REQUEST['mobile']) && $_REQUEST['mobile'];
$details = Array ( $details = Array (
@ -15,23 +16,27 @@ $details = Array (
'path' => 'release', 'path' => 'release',
'name' => 'Stable release build', 'name' => 'Stable release build',
'web' => 'http://iitc.jonatkins.com/?page=download', 'web' => 'http://iitc.jonatkins.com/?page=download',
'mobileweb' => 'http://iitc.jonatkins.com/?page=mobile',
), ),
'jonatkins-test' => Array ( # public test builds 'jonatkins-test' => Array ( # public test builds
'path' => 'test', 'path' => 'test',
'name' => 'Test build', 'name' => 'Test build',
'web' => 'http://iitc.jonatkins.com/?page=test', 'web' => 'http://iitc.jonatkins.com/?page=test',
'mobileweb' => 'http://iitc.jonatkins.com/?page=test#test-mobile',
), ),
'jonatkins-experimental' => Array ( # rarely used, for features not quite ready for 'test' 'jonatkins-experimental' => Array ( # rarely used, for features not quite ready for 'test'
'path' => 'experimental', 'path' => 'experimental',
'name' => 'Experimental build', 'name' => 'Experimental build',
'web' => 'http://iitc.jonatkins.com/?page=test&build=experimental', 'web' => 'http://iitc.jonatkins.com/?page=test&build=experimental',
'mobileweb' => 'http://iitc.jonatkins.com/?page=test&build=experimental#test-mobild',
), ),
'jonatkins-dev' => Array ( # personal 'jonatkins-dev' => Array ( # personal
'path' => 'dev', 'path' => 'dev',
'name' => 'Development builds - not for public use', 'name' => 'Development builds - not for public use',
'web' => 'http://iitc.jonatkins.com/?page=test&build=dev', 'web' => 'http://iitc.jonatkins.com/?page=test&build=dev',
'mobileweb' => 'http://iitc.jonatkins.com/?page=test&build=dev#test-mobile',
), ),
'local' => Array ( # not a real build, but often the default for local development 'local' => Array ( # not a real build, but often the default for local development
@ -50,28 +55,61 @@ if ( array_key_exists ( $build, $details ) )
$dir = $info['path']; $dir = $info['path'];
// load main script version if ( $mobile )
$iitc_details = loadUserScriptHeader ( "$dir/total-conversion-build.user.js" );
$response['iitc'] = Array (
'version' => $iitc_details['@version'],
'downloadUrl' => url_to_absolute ( $pageurl, "$dir/total-conversion-build.user.js" ),
'pageUrl' => url_to_absolute ( $pageurl, $info['web'] ),
);
// and now the plugins
$response['plugins'] = Array();
foreach ( glob ( "$dir/plugins/*.user.js" ) as $path )
{ {
$basename = basename ( $path, ".user.js" ); $apkfile = $dir.'/IITC_Mobile-'.$dir.'.apk';
$details = loadUserScriptHeader ( $path ); if ( file_Exists ( $apkfile ) )
{
$apkinfo = new ApkParser ( $apkfile );
$manifest = $apkinfo->getManifest();
$response['plugins'][$basename] = Array ( $response['mobile'] = Array (
'version' => $details['@version'], 'versionstr' => $manifest->getVersionName(),
'downloadUrl' => url_to_absolute ( $pageurl, "$dir/plugins/$basename.user.js" ), 'versioncode' => $manifest->getVersionCode(),
'pageUrl' => url_to_absolute ( $pageurl, $info['web']."#plugin-$basename" ), 'downloadurl' => url_to_absolute ( $pageurl, $apkfile ),
'pageurl' => $info['mobileweb'],
);
$archive = $apkinfo->getApkArchive();
$stream = $archive->getStream ( "assets/total-conversion-build.user.js" );
if ( $stream )
{
$header = loadUserScriptHeader ( $stream );
$response['mobile']['iitc_version'] = $header['@version'];
}
}
else
{
$response['error'] = 'Failed to find .apk file '.$apkfile;
}
}
else
{
// desktop - .user.js scripts
// load main script version
$iitc_details = loadUserScriptHeader ( "$dir/total-conversion-build.user.js" );
$response['iitc'] = Array (
'version' => $iitc_details['@version'],
'downloadUrl' => url_to_absolute ( $pageurl, "$dir/total-conversion-build.user.js" ),
'pageUrl' => url_to_absolute ( $pageurl, $info['web'] ),
); );
// and now the plugins
$response['plugins'] = Array();
foreach ( glob ( "$dir/plugins/*.user.js" ) as $path )
{
$basename = basename ( $path, ".user.js" );
$details = loadUserScriptHeader ( $path );
$response['plugins'][$basename] = Array (
'version' => $details['@version'],
'downloadUrl' => url_to_absolute ( $pageurl, "$dir/plugins/$basename.user.js" ),
'pageUrl' => url_to_absolute ( $pageurl, $info['web']."#plugin-$basename" ),
);
}
} }
} }