@@ -136,81 +136,42 @@ function runTab (opts, localRegistry) {
var el = yo`
${settings(container, self)}
- ${contractDropdown(event, self)}
+ ${contractDropdown(self.event, self)}
${recorderCard.render()}
${self._view.instanceContainer}
`
container.appendChild(el)
- /* -------------------------
- HELPER FUNCTIONS
- --------------------------- */
-
- // DROPDOWN
- var selectExEnv = el.querySelector('#selectExEnvOptions')
-
- function clearInstanceList (self) {
- event.trigger('clearInstance', [])
- }
-
- function setFinalContext () {
- // set the final context. Cause it is possible that this is not the one we've originaly selected
- selectExEnv.value = executionContext.getProvider()
- fillAccountsList(el, self)
- event.trigger('clearInstance', [])
- }
-
- selectExEnv.addEventListener('change', function (event) {
- let context = selectExEnv.options[selectExEnv.selectedIndex].value
- executionContext.executionContextChange(context, null, () => {
- modalDialogCustom.confirm(null, 'Are you sure you want to connect to an ethereum node?', () => {
- modalDialogCustom.prompt(null, 'Web3 Provider Endpoint', 'http://localhost:8545', (target) => {
- executionContext.setProviderFromEndpoint(target, context, (alertMsg) => {
- if (alertMsg) {
- modalDialogCustom.alert(alertMsg)
- }
- setFinalContext()
- })
- }, setFinalContext)
- }, setFinalContext)
- }, (alertMsg) => {
- modalDialogCustom.alert(alertMsg)
- }, setFinalContext)
- })
-
- selectExEnv.value = executionContext.getProvider()
- executionContext.event.register('contextChanged', (context, silent) => {
- setFinalContext()
- })
-
- fillAccountsList(el, self)
- setInterval(() => {
- updateAccountBalances(container, self)
- }, 10000)
-
- event.register('clearInstance', () => {
- var instanceContainer = self._view.instanceContainer
- var instanceContainerTitle = self._view.instanceContainerTitle
- instanceContainer.innerHTML = '' // clear the instances list
- instanceContainer.appendChild(instanceContainerTitle)
- instanceContainer.appendChild(self._view.noInstancesText)
- })
return { render () { return container } }
}
+var accountListCallId = 0
+var loadedAccounts = {}
function fillAccountsList (container, self) {
- var $txOrigin = $(container.querySelector('#txorigin'))
- $txOrigin.empty()
- self._deps.udapp.getAccounts((err, accounts) => {
- if (err) { addTooltip(`Cannot get account list: ${err}`) }
- if (accounts && accounts[0]) {
- for (var a in accounts) { $txOrigin.append($('
').val(accounts[a]).text(accounts[a])) }
- $txOrigin.val(accounts[0])
- } else {
- $txOrigin.val('unknown')
- }
- })
+ accountListCallId++
+ (function (callid) {
+ var txOrigin = container.querySelector('#txorigin')
+ self._deps.udapp.getAccounts((err, accounts) => {
+ if (accountListCallId > callid) return
+ accountListCallId++
+ if (err) { addTooltip(`Cannot get account list: ${err}`) }
+ for (var loadedaddress in loadedAccounts) {
+ if (accounts.indexOf(loadedaddress) === -1) {
+ txOrigin.removeChild(txOrigin.querySelector('option[value="' + loadedaddress + '"]'))
+ delete loadedAccounts[loadedaddress]
+ }
+ }
+ for (var i in accounts) {
+ var address = accounts[i]
+ if (!loadedAccounts[address]) {
+ txOrigin.appendChild(yo`
`)
+ loadedAccounts[address] = 1
+ }
+ }
+ txOrigin.setAttribute('value', accounts[0])
+ })
+ })(accountListCallId)
}
function updateAccountBalances (container, self) {
@@ -426,7 +387,7 @@ function contractDropdown (events, self) {
var constructor = txHelper.getConstructorInterface(selectedContract.contract.object.abi)
self._deps.filePanel.compilerMetadata().metadataOf(selectedContract.name, (error, contractMetadata) => {
if (error) return self._deps.logCallback(`creation of ${selectedContract.name} errored: ` + error)
- if (contractMetadata.autoDeployLib) {
+ if (!contractMetadata || (contractMetadata && contractMetadata.autoDeployLib)) {
txFormat.buildData(selectedContract.name, selectedContract.contract.object, self._deps.compiler.getContracts(), true, constructor, args, (error, data) => {
createInstanceCallback(error, selectedContract, data)
}, (msg) => {
@@ -513,15 +474,22 @@ function contractDropdown (events, self) {
function settings (container, self) {
// VARIABLES
var net = yo`
`
- const updateNetwork = () => {
- executionContext.detectNetwork((err, { id, name } = {}) => {
- if (err) {
- console.error(err)
- net.innerHTML = 'can\'t detect network '
- } else {
- net.innerHTML = `
${name} (${id || '-'})`
- }
- })
+ var networkcallid = 0
+ const updateNetwork = (cb) => {
+ networkcallid++
+ (function (callid) {
+ executionContext.detectNetwork((err, { id, name } = {}) => {
+ if (networkcallid > callid) return
+ networkcallid++
+ if (err) {
+ console.error(err)
+ net.innerHTML = 'can\'t detect network '
+ } else {
+ net.innerHTML = `
${name} (${id || '-'})`
+ }
+ if (cb) cb(err, {id, name})
+ })
+ })(networkcallid)
}
var environmentEl = yo`
@@ -530,7 +498,7 @@ function settings (container, self) {
${net}
-