/**
* Ein Objekt, das Lebenszyklus-Haken als Schlüssel enthält, die auf ein Array zeigen
* der Funktionen, die ausgeführt werden, wenn ein Lebenszyklus ausgelöst wird
*
* @privat
* /
const hooks_ = {};
/**
* Abrufen einer Liste von Haken für einen bestimmten Lebenszyklus
*
* @param {string} type
* den Lebenszyklus, um Haken zu erhalten von
*
* @param {Funktion|Funktion[]} [fn]
* Fügen Sie dem Lebenszyklus, den Sie erhalten, optional einen Haken (oder mehrere Haken) hinzu.
*
* @return {Array}
* ein Array von Haken oder ein leeres Array, wenn es keine gibt.
* /
const hooks = function(type, fn) {
hooks_[type] = hooks_[type] || [];
if (fn) {
hooks_[type] = hooks_[type].concat(fn);
}
return hooks_[type];
};
/**
* Hinzufügen eines Funktionshakens zu einem bestimmten Videojs-Lebenszyklus.
*
* @param {string} type
* den Lebenszyklus, an den die Funktion angehängt werden soll.
*
* @param {Funktion|Funktion[]}
* Die Funktion oder das Array von Funktionen, die angehängt werden sollen.
* /
const hook = function(type, fn) {
hooks(type, fn);
};
/**
* Entfernen eines Hooks aus einem bestimmten videojs-Lebenszyklus.
*
* @param {string} type
* den Lebenszyklus, an den die Funktion angehängt ist
*
* @param {Funktion} fn
* Die gehakte Funktion zum Entfernen
*
* @return {boolean}
* Die Funktion, die entfernt wurde, oder undef
* /
const removeHook = function(type, fn) {
const index = hooks(type).indexOf(fn);
wenn (index <= -1) {
return false;
}
hooks_[type] = hooks_[type].slice();
hooks_[type].splice(index, 1);
true zurückgeben;
};
/**
* Fügen Sie einen Funktionshaken hinzu, der nur einmal in einem bestimmten videojs-Lebenszyklus ausgeführt wird.
*
* @param {string} type
* den Lebenszyklus, an den die Funktion angehängt werden soll.
*
* @param {Funktion|Funktion[]}
* Die Funktion oder das Array von Funktionen, die angehängt werden sollen.
* /
const hookOnce = function(type, fn) {
hooks(type, [].concat(fn).map(original => {
const wrapper = (...args) => {
removeHook(type, wrapper);
return original(...args);
};
return wrapper;
}));
};
exportieren {
hooks_,
haken,
haken,
hookOnce,
removeHook
};