From 6a5280016811f47d941a9fc4877904e1f5c83fbd Mon Sep 17 00:00:00 2001 From: teo96 Date: Wed, 27 Mar 2013 21:39:15 +0100 Subject: [PATCH] Update portals-list.user.js --- plugins/portals-list.user.js | 220 ++++++++++++++++++++++++++--------- 1 file changed, 166 insertions(+), 54 deletions(-) diff --git a/plugins/portals-list.user.js b/plugins/portals-list.user.js index 2a44acf3..ab923fa6 100644 --- a/plugins/portals-list.user.js +++ b/plugins/portals-list.user.js @@ -1,11 +1,11 @@ // ==UserScript== // @id iitc-plugin-portals-list@teo96 // @name IITC plugin: show list of portals -// @version 0.0.6.@@DATETIMEVERSION@@ +// @version 0.0.9@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ -// @description Display a sortable list of all localized portails with team, level, resonators informations +// @description [@@BUILDNAME@@-@@BUILDDATE@@] Display a sortable list of all localized portails with team, level, resonators informations // @include https://www.ingress.com/intel* // @include http://www.ingress.com/intel* // @match https://www.ingress.com/intel* @@ -13,16 +13,20 @@ // ==/UserScript== /* whatsnew +* 0.0.9 : bug hunt +* 0.0.8 : Aborted to avoid problems with Niantic (export portals informations as csv or kml file) +* 0.0.7 : more informations avalaible via tooltips (who deployed, energy, ...), new E/AP column * 0.0.6 : Add power charge information into a new column + bugfix * 0.0.5 : Filter portals by clicking on 'All portals', 'Res Portals' or 'Enl Portals' * 0.0.4 : Add link to portals name, one click to display full information in portal panel, double click to zoom on portal, hover to show address * 0.0.3 : sorting ascending/descending and add numbers of portals by faction on top on table * 0.0.2 : add sorting feature when click on header column * 0.0.1 : initial release, show list of portals with level, team, resonators and shield information +* * Display code inspired from @vita10gy's scoreboard plugin : iitc-plugin-scoreboard@vita10gy - https://github.com/breunigs/ingress-intel-total-conversion * Portal link code from xelio - iitc: AP List - https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/ap-list.user.js * -* todo : +* todo : export as GPX, Open in Google Maps, more statistics in the header, what else ? */ function wrapper() { @@ -53,7 +57,8 @@ window.plugin.portalslist.getPortals = function(){ retval=true; var d = portal.options.details; var name = d.portalV2.descriptiveText.TITLE; - + var address = d.portalV2.descriptiveText.ADDRESS; + var img = d.imageByUrl && d.imageByUrl.imageUrl ? d.imageByUrl.imageUrl : DEFAULT_PORTAL_IMG; var team = portal.options.team; switch (team){ case 1 : @@ -85,22 +90,25 @@ window.plugin.portalslist.getPortals = function(){ var shields = []; $.each(d.portalV2.linkedModArray, function(ind, mod) { if (mod) - shields[ind] = mod.rarity.capitalize().replace('_', ' '); + //shields[ind] = mod.rarity.capitalize().replace('_', ' '); + shields[ind] = [mod.rarity.substr(0,1).capitalize(), getPlayerName(mod.installingUser)] ; else - shields[ind] = ''; + shields[ind] = ['', '']; }); var APgain= getAttackApGain(d).enemyAp; - var thisPortal = {'portal':d,'name':name,'team':team,'level':level,'guid':guid, 'resonators':resonators,'energy' : Math.floor(energy/maxenergy*100), 'shields':shields,'APgain':APgain}; + var thisPortal = {'portal':d,'name':name,'team':team,'level':level,'guid':guid, 'resonators':resonators,'energyratio' : Math.floor(energy/maxenergy*100), 'shields':shields, 'APgain':APgain, 'EAP' : (energy/APgain).toFixed(2), 'energy': energy, 'maxenergy':maxenergy, 'lat':portal._latlng.lat, 'lng':portal._latlng.lng, 'address': address, 'img' : img}; window.plugin.portalslist.listPortals.push(thisPortal); }); return retval; - } window.plugin.portalslist.displayPL = function() { - //console.log('** displayPL'); + // debug tools + //var start = new Date().getTime(); + //console.log('***** Start ' + start); + var html = ''; window.plugin.portalslist.sortOrder=-1; window.plugin.portalslist.enlP = 0; @@ -127,14 +135,17 @@ window.plugin.portalslist.displayPL = function() { $(document).on('click', '#portalslist .filterEnl', function() { $('#portalslist').html(window.plugin.portalslist.portalTable($(this).data('sort'),window.plugin.portalslist.sortOrder,2)); }); + + //debug tools + //end = new Date().getTime(); + //console.log('***** end : ' + end + ' and Elapse : ' + (end - start)); } window.plugin.portalslist.portalTable = function(sortBy, sortOrder, filter) { // sortOrder <0 ==> desc, >0 ==> asc, i use sortOrder * -1 to change the state window.plugin.portalslist.filter=filter; var portals=window.plugin.portalslist.listPortals; - // console.log('********************* Sort by ' + sortBy + ' order : ' + sortOrder + ' filter : ' + filter); - + //Array sort window.plugin.portalslist.listPortals.sort(function(a, b) { var retVal = 0; @@ -191,7 +202,7 @@ window.plugin.portalslist.portalTable = function(sortBy, sortOrder, filter) { html += '' + '' + '' - + '' + + '' + '' + '' + '' @@ -200,63 +211,164 @@ window.plugin.portalslist.portalTable = function(sortBy, sortOrder, filter) { + '' + '' + '' - + '' - + '' - + '' - + '' - + '' - + ''; + + '' + + '' + + '' + + '' + + '' + + '' + + ''; $.each(portals, function(ind, portal) { if (filter === 0 || filter === portal.team){ html += '' - + '' - //+ '' + + '' + '' - + '' - + '' - //+ '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + ''; + + ''; + + $.each([0, 1, 2, 3 ,4 ,5 ,6 ,7], function(ind, slot) { + + var title = 'title="owner: ' + portal.resonators[slot][1] + '
' + + 'energy: ' + portal.resonators[slot][3] + ' / ' + portal.resonators[slot][4] + ' (' + Math.floor(portal.resonators[slot][3]/portal.resonators[slot][4]*100) + '%)
' + + 'distance: ' + portal.resonators[slot][2] + 'm'; + + html += ''; + + }); + + html += '' + + '' + + '' + + '' + + '' + + '' + + ''; html+= ''; } - }); - html+='
PortalLevelTeamTR1R2R3R6R7R8EnergyShield 1Shield 2Shield 3Shield 4AP Gain
EnergyS1S2S3S4AP GainE/AP
' + window.plugin.portalslist.getPortalLink(portal.portal, portal.guid) + '' + portal.name + '' + window.plugin.portalslist.getPortalLink(portal.portal, portal.guid) + '' + portal.level + '' + portal.team + '' + portal.resonators[0][0] + '6' - + '' + portal.resonators[1][0] + '' + portal.resonators[2][0] + '' + portal.resonators[3][0] + '' + portal.resonators[4][0] + '' + portal.resonators[5][0] + '' + portal.resonators[6][0] + '' + portal.resonators[7][0] + '' + portal.energy + '%' + portal.shields[0] + '' + portal.shields[1] + '' + portal.shields[2] + '' + portal.shields[3] + '' + portal.APgain + '' + portal.team + '' + portal.resonators[slot][0] + '' + portal.energyratio + '%' + portal.shields[0][0] + '' + portal.shields[1][0] + '' + portal.shields[2][0] + '' + portal.shields[3][0] + '' + portal.APgain + '' + portal.EAP + '
'; - html+= '
Click on portals table headers to sort by that column.
' - + 'Click on All Portals, Resistant Portals, Enlightened Portals to filter
' + html += ''; + + //html += window.plugin.portalslist.exportLinks(); + + html += '
Click on portals table headers to sort by that column. ' + + 'Click on All Portals, Resistant Portals, Enlightened Portals to filter
' + 'Thanks to @vita10gy & @xelio for their IITC plugins who inspired me. A @teo96 production. Vive la Résistance !
'; window.plugin.portalslist.sortOrder = window.plugin.portalslist.sortOrder*-1; return html; } - window.plugin.portalslist.stats = function(sortBy) { //console.log('** stats'); var html = '' - + '' - + '' - + '' + + '' + + '' + + '' + '' + '
All Portals : (click to filter)' + window.plugin.portalslist.listPortals.length +'Resistant Portals : ' + window.plugin.portalslist.resP + 'Enlightened Portals : '+ window.plugin.portalslist.enlP + 'All Portals : (click to filter)' + window.plugin.portalslist.listPortals.length + 'Resistant Portals : ' + window.plugin.portalslist.resP +' (' + Math.floor(window.plugin.portalslist.resP/window.plugin.portalslist.listPortals.length*100) + '%)Enlightened Portals : '+ window.plugin.portalslist.enlP +' (' + Math.floor(window.plugin.portalslist.enlP/window.plugin.portalslist.listPortals.length*100) + '%)
'; return html; } +//return Html generated to export links +window.plugin.portalslist.exportLinks = function(){ + var html=''; + var stamp = new Date().getTime(); + + html+='
' + + '' + + '
'; + return html; +} + +window.plugin.portalslist.export = function(fileformat){ + //alert('format :' + fileformat); + var file = ''; + var uri = ''; + + switch (fileformat) { + case 'csv': + file = window.plugin.portalslist.exportCSV(); + break; + case 'kml': + file = window.plugin.portalslist.exportKML(); + break; + } + + if (file !== '') { + //http://stackoverflow.com/questions/4639372/export-to-csv-in-jquery + var uri = 'data:application/' + fileformat + 'csv;charset=UTF-8,' + encodeURIComponent(file); + //window.open(uri); + } + return uri; +} +window.plugin.portalslist.exportCSV = function(){ + var csv = ''; + var filter = window.plugin.portalslist.filter; + var portals = window.plugin.portalslist.listPortals; + + //headers + csv += 'Portal\tLevel\tTeam\tR1\tR2\tR3\tR4\tR5\tR6\tR7\tR8\tEnergy\tS1\tS2\tS3\tS4\tAP Gain\tE/AP\tlat\tlong\n'; + + $.each(portals, function(ind, portal) { + + if (filter === 0 || filter === portal.team){ + csv += portal.name + '\t' + + portal.level + '\t' + + portal.team + '\t'; + + $.each([0, 1, 2, 3 ,4 ,5 ,6 ,7], function(ind, slot) { + csv += portal.resonators[slot][0] + '\t'; + }); + + csv += portal.energyratio + '\t' + portal.shields[0][0] + '\t' + portal.shields[1][0] + '\t' + portal.shields[2][0] + '\t' + portal.shields[3][0] + '\t' + portal.APgain + '\t' + portal.EAP + '\t'; + csv += portal.lat + '\t' + portal.lng; + csv += '\n'; + } + }); + + return csv; +} + +window.plugin.portalslist.exportKML = function(){ + var kml = ''; + var filter = window.plugin.portalslist.filter; + // all portals informations are avalaible in the listPortals array + var portals = window.plugin.portalslist.listPortals; + + //headers + kml = '\n' + + 'Ingress Export'; + + // define colored markers as style0 (neutral), style1 (Resistance), style2 (Enlight) + kml += '' + + '' + + '\n'; + + $.each(portals, function(ind, portal) { + // add the portal in the kml file only if part of the filter choice + if (filter === 0 || filter === portal.team){ + // description contain picture of the portal, address and link to the Intel map + var description = '
' + portal.address + + '
Link to Intel Map
' + + ']]>'; + + kml += 'L' + Math.floor(portal.level) + ' - ' + portal.name + '' + + '' + description + '' + + '#style' + portal.team + ''; + + //coordinates + kml += '' + portal.lng + ',' + portal.lat + ',0'; + kml += '\n'; + } + }); + kml += '
'; + return kml; +} + // A little helper functon so the above isn't so messy window.plugin.portalslist.portalTableSort = function(name, by) { var retVal = 'data-sort="' + name + '"'; @@ -286,7 +398,7 @@ window.plugin.portalslist.getPortalLink = function(portal,guid) { onClick: jsSingleClick, onDblClick: jsDoubleClick })[0].outerHTML; - var div = '
'+a+'
'; + var div = '
'+a+'
'; return div; } @@ -302,15 +414,15 @@ var setup = function() { '#portalslist table tr.neutral td { background-color: #000000; }' + '#portalslist table th { text-align:center;}' + '#portalslist table td { text-align: center;}' + - '#portalslist table td.L0 { background-color: #000000 !important;}' + - '#portalslist table td.L1 { background-color: #FECE5A !important;}' + - '#portalslist table td.L2 { background-color: #FFA630 !important;}' + - '#portalslist table td.L3 { background-color: #FF7315 !important;}' + - '#portalslist table td.L4 { background-color: #E40000 !important;}' + - '#portalslist table td.L5 { background-color: #FD2992 !important;}' + - '#portalslist table td.L6 { background-color: #EB26CD !important;}' + - '#portalslist table td.L7 { background-color: #C124E0 !important;}' + - '#portalslist table td.L8 { background-color: #9627F4 !important;}' + + '#portalslist table td.L0 { cursor: help; background-color: #000000 !important;}' + + '#portalslist table td.L1 { cursor: help; background-color: #FECE5A !important;}' + + '#portalslist table td.L2 { cursor: help; background-color: #FFA630 !important;}' + + '#portalslist table td.L3 { cursor: help; background-color: #FF7315 !important;}' + + '#portalslist table td.L4 { cursor: help; background-color: #E40000 !important;}' + + '#portalslist table td.L5 { cursor: help; background-color: #FD2992 !important;}' + + '#portalslist table td.L6 { cursor: help; background-color: #EB26CD !important;}' + + '#portalslist table td.L7 { cursor: help; background-color: #C124E0 !important;}' + + '#portalslist table td.L8 { cursor: help; background-color: #9627F4 !important;}' + '#portalslist table td:nth-child(1) { text-align: left;}' + '#portalslist table th { cursor:pointer; text-align: right;}' + '#portalslist table th:nth-child(1) { text-align: left;}' +