diff --git a/src/app.js b/src/app.js index fbc1f6a4a4..7aa52daa2f 100644 --- a/src/app.js +++ b/src/app.js @@ -35,7 +35,7 @@ var EventsDecoder = require('./app/execution/eventsDecoder') var handleImports = require('./app/compiler/compiler-imports') var FileManager = require('./app/files/fileManager') var ContextualListener = require('./app/editor/contextualListener') -var ContextView = require('./app/editor/ContextView') +var ContextView = require('./app/editor/contextView') var styleGuide = remix.ui.styleGuide var styles = styleGuide() @@ -171,6 +171,24 @@ module.exports = App function run () { var self = this + // ----------------- Compiler ----------------- + var compiler = new Compiler((url, cb) => { + var provider = fileManager.fileProviderOf(url) + if (provider && provider.exists(url)) { + return provider.get(url, cb) + } + handleImports.import(url, (error, content) => { + if (!error) { + // FIXME: at some point we should invalidate the browser cache + filesProviders['browser'].addReadOnly(url, content) + cb(null, content) + } else { + cb(error) + } + }) + }) + var offsetToLineColumnConverter = new OffsetToLineColumnConverter(compiler.event) + // ----------------- UniversalDApp ----------------- var transactionContextAPI = { getAddress: (cb) => { @@ -248,12 +266,63 @@ function run () { txlistener.startListening() // ----------------- editor ---------------------------- this._components.editor = new Editor({}) // @TODO: put into editorpanel + var editor = self._components.editor // shortcut for the editor + + // ---------------- ContextualListener ----------------------- + this._components.contextualListener = new ContextualListener({ + getCursorPosition: () => { + return this._components.editor.getCursorPosition() + }, + getCompilationResult: () => { + return compiler.lastCompilationResult + }, + getCurrentFile: () => { + return config.get('currentFile') + }, + highlight: (position, node) => { + if (compiler.lastCompilationResult && compiler.lastCompilationResult.data) { + var lineColumn = offsetToLineColumnConverter.offsetToLineColumn(position, position.file, compiler.lastCompilationResult) + var css = 'highlightreference' + if (node.children && node.children.length) { + // If node has children, highlight the entire line. if not, just highlight the current source position of the node. + css = 'highlightreferenceline' + lineColumn = { + start: { + line: lineColumn.start.line, + column: 0 + }, + end: { + line: lineColumn.start.line + 1, + column: 0 + } + } + } + return editor.addMarker(lineColumn, compiler.lastCompilationResult.data.sourceList[position.file], css) + } + return null + }, + stopHighlighting: (event) => { + editor.removeMarker(event.eventId, event.fileTarget) + } + }, { + compiler: compiler.event, + editor: editor.event + }) + + // ---------------- ContextView ----------------------- + this._components.contextView = new ContextView({ + contextualListener: this._components.contextualListener + }, { + contextualListener: this._components.contextualListener.event + }) + // ----------------- editor panel ---------------------- this._components.editorpanel = new EditorPanel({ api: { editor: self._components.editor, config: self._api.config, - txListener: txlistener + txListener: txlistener, + contextview: self._components.contextView } }) this._components.editorpanel.event.register('resize', direction => self._adjustLayout(direction)) @@ -263,7 +332,6 @@ function run () { var queryParams = new QueryParams() var gistHandler = new GistHandler() - var editor = self._components.editor // The event listener needs to be registered as early as possible, because the // parent will send the message upon the "load" event. var filesToLoad = null @@ -370,71 +438,6 @@ function run () { fileManager.switchFile() } - var compiler = new Compiler((url, cb) => { - var provider = fileManager.fileProviderOf(url) - if (provider && provider.exists(url)) { - return provider.get(url, cb) - } - handleImports.import(url, (error, content) => { - if (!error) { - // FIXME: at some point we should invalidate the browser cache - filesProviders['browser'].addReadOnly(url, content) - cb(null, content) - } else { - cb(error) - } - }) - }) - var offsetToLineColumnConverter = new OffsetToLineColumnConverter(compiler.event) - - // ---------------- ContextualListener ----------------------- - this._components.contextualListener = new ContextualListener({ - getCursorPosition: () => { - return this._components.editor.getCursorPosition() - }, - getCompilationResult: () => { - return compiler.lastCompilationResult - }, - getCurrentFile: () => { - return config.get('currentFile') - }, - highlight: (position, node) => { - if (compiler.lastCompilationResult && compiler.lastCompilationResult.data) { - var lineColumn = offsetToLineColumnConverter.offsetToLineColumn(position, position.file, compiler.lastCompilationResult) - var css = 'highlightreference' - if (node.children && node.children.length) { - // If node has children, highlight the entire line. if not, just highlight the current source position of the node. - css = 'highlightreferenceline' - lineColumn = { - start: { - line: lineColumn.start.line, - column: 0 - }, - end: { - line: lineColumn.start.line + 1, - column: 0 - } - } - } - return editor.addMarker(lineColumn, compiler.lastCompilationResult.data.sourceList[position.file], css) - } - return null - }, - stopHighlighting: (event) => { - editor.removeMarker(event.eventId, event.fileTarget) - } - }, { - compiler: compiler.event, - editor: editor.event - }) - - // ---------------- ContextView ----------------------- - this._components.contextView = new ContextView({ - contextualListener: this._components.contextualListener - }, { - contextualListener: this._components.contextualListener.event - }) - // ----------------- Renderer ----------------- var rendererAPI = { error: (file, error) => {