From 1f13ec3001704ff8cb193d482b42a9436193e7fe Mon Sep 17 00:00:00 2001 From: fkloft Date: Sat, 9 Aug 2014 16:59:33 +0200 Subject: [PATCH] Improvements to passcode redeeming - use text color instead of background, with font-weight:bold and a small shadow - short format for passcodes --- code/redeeming.js | 306 ++++++++++++++++------------------------------ style.css | 3 +- 2 files changed, 108 insertions(+), 201 deletions(-) diff --git a/code/redeeming.js b/code/redeeming.js index 7da5820c..9ed5789f 100644 --- a/code/redeeming.js +++ b/code/redeeming.js @@ -1,178 +1,22 @@ // REDEEMING /////////////////////////////////////////////////////// -// Heuristic passcode redemption that tries to guess unknown items / //////////////////////////////////////////////////////////////////// // TODO remove lots of unused code from the old redeeming method -/* Abbreviates redemption items. - * Example: VERY_RARE => VR - */ -window.REDEEM_ABBREVIATE = function(tag) {return tag.split('_').map(function (i) {return i[0];}).join('');}; - -/* Resource type names mapped to actual names and abbreviations. - * Add more here if necessary. - * Sometimes, items will have more information than just a level. Allow for specialization. - */ -window.REDEEM_RESOURCES = { - RES_SHIELD: { - /* modResource */ - format: function(acquired) { - return {long: 'Portal Shield', short: 'S'}; - } - }, - FORCE_AMP: { - format: function(acquired) { - return {long: 'Force Amp', short: 'FA'}; - } - }, - LINK_AMP: { - format: function(acquired) { - return {long: 'Link Amp', short: 'LA'}; - } - }, - HEATSINK: { - format: function(acquired) { - return {long: 'Heatsink', short: 'H'}; - } - }, - MULTIHACK: { - format: function(acquired) { - return {long: 'Multihack', short: 'M'}; - } - }, - TURRET: { - format: function(acquired) { - return {long: 'Turret', short: 'T'}; - } - }, - UNUSUAL: { - format: function(acquired) { - return {long: 'Unusual Object', short: 'U'}; - } - }, - EMITTER_A: { - /* resourceWithLevels */ - format: function(acquired) { - return {long: 'Resonator', short: 'R'}; - } - }, - EMP_BURSTER: { - /* resourceWithLevels */ - format: function(acquired) { - return {long: 'XMP Burster', short: 'X'}; - } - }, - POWER_CUBE: { - /* resourceWithLevels */ - format: function(acquired) { - return {long: 'Power Cube', short: 'C'}; - } - }, - MEDIA: { - /* resourceWithLevels */ - format: function(acquired) { - return { - long: 'Media: ' + (acquired.storyItem.shortDescription || 'UNKNOWN') + '', - short: 'M' - }; - } - }, - FLIP_CARD: { - decode: function(type, acquired, key) { - /* ADA or JARVIS */ - return acquired.flipCard.flipCardType; - }, - format: function(acquired) { - var type = acquired.flipCard.flipCardType; - return { - long: type, - short: ({ADA: 'AR', JARVIS: 'JV'}[type] || 'FC'), - prefix: '', - suffix: '' - }; - } - }, - PORTAL_LINK_KEY: { - decode: function(type, acquired, key) { - /* A unique identifier for this portal. */ - return acquired.portalCoupler.portalGuid; - }, - format: function(acquired) { - return { - long: 'Portal Key: ' + acquired.portalCoupler.portalTitle || 'Unknown Portal', - short: 'K' - }; - } - } -}; - -/* Redemption "handlers" handle decoding and formatting for rewards. - * - * Redemption "decoders" are used for returning the primary attribute (key) from - * different types of items. Pretty self-explanatory. - * - * Redemption "formatters" are used for formatting specific types of password rewards. - * Right now, Ingress has resourceWithLevels (leveled resources) and modResource (mods). - * Resources with levels have levels, and mods have rarity. Format them appropriately. - */ -window.REDEEM_HANDLERS = { - resource: { - decode: function(type, acquired, key) {return 'RESOURCE';}, - format: function(acquired, group) { - var prefix = acquired.str.prefix || ''; - var suffix = acquired.str.suffix || ''; - return { - table: '+' + prefix + acquired.str.long + suffix + ' [' + acquired.count + ']', - html: acquired.count + '×' + prefix + acquired.str.short + suffix, - plain: acquired.count + '@' + acquired.str.short - }; - } - }, - - // A leveled resource, such as XMPs, resonators, or power cubes. - resourceWithLevels: { - decode: function(type, acquired, key) {return acquired[key].level;}, - format: function(acquired, level) { - var prefix = ''; - var suffix = ''; - return { - table: '' + prefix + 'L' + level + suffix + '' + acquired.str.long + ' [' + acquired.count + ']', - html: acquired.count + '×' + acquired.str.short + prefix + level + suffix, - plain: acquired.count + '@' + acquired.str.short + level - }; - } - }, - - // A mod, such as portal shields or link amplifiers. - modResource: { - decode: function(type, acquired, key) {return acquired[key].rarity;}, - format: function(acquired, rarity) { - var prefix = ''; - var suffix = ''; - var abbreviation = window.REDEEM_ABBREVIATE(rarity); - return { - table: '' + prefix + abbreviation + suffix + '' + acquired.str.long + ' [' + acquired.count + ']', - html: acquired.count + '×' + acquired.str.short + ':' + prefix + abbreviation + suffix, - plain: acquired.count + '@' + acquired.str.short + ':' + abbreviation - }; - } - } -}; - -/* Redemption "hints" hint at what an unknown resource might be from its object properties. - */ -window.REDEEM_HINTS = { - level: 'resourceWithLevels', - rarity: 'modResource' -}; - -/* Redemption errors. Very self-explanatory. - */ -window.REDEEM_ERRORS = { - ALREADY_REDEEMED: 'The passcode has already been redeemed.', - ALREADY_REDEEMED_BY_PLAYER : 'You have already redeemed this passcode.', - INVALID_PASSCODE: 'This passcode is invalid.' -}; +window.REDEEM_SHORT_NAMES = { + 'portal shield':'S', + 'force amp':'FA', + 'link amp':'LA', + 'heatsink':'H', + 'multihack':'M', + 'turret':'T', + 'unusual object':'U', + 'resonator':'R', + 'xmp burster':'X', + 'power cube':'C', + 'media':'M', + 'ultra strike':'US', +} /* These are HTTP status codes returned by the redemption API. * TODO: Move to another file? Use more generally across IITC? @@ -182,21 +26,8 @@ window.REDEEM_STATUSES = { 500: 'Internal server error' }; -/* Encouragement for people who got it in. - * Just for fun. - */ -window.REDEEM_ENCOURAGEMENT = [ - "Passcode accepted!", - "Access granted.", - "Resources acquired.", - "Power up!", - "Asset transfer in progress.", - "Well done, Agent.", - "Make the " + {'RESISTANCE' : 'Resistance', 'ENLIGHTENED' : 'Enlightened'}[PLAYER.team] + " proud!" -]; - window.handleRedeemResponse = function(data, textStatus, jqXHR) { - var passcode = this.passcode, to_dialog, dialog_title; + var passcode = this.passcode; if(data.error) { dialog({ @@ -206,14 +37,42 @@ window.handleRedeemResponse = function(data, textStatus, jqXHR) { return; } - var encouragement = window.REDEEM_ENCOURAGEMENT[Math.floor(Math.random() * window.REDEEM_ENCOURAGEMENT.length)]; + var format = "long"; + try { + format = localStorage["iitc-passcode-format"]; + } catch(e) {} - var html = '

' + encouragement + '

' + return html; +} - // Display it - dialog({ - title: 'Passcode: ' + passcode, - html: html - }); -}; +window.formatPasscodeShort = function(data) { + + if(data.other) { + var awards = data.other.map(window.escapeHtmlSpecialChars); + } else { + var awards = []; + } + + if(0 < data.xm) + awards.push(window.escapeHtmlSpecialChars(data.xm) + ' XM'); + if(0 < data.ap) + awards.push(window.escapeHtmlSpecialChars(data.ap) + ' AP'); + + if(data.inventory) { + data.inventory.forEach(function(type) { + type.awards.forEach(function(item) { + var str = ""; + if(item.count > 1) + str += item.count + " "; + + if(window.REDEEM_SHORT_NAMES[type.name.toLowerCase()]) { + var shortName = window.REDEEM_SHORT_NAMES[type.name.toLowerCase()]; + + var l = item.level; + if(0 < l) { + l = parseInt(l); + str += '' + shortName + l + ''; + } else { + str += shortName; + } + } else { // no short name known + var l = item.level; + if(0 < l) { + l = parseInt(l); + str += 'L' + l + ' '; + } + str += type.name; + } + + awards.push(str); + }); + }); + } + + return '

' + awards.join(', ') + '

' +} window.setupRedeem = function() { $("#redeem").keypress(function(e) { diff --git a/style.css b/style.css index 566cd4fb..40f4db50 100644 --- a/style.css +++ b/style.css @@ -943,7 +943,8 @@ td + td { font-size: 14px; } .redeemReward .itemlevel { - padding: 0 0.2em; + font-weight: bold; + text-shadow: 0 0 1px #000; /* L8 is hard to read on blue background */ } /* .redeem-result-table {