moved PluginManager

This commit is contained in:
antelle 2019-09-15 13:29:20 +02:00
parent 5a10dc1f2f
commit 2688e761ba
5 changed files with 78 additions and 14 deletions

View File

@ -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() {

View File

@ -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);

View File

@ -233,4 +233,6 @@ const PluginManager = Backbone.Model.extend({
}
});
module.exports = new PluginManager();
PluginManager.instance = new PluginManager();
module.exports = PluginManager;

View File

@ -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);
}
});

62
util/import.js Normal file
View File

@ -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');