From 30427c49038bd49d6c8fc64ab7cfa44e189baa14 Mon Sep 17 00:00:00 2001 From: Zac Mitton Date: Mon, 6 Jun 2016 14:06:06 -0400 Subject: [PATCH 1/3] switched to icons instead of pictures --- app/images/ethereum-network.jpg | Bin 10807 -> 0 bytes app/images/morden-test-network.jpg | Bin 10517 -> 0 bytes app/images/no-connection.jpg | Bin 6946 -> 0 bytes app/images/unknown-private-network.jpg | Bin 3962 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/images/ethereum-network.jpg delete mode 100644 app/images/morden-test-network.jpg delete mode 100644 app/images/no-connection.jpg delete mode 100644 app/images/unknown-private-network.jpg diff --git a/app/images/ethereum-network.jpg b/app/images/ethereum-network.jpg deleted file mode 100644 index 61cb000ed41ae14a21c7a2d51819273750224483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10807 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 S$8-sxlm#CvR>8@N`TqwurHZNm diff --git a/app/images/morden-test-network.jpg b/app/images/morden-test-network.jpg deleted file mode 100644 index 458708c782511651d2a3352fa5c05a56f885af0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10517 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 aJnH3o0GTg99NQoye>f5P(XY^7&HfMDO^RIr diff --git a/app/images/unknown-private-network.jpg b/app/images/unknown-private-network.jpg deleted file mode 100644 index b8a5a9bbfe9b9a0627f0dff41df80203318389d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3962 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 UMQ_28#gX6Vo9WN Date: Mon, 6 Jun 2016 11:22:04 -0700 Subject: [PATCH 2/3] Version 2.3.0 --- CHANGELOG.md | 2 ++ app/manifest.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64200fe6d..ea5da782e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Current Master +## 2.3.0 2016-06-06 + - Show network status in title bar - Added seed word recovery to config screen. - Clicking network status indicator now reveals a provider menu. diff --git a/app/manifest.json b/app/manifest.json index ce157bdf3..8cb797e03 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_appName__", "short_name": "Metamask", - "version": "2.2.0", + "version": "2.3.0", "manifest_version": 2, "description": "__MSG_appDescription__", "icons": { From d5c378b09aff6e56585f9d05779d72c4e7919d5b Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 6 Jun 2016 14:05:13 -0700 Subject: [PATCH 3/3] Cache identicons Fixes #197 Also as a side effect, by creating this `iconFactory.cache` object, we have a convenient place for specifying stock icons for known contracts! We can just hard-code image addresses in the `ui/lib/icon-factory.js` cache instantiation, and those values will be injected into the identicon image tag `src` attributes. --- CHANGELOG.md | 2 ++ test/unit/lib/icon-factory-test.js | 31 ++++++++++++++++++ ui/app/components/identicon.js | 17 ++++------ ui/lib/icon-factory.js | 52 ++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 test/unit/lib/icon-factory-test.js create mode 100644 ui/lib/icon-factory.js diff --git a/CHANGELOG.md b/CHANGELOG.md index ea5da782e..7763e5211 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Current Master +- Cache identicon images to optimize for long lists of transactions. + ## 2.3.0 2016-06-06 - Show network status in title bar diff --git a/test/unit/lib/icon-factory-test.js b/test/unit/lib/icon-factory-test.js new file mode 100644 index 000000000..2f24d408c --- /dev/null +++ b/test/unit/lib/icon-factory-test.js @@ -0,0 +1,31 @@ +const assert = require('assert') +const sinon = require('sinon') + +const path = require('path') +const IconFactoryGen = require(path.join(__dirname, '..', '..', '..', 'ui', 'lib', 'icon-factory.js')) + +describe('icon-factory', function() { + let iconFactory, address, diameter + + beforeEach(function() { + iconFactory = IconFactoryGen((d,n) => 'stubicon') + address = '0x012345671234567890' + diameter = 50 + }) + + it('should return a data-uri string for any address and diameter', function() { + const output = iconFactory.iconForAddress(address, diameter) + assert.ok(output.indexOf('data:image/svg') === 0) + assert.equal(output, iconFactory.cache[address][diameter]) + }) + + it('should default to cache first', function() { + const testOutput = 'foo' + const mockSizeCache = {} + mockSizeCache[diameter] = testOutput + iconFactory.cache[address] = mockSizeCache + + const output = iconFactory.iconForAddress(address, diameter) + assert.equal(output, testOutput) + }) +}) diff --git a/ui/app/components/identicon.js b/ui/app/components/identicon.js index ef625cc62..fd61b3125 100644 --- a/ui/app/components/identicon.js +++ b/ui/app/components/identicon.js @@ -1,8 +1,10 @@ const Component = require('react').Component const h = require('react-hyperscript') const inherits = require('util').inherits -const jazzicon = require('jazzicon') const findDOMNode = require('react-dom').findDOMNode +const jazzicon = require('jazzicon') +const iconFactoryGen = require('../../lib/icon-factory') +const iconFactory = iconFactoryGen(jazzicon) module.exports = IdenticonComponent @@ -35,21 +37,14 @@ IdenticonComponent.prototype.componentDidMount = function(){ var address = state.address if (!address) return - var numericRepresentation = jsNumberForAddress(address) var container = findDOMNode(this) - // jazzicon with hack to fix inline svg error + var diameter = state.diameter || this.defaultDiameter - var identicon = jazzicon(diameter, numericRepresentation) - var identiconSrc = identicon.innerHTML - var dataUri = 'data:image/svg+xml;charset=utf-8,'+encodeURIComponent(identiconSrc) + var dataUri = iconFactory.iconForAddress(address, diameter) + var img = document.createElement('img') img.src = dataUri container.appendChild(img) } -function jsNumberForAddress(address) { - var addr = address.slice(2, 10) - var seed = parseInt(addr, 16) - return seed -} diff --git a/ui/lib/icon-factory.js b/ui/lib/icon-factory.js new file mode 100644 index 000000000..1b1df9490 --- /dev/null +++ b/ui/lib/icon-factory.js @@ -0,0 +1,52 @@ +var iconFactory + +module.exports = function(jazzicon) { + if (!iconFactory) { + iconFactory = new IconFactory(jazzicon) + } + return iconFactory +} + +function IconFactory(jazzicon) { + this.jazzicon = jazzicon + this.cache = {} +} + +IconFactory.prototype.iconForAddress = function(address, diameter) { + if (this.isCached(address, diameter)) { + return this.cache[address][diameter] + } + + const dataUri = this.generateNewUri(address, diameter) + this.cacheIcon(address, diameter, dataUri) + return dataUri +} + +IconFactory.prototype.generateNewUri = function(address, diameter) { + var numericRepresentation = jsNumberForAddress(address) + var identicon = this.jazzicon(diameter, numericRepresentation) + var identiconSrc = identicon.innerHTML + var dataUri = 'data:image/svg+xml;charset=utf-8,'+encodeURIComponent(identiconSrc) + return dataUri +} + +IconFactory.prototype.cacheIcon = function(address, diameter, icon) { + if (!(address in this.cache)) { + var sizeCache = {} + sizeCache[diameter] = icon + return this.cache[address] = sizeCache + + } else { + return this.cache[address][diameter] = icon + } +} + +IconFactory.prototype.isCached = function(address, diameter) { + return address in this.cache && diameter in this.cache[address] +} + +function jsNumberForAddress(address) { + var addr = address.slice(2, 10) + var seed = parseInt(addr, 16) + return seed +}