etherpad-lite/src/static/js/pluginfw/client_plugins.js

62 lines
2 KiB
JavaScript
Raw Normal View History

2020-11-23 13:24:19 -05:00
let $, jQuery;
$ = jQuery = require('ep_etherpad-lite/static/js/rjquery').$;
const _ = require('underscore');
2020-11-23 13:24:19 -05:00
const pluginUtils = require('./shared');
const defs = require('./plugin_defs');
exports.baseURL = '';
exports.ensure = function (cb) {
2020-11-23 13:24:19 -05:00
if (!defs.loaded) exports.update(cb);
else cb();
};
exports.update = function (cb) {
// It appears that this response (see #620) may interrupt the current thread
// of execution on Firefox. This schedules the response in the run-loop,
// which appears to fix the issue.
2020-11-23 13:24:19 -05:00
const callback = function () { setTimeout(cb, 0); };
$.ajaxSetup({cache: false});
jQuery.getJSON(`${exports.baseURL}pluginfw/plugin-definitions.json`).done((data) => {
defs.plugins = data.plugins;
defs.parts = data.parts;
2020-11-23 13:24:19 -05:00
defs.hooks = pluginUtils.extractHooks(defs.parts, 'client_hooks');
defs.loaded = true;
callback();
2020-11-23 13:24:19 -05:00
}).fail((e) => {
console.error(`Failed to load plugin-definitions: ${err}`);
2020-06-07 12:01:14 +01:00
callback();
});
};
function adoptPluginsFromAncestorsOf(frame) {
// Bind plugins with parent;
2020-11-23 13:24:19 -05:00
let parentRequire = null;
try {
while (frame = frame.parent) {
2020-11-23 13:24:19 -05:00
if (typeof (frame.require) !== 'undefined') {
parentRequire = frame.require;
break;
}
}
} catch (error) {
// Silence (this can only be a XDomain issue).
}
if (parentRequire) {
2020-11-23 13:24:19 -05:00
const ancestorPluginDefs = parentRequire('ep_etherpad-lite/static/js/pluginfw/plugin_defs');
defs.hooks = ancestorPluginDefs.hooks;
defs.loaded = ancestorPluginDefs.loaded;
defs.parts = ancestorPluginDefs.parts;
defs.plugins = ancestorPluginDefs.plugins;
2020-11-23 13:24:19 -05:00
const ancestorPlugins = parentRequire('ep_etherpad-lite/static/js/pluginfw/client_plugins');
exports.baseURL = ancestorPlugins.baseURL;
exports.ensure = ancestorPlugins.ensure;
exports.update = ancestorPlugins.update;
} else {
2020-11-23 13:24:19 -05:00
throw new Error('Parent plugins could not be found.');
}
}
exports.adoptPluginsFromAncestorsOf = adoptPluginsFromAncestorsOf;