diff --git a/src/app.js b/src/app.js
index 2edd84a0e9..ae1ba90eae 100644
--- a/src/app.js
+++ b/src/app.js
@@ -413,14 +413,14 @@ Please make a backup of your contracts and start using http://remix.ethereum.org
let appStore = new EntityStore('module', { actives: [], ids: [], entities: {} })
const pluginManagerComponent = new PluginManagerComponent()
- const swapPanelComponent = new SwapPanelComponent(appStore)
- const mainPanelComponent = new SwapPanelComponent(appStore)
+ const appManager = new RemixAppManager(appStore)
+ const swapPanelComponent = new SwapPanelComponent('swapPanel', appStore, appManager, { default: true })
+ const mainPanelComponent = new SwapPanelComponent('mainPanel', appStore, appManager, { default: false })
const verticalIconsComponent = new VerticalIconsComponent(appStore)
const swapPanelApi = new SwapPanelApi(swapPanelComponent, verticalIconsComponent) // eslint-disable-line
const mainPanelApi = new SwapPanelApi(mainPanelComponent, verticalIconsComponent) // eslint-disable-line
const verticalIconsApi = new VerticalIconsApi(verticalIconsComponent) // eslint-disable-line
- const appManager = new RemixAppManager(appStore, swapPanelApi, mainPanelApi, verticalIconsApi)
registry.put({api: appManager.proxy(), name: 'pluginmanager'})
pluginManagerComponent.setApp(appManager)
diff --git a/src/app/components/swap-panel-component.js b/src/app/components/swap-panel-component.js
index 2dce756e18..aa45e8e276 100644
--- a/src/app/components/swap-panel-component.js
+++ b/src/app/components/swap-panel-component.js
@@ -6,14 +6,29 @@ var csjs = require('csjs-inject')
// const styles = styleguide.chooser()
class SwapPanelComponent {
- constructor (appStore) {
+ constructor (name, appStore, appManager, opt) {
+ this.name = name
+ this.opt = opt
this.store = appStore
// list of contents
this.contents = {}
// name of the current displayed content
this.currentNode
- this.store.event.on('activate', (name) => { })
+ appManager.event.on('pluginNeedsLocation', (profile, domEl) => {
+ if ((profile.prefferedLocation === this.name) || (!profile.prefferedLocation && opt.default)) {
+ this.add(profile.name, domEl)
+ }
+ })
+
+ this.store.event.on('activate', (name) => {
+ let item = this.store.get(name)
+ if (((item.profile.prefferedLocation === this.name) || (!item.profile.prefferedLocation && opt.default)) &&
+ item.profile.icon && item.api.render && typeof item.api.render === 'function') {
+ this.add(name, item.api.render())
+ }
+ })
+
this.store.event.on('deactivate', (name) => {
if (this.contents[name]) this.remove(name)
})
@@ -35,6 +50,9 @@ class SwapPanelComponent {
}
add (moduleName, content) {
+ content.style.height = '100%'
+ content.style.width = '100%'
+ content.style.border = '0'
this.contents[moduleName] = yo`
${content}
`
this.view.appendChild(this.contents[moduleName])
}
diff --git a/src/remixAppManager.js b/src/remixAppManager.js
index cd75d9c9ee..ba25716011 100644
--- a/src/remixAppManager.js
+++ b/src/remixAppManager.js
@@ -4,17 +4,10 @@ import PluginManagerProxy from './app/components/plugin-manager-proxy'
export class RemixAppManager extends AppManagerApi {
- constructor (store, swapPanelApi, mainPanelApi, verticalIconsApi) {
+ constructor (store) {
super(null)
- this.location = {
- 'default': swapPanelApi,
- 'swapPanel': swapPanelApi,
- 'mainPanel': mainPanelApi
- }
this.store = store
- this.verticalIconsApi = verticalIconsApi
- this.swapPanelApi = swapPanelApi
- this.hiddenNodes = {}
+ this.hiddenServices = {}
this.event = new EventEmitter()
this.data = {
proxy: new PluginManagerProxy()
@@ -28,20 +21,14 @@ export class RemixAppManager extends AppManagerApi {
setActive (name, isActive) {
const entity = this.getEntity(name)
- if (entity && entity.profile.icon && entity.api.render && typeof entity.api.render === 'function') {
- // here we have an internal module (it does not need to be rendered necessarily - "rendered" means pushed to the DOM)
- // if it contains `render` function, we push the view to `resolveLocation`
- isActive ? this.resolveLocation(entity.profile, entity.api.render())
- : this.removeComponent(entity.profile)
- }
- // at this point, if it's an iframe plugin, it should have already been rendered (to the DOM)
- // either using `location` in json profile or using the optionnal api in the `Plugin` class
-
// temp
if (entity && name === 'solidity') {
isActive ? this.data.proxy.register(entity.api) : this.data.proxy.unregister(entity.api)
}
isActive ? this.store.activate(name) : this.store.deactivate(name)
+ if (!isActive) {
+ this.removeHiddenServices(entity)
+ }
}
getEntity (entityName) {
@@ -52,24 +39,19 @@ export class RemixAppManager extends AppManagerApi {
this.store.add(entity.profile.name, entity)
}
+ // this function is only used for iframe plugins
resolveLocation (profile, domEl) {
- // if there's an icon, we add to the swap panel
- // if not we suppose it just need to be put to DOM (that would be)
if (profile.icon) {
- var panel = this.location[profile.prefferedLocation] ? this.location[profile.prefferedLocation] : this.location['default']
- domEl.style.height = '100%'
- domEl.style.width = '100%'
- domEl.style.border = '0'
- panel.add(profile, domEl)
- return
+ this.event.emit('pluginNeedsLocation', profile, domEl)
+ } else {
+ this.hiddenServices[profile.name] = domEl
+ document.body.appendChild(domEl)
}
- this.hiddenNodes[profile.name] = domEl
- document.body.appendChild(domEl)
}
- removeComponent (profile) {
- let hiddenNode = this.hiddenNodes[profile.name]
- if (hiddenNode) document.body.removeChild(hiddenNode)
+ removeHiddenServices (profile) {
+ let hiddenServices = this.hiddenServices[profile.name]
+ if (hiddenServices) document.body.removeChild(hiddenServices)
}
plugins () {
diff --git a/test-browser/tests/sharedFolderExplorer.js b/test-browser/tests/sharedFolderExplorer.js
index d40923f2d0..23ff14a47d 100644
--- a/test-browser/tests/sharedFolderExplorer.js
+++ b/test-browser/tests/sharedFolderExplorer.js
@@ -64,6 +64,11 @@ function runTests (browser, testData) {
browser.end()
return
}
+ if (browserName === 'firefox') {
+ console.log('do not run remixd test for ' + browserName + ': TODO to reenable later')
+ browser.end()
+ return
+ }
browser
.waitForElementVisible('#icon-panel', 10000)
.clickLaunchIcon('file explorers')