diff --git a/src/app.js b/src/app.js index f6833e876d..c456823146 100644 --- a/src/app.js +++ b/src/app.js @@ -110,7 +110,7 @@ var css = csjs` ` class App { - constructor (opts = {}) { + constructor (api = {}, events = {}, opts = {}) { var self = this self._api = {} var fileStorage = new Storage('sol:') @@ -792,7 +792,7 @@ Please make a backup of your contracts and start using http://remix.ethereum.org editor: editor.event, staticAnalysis: staticanalysis.event } - self._components.righthandpanel = new RighthandPanel(rhpAPI, rhpEvents, {}) + self._components.righthandpanel = new RighthandPanel(rhpAPI, rhpEvents) self._view.rightpanel.appendChild(self._components.righthandpanel.render()) self._components.righthandpanel.init() self._components.righthandpanel.event.register('resize', delta => self._adjustLayout('right', delta)) diff --git a/src/app/panels/righthand-panel.js b/src/app/panels/righthand-panel.js index d20c03dfa9..17c80b9a61 100644 --- a/src/app/panels/righthand-panel.js +++ b/src/app/panels/righthand-panel.js @@ -2,29 +2,30 @@ var yo = require('yo-yo') var remixLib = require('remix-lib') var EventManager = remixLib.EventManager var TabbedMenu = require('../tabs/tabbed-menu') -var compileTab = require('../tabs/compile-tab') -var runTab = require('../tabs/run-tab') -var settingsTab = require('../tabs/settings-tab') -var analysisTab = require('../tabs/analysis-tab') -var debuggerTab = require('../tabs/debugger-tab') -var supportTab = require('../tabs/support-tab') -var pluginTab = require('../tabs/plugin-tab') +var CompileTab = require('../tabs/compile-tab') +var RunTab = require('../tabs/run-tab') +var SettingsTab = require('../tabs/settings-tab') +var AnalysisTab = require('../tabs/analysis-tab') +var DebuggerTab = require('../tabs/debugger-tab') +var SupportTab = require('../tabs/support-tab') +var PluginTab = require('../tabs/plugin-tab') var PluginManager = require('../../pluginManager') var css = require('./styles/righthand-panel-styles') -function RighthandPanel (appAPI, events, opts) { +function RighthandPanel (appAPI = {}, events = {}, opts = {}) { var self = this self._api = appAPI self.event = new EventManager() self._view = {} var optionViews = yo`
` - var options = yo` - - ` self._view.dragbar = yo`
` + // load tabbed menu component + var tabEvents = {compiler: events.compiler, app: events.app, rhp: self.event} + self._view.tabbedMenu = new TabbedMenu(self._api, tabEvents) + var options = self._view.tabbedMenu.render() + options.classList.add(css.opts) self._view.element = yo`
${self._view.dragbar} @@ -40,23 +41,31 @@ function RighthandPanel (appAPI, events, opts) { this.event.trigger('switchTab', [tabClass]) } - // load tabbed menu component - var tabEvents = {compiler: events.compiler, app: events.app, rhp: self.event} - self._view.tabbedMenu = new TabbedMenu(options, tabEvents) - events.rhp = self.event - this._view.tabbedMenu.addTab('Compile', 'compileView', compileTab(optionViews, appAPI, events, opts)) - this._view.tabbedMenu.addTab('Run', 'runView', runTab(optionViews, appAPI, events)) - this._view.tabbedMenu.addTab('Settings', 'settingsView', settingsTab(optionViews, appAPI, events)) - this._view.tabbedMenu.addTab('Analysis', 'staticanalysisView', analysisTab(optionViews)) - this._view.tabbedMenu.addTab('Debugger', 'debugView', debuggerTab(optionViews)) - this._view.tabbedMenu.addTab('Support', 'supportView', supportTab(optionViews, events)) + var compileTab = new CompileTab(appAPI, events) + optionViews.appendChild(compileTab.render()) + var runTab = new RunTab(appAPI, events) + optionViews.appendChild(runTab.render()) + var settingsTab = new SettingsTab(appAPI, events) + optionViews.appendChild(settingsTab.render()) + var analysisTab = new AnalysisTab(appAPI, events) + optionViews.appendChild(analysisTab.render()) + var debuggerTab = new DebuggerTab(appAPI, events) + optionViews.appendChild(debuggerTab.render()) + var supportTab = new SupportTab(appAPI, events) + optionViews.appendChild(supportTab.render()) + this._view.tabbedMenu.addTab('Compile', 'compileView', compileTab.render()) + this._view.tabbedMenu.addTab('Run', 'runView', runTab.render()) + this._view.tabbedMenu.addTab('Settings', 'settingsView', settingsTab.render()) + this._view.tabbedMenu.addTab('Analysis', 'staticanalysisView', analysisTab.render()) + this._view.tabbedMenu.addTab('Debugger', 'debugView', debuggerTab.render()) + this._view.tabbedMenu.addTab('Support', 'supportView', supportTab.render()) this._view.tabbedMenu.selectTabByTitle('Compile') self.pluginManager = new PluginManager(appAPI, events) events.rhp.register('plugin-loadRequest', (json) => { - var content = pluginTab(optionViews, json.url) + var content = new PluginTab(appAPI, events, json) this._view.tabbedMenu.addTab(json.title, 'plugin', content) self.pluginManager.register(json, content) }) diff --git a/src/app/tabs/analysis-tab.js b/src/app/tabs/analysis-tab.js index 8042a42ab1..6dea63f56c 100644 --- a/src/app/tabs/analysis-tab.js +++ b/src/app/tabs/analysis-tab.js @@ -1,13 +1,12 @@ var yo = require('yo-yo') var css = require('./styles/analysis-tab-styles') -function analysisTab (container) { +function analysisTab (api = {}, events = {}, opts = {}) { var el = yo`
` - container.appendChild(el) - return el + return { render () { return el } } } module.exports = analysisTab diff --git a/src/app/tabs/compile-tab.js b/src/app/tabs/compile-tab.js index 9d92fff180..a254c07705 100644 --- a/src/app/tabs/compile-tab.js +++ b/src/app/tabs/compile-tab.js @@ -14,10 +14,7 @@ var remixLib = require('remix-lib') var styleGuide = remixLib.ui.themeChooser var styles = styleGuide.chooser() -function compileTab (container, appAPI, appEvents, opts) { - if (typeof container === 'string') container = document.querySelector(container) - if (!container) throw new Error('no container given') - +function compileTab (appAPI = {}, appEvents = {}, opts = {}) { // Containers var warnCompilationSlow = yo`` var compileIcon = yo`` @@ -115,24 +112,23 @@ function compileTab (container, appAPI, appEvents, opts) { compileIcon.setAttribute('title', '') }) + var errorContainer = yo`
` var el = yo`
${compileContainer} - ${contractNames(container, appAPI, appEvents, opts)} -
+ ${contractNames(appAPI, appEvents)} + ${errorContainer}
` - container.appendChild(el) /* ------------------------------------------------ section CONTRACT DROPDOWN, DETAILS AND PUBLISH ------------------------------------------------ */ - function contractNames (container, appAPI, appEvents, opts) { + function contractNames (appAPI, appEvents) { var contractsDetails = {} appEvents.compiler.register('compilationStarted', () => { - var errorContainer = container.querySelector('.error') errorContainer.innerHTML = '' }) @@ -148,7 +144,6 @@ function compileTab (container, appAPI, appEvents, opts) { document.querySelector('.compileView').style.color = styles.colors.red } // display warning error if any - var errorContainer = container.querySelector('.error') var error = false if (data['error']) { error = true @@ -171,7 +166,6 @@ function compileTab (container, appAPI, appEvents, opts) { appEvents.staticAnalysis.register('staticAnaysisWarning', (count) => { if (count) { - var errorContainer = container.querySelector('.error') appAPI.compilationMessage(`Static Analysis raised ${count} warning(s) that requires your attention.`, $(errorContainer), { type: 'warning', click: () => appAPI.switchTab('staticanalysisView') @@ -303,7 +297,7 @@ function compileTab (container, appAPI, appEvents, opts) { } return el } - return el + return { render () { return el } } } function detailsHelpSection () { diff --git a/src/app/tabs/debugger-tab.js b/src/app/tabs/debugger-tab.js index 7d3b3e5947..63ebb64e11 100644 --- a/src/app/tabs/debugger-tab.js +++ b/src/app/tabs/debugger-tab.js @@ -1,13 +1,12 @@ var yo = require('yo-yo') var css = require('./styles/debugger-tab-styles') -function debuggerTab (container) { +function debuggerTab (api = {}, events = {}, opts = {}) { var el = yo`
` - container.appendChild(el) - return el + return { render () { return el } } } module.exports = debuggerTab diff --git a/src/app/tabs/plugin-tab.js b/src/app/tabs/plugin-tab.js index 74b4f31045..6a8c700485 100644 --- a/src/app/tabs/plugin-tab.js +++ b/src/app/tabs/plugin-tab.js @@ -1,13 +1,12 @@ var yo = require('yo-yo') var css = require('./styles/plugin-tab-styles') -function plugintab (container, url) { +function plugintab (api = {}, events = {}, opts = {}) { var el = yo`
- +
` - container.appendChild(el) - return el + return { render () { return el } } } module.exports = plugintab diff --git a/src/app/tabs/run-tab.js b/src/app/tabs/run-tab.js index 01be4b6eb7..d30ea5610f 100644 --- a/src/app/tabs/run-tab.js +++ b/src/app/tabs/run-tab.js @@ -22,14 +22,15 @@ var noInstancesText = yo`
0 contract Instance var pendingTxsText = yo`0 pending transactions` -function runTab (container, appAPI, appEvents) { - var events = new EventManager() +function runTab (appAPI = {}, appEvents = {}, opts = {}) { + var container = document.createElement('div') + var event = new EventManager() var clearInstanceElement = yo`` clearInstanceElement.addEventListener('click', () => { - events.trigger('clearInstance', []) + event.trigger('clearInstance', []) }) - var recorderInterface = makeRecorder(events, appAPI, appEvents) + var recorderInterface = makeRecorder(event, appAPI, appEvents) var pendingTxsContainer = yo`
@@ -45,7 +46,7 @@ function runTab (container, appAPI, appEvents) { var el = yo`
${settings(container, appAPI, appEvents)} - ${contractDropdown(events, appAPI, appEvents, instanceContainer)} + ${contractDropdown(event, appAPI, appEvents, instanceContainer)} ${pendingTxsContainer} ${instanceContainer}
@@ -65,7 +66,7 @@ function runTab (container, appAPI, appEvents) { // set the final context. Cause it is possible that this is not the one we've originaly selected selectExEnv.value = executionContext.getProvider() fillAccountsList(appAPI, el) - events.trigger('clearInstance', []) + event.trigger('clearInstance', []) } selectExEnv.addEventListener('change', function (event) { @@ -95,12 +96,12 @@ function runTab (container, appAPI, appEvents) { updatePendingTxs(container, appAPI) }, 10000) - events.register('clearInstance', () => { + event.register('clearInstance', () => { instanceContainer.innerHTML = '' // clear the instances list noInstancesText.style.display = 'block' instanceContainer.appendChild(noInstancesText) }) - return el + return { render () { return container } } } function fillAccountsList (appAPI, container) { diff --git a/src/app/tabs/settings-tab.js b/src/app/tabs/settings-tab.js index 90ea3c3672..65243d5db7 100644 --- a/src/app/tabs/settings-tab.js +++ b/src/app/tabs/settings-tab.js @@ -10,10 +10,7 @@ var modal = require('../ui/modal-dialog-custom') var css = require('./styles/settings-tab-styles') -function SettingsTab (container, appAPI, appEvents) { - if (typeof container === 'string') container = document.querySelector(container) - if (!container) throw new Error('no container given') - +function SettingsTab (appAPI = {}, appEvents = {}, opts = {}) { var queryParams = new QueryParams() var optionVM = yo`` @@ -78,7 +75,7 @@ function SettingsTab (container, appAPI, appEvents) {
-
+
Plugin
@@ -203,8 +200,7 @@ function SettingsTab (container, appAPI, appEvents) { loadVersion('builtin', queryParams, appAPI, el) }) - container.appendChild(el) - return el + return { render () { return el } } } function setVersionText (text, el) { diff --git a/src/app/tabs/support-tab.js b/src/app/tabs/support-tab.js index 29b9bbb105..0c4da109e5 100644 --- a/src/app/tabs/support-tab.js +++ b/src/app/tabs/support-tab.js @@ -33,7 +33,7 @@ function supportTabView (gitterIframe) { ` } -function supportTab (container, events) { +function supportTab (api = {}, events = {}, opts = {}) { let el = supportTabView('') let gitterIsLoaded = false @@ -47,8 +47,7 @@ function supportTab (container, events) { gitterIsLoaded = true }) - container.appendChild(el) - return el + return { render () { return el } } } function openLink () { diff --git a/src/app/tabs/tabbed-menu.js b/src/app/tabs/tabbed-menu.js index 0bd7b31cda..85d402febb 100644 --- a/src/app/tabs/tabbed-menu.js +++ b/src/app/tabs/tabbed-menu.js @@ -4,8 +4,9 @@ var helper = require('../../lib/helper') var css = require('./styles/tabbed-menu-styles') class TabbedMenu { - constructor (tabView, events) { + constructor (api = {}, events = {}, opts = {}) { var self = this + var tabView = document.createElement('ul') this.tabView = tabView this.events = events this.tabs = {} @@ -19,7 +20,7 @@ class TabbedMenu { self.selectTab(tabView.querySelector(`li.${tabName}`)) }) } - + render () { return this.tabView } selectTabByTitle (title) { this.selectTab(this.tabs[title]) } diff --git a/src/pluginManager.js b/src/pluginManager.js index 50bef847e6..93d4206992 100644 --- a/src/pluginManager.js +++ b/src/pluginManager.js @@ -38,7 +38,7 @@ * */ class PluginManager { - constructor (api, events) { + constructor (api = {}, events = {}, opts = {}) { var self = this this.plugins = {} this.inFocus