125 lines
6.2 KiB
JavaScript
125 lines
6.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.vCarousel = void 0;
|
|
var vCarousel = /** @class */ (function () {
|
|
function vCarousel() {
|
|
this._vContainers = [];
|
|
this._playFirstVideo = false;
|
|
this._playNextVideos = false;
|
|
this._noStop = false;
|
|
this.nbVContainers = 0;
|
|
}
|
|
Object.defineProperty(vCarousel.prototype, "vContainers", {
|
|
// Les ids reçus doivent correspondre à des éléments HTML contenant une vidéo.
|
|
set: function (vContainersIds) {
|
|
for (var _i = 0, vContainersIds_1 = vContainersIds; _i < vContainersIds_1.length; _i++) {
|
|
var containerId = vContainersIds_1[_i];
|
|
var checkContainerExist = document.getElementById(containerId);
|
|
if (checkContainerExist === null)
|
|
throw new Error("Aucun élément HTML trouvé dans la page pour l'id " + containerId + ".");
|
|
else {
|
|
var checkVideoExist = document.querySelector("#" + containerId + " video");
|
|
if (checkVideoExist === null)
|
|
throw new Error("Aucune balise vidéo trouvée dans l'élément HTML ayant comme id " + containerId + ".");
|
|
else
|
|
this._vContainers.push({ id: containerId, containerElt: checkContainerExist, videoElt: checkVideoExist });
|
|
}
|
|
}
|
|
// Il faut au moins 2 vidéos à faire tourner.
|
|
this.nbVContainers = this._vContainers.length;
|
|
if (this.nbVContainers < 2)
|
|
throw new Error("Il faut fournir au moins deux conteneurs de vidéo pour pouvoir faire tourner le carrousel.");
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(vCarousel.prototype, "firstVideoId", {
|
|
// Si this._firstVideoId a été fourni, on vérifie qu'il est présent dans la liste des conteneurs de vidéos.
|
|
set: function (firstVideo) {
|
|
if (firstVideo !== "" && this._vContainers.findIndex(function (video) { return video.id === firstVideo; }) === -1)
|
|
console.error("Vous avez fourni l'id de la vidéo à afficher en premier (" + this._firstVideoId + "), mais il n'est pas valide.");
|
|
else
|
|
this._firstVideoId = firstVideo;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(vCarousel.prototype, "playFirstVideo", {
|
|
set: function (playFirstVideo) {
|
|
this._playFirstVideo = playFirstVideo;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(vCarousel.prototype, "playNextVideo", {
|
|
set: function (playNextVideo) {
|
|
this._playNextVideos = playNextVideo;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(vCarousel.prototype, "noStop", {
|
|
set: function (noStop) {
|
|
this._noStop = noStop;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
vCarousel.prototype.run = function () {
|
|
var vCarousel = this; // évite les confusions avec le "this" des événements.
|
|
if (vCarousel.nbVContainers < 2) // dans le cas où on lancerait run() sans passer par le setter.
|
|
throw new Error("Il faut fournir au moins deux conteneurs valides pour faire tourner le carrousel.");
|
|
var _loop_1 = function (i) {
|
|
var vContainer = vCarousel._vContainers[i].containerElt;
|
|
var video = vCarousel._vContainers[i].videoElt;
|
|
if ((vCarousel._firstVideoId !== undefined && vCarousel._vContainers[i].id !== vCarousel._firstVideoId) || (vCarousel._firstVideoId === undefined && i !== 0) || vCarousel._firstVideoId === "")
|
|
vContainer.style.display = "none";
|
|
else {
|
|
// Si une vidéo est déjà visible et en cours de lecture, je la stoppe et remets à 0
|
|
// Sinon elle risque de continuer à être lue tout en étant cachée.
|
|
if (vCarousel.currentVideo !== undefined && !vCarousel.currentVideo.paused) {
|
|
vCarousel.currentVideo.pause();
|
|
vCarousel.currentVideo.currentTime = 0;
|
|
}
|
|
// J'affiche la première vidéo et j'essaye de la lancer, si cela est demandé
|
|
vContainer.style.display = "block";
|
|
vCarousel.currentVideo = video;
|
|
if (vCarousel._playFirstVideo === true)
|
|
video.play();
|
|
}
|
|
nbTurn = 0;
|
|
video.addEventListener("ended", function () {
|
|
// Sauf si demandé, le carrousel s'arrête lorsque toutes les vidéos ont été affichées une fois.
|
|
if (nbTurn < (vCarousel.nbVContainers - 1) || vCarousel._noStop === true) {
|
|
vContainer.style.display = "none";
|
|
var nextVContainer = void 0, nextVideo = void 0, nextHash = void 0;
|
|
if (i < (vCarousel.nbVContainers - 1)) {
|
|
nextVContainer = vCarousel._vContainers[i + 1].containerElt;
|
|
nextVideo = vCarousel._vContainers[i + 1].videoElt;
|
|
nextHash = vCarousel._vContainers[i + 1].id;
|
|
}
|
|
else {
|
|
nextVContainer = vCarousel._vContainers[0].containerElt;
|
|
nextVideo = vCarousel._vContainers[0].videoElt;
|
|
nextHash = vCarousel._vContainers[0].id;
|
|
}
|
|
nextVContainer.style.display = "block";
|
|
// On adapte l'ancre de l'url de manière à ce qu'elle soit cohérente avec la vidéo affichée.
|
|
// Attention car cela peut provoquer un déplacement dans la page pour atteindre l'ancre.
|
|
window.location.assign("#" + nextHash);
|
|
if (vCarousel._playNextVideos === true)
|
|
nextVideo.play();
|
|
vCarousel.currentVideo = nextVideo;
|
|
nbTurn++;
|
|
}
|
|
});
|
|
};
|
|
var nbTurn;
|
|
for (var i = 0; i < vCarousel.nbVContainers; i++) {
|
|
_loop_1(i);
|
|
}
|
|
};
|
|
return vCarousel;
|
|
}());
|
|
exports.vCarousel = vCarousel;
|