From c75caa91dd0f89bf520e8640eb6b54beb8698f55 Mon Sep 17 00:00:00 2001 From: Xelio Date: Thu, 28 Feb 2013 14:40:35 +0800 Subject: [PATCH 01/10] Fix flicker portal in portal render limit handler Change: Extract portal handle process from "handleDataResponse" to "handlePortalData" Add "action" property to object returned by $.ajax() to identity type of request Delay low level portal render until no active request of map data. --- code/map_data.js | 33 ++++++++----- code/portal_render_limit.js | 93 +++++++++++++++++++++++++++++++++++-- code/utils_misc.js | 4 +- 3 files changed, 113 insertions(+), 17 deletions(-) diff --git a/code/map_data.js b/code/map_data.js index 363240c4..300be338 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -49,7 +49,7 @@ window.requestData = function() { $.each(tiles, function(ind, tls) { data = { minLevelOfDetail: -1 }; data.boundsParamsList = tls; - window.requests.add(window.postAjax('getThinnedEntitiesV2', data, window.handleDataResponse)); + window.requests.add(window.postAjax('getThinnedEntitiesV2', data, window.handleDataResponse, portalRenderLimit.handleFailRequest)); }); } @@ -59,11 +59,10 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { if(!data || !data.result) { window.failedRequestCount++; console.warn(data); + portalRenderLimit.handleFailRequest(); return; } - var portalUpdateAvailable = false; - var portalInUrlAvailable = false; var m = data.result.map; // defer rendering of portals because there is no z-index in SVG. // this means that what’s rendered last ends up on top. While the @@ -72,8 +71,6 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { // https://github.com/Leaflet/Leaflet/issues/185 var ppp = []; var p2f = {}; - // Reset new portals count of Portal Render Limit handler - portalRenderLimit.resetCounting(); $.each(m, function(qk, val) { $.each(val.deletedGameEntityGuids, function(ind, guid) { if(getTypeByGuid(guid) === TYPE_FIELD && window.fields[guid] !== undefined) { @@ -92,8 +89,6 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { // format for portals: { controllingTeam, turret } if(ent[2].turret !== undefined) { - if(selectedPortal === ent[0]) portalUpdateAvailable = true; - if(urlPortal && ent[0] == urlPortal) portalInUrlAvailable = true; var latlng = [ent[2].locationE6.latE6/1E6, ent[2].locationE6.lngE6/1E6]; if(!window.getPaddedBounds().contains(latlng) @@ -102,7 +97,7 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { ) return; - portalRenderLimit.pushPortal(ent); + ppp.push(ent); // delay portal render } else if(ent[2].edge !== undefined) { renderLink(ent); @@ -118,7 +113,7 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { } }); }); - + $.each(ppp, function(ind, portal) { if(portal[2].portalV2['linkedFields'] === undefined) { portal[2].portalV2['linkedFields'] = []; @@ -128,12 +123,28 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { portal[2].portalV2['linkedFields'] = uniqueArray(p2f[portal[0]]); } }); + + // Process the portals with portal render limit handler first + ppp = portalRenderLimit.processPortals(ppp); + handlePortalData(ppp); + + resolvePlayerNames(); + renderUpdateStatus(); +} + +window.handlePortalData = function(ppp) { + var portalUpdateAvailable = false; + var portalInUrlAvailable = false; // Preserve and restore "selectedPortal" between portal re-render if(portalUpdateAvailable) var oldSelectedPortal = selectedPortal; runHooks('portalDataLoaded', {portals : ppp}); - $.each(ppp, function(ind, portal) { renderPortal(portal); }); + $.each(ppp, function(ind, portal) { + if(selectedPortal === portal[0]) portalUpdateAvailable = true; + if(urlPortal && portal[0] == urlPortal) portalInUrlAvailable = true; + renderPortal(portal); + }); var selectedPortalLayer = portals[oldSelectedPortal]; if(portalUpdateAvailable && selectedPortalLayer) selectedPortal = oldSelectedPortal; @@ -150,8 +161,6 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { } if(portalUpdateAvailable) renderPortalDetails(selectedPortal); - resolvePlayerNames(); - renderUpdateStatus(); } // removes entities that are still handled by Leaflet, although they diff --git a/code/portal_render_limit.js b/code/portal_render_limit.js index 58961023..f80bd7b9 100644 --- a/code/portal_render_limit.js +++ b/code/portal_render_limit.js @@ -3,9 +3,22 @@ // Functions to handle hiding low level portal when portal render // limit is reached. // -// After initialized and reset in window.requestData(), portals in -// response data will pass to function "pushPortal". Each new portal -// not on the map will add 1 to newPortalsPerLevel[portal level]. +// On initialization, previous minLevel will preserve to previousMinLevel +// with zoom level difference. +// +// After initialized and reset in window.requestData(), "processPortals" +// intercept all portals data in "handleDataResponse". Put the count of +// new portals to newPortalsPerLevel[portal level]. And split portals +// into two parts base on previousMinLevel. Portals with level >= +// previousMinLevel will return as result and continue to render. +// Others will save to portalsPreviousMinLevel. If there is no more +// active request of map data, portals will not split and +// portalsPreviousMinLevel will add back to result and render base on +// current minLevel. +// +// "handleFailRequest" is added to handle the case when the last request +// failed and "processPortals" didn't get called. It will get +// portalsPreviousMinLevel base on current minLevel and render them. // // "getMinLevel" will be called by "getMinPortalLevel" in utils_misc.js // to determine min portal level to draw on map. @@ -28,12 +41,25 @@ window.portalRenderLimit = function() {} window.portalRenderLimit.initialized = false; window.portalRenderLimit.minLevelSet = false; window.portalRenderLimit.minLevel = -1; +window.portalRenderLimit.previousMinLevel = -1; +window.portalRenderLimit.previousZoomLevel; window.portalRenderLimit.newPortalsPerLevel = new Array(MAX_PORTAL_LEVEL + 1); +window.portalRenderLimit.portalsPreviousMinLevel = new Array(MAX_PORTAL_LEVEL + 1); window.portalRenderLimit.init = function () { + var currentZoomLevel = map.getZoom(); + if(!portalRenderLimit.previousZoomLevel) portalRenderLimit.previousZoomLevel = currentZoomLevel; + if(portalRenderLimit.minLevelSet) { + var zoomDiff = currentZoomLevel - portalRenderLimit.previousZoomLevel; + portalRenderLimit.previousMinLevel = Math.max(portalRenderLimit.minLevel - zoomDiff, -1); + portalRenderLimit.previousMinLevel = Math.min(portalRenderLimit.previousMinLevel, MAX_PORTAL_LEVEL); + } + portalRenderLimit.previousZoomLevel = currentZoomLevel; + portalRenderLimit.initialized = true; portalRenderLimit.minLevel = -1; portalRenderLimit.resetCounting(); + portalRenderLimit.resetPortalsPreviousMinLevel(); } window.portalRenderLimit.resetCounting = function() { @@ -43,7 +69,45 @@ window.portalRenderLimit.resetCounting = function() { } } -window.portalRenderLimit.pushPortal = function(ent) { +window.portalRenderLimit.resetPortalsPreviousMinLevel = function() { + for(var i = 0; i <= MAX_PORTAL_LEVEL; i++) { + portalRenderLimit.portalsPreviousMinLevel[i] = new Array(); + } +} + +window.portalRenderLimit.processPortals = function(ppp) { + portalRenderLimit.resetCounting(); + var resultPortals = new Array(); + + $.each(ppp, function(ind, portal) { + portalRenderLimit.countPortal(portal); + + if(!portalRenderLimit.isLastRequest()) { + var portalLevel = parseInt(getPortalLevel(portal[2])); + if(portalLevel < portalRenderLimit.previousMinLevel) { + portalRenderLimit.portalsPreviousMinLevel[portalLevel].push(portal); + }else{ + resultPortals.push(portal); + } + } + }); + + if(portalRenderLimit.isLastRequest()) { + resultPortals = portalRenderLimit.getLowLevelPortals(ppp); + portalRenderLimit.resetPortalsPreviousMinLevel(); + } + return resultPortals; +} + +window.portalRenderLimit.handleFailRequest = function() { + if(portalRenderLimit.isLastRequest()) { + var ppp = portalRenderLimit.getLowLevelPortals(null); + portalRenderLimit.resetPortalsPreviousMinLevel(); + handlePortalData(ppp); + } +} + +window.portalRenderLimit.countPortal = function(ent) { var portalGuid = ent[0]; var portalLevel = parseInt(getPortalLevel(ent[2])); var layerGroup = portalsLayers[portalLevel]; @@ -52,6 +116,27 @@ window.portalRenderLimit.pushPortal = function(ent) { portalRenderLimit.newPortalsPerLevel[portalLevel]++; } +window.portalRenderLimit.getLowLevelPortals = function(appendTo) { + var resultPortals = appendTo ? appendTo : new Array(); + for(var i = portalRenderLimit.getMinLevel(); + i < portalRenderLimit.previousMinLevel; + i++) { + $.merge(resultPortals, portalRenderLimit.portalsPreviousMinLevel[i]); + } + return resultPortals; +} + +window.portalRenderLimit.isLastRequest = function() { + var result = true; + $.each(window.activeRequests, function(ind, req) { + if(req.action === 'getThinnedEntitiesV2') { + result = false; + return false; + } + }); + return result; +} + window.portalRenderLimit.getMinLevel = function() { if(!portalRenderLimit.initialized) return -1; if(!portalRenderLimit.minLevelSet) portalRenderLimit.setMinLevel(); diff --git a/code/utils_misc.js b/code/utils_misc.js index 1e5e0a87..451d565e 100644 --- a/code/utils_misc.js +++ b/code/utils_misc.js @@ -58,7 +58,7 @@ window.postAjax = function(action, data, success, error) { data = JSON.stringify($.extend({method: 'dashboard.'+action}, data)); var remove = function(data, textStatus, jqXHR) { window.requests.remove(jqXHR); }; var errCnt = function(jqXHR) { window.failedRequestCount++; window.requests.remove(jqXHR); }; - return $.ajax({ + var result = $.ajax({ // use full URL to avoid issues depending on how people set their // slash. See: // https://github.com/breunigs/ingress-intel-total-conversion/issues/56 @@ -73,6 +73,8 @@ window.postAjax = function(action, data, success, error) { req.setRequestHeader('X-CSRFToken', readCookie('csrftoken')); } }); + result.action = action; + return result; } // converts unix timestamps to HH:mm:ss format if it was today; From 32ca78b1d784539205b83cd2c1f30e786771a3d7 Mon Sep 17 00:00:00 2001 From: Cameron Moon Date: Fri, 1 Mar 2013 13:31:13 +1100 Subject: [PATCH 02/10] Added sign out link when hovering over name (fixes #352) --- code/boot.js | 11 ++++++++++- style.css | 17 +++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/code/boot.js b/code/boot.js index fcb76729..7e5882a2 100644 --- a/code/boot.js +++ b/code/boot.js @@ -186,13 +186,22 @@ window.setupPlayerStat = function() { $('#playerstat').html('' + '

'+level+' ' + + '
' + ''+PLAYER.nickname+'' - + '
' + + 'sign out' + + '
' + + '
' + 'XM: '+xmRatio+'%' + '' + (level < 8 ? 'level: '+lvlApProg+'%' : 'max level') + '' + '
' + '

' ); + + $('#name').mouseenter(function() { + $('#signout').show(); + }).mouseleave(function() { + $('#signout').hide(); + }); } window.setupSidebarToggle = function() { diff --git a/style.css b/style.css index d4e30170..4863ee34 100644 --- a/style.css +++ b/style.css @@ -329,21 +329,34 @@ h2 { width: 100%; } -h2 span { +h2 #name { display: inline-block; overflow: hidden; text-overflow: "~"; vertical-align: top; white-space: nowrap; width: 205px; + position: relative; } -h2 div { +h2 #stats { float: right; height: 100%; overflow: hidden; } +h2 #signout { + font-size: 12px; + font-weight: normal; + line-height: 29px; + padding: 0 4px; + position: absolute; + top: 0; + right: 0; + background-color: rgba(8, 48, 78, 0.5); + display: none; /* starts hidden */ +} + h2 sup, h2 sub { display: block; font-size: 11px; From c9d7300a052114b491e49879d539ffe3fca98b78 Mon Sep 17 00:00:00 2001 From: Xelio Date: Fri, 1 Mar 2013 13:57:35 +0800 Subject: [PATCH 03/10] Code Restructure --- code/map_data.js | 11 +++--- code/portal_render_limit.js | 70 +++++++++++++++++++++---------------- 2 files changed, 45 insertions(+), 36 deletions(-) diff --git a/code/map_data.js b/code/map_data.js index 300be338..c620e404 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -125,22 +125,23 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { }); // Process the portals with portal render limit handler first - ppp = portalRenderLimit.processPortals(ppp); - handlePortalData(ppp); + // Low level portal will hold until last request + var newPpp = portalRenderLimit.splitOrMergeLowLevelPortals(ppp); + handlePortalData(newPpp); resolvePlayerNames(); renderUpdateStatus(); } -window.handlePortalData = function(ppp) { +window.handlePortalData = function(portals) { var portalUpdateAvailable = false; var portalInUrlAvailable = false; // Preserve and restore "selectedPortal" between portal re-render if(portalUpdateAvailable) var oldSelectedPortal = selectedPortal; - runHooks('portalDataLoaded', {portals : ppp}); - $.each(ppp, function(ind, portal) { + runHooks('portalDataLoaded', {portals : portals}); + $.each(portals, function(ind, portal) { if(selectedPortal === portal[0]) portalUpdateAvailable = true; if(urlPortal && portal[0] == urlPortal) portalInUrlAvailable = true; renderPortal(portal); diff --git a/code/portal_render_limit.js b/code/portal_render_limit.js index f80bd7b9..a726e729 100644 --- a/code/portal_render_limit.js +++ b/code/portal_render_limit.js @@ -48,14 +48,17 @@ window.portalRenderLimit.portalsPreviousMinLevel = new Array(MAX_PORTAL_LEVEL + window.portalRenderLimit.init = function () { var currentZoomLevel = map.getZoom(); - if(!portalRenderLimit.previousZoomLevel) portalRenderLimit.previousZoomLevel = currentZoomLevel; + portalRenderLimit.previousZoomLevel = portalRenderLimit.previousZoomLevel || currentZoomLevel; + + // If there is a minLevel set in previous run, calculate previousMinLevel with it. if(portalRenderLimit.minLevelSet) { var zoomDiff = currentZoomLevel - portalRenderLimit.previousZoomLevel; portalRenderLimit.previousMinLevel = Math.max(portalRenderLimit.minLevel - zoomDiff, -1); portalRenderLimit.previousMinLevel = Math.min(portalRenderLimit.previousMinLevel, MAX_PORTAL_LEVEL); } + portalRenderLimit.previousZoomLevel = currentZoomLevel; - + portalRenderLimit.initialized = true; portalRenderLimit.minLevel = -1; portalRenderLimit.resetCounting(); @@ -75,54 +78,59 @@ window.portalRenderLimit.resetPortalsPreviousMinLevel = function() { } } -window.portalRenderLimit.processPortals = function(ppp) { +window.portalRenderLimit.splitOrMergeLowLevelPortals = function(originPortals) { portalRenderLimit.resetCounting(); - var resultPortals = new Array(); + portalRenderLimit.countingPortals(originPortals); - $.each(ppp, function(ind, portal) { - portalRenderLimit.countPortal(portal); + var resultPortals = portalRenderLimit.isLastRequest() + ? portalRenderLimit.mergeLowLevelPortals(originPortals) + : portalRenderLimit.splitLowLevelPortals(originPortals); - if(!portalRenderLimit.isLastRequest()) { - var portalLevel = parseInt(getPortalLevel(portal[2])); - if(portalLevel < portalRenderLimit.previousMinLevel) { - portalRenderLimit.portalsPreviousMinLevel[portalLevel].push(portal); - }else{ - resultPortals.push(portal); - } - } - }); - - if(portalRenderLimit.isLastRequest()) { - resultPortals = portalRenderLimit.getLowLevelPortals(ppp); - portalRenderLimit.resetPortalsPreviousMinLevel(); - } return resultPortals; } window.portalRenderLimit.handleFailRequest = function() { if(portalRenderLimit.isLastRequest()) { - var ppp = portalRenderLimit.getLowLevelPortals(null); - portalRenderLimit.resetPortalsPreviousMinLevel(); - handlePortalData(ppp); + var resultPortals = portalRenderLimit.mergeLowLevelPortals(null); + handlePortalData(resultPortals); } } -window.portalRenderLimit.countPortal = function(ent) { - var portalGuid = ent[0]; - var portalLevel = parseInt(getPortalLevel(ent[2])); - var layerGroup = portalsLayers[portalLevel]; - - if(findEntityInLeaflet(layerGroup, window.portals, ent[0])) return; - portalRenderLimit.newPortalsPerLevel[portalLevel]++; +window.portalRenderLimit.countingPortals = function(portals) { + $.each(portals, function(ind, portal) { + var portalGuid = portal[0]; + var portalLevel = parseInt(getPortalLevel(portal[2])); + var layerGroup = portalsLayers[portalLevel]; + + if(findEntityInLeaflet(layerGroup, window.portals, portalGuid)) return true; + + portalRenderLimit.newPortalsPerLevel[portalLevel]++; + }); } -window.portalRenderLimit.getLowLevelPortals = function(appendTo) { +window.portalRenderLimit.splitLowLevelPortals = function(portals) { + var resultPortals = new Array(); + $.each(portals, function(ind, portal) { + var portalLevel = parseInt(getPortalLevel(portal[2])); + if(portalLevel < portalRenderLimit.previousMinLevel) { + portalRenderLimit.portalsPreviousMinLevel[portalLevel].push(portal); + }else{ + resultPortals.push(portal); + } + }); + return resultPortals; +} + +window.portalRenderLimit.mergeLowLevelPortals = function(appendTo) { var resultPortals = appendTo ? appendTo : new Array(); for(var i = portalRenderLimit.getMinLevel(); i < portalRenderLimit.previousMinLevel; i++) { $.merge(resultPortals, portalRenderLimit.portalsPreviousMinLevel[i]); } + + // Reset portalsPreviousMinLevel, ensure they return only once + portalRenderLimit.resetPortalsPreviousMinLevel(); return resultPortals; } From a679710198419186301ee6290a508ecd6a87e955 Mon Sep 17 00:00:00 2001 From: Xelio Date: Fri, 1 Mar 2013 15:00:49 +0800 Subject: [PATCH 04/10] Code restructure 2 --- code/map_data.js | 4 ++-- code/portal_render_limit.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/map_data.js b/code/map_data.js index c620e404..517e84bb 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -127,13 +127,13 @@ window.handleDataResponse = function(data, textStatus, jqXHR) { // Process the portals with portal render limit handler first // Low level portal will hold until last request var newPpp = portalRenderLimit.splitOrMergeLowLevelPortals(ppp); - handlePortalData(newPpp); + handlePortalsRender(newPpp); resolvePlayerNames(); renderUpdateStatus(); } -window.handlePortalData = function(portals) { +window.handlePortalsRender = function(portals) { var portalUpdateAvailable = false; var portalInUrlAvailable = false; diff --git a/code/portal_render_limit.js b/code/portal_render_limit.js index a726e729..0ab58107 100644 --- a/code/portal_render_limit.js +++ b/code/portal_render_limit.js @@ -92,7 +92,7 @@ window.portalRenderLimit.splitOrMergeLowLevelPortals = function(originPortals) { window.portalRenderLimit.handleFailRequest = function() { if(portalRenderLimit.isLastRequest()) { var resultPortals = portalRenderLimit.mergeLowLevelPortals(null); - handlePortalData(resultPortals); + handlePortalsRender(resultPortals); } } From 4113991201585bc6a1d42cbf68b6425e1f55a7a8 Mon Sep 17 00:00:00 2001 From: Xelio Date: Fri, 1 Mar 2013 15:31:15 +0800 Subject: [PATCH 05/10] Code restructure 3 --- code/map_data.js | 12 ++++++++++-- code/portal_render_limit.js | 20 +------------------- code/request_handling.js | 11 +++++++++++ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/code/map_data.js b/code/map_data.js index 517e84bb..b7afe533 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -49,17 +49,25 @@ window.requestData = function() { $.each(tiles, function(ind, tls) { data = { minLevelOfDetail: -1 }; data.boundsParamsList = tls; - window.requests.add(window.postAjax('getThinnedEntitiesV2', data, window.handleDataResponse, portalRenderLimit.handleFailRequest)); + window.requests.add(window.postAjax('getThinnedEntitiesV2', data, window.handleDataResponse, window.handleFailedRequest)); }); } +// Handle failed map data request +window.handleFailedRequest = function() { + if(requests.isLastRequest('getThinnedEntitiesV2')) { + var leftOverPortals = portalRenderLimit.mergeLowLevelPortals(null); + handlePortalsRender(leftOverPortals); + } +} + // works on map data response and ensures entities are drawn/updated. window.handleDataResponse = function(data, textStatus, jqXHR) { // remove from active ajax queries list if(!data || !data.result) { window.failedRequestCount++; console.warn(data); - portalRenderLimit.handleFailRequest(); + handleFailedRequest(); return; } diff --git a/code/portal_render_limit.js b/code/portal_render_limit.js index 0ab58107..ec4e93a2 100644 --- a/code/portal_render_limit.js +++ b/code/portal_render_limit.js @@ -82,20 +82,13 @@ window.portalRenderLimit.splitOrMergeLowLevelPortals = function(originPortals) { portalRenderLimit.resetCounting(); portalRenderLimit.countingPortals(originPortals); - var resultPortals = portalRenderLimit.isLastRequest() + var resultPortals = requests.isLastRequest('getThinnedEntitiesV2') ? portalRenderLimit.mergeLowLevelPortals(originPortals) : portalRenderLimit.splitLowLevelPortals(originPortals); return resultPortals; } -window.portalRenderLimit.handleFailRequest = function() { - if(portalRenderLimit.isLastRequest()) { - var resultPortals = portalRenderLimit.mergeLowLevelPortals(null); - handlePortalsRender(resultPortals); - } -} - window.portalRenderLimit.countingPortals = function(portals) { $.each(portals, function(ind, portal) { var portalGuid = portal[0]; @@ -134,17 +127,6 @@ window.portalRenderLimit.mergeLowLevelPortals = function(appendTo) { return resultPortals; } -window.portalRenderLimit.isLastRequest = function() { - var result = true; - $.each(window.activeRequests, function(ind, req) { - if(req.action === 'getThinnedEntitiesV2') { - result = false; - return false; - } - }); - return result; -} - window.portalRenderLimit.getMinLevel = function() { if(!portalRenderLimit.initialized) return -1; if(!portalRenderLimit.minLevelSet) portalRenderLimit.setMinLevel(); diff --git a/code/request_handling.js b/code/request_handling.js index 6fe0acd3..6766fd5f 100644 --- a/code/request_handling.js +++ b/code/request_handling.js @@ -111,3 +111,14 @@ window.requests._callOnRefreshFunctions = function() { window.requests.addRefreshFunction = function(f) { window.requests._onRefreshFunctions.push(f); } + +window.requests.isLastRequest = function(action) { + var result = true; + $.each(window.activeRequests, function(ind, req) { + if(req.action === action) { + result = false; + return false; + } + }); + return result; +} \ No newline at end of file From eca1f51c76644ee473fc4ddbf9a8eb7bc439c9e1 Mon Sep 17 00:00:00 2001 From: Cameron Moon Date: Sun, 3 Mar 2013 00:18:28 +1100 Subject: [PATCH 06/10] added to userguide --- USERGUIDE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/USERGUIDE.md b/USERGUIDE.md index 99ee4779..d5d6ac59 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -102,7 +102,8 @@ Starting from the top, the sidebar shows this information: #### logged in user, global MU, search - Details about you, the logged in user. This is only updated if you reload the page. This is a limitation of Ingress, not IITC. - - it shows your current level followed by your nick + - it shows your current level followed by your nickname + - hovering over your nickname allows you to sign out (NIGHTLY ONLY) - to the right, it shows to percentages. The upper one, e.g. “XM: 37%” tells you how much your XM bar is filled. The lower one, e.g. “level: 37%“ tells you that you have gathered 37% of the AP required for the next level. It shows “max level” if you have reached max level. - the tooltip mainly shows you absolute numbers instead of percentages. It also shows how many invites you have. - The next bar is a visual representation of global MindUnits (MU) per faction. It is updated every now and then. The tooltip shows the absolute MU count per faction. From c06682b9911774eed04d55548e6c7756156aefcf Mon Sep 17 00:00:00 2001 From: sutepasu Date: Sat, 2 Mar 2013 23:18:39 +0700 Subject: [PATCH 07/10] Adding total level, total player and average level MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding total level, total player and average level on each faction. Adding line feed  and removing one tab on line 111 so the output will be properly generated. --- plugins/guess-player-levels.user.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index c220a76d..02a33858 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @id iitc-plugin-guess-player-levels@breunigs // @name iitc: guess player level -// @version 0.2.1 +// @version 0.2.1.1 // @namespace https://github.com/breunigs/ingress-intel-total-conversion // @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js // @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js @@ -92,19 +92,29 @@ window.plugin.guessPlayerLevels.guess = function() { var namesR = plugin.guessPlayerLevels.sort(playersRes); var namesE = plugin.guessPlayerLevels.sort(playersEnl); + var totallvlR = 0; + var totallvlE = 0; var max = Math.max(namesR.length, namesE.length); for(var i = 0; i < max; i++) { var nickR = namesR[i]; var lvlR = playersRes[nickR]; var lineR = nickR ? nickR + ':\t' + lvlR : '\t'; - + if(!isNaN(parseInt(lvlR))) + totallvlR += parseInt(lvlR); + var nickE = namesE[i]; var lvlE = playersEnl[nickE]; var lineE = nickE ? nickE + ':\t' + lvlE : '\t'; - - s += lineR + '\t\t' + lineE + '\n'; + if(!isNaN(parseInt(lvlE))) + totallvlE += parseInt(lvlE); + + s += '\n'+lineR + '\t' + lineE + '\n'; } - + s += '\nTotal level :\t'+totallvlR+'\tTotal level :\t'+totallvlE; + s += '\nTotal player:\t'+namesR.length+'\tTotal player:\t'+namesE.length; + var averageR = (totallvlR/namesR.length); + var averageE = (totallvlE/namesE.length); + s += '\nAverage :\t'+averageR.toFixed(2)+'\tAverage :\t'+averageE.toFixed(2); s += '\n\nIf there are some unresolved names, simply try again.' console.log(s); alert(s); From 420ec8de16296eb524bb7665a9a24b8e6a554143 Mon Sep 17 00:00:00 2001 From: vita10gy Date: Sat, 2 Mar 2013 10:23:38 -0600 Subject: [PATCH 08/10] Save Game info with links and fields Useful for plugins/extending --- code/map_data.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/map_data.js b/code/map_data.js index b7afe533..c56bb252 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -507,9 +507,9 @@ window.renderLink = function(ent) { weight:2, clickable: false, guid: ent[0], + data: ent[2], smoothFactor: 0 // doesn’t work for two points anyway, so disable }); - // determine which links are very short and don’t render them at all. // in most cases this will go unnoticed, but improve rendering speed. poly._map = window.map; @@ -557,8 +557,9 @@ window.renderField = function(ent) { smoothFactor: 0, // hiding small fields will be handled below vertices: reg, lastUpdate: ent[1], - guid: ent[0]}); - + guid: ent[0], + data: ent[2]}); + // determine which fields are too small to be rendered and don’t // render them, so they don’t count towards the maximum fields limit. // This saves some DOM operations as well, but given the relatively From 8067d2011780bdb33b17cb533ee0d524555f5064 Mon Sep 17 00:00:00 2001 From: sutepasu Date: Sun, 3 Mar 2013 02:39:25 +0700 Subject: [PATCH 09/10] v0.3, fix divide-by-zero, change tabs to space --- plugins/guess-player-levels.user.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index 02a33858..cfe2f94f 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @id iitc-plugin-guess-player-levels@breunigs // @name iitc: guess player level -// @version 0.2.1.1 +// @version 0.3 // @namespace https://github.com/breunigs/ingress-intel-total-conversion // @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js // @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js @@ -99,21 +99,22 @@ window.plugin.guessPlayerLevels.guess = function() { var nickR = namesR[i]; var lvlR = playersRes[nickR]; var lineR = nickR ? nickR + ':\t' + lvlR : '\t'; - if(!isNaN(parseInt(lvlR))) - totallvlR += parseInt(lvlR); - + if(!isNaN(parseInt(lvlR))) + totallvlR += parseInt(lvlR); + var nickE = namesE[i]; var lvlE = playersEnl[nickE]; var lineE = nickE ? nickE + ':\t' + lvlE : '\t'; - if(!isNaN(parseInt(lvlE))) - totallvlE += parseInt(lvlE); - + if(!isNaN(parseInt(lvlE))) + totallvlE += parseInt(lvlE); + s += '\n'+lineR + '\t' + lineE + '\n'; } s += '\nTotal level :\t'+totallvlR+'\tTotal level :\t'+totallvlE; s += '\nTotal player:\t'+namesR.length+'\tTotal player:\t'+namesE.length; - var averageR = (totallvlR/namesR.length); - var averageE = (totallvlE/namesE.length); + var averageR = 0, averageE = 0; + if (namesR.length > 0) averageR = (totallvlR/namesR.length); + if (namesE.length > 0) averageE = (totallvlE/namesE.length); s += '\nAverage :\t'+averageR.toFixed(2)+'\tAverage :\t'+averageE.toFixed(2); s += '\n\nIf there are some unresolved names, simply try again.' console.log(s); From 612006a7d6ff5d8fcfa6147eaa1ee360520cbb1e Mon Sep 17 00:00:00 2001 From: sutepasu Date: Sun, 3 Mar 2013 02:52:21 +0700 Subject: [PATCH 10/10] Change label 'Average' to --- plugins/guess-player-levels.user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index cfe2f94f..cd77945b 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -115,7 +115,7 @@ window.plugin.guessPlayerLevels.guess = function() { var averageR = 0, averageE = 0; if (namesR.length > 0) averageR = (totallvlR/namesR.length); if (namesE.length > 0) averageE = (totallvlE/namesE.length); - s += '\nAverage :\t'+averageR.toFixed(2)+'\tAverage :\t'+averageE.toFixed(2); + s += '\nAverage level:\t'+averageR.toFixed(2)+'\tAverage level:\t'+averageE.toFixed(2); s += '\n\nIf there are some unresolved names, simply try again.' console.log(s); alert(s);