imodule and base for new editor module in client

This commit is contained in:
Jiiks 2019-02-24 19:46:11 +02:00
parent 8c04e7d2d3
commit d1fd5ae881
7 changed files with 103 additions and 13 deletions

View File

@ -10,7 +10,7 @@
import { DOM, BdUI, BdMenu, Modals, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui'; import { DOM, BdUI, BdMenu, Modals, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
import BdCss from './styles/index.scss'; import BdCss from './styles/index.scss';
import { Events, CssEditor, Globals, Settings, Database, Updater, ModuleManager, PluginManager, ThemeManager, ExtModuleManager, Vendor, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi, BdWebApi, Connectivity, Cache, Reflection, PackageInstaller } from 'modules'; import { Events, Globals, Settings, Database, Updater, ModuleManager, PluginManager, ThemeManager, ExtModuleManager, Vendor, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi, BdWebApi, Connectivity, Cache, Reflection, PackageInstaller } from 'modules';
import { ClientLogger as Logger, ClientIPC, Utils } from 'common'; import { ClientLogger as Logger, ClientIPC, Utils } from 'common';
import { BuiltinManager, EmoteModule, ReactDevtoolsModule, VueDevtoolsModule, TrackingProtection, E2EE } from 'builtin'; import { BuiltinManager, EmoteModule, ReactDevtoolsModule, VueDevtoolsModule, TrackingProtection, E2EE } from 'builtin';
import electron from 'electron'; import electron from 'electron';
@ -30,7 +30,7 @@ class BetterDiscord {
this._bd = { this._bd = {
DOM, BdUI, BdMenu, Modals, Reflection, Toasts, Notifications, BdContextMenu, DiscordContextMenu, DOM, BdUI, BdMenu, Modals, Reflection, Toasts, Notifications, BdContextMenu, DiscordContextMenu,
Events, CssEditor, Globals, Settings, Database, Updater, Events, Globals, Settings, Database, Updater,
ModuleManager, PluginManager, ThemeManager, ExtModuleManager, PackageInstaller, ModuleManager, PluginManager, ThemeManager, ExtModuleManager, PackageInstaller,
Vendor, Vendor,

View File

@ -38,7 +38,7 @@ export default new class {
ClientIPC.on('bd-get-scss', () => this.scss, true); ClientIPC.on('bd-get-scss', () => this.scss, true);
ClientIPC.on('bd-update-scss', (e, scss) => this.updateScss(scss)); ClientIPC.on('bd-update-scss', (e, scss) => this.updateScss(scss));
ClientIPC.on('bd-save-csseditor-bounds', (e, bounds) => this.saveEditorBounds(bounds)); ClientIPC.on('bd-save-csseditor-bounds', (e, bounds) => this.saveEditorBounds(bounds));
ClientIPC.on('bd-runEditorScript', (e, script) => { ClientIPC.on('bd-editor-runScript', (e, script) => {
try { try {
new Function(script)(); new Function(script)();
e.reply('ok'); e.reply('ok');

View File

@ -0,0 +1,40 @@
/**
* BetterDiscord Editor Module
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
* All rights reserved.
* https://betterdiscord.net
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import { FileUtils, ClientLogger as Logger, ClientIPC } from 'common';
import Module from './imodule';
export default new class extends Module {
setInitialState(state) {
return {
editorBounds: undefined
};
}
events() {
ClientIPC.on('editor-runScript', (e, script) => {
try {
new Function(script)();
e.reply('ok');
} catch (err) {
e.reply({ err: err.stack || err });
}
});
}
/**
* Show editor, flashes if already visible.
*/
async show() {
await ClientIPC.send('editor-open', this.state.editorBounds);
}
}

View File

@ -0,0 +1,44 @@
/**
* BetterDiscord Module Base
* Copyright (c) 2015-present JsSucks - https://github.com/JsSucks
* All rights reserved.
* https://github.com/JsSucks - https://betterdiscord.net
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* Base Module that every non-static module should extend
*/
export default class Module {
constructor(args) {
this.__ = {
state: args || {},
args
};
this.setState = this.setState.bind(this);
this.initialize();
}
initialize() {
if (this.bindings) this.bindings();
if (this.setInitialState) this.setState(this.setInitialState(this.state));
if (this.events) this.events();
if (this.init) this.init();
}
setState(newState) {
const oldState = this.state;
Object.assign(this.state, newState);
if (this.stateChanged) this.stateChanged(oldState, newState);
}
set args(t) { }
get args() { return this.__.args; }
set state(state) { return this.__.state = state; }
get state() { return this.__.state; }
}

View File

@ -1,5 +1,6 @@
export { default as Events } from './events'; export { default as Events } from './events';
export { default as CssEditor } from './csseditor'; export { default as CssEditor } from './csseditor';
export { default as Editor } from './editor';
export { default as Globals } from './globals'; export { default as Globals } from './globals';
export { default as Settings } from './settings'; export { default as Settings } from './settings';
export { default as Database } from './database'; export { default as Database } from './database';

View File

@ -8,6 +8,8 @@
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
// TODO this should be remade as editor instead of css editor
<template> <template>
<SettingsWrapper headertext="CSS Editor"> <SettingsWrapper headertext="CSS Editor">
<div class="bd-cssEditor"> <div class="bd-cssEditor">
@ -49,7 +51,7 @@
<script> <script>
// Imports // Imports
import { Settings, CssEditor } from 'modules'; import { Settings, Editor } from 'modules';
import { SettingsWrapper } from './'; import { SettingsWrapper } from './';
import { FormButton } from '../common'; import { FormButton } from '../common';
import SettingsPanel from './SettingsPanel.vue'; import SettingsPanel from './SettingsPanel.vue';
@ -64,18 +66,18 @@
}, },
data() { data() {
return { return {
CssEditor Editor
}; };
}, },
computed: { computed: {
error() { error() {
return this.CssEditor.error; return this.Editor.error;
}, },
compiling() { compiling() {
return this.CssEditor.compiling; return this.Editor.compiling;
}, },
systemEditorPath() { systemEditorPath() {
return this.CssEditor.filePath; return this.Editor.filePath;
}, },
liveUpdateSetting() { liveUpdateSetting() {
return Settings.getSetting('css', 'default', 'live-update'); return Settings.getSetting('css', 'default', 'live-update');
@ -92,13 +94,13 @@
}, },
methods: { methods: {
openInternalEditor() { openInternalEditor() {
this.CssEditor.show(); this.Editor.show();
}, },
openSystemEditor() { openSystemEditor() {
this.CssEditor.openSystemEditor(); // this.Editor.openSystemEditor();
}, },
recompile() { recompile() {
this.CssEditor.recompile(); // this.Editor.recompile();
} }
} }
} }

View File

@ -68,7 +68,7 @@ class Comms {
// BDIpc.on('bd-openCssEditor', (event, options) => this.bd.csseditor.openEditor(options), true); // BDIpc.on('bd-openCssEditor', (event, options) => this.bd.csseditor.openEditor(options), true);
// BDIpc.on('bd-sendToCssEditor', (event, m) => this.sendToCssEditor(m.channel, m.message), true); // BDIpc.on('bd-sendToCssEditor', (event, m) => this.sendToCssEditor(m.channel, m.message), true);
BDIpc.on('bd-openCssEditor', (event, options) => this.bd.editor.openEditor(options), true); // BDIpc.on('bd-openCssEditor', (event, options) => this.bd.editor.openEditor(options), true);
BDIpc.on('bd-native-open', (event, options) => { BDIpc.on('bd-native-open', (event, options) => {
dialog.showOpenDialog(OriginalBrowserWindow.fromWebContents(event.ipcEvent.sender), options, filenames => { dialog.showOpenDialog(OriginalBrowserWindow.fromWebContents(event.ipcEvent.sender), options, filenames => {
@ -97,8 +97,11 @@ class Comms {
} }
editorListeners() { editorListeners() {
BDIpc.on('bd-openCssEditor', (event, options) => this.bd.editor.openEditor(options), true);
BDIpc.on('bd-editor-open', (event, options) => this.bd.editor.openEditor(options), true);
BDIpc.on('bd-editor-runScript', async (event, script) => { BDIpc.on('bd-editor-runScript', async (event, script) => {
const result = await this.sendToDiscord('bd-runEditorScript', script); const result = await this.sendToDiscord('bd-editor-runScript', script);
event.reply(result); event.reply(result);
}); });