From 435a37b23feb1fa98ef09daa875702135ae9436b Mon Sep 17 00:00:00 2001 From: Daniel Thies Date: Fri, 9 Aug 2024 09:07:19 -0500 Subject: [PATCH] VID-832: Add selector for tab --- amd/build/resize_tab_player.min.js | 2 +- amd/build/resize_tab_player.min.js.map | 2 +- amd/src/resize_tab_player.js | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/amd/build/resize_tab_player.min.js b/amd/build/resize_tab_player.min.js index d178acfb..406df87c 100644 --- a/amd/build/resize_tab_player.min.js +++ b/amd/build/resize_tab_player.min.js @@ -1,2 +1,2 @@ -define ("mod_videotime/resize_tab_player",["mod_videotime/player","core/notification"],function(a,b){var c=function(){this.initialize()};c.prototype.column="";c.prototype.initialize=function(){var a=this,b=new ResizeObserver(a.resize),c=new MutationObserver(a.resize);c.observe(document.body,{subtree:!0,childList:!0});document.querySelectorAll(".instance-container, div.videotime-tab-instance").forEach(function(a){b.observe(a)});document.querySelectorAll(".videotime-tab-instance").forEach(function(a){a.style.position="absolute"});a.resize();window.removeEventListener("mousemove",a.mousemoveHandler);window.addEventListener("mousemove",a.mousemoveHandler);window.removeEventListener("dragstart",a.dragstartHandler);window.addEventListener("dragstart",a.dragstartHandler);window.removeEventListener("mouseup",a.dragendHandler);window.addEventListener("mouseup",a.dragendHandler);window.removeEventListener("click",a.cueVideo);window.addEventListener("click",a.cueVideo)};c.prototype.resize=function(){document.querySelectorAll(".instance-container").forEach(function(a){if(!a.offsetWidth){return}a.closest(".videotimetabs").querySelectorAll(".videotime-tab-instance").forEach(function(){var b=a.closest(".videotimetabs").querySelector(".videotime-tab-instance"),c=a.closest(".videotimetabs").querySelector(".tab-content");Object.assign(b.style,{top:a.offsetTop+"px",left:a.offsetLeft+"px",maxWidth:a.offsetWidth+"px",width:a.offsetWidth+"px"});a.style.minHeight=b.offsetHeight+5+"px";a.closest(".videotimetabs").querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){Object.assign(a.style,{height:c.offsetHeight+"px",left:c.offsetLeft+"px",top:c.offsetTop+"px",width:c.offsetWidth+"px"})})})})};c.prototype.dragendHandler=function(){document.querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){a.style.display="none"})};c.prototype.dragstartHandler=function(a){if(a.target.classList.contains("videotimetab-resize-handle")){this.column=a.target.closest(".tab-pane").querySelector(".videotimetab-resize");a.stopPropagation();a.preventDefault();document.querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){a.style.display="block"})}};c.prototype.mousemoveHandler=function(a){var b=this;document.querySelectorAll(".videotimetab-resize-handle").forEach(function(c){if(c.closest(".tab-pane")&&"block"==document.querySelector(".videotime-tab-instance-cover").style.display){b.column.style.width=a.pageX-b.column.getBoundingClientRect().left+"px"}})};c.prototype.cueVideo=function(c){if(c.target.closest("[data-action=\"cue\"]")){var d=c.target.closest("a").getAttribute("data-start"),e=d.match(/((([0-9]+):)?(([0-9]+):))?([0-9]+(\.[0-9]+)?)/),f=c.target.closest(".videotimetabs").querySelector(".vimeo-embed iframe"),g=new a(f);c.preventDefault();c.stopPropagation();if(e){g.setCurrentTime(3600*+(e[3]||0)+60*+(e[5]||0)+ +e[6]).then(g.play.bind(g)).catch(b.exception)}}};return{init:function init(){return new c}}}); +define ("mod_videotime/resize_tab_player",["mod_videotime/player","core/notification"],function(a,b){var c=function(){this.initialize()};c.prototype.column="";c.prototype.initialize=function(){var a=this,b=new ResizeObserver(a.resize),c=new MutationObserver(a.resize);c.observe(document.body,{subtree:!0,childList:!0});document.querySelectorAll(".instance-container, div.videotime-tab-instance").forEach(function(a){b.observe(a)});document.querySelectorAll(".videotime-tab-instance").forEach(function(a){a.style.position="absolute"});a.resize();window.removeEventListener("mousemove",a.mousemoveHandler);window.addEventListener("mousemove",a.mousemoveHandler);window.removeEventListener("dragstart",a.dragstartHandler);window.addEventListener("dragstart",a.dragstartHandler);window.removeEventListener("mouseup",a.dragendHandler);window.addEventListener("mouseup",a.dragendHandler);window.removeEventListener("click",a.cueVideo);window.addEventListener("click",a.cueVideo)};c.prototype.resize=function(){document.querySelectorAll(".instance-container").forEach(function(a){if(!a.offsetWidth){return}a.closest(".videotimetabs").querySelectorAll(".videotime-tab-instance").forEach(function(b){var c=a.closest(".videotimetabs").querySelector(".tab-content"),d=0;Object.assign(b.style,{top:a.offsetTop+"px",left:a.offsetLeft+"px",maxWidth:a.offsetWidth+"px",width:a.offsetWidth+"px"});a.closest(".videotimetabs").querySelectorAll("ul .nav-link, ul .nav-item").forEach(function(a){d++;if(a.classList.contains("active")){b.setAttribute("data-tab",d)}});a.style.minHeight=b.offsetHeight+5+"px";a.closest(".videotimetabs").querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){Object.assign(a.style,{height:c.offsetHeight+"px",left:c.offsetLeft+"px",top:c.offsetTop+"px",width:c.offsetWidth+"px"})})})})};c.prototype.dragendHandler=function(){document.querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){a.style.display="none"})};c.prototype.dragstartHandler=function(a){if(a.target.classList.contains("videotimetab-resize-handle")){this.column=a.target.closest(".tab-pane").querySelector(".videotimetab-resize");a.stopPropagation();a.preventDefault();document.querySelectorAll(".videotime-tab-instance-cover").forEach(function(a){a.style.display="block"})}};c.prototype.mousemoveHandler=function(a){var b=this;document.querySelectorAll(".videotimetab-resize-handle").forEach(function(c){if(c.closest(".tab-pane")&&"block"==document.querySelector(".videotime-tab-instance-cover").style.display){b.column.style.width=a.pageX-b.column.getBoundingClientRect().left+"px"}})};c.prototype.cueVideo=function(c){if(c.target.closest("[data-action=\"cue\"]")){var d=c.target.closest("a").getAttribute("data-start"),e=d.match(/((([0-9]+):)?(([0-9]+):))?([0-9]+(\.[0-9]+)?)/),f=c.target.closest(".videotimetabs").querySelector(".vimeo-embed iframe"),g=new a(f);c.preventDefault();c.stopPropagation();if(e){g.setCurrentTime(3600*+(e[3]||0)+60*+(e[5]||0)+ +e[6]).then(g.play.bind(g)).catch(b.exception)}}};return{init:function init(){return new c}}}); //# sourceMappingURL=resize_tab_player.min.js.map diff --git a/amd/build/resize_tab_player.min.js.map b/amd/build/resize_tab_player.min.js.map index e71ca7d1..0dffe331 100644 --- a/amd/build/resize_tab_player.min.js.map +++ b/amd/build/resize_tab_player.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/resize_tab_player.js"],"names":["define","Player","Notification","resizeTabPlayer","initialize","prototype","column","self","observer","ResizeObserver","resize","mutationobserver","MutationObserver","observe","document","body","subtree","childList","querySelectorAll","forEach","container","instance","style","position","window","removeEventListener","mousemoveHandler","addEventListener","dragstartHandler","dragendHandler","cueVideo","offsetWidth","closest","querySelector","content","Object","assign","top","offsetTop","left","offsetLeft","maxWidth","width","minHeight","offsetHeight","cover","height","display","e","target","classList","contains","stopPropagation","preventDefault","h","pageX","getBoundingClientRect","starttime","getAttribute","time","match","iframe","player","setCurrentTime","then","play","bind","catch","exception","init"],"mappings":"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","sourcesContent":["/*\n * Position the Vimeo player within tab layout\n *\n * @package mod_videotime\n * @module mod_videotime/resize_tab_player\n * @copyright 2021 bdecent gmbh \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * @module mod_videotime/resize_tab_player\n */\ndefine(['mod_videotime/player', 'core/notification'], function(Player, Notification) {\n\n var resizeTabPlayer = function() {\n this.initialize();\n };\n\n resizeTabPlayer.prototype.column = '';\n\n /**\n * Intialize listener\n */\n resizeTabPlayer.prototype.initialize = function() {\n var self = this;\n let observer = new ResizeObserver(self.resize),\n mutationobserver = new MutationObserver(self.resize);\n mutationobserver.observe(document.body, {subtree: true, childList: true});\n document.querySelectorAll('.instance-container, div.videotime-tab-instance').forEach((container) => {\n observer.observe(container);\n });\n document.querySelectorAll('.videotime-tab-instance').forEach((instance) => {\n instance.style.position = 'absolute';\n });\n self.resize();\n\n window.removeEventListener('mousemove', self.mousemoveHandler);\n window.addEventListener('mousemove', self.mousemoveHandler);\n\n window.removeEventListener('dragstart', self.dragstartHandler);\n window.addEventListener('dragstart', self.dragstartHandler);\n\n window.removeEventListener('mouseup', self.dragendHandler);\n window.addEventListener('mouseup', self.dragendHandler);\n\n window.removeEventListener('click', self.cueVideo);\n window.addEventListener('click', self.cueVideo);\n };\n\n /**\n * Adjust player position when the page configuration is changed\n */\n resizeTabPlayer.prototype.resize = function() {\n document.querySelectorAll('.instance-container').forEach((container) => {\n if (!container.offsetWidth) {\n // Ignore if it is not visible.\n return;\n }\n\n container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance').forEach(() => {\n let instance = container.closest('.videotimetabs').querySelector('.videotime-tab-instance'),\n content = container.closest('.videotimetabs').querySelector('.tab-content');\n Object.assign(instance.style, {\n top: container.offsetTop + 'px',\n left: container.offsetLeft + 'px',\n maxWidth: container.offsetWidth + 'px',\n width: container.offsetWidth + 'px'\n });\n container.style.minHeight = instance.offsetHeight + 5 + 'px';\n container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n Object.assign(cover.style, {\n height: content.offsetHeight + 'px',\n left: content.offsetLeft + 'px',\n top: content.offsetTop + 'px',\n width: content.offsetWidth + 'px'\n });\n });\n });\n });\n };\n\n /**\n * Reset handle when drag ends\n */\n resizeTabPlayer.prototype.dragendHandler = function() {\n document.querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n cover.style.display = 'none';\n });\n };\n\n /**\n * Prepare to drag divider\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.dragstartHandler = function(e) {\n if (e.target.classList.contains('videotimetab-resize-handle')) {\n this.column = e.target.closest('.tab-pane').querySelector('.videotimetab-resize');\n e.stopPropagation();\n e.preventDefault();\n document.querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n cover.style.display = 'block';\n });\n }\n };\n\n /**\n * Resize the content and player to mouse location\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.mousemoveHandler = function(e) {\n document.querySelectorAll('.videotimetab-resize-handle').forEach((h) => {\n if (h.closest('.tab-pane') && document.querySelector('.videotime-tab-instance-cover').style.display == 'block') {\n this.column.style.width = e.pageX - this.column.getBoundingClientRect().left + 'px';\n }\n });\n };\n\n /**\n * Move video to new time when link clicked\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.cueVideo = function(e) {\n if (e.target.closest('[data-action=\"cue\"]')) {\n let starttime = e.target.closest('a').getAttribute('data-start'),\n time = starttime.match(/((([0-9]+):)?(([0-9]+):))?([0-9]+(\\.[0-9]+)?)/),\n iframe = e.target.closest('.videotimetabs').querySelector('.vimeo-embed iframe'),\n player = new Player(iframe);\n e.preventDefault();\n e.stopPropagation();\n if (time) {\n player\n .setCurrentTime(3600 * Number(time[3] || 0) + 60 * Number(time[5] || 0) + Number(time[6]))\n .then(player.play.bind(player))\n .catch(Notification.exception);\n }\n }\n };\n\n return {\n init: function() {\n return new resizeTabPlayer();\n }\n };\n});\n"],"file":"resize_tab_player.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/resize_tab_player.js"],"names":["define","Player","Notification","resizeTabPlayer","initialize","prototype","column","self","observer","ResizeObserver","resize","mutationobserver","MutationObserver","observe","document","body","subtree","childList","querySelectorAll","forEach","container","instance","style","position","window","removeEventListener","mousemoveHandler","addEventListener","dragstartHandler","dragendHandler","cueVideo","offsetWidth","closest","content","querySelector","i","Object","assign","top","offsetTop","left","offsetLeft","maxWidth","width","tab","classList","contains","setAttribute","minHeight","offsetHeight","cover","height","display","e","target","stopPropagation","preventDefault","h","pageX","getBoundingClientRect","starttime","getAttribute","time","match","iframe","player","setCurrentTime","then","play","bind","catch","exception","init"],"mappings":"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","sourcesContent":["/*\n * Position the Vimeo player within tab layout\n *\n * @package mod_videotime\n * @module mod_videotime/resize_tab_player\n * @copyright 2021 bdecent gmbh \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * @module mod_videotime/resize_tab_player\n */\ndefine(['mod_videotime/player', 'core/notification'], function(Player, Notification) {\n\n var resizeTabPlayer = function() {\n this.initialize();\n };\n\n resizeTabPlayer.prototype.column = '';\n\n /**\n * Intialize listener\n */\n resizeTabPlayer.prototype.initialize = function() {\n var self = this;\n let observer = new ResizeObserver(self.resize),\n mutationobserver = new MutationObserver(self.resize);\n mutationobserver.observe(document.body, {subtree: true, childList: true});\n document.querySelectorAll('.instance-container, div.videotime-tab-instance').forEach((container) => {\n observer.observe(container);\n });\n document.querySelectorAll('.videotime-tab-instance').forEach((instance) => {\n instance.style.position = 'absolute';\n });\n self.resize();\n\n window.removeEventListener('mousemove', self.mousemoveHandler);\n window.addEventListener('mousemove', self.mousemoveHandler);\n\n window.removeEventListener('dragstart', self.dragstartHandler);\n window.addEventListener('dragstart', self.dragstartHandler);\n\n window.removeEventListener('mouseup', self.dragendHandler);\n window.addEventListener('mouseup', self.dragendHandler);\n\n window.removeEventListener('click', self.cueVideo);\n window.addEventListener('click', self.cueVideo);\n };\n\n /**\n * Adjust player position when the page configuration is changed\n */\n resizeTabPlayer.prototype.resize = function() {\n document.querySelectorAll('.instance-container').forEach((container) => {\n if (!container.offsetWidth) {\n // Ignore if it is not visible.\n return;\n }\n\n container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance').forEach((instance) => {\n let content = container.closest('.videotimetabs').querySelector('.tab-content'),\n i = 0;\n Object.assign(instance.style, {\n top: container.offsetTop + 'px',\n left: container.offsetLeft + 'px',\n maxWidth: container.offsetWidth + 'px',\n width: container.offsetWidth + 'px'\n });\n container.closest('.videotimetabs').querySelectorAll('ul .nav-link, ul .nav-item').forEach(tab => {\n i++;\n if (tab.classList.contains('active')) {\n instance.setAttribute('data-tab', i);\n }\n });\n container.style.minHeight = instance.offsetHeight + 5 + 'px';\n container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n Object.assign(cover.style, {\n height: content.offsetHeight + 'px',\n left: content.offsetLeft + 'px',\n top: content.offsetTop + 'px',\n width: content.offsetWidth + 'px'\n });\n });\n });\n });\n };\n\n /**\n * Reset handle when drag ends\n */\n resizeTabPlayer.prototype.dragendHandler = function() {\n document.querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n cover.style.display = 'none';\n });\n };\n\n /**\n * Prepare to drag divider\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.dragstartHandler = function(e) {\n if (e.target.classList.contains('videotimetab-resize-handle')) {\n this.column = e.target.closest('.tab-pane').querySelector('.videotimetab-resize');\n e.stopPropagation();\n e.preventDefault();\n document.querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => {\n cover.style.display = 'block';\n });\n }\n };\n\n /**\n * Resize the content and player to mouse location\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.mousemoveHandler = function(e) {\n document.querySelectorAll('.videotimetab-resize-handle').forEach((h) => {\n if (h.closest('.tab-pane') && document.querySelector('.videotime-tab-instance-cover').style.display == 'block') {\n this.column.style.width = e.pageX - this.column.getBoundingClientRect().left + 'px';\n }\n });\n };\n\n /**\n * Move video to new time when link clicked\n *\n * @param {event} e mouse event\n */\n resizeTabPlayer.prototype.cueVideo = function(e) {\n if (e.target.closest('[data-action=\"cue\"]')) {\n let starttime = e.target.closest('a').getAttribute('data-start'),\n time = starttime.match(/((([0-9]+):)?(([0-9]+):))?([0-9]+(\\.[0-9]+)?)/),\n iframe = e.target.closest('.videotimetabs').querySelector('.vimeo-embed iframe'),\n player = new Player(iframe);\n e.preventDefault();\n e.stopPropagation();\n if (time) {\n player\n .setCurrentTime(3600 * Number(time[3] || 0) + 60 * Number(time[5] || 0) + Number(time[6]))\n .then(player.play.bind(player))\n .catch(Notification.exception);\n }\n }\n };\n\n return {\n init: function() {\n return new resizeTabPlayer();\n }\n };\n});\n"],"file":"resize_tab_player.min.js"} \ No newline at end of file diff --git a/amd/src/resize_tab_player.js b/amd/src/resize_tab_player.js index dc04a4ec..d63e1620 100644 --- a/amd/src/resize_tab_player.js +++ b/amd/src/resize_tab_player.js @@ -57,15 +57,21 @@ define(['mod_videotime/player', 'core/notification'], function(Player, Notificat return; } - container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance').forEach(() => { - let instance = container.closest('.videotimetabs').querySelector('.videotime-tab-instance'), - content = container.closest('.videotimetabs').querySelector('.tab-content'); + container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance').forEach((instance) => { + let content = container.closest('.videotimetabs').querySelector('.tab-content'), + i = 0; Object.assign(instance.style, { top: container.offsetTop + 'px', left: container.offsetLeft + 'px', maxWidth: container.offsetWidth + 'px', width: container.offsetWidth + 'px' }); + container.closest('.videotimetabs').querySelectorAll('ul .nav-link, ul .nav-item').forEach(tab => { + i++; + if (tab.classList.contains('active')) { + instance.setAttribute('data-tab', i); + } + }); container.style.minHeight = instance.offsetHeight + 5 + 'px'; container.closest('.videotimetabs').querySelectorAll('.videotime-tab-instance-cover').forEach((cover) => { Object.assign(cover.style, {