Spaces:
Running
Running
| function initAPI(version) { | |
| var ModAPI = {}; | |
| ModAPI.events = {}; | |
| ModAPI.events.types = ["event"]; | |
| ModAPI.events.listeners = { "event": [] }; | |
| ModAPI.globals = {}; | |
| ModAPI.version = version; | |
| ModAPI.addEventListener = function AddEventListener(name, callback) { | |
| if (!callback) { | |
| throw new Error("Invalid callback!"); | |
| } | |
| if (ModAPI.events.types.includes(name)) { | |
| if (!Array.isArray(ModAPI.events.listeners[name])) { | |
| ModAPI.events.listeners[name] = []; | |
| } | |
| ModAPI.events.listeners[name].push(callback); | |
| console.log("Added new event listener."); | |
| } else { | |
| throw new Error("This event does not exist!"); | |
| } | |
| }; | |
| ModAPI.removeEventListener = function removeEventListener(name, func, slow) { | |
| if (!func) { | |
| throw new Error("Invalid callback!"); | |
| } | |
| if (!Array.isArray(ModAPI.events.listeners[name])) { | |
| ModAPI.events.listeners[name] = []; | |
| } | |
| var targetArr = ModAPI.events.listeners[name]; | |
| if (!slow) { | |
| if (targetArr.indexOf(func) !== -1) { | |
| targetArr.splice(targetArr.indexOf(func), 1); | |
| console.log("Removed event listener."); | |
| } | |
| } else { | |
| var functionString = func.toString(); | |
| targetArr.forEach((f, i) => { | |
| if (f.toString() === functionString) { | |
| targetArr.splice(i, 1); | |
| console.log("Removed event listener."); | |
| } | |
| }); | |
| } | |
| }; | |
| ModAPI.events.newEvent = function newEvent(name) { | |
| ModAPI.events.types.push(name); | |
| }; | |
| ModAPI.events.callEvent = function callEvent(name, data) { | |
| if ( | |
| !ModAPI.events.types.includes(name) || | |
| !Array.isArray(ModAPI.events.listeners[name]) | |
| ) { | |
| if (!Array.isArray(ModAPI.events.listeners[name])) { | |
| if (ModAPI.events.types.includes(name)) { | |
| ModAPI.events.listeners.event.forEach((func) => { | |
| func({ event: name, data: data }); | |
| }); | |
| return; | |
| } | |
| return; | |
| } | |
| console.error( | |
| "The ModAPI has been called with an invalid event name: " + name | |
| ); | |
| console.error("Please report this bug to the repo."); | |
| return; | |
| } | |
| ModAPI.events.listeners[name].forEach((func) => { | |
| func(data); | |
| }); | |
| ModAPI.events.listeners.event.forEach((func) => { | |
| func({ event: name, data: data }); | |
| }); | |
| ModAPI.globals._initUpdate(); | |
| }; | |
| ModAPI.updateComponent = function updateComponent(component) { | |
| if ( | |
| typeof component !== "string" || | |
| ModAPI[component] === null || | |
| ModAPI[component] === undefined | |
| ) { | |
| return; | |
| } | |
| if (!ModAPI.globals || !ModAPI.globals.onGlobalsUpdate) { | |
| return; | |
| } | |
| if (!ModAPI.globals.toUpdate) { | |
| ModAPI.globals.toUpdate = []; | |
| } | |
| if (ModAPI.globals.toUpdate.indexOf(component) === -1) { | |
| ModAPI.globals.toUpdate.push(component); | |
| } | |
| }; | |
| ModAPI.require = function require(component) { | |
| if (typeof component !== "string") { | |
| return; | |
| } | |
| if (!ModAPI.globals || !ModAPI.globals.onRequire) { | |
| return; | |
| } | |
| ModAPI.globals.onRequire(component); | |
| }; | |
| ModAPI.globals._initUpdate = function _initUpdate() { | |
| if (!ModAPI.globals.toUpdate) { | |
| ModAPI.globals.toUpdate = []; | |
| } | |
| ModAPI.globals.toUpdate.forEach((id) => { | |
| ModAPI.globals.onGlobalsUpdate(id); | |
| }); | |
| ModAPI.globals.toUpdate = []; | |
| }; | |
| window.ModAPI = ModAPI; | |
| } |