From bedcc1e5ef03cbb89bc4f29dac992946274f1334 Mon Sep 17 00:00:00 2001 From: KatieFrogs <23621460+KatieFrogs@users.noreply.github.com> Date: Wed, 23 Feb 2022 20:31:52 +0300 Subject: [PATCH] Plugin fixes - Support returning a promise in the plugin load() function - strReplace can now replace more than one occurence with a parameter, specify how many occurences are expected, with Infinity being as much as possible - this.log() function now accepts multiple arguments --- public/src/js/plugins.js | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/public/src/js/plugins.js b/public/src/js/plugins.js index 1267226..7dfef2e 100644 --- a/public/src/js/plugins.js +++ b/public/src/js/plugins.js @@ -143,12 +143,21 @@ class Plugins{ var length = searchString.length return input.slice(0, index + length) + insertedText + input.slice(index + length) } - strReplace(input, searchString, insertedText){ - var index = input.indexOf(searchString) - if(index === -1){ - throw new Error("searchString not found: " + searchString) + strReplace(input, searchString, insertedText, repeat=1){ + var position = 0 + for(var i = 0; i < repeat; i++){ + var index = input.indexOf(searchString, position) + if(index === -1){ + if(repeat === Infinity){ + break + }else{ + throw new Error("searchString not found: " + searchString) + } + } + input = input.slice(0, index) + insertedText + input.slice(index + searchString.length) + position = index + insertedText.length } - return input.slice(0, index) + insertedText + input.slice(index + searchString.length) + return input } hasSettings(){ @@ -288,17 +297,25 @@ class PluginLoader{ this.error() return } + var output try{ if(this.module.beforeLoad){ this.module.beforeLoad(this) } if(this.module.load){ - this.module.load(this) + output = this.module.load(this) } }catch(e){ console.error(e) this.error() } + if(typeof output === "object" && output.constructor === Promise){ + return output.catch(e => { + console.error(e) + this.error() + return Promise.resolve() + }) + } }, e => { console.error(e) this.error() @@ -494,12 +511,12 @@ class Patch{ beforeUnload(){ this.edits.forEach(edit => edit.unload()) } - log(message){ + log(...args){ var name = this.name || "Plugin" console.log( - "%c[" + name + "]%c " + message, + "%c[" + name + "]", "font-weight: bold;", - "" + ...args ) } }