/**
* fichier extend.js
* @module extend
*/
import _inherits from '@babel/runtime/helpers/inherits' ;
import log from './utils/log.js' ;
let hasLogged = false ;
/**
* Utilisé pour sous-classer une classe existante en émulant le sous-classement ES à l'aide de la fonction
* mot-clé `extends`.
*
* @fonction
* @deprecated
* @exemple
* var MyComponent = videojs.extend(videojs.getComponent('Component'), {
* myCustomMethod : function() {
* // Faire des choses dans ma méthode.
* }
* }) ;
*
* @param {Fonction} superClass
* La classe dont il faut hériter
*
* @param {Objet} [subClassMethods={}]
* Méthodes de la nouvelle classe
*
* @return {Fonction}
* La nouvelle classe avec des méthodes de sous-classe qui ont hérité de superClass.
*/
const extend = function(superClass, subClassMethods = {}) {
// Enregistrer un avertissement la première fois que extend est appelé pour signaler qu'il est obsolète
// Il était précédemment déprécié dans notre documentation (les guides, en particulier),
// mais n'a jamais été formellement déprécié dans le code.
if (!hasLogged) {
log.warn('videojs.extend is deprecated as of Video.js 7.22.0 and will be removed in Video.js 8.0.0') ;
hasLogged = true ;
}
let subClass = function() {
superClass.apply(this, arguments) ;
};
let methods = {} ;
if (typeof subClassMethods === 'object') {
if (subClassMethods.constructor !== Object.prototype.constructor) {
subClass = subClassMethods.constructor ;
}
methods = subClassMethods ;
} else if (typeof subClassMethods === 'function') {
subClass = subClassMethods ;
}
_inherits(subClass, superClass) ;
// cela est nécessaire pour la compatibilité ascendante et la compatibilité avec les nœuds.
if (superClass) {
subClass.super_ = superClass ;
}
// Extension du prototype de subObj avec des fonctions et d'autres propriétés provenant de props
for (const name in methods) {
if (methods.hasOwnProperty(name)) {
subClass.prototype[name] = methods[name] ;
}
}
return subClass ;
};
export default extend ;