Commit 8bfd802f authored by yann300's avatar yann300

refactor plugin loading/removing

parent 17718648
...@@ -15,10 +15,8 @@ const SupportTab = require('../tabs/support-tab') ...@@ -15,10 +15,8 @@ const SupportTab = require('../tabs/support-tab')
const PluginTab = require('../tabs/plugin-tab') const PluginTab = require('../tabs/plugin-tab')
const TestTab = require('../tabs/test-tab') const TestTab = require('../tabs/test-tab')
const RunTab = require('../tabs/run-tab') const RunTab = require('../tabs/run-tab')
const plugins = require('../plugin/plugins')
const DraggableContent = require('../ui/draggableContent') const DraggableContent = require('../ui/draggableContent')
var toolTip = require('../ui/tooltip')
const EventManager = remixLib.EventManager const EventManager = remixLib.EventManager
const styles = styleguide.chooser() const styles = styleguide.chooser()
...@@ -71,23 +69,10 @@ module.exports = class RighthandPanel { ...@@ -71,23 +69,10 @@ module.exports = class RighthandPanel {
test: new TestTab(self._components.registry) test: new TestTab(self._components.registry)
} }
self.event.register('plugin-loadRequest', json => { self._components.settings.event.register('plugin-loadRequest', json => {
self.loadPlugin(json) self.loadPlugin(json)
}) })
self.event.register('plugin-name-loadRequest', name => {
var plugin = plugins[name]
if (plugin) {
if (!self._components.pluginManager.plugins[plugin.title]) {
self.loadPlugin(plugin)
} else {
toolTip(name + ' already loaded')
}
} else {
toolTip('unknown plugin ' + name)
}
})
self.loadPlugin = function (json) { self.loadPlugin = function (json) {
var modal = new DraggableContent(() => { var modal = new DraggableContent(() => {
self._components.pluginManager.unregister(json) self._components.pluginManager.unregister(json)
......
...@@ -2,8 +2,8 @@ var yo = require('yo-yo') ...@@ -2,8 +2,8 @@ var yo = require('yo-yo')
var csjs = require('csjs-inject') var csjs = require('csjs-inject')
var remixLib = require('remix-lib') var remixLib = require('remix-lib')
const defaultPlugins = require('../plugin/plugins')
var globalRegistry = require('../../global/registry') var globalRegistry = require('../../global/registry')
var modal = require('../ui/modal-dialog-custom')
var tooltip = require('../ui/tooltip') var tooltip = require('../ui/tooltip')
var copyToClipboard = require('../ui/copy-to-clipboard') var copyToClipboard = require('../ui/copy-to-clipboard')
var styleGuide = require('../ui/styles-guide/theme-chooser') var styleGuide = require('../ui/styles-guide/theme-chooser')
...@@ -30,6 +30,7 @@ module.exports = class SettingsTab { ...@@ -30,6 +30,7 @@ module.exports = class SettingsTab {
optionVM: null, personal: null, warnPersonalMode: null, optionVM: null, personal: null, warnPersonalMode: null,
pluginInput: null, versionSelector: null, version: null, pluginInput: null, versionSelector: null, version: null,
theme: { dark: null, light: null }, theme: { dark: null, light: null },
plugins: {},
config: { config: {
general: null, themes: null, general: null, themes: null,
plugin: null plugin: null
...@@ -109,15 +110,15 @@ module.exports = class SettingsTab { ...@@ -109,15 +110,15 @@ module.exports = class SettingsTab {
<label for="themeDark">Dark Theme</label> <label for="themeDark">Dark Theme</label>
</div> </div>
</div>` </div>`
self._view.config.plugins = yo`<div></div>`
self._view.config.plugin = yo` self._view.config.plugin = yo`
<div class="${css.info}"> <div class="${css.info}">
<div class=${css.title}>Plugin</div> <div class=${css.title}>Plugin</div>
<div class="${css.crowNoFlex}"> <div class="${css.crowNoFlex}">
<input onclick=${() => { onLoadPlugin('oraclize') }} type="button" value="Oraclize" class="${css.pluginLoad}">
<input onclick=${() => { onLoadPlugin('etherscan-general') }} type="button" value="Etherscan-general" class="${css.pluginLoad}">
<div>Load plugin from JSON description: </div> <div>Load plugin from JSON description: </div>
${self._view.pluginInput} ${self._view.pluginInput}
<input onclick=${onloadPluginJson} type="button" value="Load" class="${css.pluginLoad}"> <input onclick=${onloadPluginJson} type="button" value="Load" class="${css.pluginLoad}">
${self._view.config.plugins}
</div> </div>
</div>` </div>`
self._view.el = yo` self._view.el = yo`
...@@ -127,21 +128,57 @@ module.exports = class SettingsTab { ...@@ -127,21 +128,57 @@ module.exports = class SettingsTab {
${self._view.gistToken} ${self._view.gistToken}
${self._view.config.themes} ${self._view.config.themes}
</div>` </div>`
function onchangeOption (event) {
self._deps.config.set('settings/always-use-vm', !self._deps.config.get('settings/always-use-vm')) function loadPlugins (plugins, opt) {
for (var k in plugins) {
var plugin = plugins[k]
if (!self._view.plugins[plugin.title]) self._view.plugins[plugin.title] = {}
self._view.plugins[plugin.title].json = plugin
self._view.plugins[plugin.title].el = yo`<div class="${css.pluginLoad}">
<div style="display: inline-block" onclick=${() => { onLoadPlugin(plugin.title) }}>${plugin.title}</div>
${opt.removable ? yo`<span class="removePlugin" onclick=${() => { onRemovePlugin(plugin.title) }}><i class="fa fa-close"></i></span>` : yo`<span></span>`}
</div>`
self._view.config.plugins.appendChild(self._view.plugins[plugin.title].el)
}
} }
function getSavedPlugin () {
var savedPlugin = self._deps.config.get('settings/plugins-list')
return savedPlugin ? JSON.parse(savedPlugin) : {}
}
function setSavedPlugin (savedPlugins) {
self._deps.config.set('settings/plugins-list', JSON.stringify(savedPlugins))
}
loadPlugins(defaultPlugins, {removable: false})
loadPlugins(getSavedPlugin(), {removable: true})
function onLoadPlugin (name) { function onLoadPlugin (name) {
// @TODO: BAD! REFACTOR: no module should trigger events of another modules emitter self.event.trigger('plugin-loadRequest', [self._view.plugins[name].json])
self._deps.righthandpanel.event.trigger('plugin-name-loadRequest', [name]) }
function onRemovePlugin (name) {
var savedPlugin = getSavedPlugin()
delete savedPlugin[name]
setSavedPlugin(savedPlugin)
if (self._view.plugins[name]) {
self._view.plugins[name].el.parentNode.removeChild(self._view.plugins[name].el)
delete self._view.plugins[name]
}
} }
function onloadPluginJson (event) { function onloadPluginJson (event) {
try { try {
var json = JSON.parse(self._view.pluginInput.value) var json = JSON.parse(self._view.pluginInput.value)
} catch (e) { } catch (e) {
return modal.alert('cannot parse the plugin definition to JSON') return tooltip('cannot parse the plugin definition to JSON')
} }
// @TODO: BAD! REFACTOR: no module should trigger events of another modules emitter var savedPlugin = getSavedPlugin()
self._deps.righthandpanel.event.trigger('plugin-loadRequest', [json]) if (self._view.plugins[json.title]) return tooltip('Plugin already loaded')
savedPlugin[json.title] = json
setSavedPlugin(savedPlugin)
loadPlugins([json], {removable: true})
}
function onchangeOption (event) {
self._deps.config.set('settings/always-use-vm', !self._deps.config.get('settings/always-use-vm'))
} }
function onswitch2darkTheme (event) { function onswitch2darkTheme (event) {
styleGuide.switchTheme('dark') styleGuide.switchTheme('dark')
...@@ -218,6 +255,9 @@ const css = csjs` ...@@ -218,6 +255,9 @@ const css = csjs`
width: inherit; width: inherit;
display: inline-block; display: inline-block;
} }
.removePlugin {
cursor: pointer;
}
i.warnIt { i.warnIt {
color: ${styles.appProperties.warningText_Color}; color: ${styles.appProperties.warningText_Color};
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment