From 933843bd68d64c3e566913d90597380fa96954bb Mon Sep 17 00:00:00 2001 From: fkloft Date: Tue, 14 Apr 2015 15:48:58 +0200 Subject: [PATCH] [missions] improved mission details, now including the mission's length (for non-hidden missions) --- images/mission-length.png | Bin 0 -> 109 bytes plugins/missions.css | 15 ++++++++++---- plugins/missions.user.js | 41 ++++++++++++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 images/mission-length.png diff --git a/images/mission-length.png b/images/mission-length.png new file mode 100644 index 0000000000000000000000000000000000000000..31e6fa489fe6cf16a1da307f9abf89eedee4840e GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh@3?y?HWJG`zTYyi9E0Esw`-l4Ei!XsJ#*!ev zU .nickname { display: inline-block; + box-sizing: border-box; min-width: 8em; /* to align with time */ + padding-right: 0.2em; } .plugin-mission-info .portal-distance-bearing { @@ -59,16 +61,21 @@ .plugin-mission-info { display: inline-block; } -.plugin-mission-info.time { min-width: 8em; } -.plugin-mission-info.rating { min-width: 6em; } -.plugin-mission-info.players { min-width: 4em; } -.plugin-mission-info.type { min-width: 4em; } +.plugin-mission-info.length { min-width: 6em; } +.plugin-mission-info.distance { min-width: 6em; } +.plugin-mission-info.time { min-width: 8em; } +.plugin-mission-info.rating { min-width: 6em; } +.plugin-mission-info.players { min-width: 4em; } +.plugin-mission-info.type { min-width: 4em; } .plugin-mission-info img { height: 14px; margin-right: 8px; vertical-align: top; } +.plugin-mission-info.players img { + padding: 0 3px; /* the icon is 12x18 */ +} .plugin-mission-details .plugin-mission-summary > a, .plugin-mission-details .plugin-mission-summary .description { diff --git a/plugins/missions.user.js b/plugins/missions.user.js index d06c9726..3f51e792 100644 --- a/plugins/missions.user.js +++ b/plugins/missions.user.js @@ -321,6 +321,32 @@ window.plugin.missions = { span.className = 'nickname ' + (cachedMission.authorTeam === 'R' ? 'res' : 'enl') span.textContent = cachedMission.authorNickname; + var len = cachedMission.waypoints.filter(function(waypoint) { + return !!waypoint.portal; + }).map(function(waypoint) { + return L.latLng(waypoint.portal.latE6/1E6, waypoint.portal.lngE6/1E6); + }).map(function(latlng1, i, latlngs) { + if(i == 0) return 0; + var latlng2 = latlngs[i - 1]; + return latlng1.distanceTo(latlng2); + }).reduce(function(a, b) { + return a + b; + }); + + if(len > 0) { + if(len > 1000) + len = Math.round(len / 100) / 10 + "km"; + else + len = Math.round(len * 10) / 10 + "m"; + + var infoLength = container.appendChild(document.createElement('span')); + infoLength.className = 'plugin-mission-info length help'; + infoLength.title = 'Length of this mission.\n\nNOTE: The actual distance required to cover may vary depending on several factors!'; + infoLength.textContent = len; + img = infoLength.insertBefore(document.createElement('img'), infoLength.firstChild); + img.src = '@@INCLUDEIMAGE:images/mission-length.png@@'; + } + if(window.plugin.distanceToPortal && window.plugin.distanceToPortal.currentLoc) { var infoDistance = container.appendChild(document.createElement('span')); infoDistance.className = 'plugin-mission-info distance help'; @@ -335,31 +361,34 @@ window.plugin.missions = { container.appendChild(document.createElement('br')); var infoTime = container.appendChild(document.createElement('span')); - infoTime.className = 'plugin-mission-info time'; + infoTime.className = 'plugin-mission-info time help'; + infoTime.title = 'Typical duration'; infoTime.textContent = timeToRemaining((mission.medianCompletionTimeMs / 1000) | 0) + ' '; img = infoTime.insertBefore(document.createElement('img'), infoTime.firstChild); img.src = 'https://commondatastorage.googleapis.com/ingress.com/img/tm_icons/time.png'; var infoRating = container.appendChild(document.createElement('span')); - infoRating.className = 'plugin-mission-info rating'; + infoRating.className = 'plugin-mission-info rating help'; + infoRating.title = 'Average rating'; infoRating.textContent = (((mission.ratingE6 / 100) | 0) / 100) + '%' + ' '; img = infoRating.insertBefore(document.createElement('img'), infoRating.firstChild); img.src = 'https://commondatastorage.googleapis.com/ingress.com/img/tm_icons/like.png'; if (cachedMission) { var infoPlayers = container.appendChild(document.createElement('span')); - infoPlayers.className = 'plugin-mission-info players'; + infoPlayers.className = 'plugin-mission-info players help'; + infoPlayers.title = 'Unique players who have completed this mission'; infoPlayers.textContent = cachedMission.numUniqueCompletedPlayers + ' '; img = infoPlayers.insertBefore(document.createElement('img'), infoPlayers.firstChild); img.src = 'https://commondatastorage.googleapis.com/ingress.com/img/tm_icons/players.png'; var infoWaypoints = container.appendChild(document.createElement('span')); - infoWaypoints.className = 'plugin-mission-info waypoints'; + infoWaypoints.className = 'plugin-mission-info waypoints help'; + infoWaypoints.title = (cachedMission.type ? cachedMission.type + ' mission' : 'Unknown mission type') + + ' with ' + cachedMission.waypoints.length + ' waypoints'; infoWaypoints.textContent = cachedMission.waypoints.length + ' '; img = infoWaypoints.insertBefore(document.createElement('img'), infoWaypoints.firstChild); img.src = this.missionTypeImages[cachedMission.typeNum] || this.missionTypeImages[0]; - img.title = cachedMission.type || 'Unknown mission type'; - img.className = 'help'; } return container;