@wisdomgarden/cloak-plugin-inappbrowser
Version:
Open an in-app browser window for Cloak Framework
64 lines (55 loc) • 1.59 kB
JavaScript
let PluginInstance = null;
const PluginName = 'InAppBrowser'
const register = (plugin) => {
if (plugin.registered) {
return;
}
PluginInstance = plugin;
plugin.registered = true;
plugin.currentBrowser = null;
plugin.create = function (url, target, options) {
const browser = plugin.createBrowser(url, target, options);
plugin.currentBrowser = browser;
browser._events = {};
browser.on = function (eventName) {
if (!browser._events[eventName]) {
this._events[eventName] = [];
}
plugin.addMessage(eventName);
return {
subscribe: (callback) => {
this._events[eventName].push(callback);
},
};
};
browser._triggerEvent = function (eventName, data) {
if (this._events[eventName]) {
this._events[eventName].forEach((callback) => callback(data));
}
};
browser.open();
return browser;
};
const messagehandler = (message) => {
const { event } = message;
if (event && plugin.currentBrowser._events[event]) {
plugin.currentBrowser._triggerEvent(event, message);
if (event === "exit") {
plugin._events = undefined;
plugin.currentBrowser = undefined;
}
}
};
plugin.setMessageHandler(messagehandler);
};
(() => {
window.__CloakPluginsRegister = window.__CloakPluginsRegister || {};
window.__CloakPluginsRegister[PluginName] = register;
if (Cloak && Cloak.plugins && Cloak.plugins[PluginName]) {
register(Cloak.plugins[PluginName]);
}
})();
export {
register,
PluginInstance as InAppBrowser,
};