69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
// Registry used by the player runtime to discover independently loaded region modules.
|
|
|
|
(function () {
|
|
var root = window;
|
|
var registry = root.pulsePlayerRegionTypes && typeof root.pulsePlayerRegionTypes === 'object' ? root.pulsePlayerRegionTypes : {};
|
|
|
|
function normalizeType(type) {
|
|
return String(type || '').trim().toLowerCase();
|
|
}
|
|
|
|
function register(type, definition) {
|
|
registry[normalizeType(type)] = definition || {};
|
|
return registry[normalizeType(type)];
|
|
}
|
|
|
|
function get(type) {
|
|
return registry[normalizeType(type)] || null;
|
|
}
|
|
|
|
function list() {
|
|
return Object.keys(registry).map(function (type) {
|
|
return {
|
|
type: type,
|
|
definition: registry[type] || {}
|
|
};
|
|
});
|
|
}
|
|
|
|
root.pulsePlayerRegionTypes = {
|
|
register: register,
|
|
get: get,
|
|
list: list
|
|
};
|
|
}());
|
|
|
|
function getPlayerRegionModules() {
|
|
if (!window.pulsePlayerRegionTypes || typeof window.pulsePlayerRegionTypes.list !== 'function') {
|
|
return [];
|
|
}
|
|
|
|
return window.pulsePlayerRegionTypes.list();
|
|
}
|
|
|
|
function runRegionLifecycle(root, lifecycleName) {
|
|
if (!root) {
|
|
return;
|
|
}
|
|
|
|
getPlayerRegionModules().forEach(function (entry) {
|
|
var module = entry && entry.definition ? entry.definition : null;
|
|
if (!module || typeof module[lifecycleName] !== 'function') {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
module[lifecycleName](root);
|
|
} catch (_error) {
|
|
// Keep slide rendering resilient if a region lifecycle hook fails.
|
|
}
|
|
});
|
|
}
|
|
|
|
function destroyRegionInstances(root) {
|
|
runRegionLifecycle(root, 'destroyRegion');
|
|
}
|
|
|
|
function initializeRegionInstances(root) {
|
|
runRegionLifecycle(root, 'initRegion');
|
|
} |