From 2688e761bad4f0a31e9b8cd7d4a392e0048c81f4 Mon Sep 17 00:00:00 2001 From: antelle Date: Sun, 15 Sep 2019 13:29:20 +0200 Subject: [PATCH] moved PluginManager --- app/scripts/app.js | 4 +- app/scripts/models/app-model.js | 2 +- app/scripts/plugins/plugin-manager.js | 4 +- .../views/settings/settings-plugins-view.js | 20 +++--- util/import.js | 62 +++++++++++++++++++ 5 files changed, 78 insertions(+), 14 deletions(-) create mode 100644 util/import.js diff --git a/app/scripts/app.js b/app/scripts/app.js index 34c8efd3..d94a92ce 100644 --- a/app/scripts/app.js +++ b/app/scripts/app.js @@ -80,7 +80,7 @@ ready(() => { KdbxwebInit.init(); FocusDetector.init(); window.kw = ExportApi; - return PluginManager.init(); + return PluginManager.instance.init(); } function showSettingsLoadError() { @@ -146,7 +146,7 @@ ready(() => { Updater.init(); SingleInstanceChecker.init(); AppRightsChecker.init(); - setTimeout(() => PluginManager.runAutoUpdate(), Timeouts.AutoUpdatePluginsAfterStart); + setTimeout(() => PluginManager.instance.runAutoUpdate(), Timeouts.AutoUpdatePluginsAfterStart); } function showView() { diff --git a/app/scripts/models/app-model.js b/app/scripts/models/app-model.js index 12d82f0c..467b485b 100644 --- a/app/scripts/models/app-model.js +++ b/app/scripts/models/app-model.js @@ -142,7 +142,7 @@ const AppModel = Backbone.Model.extend({ } if (config.plugins) { const pluginsPromises = config.plugins.map(plugin => - PluginManager.installIfNew(plugin.url, plugin.manifest, true) + PluginManager.instance.installIfNew(plugin.url, plugin.manifest, true) ); return Promise.all(pluginsPromises).then(() => { this.settings.set(config.settings); diff --git a/app/scripts/plugins/plugin-manager.js b/app/scripts/plugins/plugin-manager.js index e4c62d9a..6fd90009 100644 --- a/app/scripts/plugins/plugin-manager.js +++ b/app/scripts/plugins/plugin-manager.js @@ -233,4 +233,6 @@ const PluginManager = Backbone.Model.extend({ } }); -module.exports = new PluginManager(); +PluginManager.instance = new PluginManager(); + +module.exports = PluginManager; diff --git a/app/scripts/views/settings/settings-plugins-view.js b/app/scripts/views/settings/settings-plugins-view.js index 60513dfe..9cc91002 100644 --- a/app/scripts/views/settings/settings-plugins-view.js +++ b/app/scripts/views/settings/settings-plugins-view.js @@ -47,7 +47,7 @@ const SettingsPluginsView = Backbone.View.extend({ render() { this.renderTemplate({ - plugins: PluginManager.get('plugins') + plugins: PluginManager.instance.get('plugins') .map(plugin => ({ id: plugin.id, manifest: plugin.get('manifest'), @@ -87,7 +87,7 @@ const SettingsPluginsView = Backbone.View.extend({ if (!PluginGallery.gallery) { return null; } - const plugins = PluginManager.get('plugins'); + const plugins = PluginManager.instance.get('plugins'); return PluginGallery.gallery.plugins .map(pl => ({ url: pl.url, @@ -142,7 +142,7 @@ const SettingsPluginsView = Backbone.View.extend({ urlTextBox.prop('disabled', true); installBtn.text(Locale.setPlInstallBtnProgress + '...').prop('disabled', true); this.installFromUrl = { url }; - PluginManager.install(url, undefined, true) + PluginManager.instance.install(url, undefined, true) .then(() => { this.installFinished(); this.installFromUrl = null; @@ -166,22 +166,22 @@ const SettingsPluginsView = Backbone.View.extend({ uninstallClick(e) { const pluginId = $(e.target).data('plugin'); - PluginManager.uninstall(pluginId); + PluginManager.instance.uninstall(pluginId); }, disableClick(e) { const pluginId = $(e.target).data('plugin'); - PluginManager.disable(pluginId); + PluginManager.instance.disable(pluginId); }, enableClick(e) { const pluginId = $(e.target).data('plugin'); - PluginManager.activate(pluginId); + PluginManager.instance.activate(pluginId); }, updateClick(e) { const pluginId = $(e.target).data('plugin'); - PluginManager.update(pluginId); + PluginManager.instance.update(pluginId); }, useLocaleClick(e) { @@ -201,7 +201,7 @@ const SettingsPluginsView = Backbone.View.extend({ installBtn.text(Locale.setPlInstallBtnProgress + '...').prop('disabled', true); this.installing[plugin.url] = true; delete this.installErrors[plugin.url]; - PluginManager.install(plugin.url, plugin.manifest) + PluginManager.instance.install(plugin.url, plugin.manifest) .catch(e => { this.installErrors[plugin.url] = e; delete this.installing[plugin.url]; @@ -249,14 +249,14 @@ const SettingsPluginsView = Backbone.View.extend({ const setting = settingEl.data('setting'); const pluginId = settingEl.data('plugin'); const val = el.type === 'checkbox' ? el.checked : el.value; - const plugin = PluginManager.getPlugin(pluginId); + const plugin = PluginManager.instance.getPlugin(pluginId); plugin.setSettings({ [setting]: val }); }, autoUpdateChange(e) { const pluginId = $(e.target).data('plugin'); const enabled = e.target.checked; - PluginManager.setAutoUpdate(pluginId, enabled); + PluginManager.instance.setAutoUpdate(pluginId, enabled); } }); diff --git a/util/import.js b/util/import.js new file mode 100644 index 00000000..52912b15 --- /dev/null +++ b/util/import.js @@ -0,0 +1,62 @@ +/* eslint-disable no-console */ + +const fs = require('fs'); +const path = require('path'); + +const readdirSync = (p, a = []) => { + if (fs.statSync(p).isDirectory()) { + fs.readdirSync(p).map(f => readdirSync(a[a.push(path.join(p, f)) - 1], a)); + } + return a; +}; + +console.log('Building file list...'); + +const files = readdirSync('app/scripts').filter(f => f.endsWith('.js')); + +console.log(`Found ${files.length} files, working...`); + +for (const file of files) { + const lines = fs.readFileSync(file, 'utf8').split('\n'); + const imports = []; + for (let ix = 0; ix < lines.length; ix++) { + const match = lines[ix].match(/^const\s+(\w+)\s*=\s*require\('(.*)'\);$/); + if (!match) { + break; + } + let [, variable, modPath] = match; + if (modPath.includes('/')) { + modPath = path.join(path.dirname(file), modPath).replace('app/scripts/', ''); + } + imports.push({ + variable, + modPath + }); + } + imports.sort((a, b) => { + const aModPath = a.modPath.includes('/') ? a.modPath : `_${a.modPath}`; + const bModPath = b.modPath.includes('/') ? b.modPath : `_${b.modPath}`; + return aModPath.localeCompare(bModPath); + }); + for (let ix = 0; ix < imports.length; ix++) { + const imp = imports[ix]; + lines[ix] = `import { ${imp.variable} } from '${imp.modPath}';`; + } + + for (let ix = 0; ix < lines.length; ix++) { + const match = lines[ix].match(/^module\.exports/); + if (!match) { + continue; + } + const simpleExportMatch = lines[ix].match(/^module.exports\s*=\s*(\w+);/); + if (simpleExportMatch) { + const varName = simpleExportMatch[1]; + lines[ix] = `export { ${varName} };`; + continue; + } + console.log(lines[ix]); + } + // fs.writeFileSync(file, lines.join('\n')); +} + +console.log('Done');