aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gruntfile.js216
-rw-r--r--app/manifest.json2
-rw-r--r--app/scripts/background.js56
-rw-r--r--app/scripts/contentscript.js29
-rw-r--r--app/scripts/inpage.js10
-rw-r--r--bower.json6
-rw-r--r--package.json6
7 files changed, 136 insertions, 189 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index 49e175366..8e3b23318 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -28,27 +28,16 @@ module.exports = function (grunt) {
// Watches files for changes and runs tasks based on the changed files
watch: {
- bower: {
- files: ['bower.json'],
- tasks: ['bowerInstall']
- },
js: {
files: ['<%= config.app %>/scripts/{,*/}*.js'],
options: {
livereload: '<%= connect.options.livereload %>'
},
- tasks: ['useminPrepare', 'usemin', 'browserify'],
+ tasks: ['browserify:dev'],
},
gruntfile: {
files: ['Gruntfile.js']
},
- styles: {
- files: ['<%= config.app %>/styles/{,*/}*.css'],
- tasks: [],
- options: {
- livereload: '<%= connect.options.livereload %>'
- }
- },
livereload: {
options: {
livereload: '<%= connect.options.livereload %>'
@@ -102,115 +91,28 @@ module.exports = function (grunt) {
}
},
- // Make sure code styles are up to par and there are no obvious mistakes
- jshint: {
- options: {
- jshintrc: '.jshintrc',
- reporter: require('jshint-stylish')
- },
- all: [
- 'Gruntfile.js',
- '<%= config.app %>/scripts/{,*/}*.js',
- '!<%= config.app %>/scripts/vendor/*',
- 'test/spec/{,*/}*.js'
- ]
- },
- mocha: {
- all: {
- options: {
- run: true,
- urls: ['http://localhost:<%= connect.options.port %>/index.html']
- }
- }
- },
-
- // Automatically inject Bower components into the HTML file
- bowerInstall: {
- app: {
- src: [
- '<%= config.app %>/*.html'
- ]
- }
- },
-
- // Reads HTML for usemin blocks to enable smart builds that automatically
- // concat, minify and revision files. Creates configurations in memory so
- // additional tasks can operate on them
- useminPrepare: {
- options: {
- dest: '<%= config.dist %>'
- },
- html: [
- '<%= config.app %>/popup.html',
- '<%= config.app %>/options.html'
- ]
- },
-
- // Performs rewrites based on rev and the useminPrepare configuration
- usemin: {
- options: {
- assetsDirs: ['<%= config.dist %>', '<%= config.dist %>/images']
- },
- html: ['<%= config.dist %>/{,*/}*.html'],
- css: ['<%= config.dist %>/styles/{,*/}*.css']
- },
-
- // The following *-min tasks produce minifies files in the dist folder
- imagemin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app %>/images',
- src: '{,*/}*.{gif,jpeg,jpg,png}',
- dest: '<%= config.dist %>/images'
- }]
- }
- },
-
- svgmin: {
- dist: {
- files: [{
- expand: true,
- cwd: '<%= config.app %>/images',
- src: '{,*/}*.svg',
- dest: '<%= config.dist %>/images'
- }]
- }
- },
-
- htmlmin: {
+ // Build js files
+ browserify: {
dist: {
+ files: {
+ '<%= config.dist %>/scripts/background.js': ['<%= config.app %>/scripts/background.js'],
+ '<%= config.dist %>/scripts/contentscript.js': ['<%= config.app %>/scripts/contentscript.js'],
+ '<%= config.dist %>/scripts/inpage.js': ['<%= config.app %>/scripts/inpage.js'],
+ },
+ },
+ dev: {
options: {
- // removeCommentsFromCDATA: true,
- // collapseWhitespace: true,
- // collapseBooleanAttributes: true,
- // removeAttributeQuotes: true,
- // removeRedundantAttributes: true,
- // useShortDoctype: true,
- // removeEmptyAttributes: true,
- // removeOptionalTags: true
+ watch: true,
},
- files: [{
- expand: true,
- cwd: '<%= config.app %>',
- src: '*.html',
- dest: '<%= config.dist %>'
- }]
- }
+ files: {
+ '<%= config.dist %>/scripts/background.js': ['<%= config.app %>/scripts/background.js'],
+ '<%= config.dist %>/scripts/contentscript.js': ['<%= config.app %>/scripts/contentscript.js'],
+ '<%= config.dist %>/scripts/inpage.js': ['<%= config.app %>/scripts/inpage.js'],
+ },
+ },
},
- // By default, your `index.html`'s <!-- Usemin block --> will take care of
- // minification. These next options are pre-configured if you do not wish
- // to use the Usemin blocks.
- // cssmin: {
- // dist: {
- // files: {
- // '<%= config.dist %>/styles/main.css': [
- // '<%= config.app %>/styles/{,*/}*.css'
- // ]
- // }
- // }
- // },
+ // minify js
uglify: {
dist: {
files: {
@@ -226,23 +128,10 @@ module.exports = function (grunt) {
}
}
},
- // concat: {
- // dist: {}
- // },
-
- browserify: {
- basic: {
- files: {
- '<%= config.dist %>/scripts/background.js': ['<%= config.app %>/scripts/background.js'],
- '<%= config.dist %>/scripts/contentscript.js': ['<%= config.app %>/scripts/contentscript.js'],
- '<%= config.dist %>/scripts/inpage.js': ['<%= config.app %>/scripts/inpage.js'],
- },
- },
- },
// Copies remaining files to places other tasks can use
copy: {
- dist: {
+ basic: {
files: [{
expand: true,
dot: true,
@@ -258,7 +147,19 @@ module.exports = function (grunt) {
'manifest.json',
]
}]
- }
+ },
+ dev: {
+ files: [{
+ expand: true,
+ dot: true,
+ cwd: '<%= config.app %>',
+ dest: '<%= config.dist %>',
+ src: [
+ 'images/{,*/}*.*',
+ 'scripts/chromereload.js',
+ ]
+ }]
+ },
},
// Auto buildnumber, exclude dev files. smart builds that event pages
@@ -279,6 +180,42 @@ module.exports = function (grunt) {
},
},
+ // Make sure code styles are up to par and there are no obvious mistakes
+ jshint: {
+ options: {
+ jshintrc: '.jshintrc',
+ reporter: require('jshint-stylish')
+ },
+ all: [
+ 'Gruntfile.js',
+ '<%= config.app %>/scripts/{,*/}*.js',
+ '!<%= config.app %>/scripts/vendor/*',
+ 'test/spec/{,*/}*.js'
+ ]
+ },
+
+ // Testing
+ mocha: {
+ all: {
+ options: {
+ run: true,
+ urls: ['http://localhost:<%= connect.options.port %>/index.html']
+ }
+ }
+ },
+
+ // The following *-min tasks produce minifies files in the dist folder
+ imagemin: {
+ dist: {
+ files: [{
+ expand: true,
+ cwd: '<%= config.app %>/images',
+ src: '{,*/}*.{gif,jpeg,jpg,png}',
+ dest: '<%= config.dist %>/images'
+ }]
+ }
+ },
+
// Compres dist files to package
compress: {
dist: {
@@ -299,17 +236,10 @@ module.exports = function (grunt) {
// Run some tasks in parallel to speed up build process
concurrent: {
- dev: [
- 'browserify',
- ],
dist: [
'imagemin',
- 'svgmin',
- 'browserify',
+ 'browserify:dist',
],
- test: [
- 'browserify',
- ]
},
@@ -318,9 +248,9 @@ module.exports = function (grunt) {
grunt.registerTask('dev', function () {
grunt.task.run([
'clean',
- 'concurrent:dev',
- 'connect:dev',
+ 'browserify:dev',
'copy',
+ 'connect:dev',
'watch',
]);
@@ -328,7 +258,7 @@ module.exports = function (grunt) {
grunt.registerTask('test', [
// 'jshint',
- 'concurrent:test',
+ 'browserify:dist',
'connect:test',
'copy',
@@ -339,7 +269,7 @@ module.exports = function (grunt) {
'clean',
'concurrent:dist',
'uglify',
- 'copy',
+ 'copy:dist',
'chromeManifest:dist',
'compress',
]);
diff --git a/app/manifest.json b/app/manifest.json
index 3a5456cce..cd23eee87 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -38,6 +38,6 @@
"storage"
],
"web_accessible_resources": [
- "scripts/web3.js"
+ "scripts/inpage.js"
]
} \ No newline at end of file
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 1557814b4..2dd5c88c7 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -1,8 +1,7 @@
-const web3 = require('web3')
-
const identitiesUrl = 'https://alpha.metamask.io/identities/'
const messagingChannelName = 'metamask'
+var pendingTxs = []
// setup badge click handler
chrome.browserAction.onClicked.addListener(function(activeTab) {
@@ -13,29 +12,42 @@ chrome.browserAction.onClicked.addListener(function(activeTab) {
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == messagingChannelName)
port.onMessage.addListener(function(msg) {
- console.log(msg)
- port.postMessage({answer: 'Madame'})
+ addTransaction(msg.payload)
})
})
+// listen to storage changes
+// chrome.storage.onChanged.addListener(function(changes, namespace) {
+// for (key in changes) {
+// var storageChange = changes[key]
+// console.log('Storage key "%s" in namespace "%s" changed. ' +
+// 'Old value was "%s", new value is "%s".',
+// key,
+// namespace,
+// storageChange.oldValue,
+// storageChange.newValue)
+// }
+// })
+
+// // Save it using the Chrome extension storage API.
+// chrome.storage.sync.set({'zzz': 22}, function() {
+// // Notify that we saved.
+// console.log('Settings saved')
+// })
+
// update badge text
-chrome.browserAction.setBadgeText({text: '2'})
+updateBadge()
-// listen to storage changes
-chrome.storage.onChanged.addListener(function(changes, namespace) {
- for (key in changes) {
- var storageChange = changes[key]
- console.log('Storage key "%s" in namespace "%s" changed. ' +
- 'Old value was "%s", new value is "%s".',
- key,
- namespace,
- storageChange.oldValue,
- storageChange.newValue)
- }
-})
-// Save it using the Chrome extension storage API.
-chrome.storage.sync.set({'zzz': 22}, function() {
- // Notify that we saved.
- console.log('Settings saved')
-}) \ No newline at end of file
+function addTransaction(tx){
+ pendingTxs.push(tx)
+ updateBadge()
+}
+
+function updateBadge(){
+ var label = ''
+ if (pendingTxs.length) {
+ label = String(pendingTxs.length)
+ }
+ chrome.browserAction.setBadgeText({text: label})
+} \ No newline at end of file
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js
index 2e50ae3a5..53ec9eef5 100644
--- a/app/scripts/contentscript.js
+++ b/app/scripts/contentscript.js
@@ -1,16 +1,25 @@
-const web3 = require('web3')
+const messageType = 'metamaskMessage'
-// inject script tag
+
+// inject in-page script
var scriptTag = document.createElement('script')
-scriptTag.src = chrome.extension.getURL('scripts/web3.js')
-scriptTag.onload = function() { debugger; this.parentNode.removeChild(this) }
+scriptTag.src = chrome.extension.getURL('scripts/inpage.js')
+scriptTag.onload = function() { this.parentNode.removeChild(this) }
var container = document.head || document.documentElement
container.appendChild(scriptTag)
// listen for messages
-var port = chrome.runtime.connect({name: 'metamask'})
-port.postMessage({joke: 'Knock knock'})
-port.onMessage.addListener(function(msg) {
- console.log(msg)
- // port.postMessage({answer: 'Madame'})
-}) \ No newline at end of file
+var metamaskPlugin = chrome.runtime.connect({name: 'metamask'})
+// metamaskPlugin.onMessage.addListener(function(msg) {
+// console.log(msg)
+// })
+
+window.addEventListener('message', receiveMessage, false);
+function receiveMessage(event){
+ var msg = event.data
+ // validate message type
+ if (typeof msg !== 'object') return
+ if (msg.type !== messageType) return
+ // forward message
+ metamaskPlugin.postMessage(msg)
+} \ No newline at end of file
diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js
index 02bf226cb..006a8e0bb 100644
--- a/app/scripts/inpage.js
+++ b/app/scripts/inpage.js
@@ -2,14 +2,20 @@ const web3 = require('web3')
const MetamaskProvider = require('./lib/metamask-provider.js')
const rpcUrl = 'https://rpc.metamask.io'
+const messageType = 'metamaskMessage'
+const documentOrigin = window.location.origin
var provider = new MetamaskProvider(forwardPayload, rpcUrl)
web3.setProvider(provider)
// injecting web3
+console.log('Metamask injected web3')
window.web3 = web3
-function forwardPayload(){
- debugger
+function forwardPayload(payload){
+ window.postMessage({
+ type: messageType,
+ payload: payload,
+ }, documentOrigin)
} \ No newline at end of file
diff --git a/bower.json b/bower.json
deleted file mode 100644
index 450275da3..000000000
--- a/bower.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "metamask",
- "version": "0.0.0",
- "dependencies": {},
- "devDependencies": {}
-}
diff --git a/package.json b/package.json
index 424dd8d3a..183ccf6c9 100644
--- a/package.json
+++ b/package.json
@@ -8,23 +8,19 @@
},
"devDependencies": {
"grunt": "~0.4.1",
- "grunt-bower-install": "~1.0.0",
"grunt-browserify": "^4.0.0",
"grunt-chrome-manifest": "~0.2.0",
"grunt-concurrent": "~0.5.0",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-compress": "~0.9.1",
- "grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.7.1",
"grunt-contrib-copy": "~0.5.0",
- "grunt-contrib-cssmin": "~0.9.0",
- "grunt-contrib-htmlmin": "~0.2.0",
"grunt-contrib-imagemin": "~0.7.1",
+ "grunt-svgmin": "~0.4.0",
"grunt-contrib-jshint": "~0.9.2",
"grunt-contrib-uglify": "~0.4.0",
"grunt-contrib-watch": "~0.6.1",
"grunt-mocha": "~0.4.10",
- "grunt-svgmin": "~0.4.0",
"grunt-usemin": "~2.1.0",
"jshint-stylish": "~0.1.5",
"load-grunt-tasks": "~0.4.0",