modalPrompt, modalConfirm

pull/1/head
Rob Stupay 7 years ago committed by yann300
parent 13d78ece5b
commit c8ed134f7d
  1. 13
      src/app/files/chromeCloudStorageSync.js
  2. 37
      src/app/files/file-explorer.js
  3. 24
      src/app/panels/file-panel.js
  4. 6
      src/app/tabs/run-tab.js
  5. 28
      src/app/ui/modal-dialog-custom.js
  6. 54
      src/app/ui/modaldialog.js
  7. 31
      src/execution-context.js
  8. 9
      src/lib/gist-handler.js

@ -1,5 +1,6 @@
/* global confirm, chrome */ /* global chrome */
'use strict' 'use strict'
var modalDialogCustom = require('../ui/modal-dialog-custom')
module.exports = function (filesProviders) { module.exports = function (filesProviders) {
if (typeof chrome === 'undefined' || !chrome || !chrome.storage || !chrome.storage.sync) { if (typeof chrome === 'undefined' || !chrome || !chrome.storage || !chrome.storage.sync) {
@ -13,7 +14,13 @@ module.exports = function (filesProviders) {
function check (key) { function check (key) {
chrome.storage.sync.get(key, function (resp) { chrome.storage.sync.get(key, function (resp) {
console.log('comparing to cloud', key, resp) console.log('comparing to cloud', key, resp)
if (typeof resp[key] !== 'undefined' && obj[key] !== resp[key] && confirm('Overwrite "' + key + '"? Click Ok to overwrite local file with file from cloud. Cancel will push your local file to the cloud.')) {
function confirmDialog (callback) {
modalDialogCustom.confirm('', 'Overwrite "' + key + '"? Click Ok to overwrite local file with file from cloud. Cancel will push your local file to the cloud.', () => { callback(true) }, () => { callback(false) })
}
confirmDialog(function (theResult) {
if (typeof resp[key] !== 'undefined' && obj[key] !== resp[key] && theResult) {
console.log('Overwriting', key) console.log('Overwriting', key)
filesProviders['browser'].set(key, resp[key]) filesProviders['browser'].set(key, resp[key])
} else { } else {
@ -26,6 +33,8 @@ module.exports = function (filesProviders) {
} }
}) })
} }
})
done++ done++
if (done >= count) { if (done >= count) {
chrome.storage.sync.set(obj, function () { chrome.storage.sync.set(obj, function () {

@ -1,4 +1,4 @@
/* global FileReader, confirm */ /* global FileReader */
var yo = require('yo-yo') var yo = require('yo-yo')
var csjs = require('csjs-inject') var csjs = require('csjs-inject')
var Treeview = require('ethereum-remix').ui.TreeView var Treeview = require('ethereum-remix').ui.TreeView
@ -133,8 +133,7 @@ function fileExplorer (appAPI, files) {
this.events = events this.events = events
var api = {} var api = {}
api.addFile = function addFile (file) { api.addFile = function addFile (file) {
var name = files.type + '/' + file.name function loadFile () {
if (!files.exists(name) || confirm('The file ' + name + ' already exists! Would you like to overwrite it?')) {
var fileReader = new FileReader() var fileReader = new FileReader()
fileReader.onload = function (event) { fileReader.onload = function (event) {
var success = files.set(name, event.target.result) var success = files.set(name, event.target.result)
@ -143,6 +142,13 @@ function fileExplorer (appAPI, files) {
} }
fileReader.readAsText(file) fileReader.readAsText(file)
} }
var name = files.type + '/' + file.name
if (!files.exists(name)) {
loadFile()
} else {
modalDialogCustom.confirm(null, `The file ${name} already exists! Would you like to overwrite it?`, () => { loadFile() })
}
} }
this.api = api this.api = api
@ -193,10 +199,10 @@ function fileExplorer (appAPI, files) {
var path = label.dataset.path var path = label.dataset.path
var isFolder = !!~label.className.indexOf('folder') var isFolder = !!~label.className.indexOf('folder')
if (isFolder) path += '/' if (isFolder) path += '/'
if (confirm(`Do you really want to delete "${path}" ?`)) { modalDialogCustom.confirm(null, `Do you really want to delete "${path}" ?`, () => {
li.parentElement.removeChild(li) li.parentElement.removeChild(li)
removeSubtree(files, path, isFolder) removeSubtree(files, path, isFolder)
} })
} }
function editModeOn (event) { function editModeOn (event) {
@ -213,12 +219,7 @@ function fileExplorer (appAPI, files) {
function editModeOff (event) { function editModeOff (event) {
var label = this var label = this
if (event.which === 13) event.preventDefault() function rename () {
if ((event.type === 'blur' || event.which === 27 || event.which === 13) && label.getAttribute('contenteditable')) {
var isFolder = label.className.indexOf('folder') !== -1
var save = textUnderEdit !== label.innerText
if (save && event.which !== 13) save = confirm('Do you want to rename?')
if (save) {
var newPath = label.dataset.path var newPath = label.dataset.path
newPath = newPath.split('/') newPath = newPath.split('/')
newPath[newPath.length - 1] = label.innerText newPath[newPath.length - 1] = label.innerText
@ -235,10 +236,22 @@ function fileExplorer (appAPI, files) {
modalDialogCustom.alert('File already exists.') modalDialogCustom.alert('File already exists.')
label.innerText = textUnderEdit label.innerText = textUnderEdit
} }
} else label.innerText = textUnderEdit }
function cancelRename () {
label.innerText = textUnderEdit
label.removeAttribute('contenteditable') label.removeAttribute('contenteditable')
label.classList.remove(css.rename) label.classList.remove(css.rename)
} }
if (event.which === 13) event.preventDefault()
if ((event.type === 'blur' || event.which === 27 || event.which === 13) && label.getAttribute('contenteditable')) {
var isFolder = label.className.indexOf('folder') !== -1
var save = textUnderEdit !== label.innerText
if (save && event.which !== 13) {
modalDialogCustom.confirm(null, `Do you want to rename?`, () => { rename() }, () => { cancelRename() })
}
}
} }
function renameSubtree (label, dontcheck) { function renameSubtree (label, dontcheck) {

@ -1,4 +1,3 @@
/* global confirm, prompt */
var async = require('async') var async = require('async')
var $ = require('jquery') var $ = require('jquery')
var csjs = require('csjs-inject') var csjs = require('csjs-inject')
@ -314,13 +313,15 @@ function filepanel (appAPI, filesProvider) {
modalDialogCustom.alert('Failed to create gist: ' + (data || 'Unknown transport error')) modalDialogCustom.alert('Failed to create gist: ' + (data || 'Unknown transport error'))
} else { } else {
data = JSON.parse(data) data = JSON.parse(data)
if (data.html_url && confirm('Created a gist at ' + data.html_url + ' Would you like to open it in a new window?')) { if (data.html_url) {
modalDialogCustom.confirm(null, `Created a gist at ${data.html_url}. Would you like to open it in a new window?`, () => {
window.open(data.html_url, '_blank') window.open(data.html_url, '_blank')
})
} }
} }
} }
if (confirm('Are you sure you want to publish all your files anonymously as a public gist on github.com?')) {
// package only files from the browser storage. function toGist () {
packageFiles(filesProvider['browser'], (error, packaged) => { packageFiles(filesProvider['browser'], (error, packaged) => {
if (error) { if (error) {
console.log(error) console.log(error)
@ -339,18 +340,18 @@ function filepanel (appAPI, filesProvider) {
} }
}) })
} }
modalDialogCustom.confirm(null, `Are you very sure you want to publish all your files anonymously as a public gist on github.com?`, () => {
toGist()
})
} }
// ------------------ copy files -------------- // ------------------ copy files --------------
function copyFiles () { function copyFiles () {
var target = prompt( modalDialogCustom.prompt(null, 'To which other browser-solidity instance do you want to copy over all files?', 'https://ethereum.github.io/browser-solidity/', (target) => {
'To which other browser-solidity instance do you want to copy over all files?', doCopy(target)
'https://ethereum.github.io/browser-solidity/' })
) function doCopy (target) {
if (target === null) {
return
}
// package only files from the browser storage. // package only files from the browser storage.
packageFiles(filesProvider['browser'], (error, packaged) => { packageFiles(filesProvider['browser'], (error, packaged) => {
if (error) { if (error) {
@ -365,6 +366,7 @@ function filepanel (appAPI, filesProvider) {
}) })
} }
} }
}
// return all the files, except the temporary/readonly ones.. // return all the files, except the temporary/readonly ones..
function packageFiles (files, callback) { function packageFiles (files, callback) {

@ -199,9 +199,11 @@ function runTab (container, appAPI, appEvents, opts) {
// DROPDOWN // DROPDOWN
var selectExEnv = el.querySelector('#selectExEnvOptions') var selectExEnv = el.querySelector('#selectExEnvOptions')
selectExEnv.addEventListener('change', function (event) { selectExEnv.addEventListener('change', function (event) {
if (!executionContext.executionContextChange(selectExEnv.options[selectExEnv.selectedIndex].value)) { executionContext.executionContextChange(selectExEnv.options[selectExEnv.selectedIndex].value, null, () => {
selectExEnv.value = executionContext.getProvider() selectExEnv.value = executionContext.getProvider()
} console.log('came back neg')
})
fillAccountsList(appAPI, el) fillAccountsList(appAPI, el)
instanceContainer.innerHTML = '' // clear the instances list instanceContainer.innerHTML = '' // clear the instances list
noInstancesText.style.display = 'block' noInstancesText.style.display = 'block'

@ -1,7 +1,35 @@
var modal = require('./modaldialog.js') var modal = require('./modaldialog.js')
var yo = require('yo-yo') var yo = require('yo-yo')
var csjs = require('csjs-inject')
var css = csjs`
.prompt_text {
width: 300px;
}
`
module.exports = { module.exports = {
alert: function (text) { alert: function (text) {
modal('', yo`<div>${text}</div>`, null, { label: null }) modal('', yo`<div>${text}</div>`, null, { label: null })
},
prompt: function (title, text, inputValue, ok, cancel) {
modal(title,
yo`<div>${text}<div><input type='text' name='prompt_text' id='prompt_text' class="${css['prompt_text']}" value='${inputValue}' ></div></div>`,
{
fn: () => { if (typeof ok === 'function') ok(document.getElementById('prompt_text').value) }
},
{
fn: () => { if (typeof cancel === 'function') cancel() }
}
)
},
confirm: function (title, text, ok, cancel) {
modal(title, yo`<div>${text}</div>`,
{
fn: () => { if (typeof ok === 'function') ok() }
},
{
fn: () => { if (typeof cancel === 'function') cancel() }
}
)
} }
} }

@ -79,10 +79,36 @@ var css = csjs`
module.exports = (title, content, ok, cancel) => { module.exports = (title, content, ok, cancel) => {
var container = document.querySelector(`.${css.modal}`) var container = document.querySelector(`.${css.modal}`)
console.log('top of export')
// this should check to see if the child has been appended
if (!container) { if (!container) {
// if (!document.querySelector(`.${css.modalBody}`)) {
console.log('no container')
document.querySelector('body').appendChild(html()) document.querySelector('body').appendChild(html())
container = document.querySelector(`.${css.modal}`) container = document.querySelector(`.${css.modal}`)
// container.style.display = 'block'
// console.log('LOOK HERE' + document.querySelector(`.${css.modal}`).innerHTML)
// console.log('HEHE ' + container.style.display)
// console.log('HOHO ' + document.querySelector(`.${css.modal}`).style.display)
} else {
console.log('container exists and is ' + JSON.stringify(container))
if (!container.innerHTML) {
document.querySelector('body').appendChild(html())
container = document.querySelector(`.${css.modal}`)
// console.log('container now is ' + JSON.stringify(container))
console.log('no display style' + container.innerHTML)
} else {
console.log('yes display style' + container.innerHTML)
console.log('and and console logs style' + container.style.display)
}
// but this container could just be {}
// document.querySelector('body').appendChild(html())
// container = document.querySelector(`.${css.modal}`)
// okDiv.addEventListener('click', okListener)
// cancelDiv.addEventListener('click', cancelListener)
// closeDiv.addEventListener('click', cancelListener)
} }
var closeDiv = document.getElementById('modal-close') var closeDiv = document.getElementById('modal-close')
var okDiv = document.getElementById('modal-footer-ok') var okDiv = document.getElementById('modal-footer-ok')
@ -100,35 +126,53 @@ module.exports = (title, content, ok, cancel) => {
modal.innerHTML = '' modal.innerHTML = ''
if (content) modal.appendChild(content) if (content) modal.appendChild(content)
container.style.display = container.style.display === 'block' ? hide() : show() // why the flip of display here? - when this script runs it needs to turn off or on the modal - so I guess that is the reason
// I don't understand the next line
// container.style.display = container.style.display === 'block' ? hide() : show()
// if (container.style.display === 'block') {
// // container.style.display = 'none'
// hide()
// } else {
// // container.style.display = 'block'
// show()
// }
show()
function okListener () { function okListener () {
console.log('OK OK OK')
removeEventListener()
hide() hide()
if (ok && ok.fn) ok.fn() if (ok && ok.fn) ok.fn()
removeEventListener()
} }
function cancelListener () { function cancelListener () {
hide()
if (cancel && cancel.fn) cancel.fn() if (cancel && cancel.fn) cancel.fn()
hide()
removeEventListener() removeEventListener()
} }
function hide () { function hide () {
console.log('hit hide')
container.style.display = 'none' container.style.display = 'none'
container.parentElement.removeChild(container) // container.parentElement.removeChild(container)
// The next line I commented out because it made an error when okListener ran
// document.querySelector('body').removeChild(container)
} }
function show () { function show () {
console.log('hit show')
container.style.display = 'block' container.style.display = 'block'
// document.getElementById('modal-dialog').style.display = 'block'
} }
function removeEventListener () { function removeEventListener () {
console.log('removing event listeners')
okDiv.removeEventListener('click', okListener) okDiv.removeEventListener('click', okListener)
cancelDiv.removeEventListener('click', cancelListener) cancelDiv.removeEventListener('click', cancelListener)
closeDiv.removeEventListener('click', cancelListener) closeDiv.removeEventListener('click', cancelListener)
} }
console.log('time to add the listeners')
okDiv.addEventListener('click', okListener) okDiv.addEventListener('click', okListener)
cancelDiv.addEventListener('click', cancelListener) cancelDiv.addEventListener('click', cancelListener)
closeDiv.addEventListener('click', cancelListener) closeDiv.addEventListener('click', cancelListener)

@ -1,4 +1,3 @@
/* global confirm, prompt */
'use strict' 'use strict'
var Web3 = require('web3') var Web3 = require('web3')
@ -9,6 +8,7 @@ var StateManager = require('ethereumjs-vm/lib/stateManager')
var remix = require('ethereum-remix') var remix = require('ethereum-remix')
var Web3VMProvider = remix.web3.web3VMProvider var Web3VMProvider = remix.web3.web3VMProvider
var rlp = ethUtil.rlp var rlp = ethUtil.rlp
var modalDialogCustom = require('./app/ui/modal-dialog-custom')
var injectedProvider var injectedProvider
@ -111,32 +111,39 @@ function ExecutionContext () {
this.executionContextChange(context, endPointUrl) this.executionContextChange(context, endPointUrl)
} }
this.executionContextChange = function (context, endPointUrl) { this.executionContextChange = function (context, endPointUrl, cb) {
if (context === 'web3' && !confirm('Are you sure you want to connect to an ethereum node?')) { function runPrompt () {
return false console.log('runPrompt')
} else if (context === 'injected' && injectedProvider === undefined) {
return false
} else {
if (context === 'web3') {
executionContext = context executionContext = context
if (!endPointUrl) { if (!endPointUrl) {
endPointUrl = 'http://localhost:8545' endPointUrl = 'http://localhost:8545'
} }
endPointUrl = prompt('Web3 Provider Endpoint', endPointUrl) modalDialogCustom.prompt(null, 'Web3 Provider Endpoint', endPointUrl, (target) => {
setProviderFromEndpoint(endPointUrl) setProviderFromEndpoint(target)
self.event.trigger('contextChanged', ['web3']) self.event.trigger('contextChanged', ['web3'])
} else if (context === 'injected') { })
}
if (context === 'web3') {
modalDialogCustom.confirm(null, 'Are you sure you want to connect to an ethereum node?',
() => { runPrompt(endPointUrl) }, () => { cb() }
)
} else if (context === 'injected' && injectedProvider === undefined) {
cb()
} else {
if (context === 'injected') {
executionContext = context executionContext = context
web3.setProvider(injectedProvider) web3.setProvider(injectedProvider)
self.event.trigger('contextChanged', ['injected']) self.event.trigger('contextChanged', ['injected'])
console.log('injected')
} else if (context === 'vm') { } else if (context === 'vm') {
console.log('vm!!')
executionContext = context executionContext = context
vm.stateManager.revert(function () { vm.stateManager.revert(function () {
vm.stateManager.checkpoint() vm.stateManager.checkpoint()
}) })
self.event.trigger('contextChanged', ['vm']) self.event.trigger('contextChanged', ['vm'])
} }
return true
} }
} }

@ -1,5 +1,5 @@
'use strict' 'use strict'
var modalDialogCustom = require('../app/ui/modal-dialog-custom')
// Allowing window to be overriden for testing // Allowing window to be overriden for testing
function GistHandler (_window) { function GistHandler (_window) {
if (_window === undefined) _window = window if (_window === undefined) _window = window
@ -8,11 +8,12 @@ function GistHandler (_window) {
var loadingFromGist = false var loadingFromGist = false
var gistId var gistId
if (params['gist'] === '') { if (params['gist'] === '') {
var str = _window.prompt('Enter the URL or ID of the Gist you would like to load.') modalDialogCustom.prompt(null, 'Enter the URL or ID of the Gist you would like to load.', null, (target) => {
if (str !== '') { if (target !== '') {
gistId = getGistId(str) gistId = getGistId(target)
loadingFromGist = !!gistId loadingFromGist = !!gistId
} }
})
} else { } else {
gistId = params['gist'] gistId = params['gist']
loadingFromGist = !!gistId loadingFromGist = !!gistId

Loading…
Cancel
Save