diff --git a/src/app.js b/src/app.js index 603db78799..3a60350960 100644 --- a/src/app.js +++ b/src/app.js @@ -486,39 +486,7 @@ Please make a backup of your contracts and start using http://remix.ethereum.org self._components.righthandpanel.init() self._components.righthandpanel.event.register('resize', delta => self._adjustLayout('right', delta)) - var txLogger = new TxLogger() // eslint-disable-line - - var previousInput = '' - var saveTimeout = null - function editorOnChange () { - var currentFile = self._components.config.get('currentFile') - if (!currentFile) { - return - } - var input = editor.get(currentFile) - if (!input) { - return - } - // if there's no change, don't do anything - if (input === previousInput) { - return - } - previousInput = input - - // fire storage update - // NOTE: save at most once per 5 seconds - if (saveTimeout) { - window.clearTimeout(saveTimeout) - } - saveTimeout = window.setTimeout(() => { - fileManager.saveCurrentFile() - }, 5000) - } - - // auto save the file when content changed - editor.event.register('contentChanged', editorOnChange) - // save the file when switching - editor.event.register('sessionSwitched', editorOnChange) + var txLogger = new TxLogger() // eslint-disable-line executionContext.event.register('contextChanged', this, function (context) { self.runCompiler() @@ -533,7 +501,6 @@ Please make a backup of your contracts and start using http://remix.ethereum.org // check init query parameters from the URL once the compiler is loaded self._components.compiler.event.register('compilerLoaded', this, function (version) { - previousInput = '' self.runCompiler() if (queryParams.get().context) { diff --git a/src/app/editor/editor.js b/src/app/editor/editor.js index a67e5dd4de..931e03e47c 100644 --- a/src/app/editor/editor.js +++ b/src/app/editor/editor.js @@ -7,6 +7,8 @@ var ace = require('brace') require('brace/theme/tomorrow_night_blue') +var globalRegistry = require('../../global/registry') + var Range = ace.acequire('ace/range').Range require('brace/ext/language_tools') require('brace/ext/searchbox') @@ -63,13 +65,19 @@ document.head.appendChild(yo` `) -function Editor (opts = {}) { +function Editor (opts = {}, localRegistry) { var self = this var el = yo`
` var editor = ace.edit(el) if (styles.appProperties.aceTheme) { editor.setTheme('ace/theme/' + styles.appProperties.aceTheme) } + self._components = {} + self._components.registry = localRegistry || globalRegistry + self._deps = { + fileManager: self._components.registry.get('filemanager').api, + config: self._components.registry.get('config').api + } ace.acequire('ace/ext/language_tools') editor.setOptions({ @@ -275,11 +283,15 @@ function Editor (opts = {}) { this.find = (string) => editor.find(string) + this.previousInput = '' + this.saveTimeout = null // Do setup on initialisation here editor.on('changeSession', function () { + editorOnChange(self) event.trigger('sessionSwitched', []) editor.getSession().on('change', function () { + editorOnChange(self) event.trigger('contentChanged', []) }) }) @@ -290,4 +302,29 @@ function Editor (opts = {}) { editor.resize(true) } +function editorOnChange (self) { + var currentFile = self._deps.config.get('currentFile') + if (!currentFile) { + return + } + var input = self.get(currentFile) + if (!input) { + return + } + // if there's no change, don't do anything + if (input === self.previousInput) { + return + } + self.previousInput = input + + // fire storage update + // NOTE: save at most once per 5 seconds + if (self.saveTimeout) { + window.clearTimeout(self.saveTimeout) + } + self.saveTimeout = window.setTimeout(() => { + self._deps.fileManager.saveCurrentFile() + }, 5000) +} + module.exports = Editor