mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
d8c94fca75
Deriving from the new address image map repository I've added here: https://github.com/MetaMask/ethereum-contract-icons With this PR, images for addresses added to that repository will be shown instead of jazzicons in MetaMask.
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
var iconFactory
|
|
const isValidAddress = require('ethereumjs-util').isValidAddress
|
|
const toChecksumAddress = require('ethereumjs-util').toChecksumAddress
|
|
const iconMap = require('ethereum-contract-icons')
|
|
|
|
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) {
|
|
const addr = toChecksumAddress(address)
|
|
if (iconExistsFor(addr)) {
|
|
return imageElFor(addr)
|
|
}
|
|
return this.generateIdenticonSvg(address, diameter)
|
|
}
|
|
|
|
// returns svg dom element
|
|
IconFactory.prototype.generateIdenticonSvg = function (address, diameter) {
|
|
var cacheId = `${address}:${diameter}`
|
|
// check cache, lazily generate and populate cache
|
|
var identicon = this.cache[cacheId] || (this.cache[cacheId] = this.generateNewIdenticon(address, diameter))
|
|
// create a clean copy so you can modify it
|
|
var cleanCopy = identicon.cloneNode(true)
|
|
return cleanCopy
|
|
}
|
|
|
|
// creates a new identicon
|
|
IconFactory.prototype.generateNewIdenticon = function (address, diameter) {
|
|
var numericRepresentation = jsNumberForAddress(address)
|
|
var identicon = this.jazzicon(diameter, numericRepresentation)
|
|
return identicon
|
|
}
|
|
|
|
// util
|
|
|
|
function iconExistsFor (address) {
|
|
return (address in iconMap) && isValidAddress(address)
|
|
}
|
|
|
|
function imageElFor (address) {
|
|
const fileName = iconMap[address]
|
|
const path = `images/contract/${fileName}`
|
|
const img = document.createElement('img')
|
|
img.src = path
|
|
img.style.width = '100%'
|
|
return img
|
|
}
|
|
|
|
function jsNumberForAddress (address) {
|
|
var addr = address.slice(2, 10)
|
|
var seed = parseInt(addr, 16)
|
|
return seed
|
|
}
|
|
|