Commit 43e0a318 authored by Dave Hoover's avatar Dave Hoover

Supporting an injected web3

parent f738864d
...@@ -104,6 +104,11 @@ ...@@ -104,6 +104,11 @@
<strong>JavaScript VM</strong> <strong>JavaScript VM</strong>
<p>Execution environment does not connect to any node, everything is local and in memory only.</p> <p>Execution environment does not connect to any node, everything is local and in memory only.</p>
</label> </label>
<label for="injected">
<input id="injected" type="radio" value="injected" checked name="executionContext">
<strong>Injected Web3</strong>
<p>Execution environment has been provided by Mist or similar provider.</p>
</label>
<label for="web3"> <label for="web3">
<input id="web3" type="radio" value="web3" name="executionContext"> <input id="web3" type="radio" value="web3" name="executionContext">
<strong>Web3 Provider</strong> <strong>Web3 Provider</strong>
......
...@@ -8,17 +8,22 @@ var utils = require('./utils'); ...@@ -8,17 +8,22 @@ var utils = require('./utils');
function Renderer (editor, compiler, updateFiles) { function Renderer (editor, compiler, updateFiles) {
var detailsOpen = {}; var detailsOpen = {};
var executionContext = 'vm'; var executionContext = web3.injected ? 'injected' : 'vm';
// Forcing all of this setup into its own scope. // Forcing all of this setup into its own scope.
(function () { (function () {
function executionContextChange (ev) { function executionContextChange (ev) {
if (ev.target.value === 'web3' && !confirm('Are you sure you want to connect to a local ethereum node?')) { if (ev.target.value === 'web3' && !confirm('Are you sure you want to connect to a local ethereum node?')) {
$vmToggle.get(0).checked = true; setExecutionContextRadio();
executionContext = 'vm'; } else if (ev.target.value === 'injected' && injectedWeb3Provider === undefined) {
setExecutionContextRadio();
} else { } else {
executionContext = ev.target.value; executionContext = ev.target.value;
if (executionContext === 'web3') {
setProviderFromEndpoint(); setProviderFromEndpoint();
} else if (executionContext === 'injected') {
web3.setProvider(injectedWeb3Provider);
}
} }
compiler.compile(); compiler.compile();
} }
...@@ -32,6 +37,21 @@ function Renderer (editor, compiler, updateFiles) { ...@@ -32,6 +37,21 @@ function Renderer (editor, compiler, updateFiles) {
} }
} }
function setExecutionContextRadio () {
if (executionContext === 'injected') {
$injectedToggle.get(0).checked = true;
} else if (executionContext === 'vm') {
$vmToggle.get(0).checked = true;
} else if (executionContext === 'web3') {
$web3Toggle.get(0).checked = true;
}
}
if (web3.injected) {
var injectedWeb3Provider = web3.currentProvider;
}
var $injectedToggle = $('#injected');
var $vmToggle = $('#vm'); var $vmToggle = $('#vm');
var $web3Toggle = $('#web3'); var $web3Toggle = $('#web3');
var $web3endpoint = $('#web3Endpoint'); var $web3endpoint = $('#web3Endpoint');
...@@ -40,8 +60,9 @@ function Renderer (editor, compiler, updateFiles) { ...@@ -40,8 +60,9 @@ function Renderer (editor, compiler, updateFiles) {
$web3endpoint.val('ipc'); $web3endpoint.val('ipc');
} }
$vmToggle.get(0).checked = true; setExecutionContextRadio();
$injectedToggle.on('change', executionContextChange);
$vmToggle.on('change', executionContextChange); $vmToggle.on('change', executionContextChange);
$web3Toggle.on('change', executionContextChange); $web3Toggle.on('change', executionContextChange);
$web3endpoint.on('change', function () { $web3endpoint.on('change', function () {
......
...@@ -5,6 +5,7 @@ var Web3 = require('web3'); ...@@ -5,6 +5,7 @@ var Web3 = require('web3');
if (typeof web3 !== 'undefined') { if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider); web3 = new Web3(web3.currentProvider);
web3.injected = true;
} else { } else {
web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment