universal_table/app/assets/javascripts/mind_map/jsmind/jsmind.plugin.js

40 lines
1.1 KiB
JavaScript
Executable File

import { $ } from './jsmind.dom.js'
const plugin_data = {
plugins: [],
}
export function register(plugin) {
if (!(plugin instanceof Plugin)) {
throw new Error('can not register plugin, it is not an instance of Plugin')
}
if (plugin_data.plugins.map((p) => p.name).includes(plugin.name)) {
throw new Error('can not register plugin ' + plugin.name + ': plugin name already exist')
}
plugin_data.plugins.push(plugin)
}
export function apply(jm, options) {
$.w.setTimeout(function () {
_apply(jm, options)
}, 0)
}
function _apply(jm, options) {
plugin_data.plugins.forEach((p) => p.fn_init(jm, options[p.name]))
}
export class Plugin {
// function fn_init(jm, options){ }
constructor(name, fn_init) {
if (!name) {
throw new Error('plugin must has a name')
}
if (!fn_init || typeof fn_init !== 'function') {
throw new Error('plugin must has an init function')
}
this.name = name
this.fn_init = fn_init
}
}