/**
* Un objeto que contiene ganchos de ciclo de vida como claves que apuntan a una matriz
* de funciones que se ejecutan cuando se activa un ciclo de vida
*
* @privado
* /
ganchos const_ = {};
/ **
* Obtenga una lista de ganchos para un ciclo de vida específico
*
* @param {cadena} tipo
* el ciclo de vida para obtener ganchos de
*
* @param {Función|Función[]} [fn]
* Opcionalmente, agregue un gancho (o ganchos) al ciclo de vida que está obteniendo.
*
* @return {Array}
* una matriz de ganchos, o una matriz vacía si no hay ninguno.
* /
ganchos constantes = función (tipo, fn) {
ganchos_[tipo] = ganchos_[tipo] || [];
si (fn) {
ganchos_[tipo] = ganchos_[tipo].concat(fn);
}
volver ganchos_[tipo];
};
/ **
* Agregue un enlace de función a un ciclo de vida específico de videojs.
*
* @param {cadena} tipo
* el ciclo de vida al que enlazar la función.
*
* @param {Función|Función[]}
* La función o matriz de funciones a adjuntar.
* /
const gancho = función (tipo, fn) {
ganchos (tipo, fn);
};
/ **
* Eliminar un gancho de un ciclo de vida específico de videojs.
*
* @param {cadena} tipo
* el ciclo de vida al que se enganchó la función
*
* @param {Función} fn
* La función enganchada para eliminar
*
* @return {booleano}
* La función que fue eliminada o indefinida
* /
const removeHook = función (tipo, fn) {
índice const = ganchos (tipo). indexOf (fn);
si (índice < = -1) {
falso retorno;
}
ganchos_[tipo] = ganchos_[tipo].slice();
ganchos_[tipo].empalme(índice, 1);
devolver verdadero;
};
/ **
* Agregue un enlace de función que solo se ejecutará una vez en un ciclo de vida específico de videojs.
*
* @param {cadena} tipo
* el ciclo de vida al que enlazar la función.
*
* @param {Función|Función[]}
* La función o matriz de funciones a adjuntar.
* /
const hookOnce = función (tipo, fn) {
ganchos (tipo, []. concat (fn). mapa (original => {
contenedor const = (... argumentos) => {
removeHook(tipo, contenedor);
devolver original(...argumentos);
};
envoltorio de retorno;
}));
};
exportar {
manos_,
manos,
gancho,
anzuelo una vez,
Quitar gancho
};