1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

initial svg notifications

This commit is contained in:
kumavis 2016-06-22 19:28:11 -07:00
parent a4ebb7656a
commit 122576a790
4 changed files with 121 additions and 21 deletions

View File

@ -271,6 +271,13 @@ function newUnsignedMessage (msgParams, cb) {
} }
} }
createTxNotification({
title: 'New Unsigned Transaction',
txParams: {to: '0xabc', from: '0xdef'},
// confirm: idStore.approveTransaction.bind(idStore, txData.id, noop),
// cancel: idStore.cancelTransaction.bind(idStore, txData.id),
})
function addUnconfirmedTx (txParams, onTxDoneCb) { function addUnconfirmedTx (txParams, onTxDoneCb) {
idStore.addUnconfirmedTransaction(txParams, onTxDoneCb, function (err, txData) { idStore.addUnconfirmedTransaction(txParams, onTxDoneCb, function (err, txData) {
if (err) return onTxDoneCb(err) if (err) return onTxDoneCb(err)

View File

@ -1,5 +1,8 @@
const createId = require('hat') const createId = require('hat')
const svg = require('virtual-dom/virtual-hyperscript/svg')
const stringifyVdom = require('virtual-dom-stringify')
const uiUtils = require('../../../ui/app/util') const uiUtils = require('../../../ui/app/util')
const renderPendingTx = require('../../../ui/app/components/pending-tx').prototype.renderGeneric
var notificationHandlers = {} var notificationHandlers = {}
module.exports = { module.exports = {
@ -57,23 +60,30 @@ function createTxNotification (opts) {
'data: ' + uiUtils.dataSize(opts.txParams.data), 'data: ' + uiUtils.dataSize(opts.txParams.data),
].join('\n') ].join('\n')
var id = createId() transactionNotificationSVG(opts, function(err, source){
chrome.notifications.create(id, {
type: 'basic', var imageUrl = 'data:image/svg+xml;utf8,' + encodeURIComponent(source)
requireInteraction: true,
iconUrl: '/images/icon-128.png', var id = createId()
title: opts.title, chrome.notifications.create(id, {
message: message, type: 'image',
buttons: [{ // requireInteraction: true,
title: 'confirm', iconUrl: '/images/icon-128.png',
}, { imageUrl: imageUrl,
title: 'cancel', title: opts.title,
}], message: message,
buttons: [{
title: 'confirm',
}, {
title: 'cancel',
}],
})
notificationHandlers[id] = {
confirm: opts.confirm,
cancel: opts.cancel,
}
}) })
notificationHandlers[id] = {
confirm: opts.confirm,
cancel: opts.cancel,
}
} }
function createMsgNotification (opts) { function createMsgNotification (opts) {
@ -103,3 +113,78 @@ function createMsgNotification (opts) {
cancel: opts.cancel, cancel: opts.cancel,
} }
} }
function transactionNotificationSVG(opts, cb){
var state = {
txData: {
txParams: {
from: '0xabcd',
},
},
identities: {
},
accounts: {
},
}
const unmountComponentAtNode = require('react-dom').unmountComponentAtNode
const findDOMNode = require('react-dom').findDOMNode
const render = require('react-dom').render
const h = require('react-hyperscript')
const MetaMaskUiCss = require('../../../ui/css')
var css = MetaMaskUiCss()
var container = document.createElement('div')
var confirmView = h('div', [
h('style', css),
renderPendingTx(h, state),
])
render(confirmView, container, function ready(){
var rootElement = findDOMNode(this)
var source = rootElement.outerHTML
unmountComponentAtNode(container)
var vnode = svgWrapper()
var tagSource = stringifyVdom(vnode)
// workaround for https://github.com/alexmingoia/virtual-dom-stringify/issues/26
tagSource = tagSource.split('foreignobject').join('foreignObject')
// insert content into svg wrapper
tagSource = tagSource.split('{{content}}').join(source)
cb(null, tagSource)
})
}
function svgWrapper(){
var h = svg
return (
h('svg', {
'xmlns': 'http://www.w3.org/2000/svg',
// 'width': '300',
// 'height': '200',
'width': '450',
'height': '300',
}, [
h('rect', {
'x': '0',
'y': '0',
'width': '100%',
'height': '100%',
'fill': 'white',
}),
h('foreignObject', {
'x': '0',
'y': '0',
'width': '100%',
'height': '100%',
}, [
h('body', {
xmlns: 'http://www.w3.org/1999/xhtml',
},'{{content}}')
])
])
)
}

View File

@ -62,6 +62,8 @@
"textarea-caret": "^3.0.1", "textarea-caret": "^3.0.1",
"three.js": "^0.73.2", "three.js": "^0.73.2",
"through2": "^2.0.1", "through2": "^2.0.1",
"virtual-dom": "^2.1.1",
"virtual-dom-stringify": "^3.0.1",
"vreme": "^3.0.2", "vreme": "^3.0.2",
"web3": "ethereum/web3.js#0.16.0", "web3": "ethereum/web3.js#0.16.0",
"web3-provider-engine": "^7.8.1", "web3-provider-engine": "^7.8.1",

View File

@ -16,6 +16,10 @@ function PendingTx () {
PendingTx.prototype.render = function () { PendingTx.prototype.render = function () {
var state = this.props var state = this.props
return this.renderGeneric(h, state)
}
PendingTx.prototype.renderGeneric = function (h, state) {
var txData = state.txData var txData = state.txData
var txParams = txData.txParams || {} var txParams = txData.txParams || {}
@ -24,6 +28,7 @@ PendingTx.prototype.render = function () {
var account = state.accounts[address] || { address: address } var account = state.accounts[address] || { address: address }
return ( return (
h('.transaction', { h('.transaction', {
key: txData.id, key: txData.id,
}, [ }, [
@ -36,11 +41,11 @@ PendingTx.prototype.render = function () {
}, 'Submit Transaction'), }, 'Submit Transaction'),
// account that will sign // account that will sign
h(AccountPanel, { // h(AccountPanel, {
showFullAddress: true, // showFullAddress: true,
identity: identity, // identity: identity,
account: account, // account: account,
}), // }),
// tx data // tx data
h('.tx-data.flex-column.flex-justify-center.flex-grow.select-none', [ h('.tx-data.flex-column.flex-justify-center.flex-grow.select-none', [
@ -71,6 +76,7 @@ PendingTx.prototype.render = function () {
}, 'Send'), }, 'Send'),
]), ]),
]) ])
) )
} }