Reinstate emote injection
This commit is contained in:
parent
b5fc88bc8e
commit
0af356823a
|
@ -7,8 +7,8 @@
|
|||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import { FileUtils } from 'common';
|
||||
import { Events, Globals, WebpackModules, ReactComponents } from 'modules';
|
||||
import { FileUtils, ClientLogger as Logger } from 'common';
|
||||
import { Events, Globals, WebpackModules, ReactComponents, MonkeyPatch } from 'modules';
|
||||
import { DOM, VueInjector } from 'ui';
|
||||
import EmoteComponent from './EmoteComponent.vue';
|
||||
let emotes = null;
|
||||
|
@ -24,6 +24,9 @@ export default class {
|
|||
static get React() {
|
||||
return WebpackModules.getModuleByName('React');
|
||||
}
|
||||
static get ReactDOM() {
|
||||
return WebpackModules.getModuleByName('ReactDOM');
|
||||
}
|
||||
static processMarkup(markup) {
|
||||
if (!emotesEnabled) return markup; // TODO Get it from setttings
|
||||
const newMarkup = [];
|
||||
|
@ -76,14 +79,41 @@ export default class {
|
|||
}
|
||||
}
|
||||
|
||||
static findByProp(obj, what, value) {
|
||||
if (obj.hasOwnProperty(what) && obj[what] === value) return obj;
|
||||
if (obj.props && !obj.children) return this.findByProp(obj.props, what, value);
|
||||
if (!obj.children || !obj.children.length) return null;
|
||||
for (const child of obj.children) {
|
||||
if (!child) continue;
|
||||
const findInChild = this.findByProp(child, what, value);
|
||||
if (findInChild) return findInChild;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static async observe() {
|
||||
const dataPath = Globals.getObject('paths').find(path => path.id === 'data').path;
|
||||
try {
|
||||
emotes = await FileUtils.readJsonFromFile(dataPath + '/emotes.json');
|
||||
const Message = await ReactComponents.getComponent('Message');
|
||||
Message.on('componentDidMount', ({ element }) => this.injectEmotes(element));
|
||||
Message.on('componentDidUpdate', ({ state, element }) => {
|
||||
if (!state.isEditing) this.injectEmotes(element);
|
||||
this.unpatchRender = MonkeyPatch('BD:EmoteModule', Message.component.prototype).after('render', (component, args, retVal) => {
|
||||
try {
|
||||
const markup = this.findByProp(retVal, 'className', 'markup'); // First child has all the actual text content, second is the edited timestamp
|
||||
if (!markup) return;
|
||||
markup.children[0] = this.processMarkup(markup.children[0]);
|
||||
} catch (err) {
|
||||
Logger.err('EmoteModule', err);
|
||||
}
|
||||
});
|
||||
this.unpatchMount = MonkeyPatch('BD:EmoteModule', Message.component.prototype).after('componentDidMount', (component, args) => {
|
||||
const element = this.ReactDOM.findDOMNode(component);
|
||||
if (!element) return;
|
||||
this.injectEmotes(element);
|
||||
});
|
||||
this.unpatchUpdate = MonkeyPatch('BD:EmoteModule', Message.component.prototype).after('componentDidUpdate', (component, args) => {
|
||||
const element = this.ReactDOM.findDOMNode(component);
|
||||
if (!element) return;
|
||||
this.injectEmotes(element);
|
||||
});
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
|
|
Loading…
Reference in New Issue