diff --git a/plugin/live/amd/build/audioswitch.min.js b/plugin/live/amd/build/audioswitch.min.js new file mode 100644 index 00000000..3872a3b0 --- /dev/null +++ b/plugin/live/amd/build/audioswitch.min.js @@ -0,0 +1,3 @@ +define("videotimeplugin_live/audioswitch",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;const handleClick=e=>{const button=e.target.closest("[data-contextid] button[data-audio]");if(button){const action=button.getAttribute("data-audio"),contextid=button.closest("[data-contextid]").getAttribute("data-contextid");e.stopPropagation(),e.preventDefault(),document.querySelectorAll("[data-contextid] button[data-audio]").forEach((button=>{button.getAttribute("data-audio")===action?button.classList.add("hidden"):button.classList.remove("hidden")})),document.querySelectorAll('[data-contextid="'.concat(contextid,'"] audio')).forEach((audio=>{audio.setAttribute("volume","disable"===action?0:1),audio.muted="disable"===action}))}};var _default={init:function(){document.removeEventListener("click",handleClick),document.addEventListener("click",handleClick)}};return _exports.default=_default,_exports.default})); + +//# sourceMappingURL=audioswitch.min.js.map \ No newline at end of file diff --git a/plugin/live/amd/build/audioswitch.min.js.map b/plugin/live/amd/build/audioswitch.min.js.map new file mode 100644 index 00000000..fc427d6a --- /dev/null +++ b/plugin/live/amd/build/audioswitch.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"audioswitch.min.js","sources":["../src/audioswitch.js"],"sourcesContent":["const handleClick = e => {\n const button = e.target.closest('[data-contextid] button[data-audio]');\n\n if (button) {\n const action = button.getAttribute('data-audio'),\n contextid = button.closest('[data-contextid]').getAttribute('data-contextid');\n\n e.stopPropagation();\n e.preventDefault();\n\n document.querySelectorAll('[data-contextid] button[data-audio]').forEach(button => {\n if (button.getAttribute('data-audio') === action) {\n button.classList.add('hidden');\n } else {\n button.classList.remove('hidden');\n }\n });\n\n document.querySelectorAll(`[data-contextid=\"${contextid}\"] audio`).forEach(audio => {\n audio.setAttribute('volume', action === 'disable' ? 0 : 1);\n audio.muted = (action === 'disable');\n });\n }\n};\n\nexport default {\n init: function() {\n document.removeEventListener('click', handleClick);\n document.addEventListener('click', handleClick);\n }\n};\n"],"names":["handleClick","e","button","target","closest","action","getAttribute","contextid","stopPropagation","preventDefault","document","querySelectorAll","forEach","classList","add","remove","audio","setAttribute","muted","init","removeEventListener","addEventListener"],"mappings":"gKAAMA,YAAcC,UACVC,OAASD,EAAEE,OAAOC,QAAQ,0CAE5BF,OAAQ,OACFG,OAASH,OAAOI,aAAa,cAC/BC,UAAYL,OAAOE,QAAQ,oBAAoBE,aAAa,kBAEhEL,EAAEO,kBACFP,EAAEQ,iBAEFC,SAASC,iBAAiB,uCAAuCC,SAAQV,SACjEA,OAAOI,aAAa,gBAAkBD,OACtCH,OAAOW,UAAUC,IAAI,UAErBZ,OAAOW,UAAUE,OAAO,aAIhCL,SAASC,4CAAqCJ,uBAAqBK,SAAQI,QACvEA,MAAMC,aAAa,SAAqB,YAAXZ,OAAuB,EAAI,GACxDW,MAAME,MAAoB,YAAXb,yBAKZ,CACXc,KAAM,WACFT,SAASU,oBAAoB,QAASpB,aACtCU,SAASW,iBAAiB,QAASrB"} \ No newline at end of file diff --git a/plugin/live/amd/src/audioswitch.js b/plugin/live/amd/src/audioswitch.js new file mode 100644 index 00000000..a7a1d8e2 --- /dev/null +++ b/plugin/live/amd/src/audioswitch.js @@ -0,0 +1,48 @@ +/* + * Audio control listner + * + * @package videotimeplugin_live + * @module videotimeplugin_live/audioswitch + * @copyright 2023 bdecent gmbh + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Handle click event + * + * @param {Event} e Click event + */ +const handleClick = e => { + const button = e.target.closest('[data-contextid] button[data-audio]'); + + if (button) { + const action = button.getAttribute('data-audio'), + contextid = button.closest('[data-contextid]').getAttribute('data-contextid'); + + e.stopPropagation(); + e.preventDefault(); + + document.querySelectorAll('[data-contextid] button[data-audio]').forEach(button => { + if (button.getAttribute('data-audio') === action) { + button.classList.add('hidden'); + } else { + button.classList.remove('hidden'); + } + }); + + document.querySelectorAll(`[data-contextid="${contextid}"] audio`).forEach(audio => { + audio.setAttribute('volume', action === 'disable' ? 0 : 1); + audio.muted = (action === 'disable'); + }); + } +}; + +export default { + /** + * Add listener + */ + init: function() { + document.removeEventListener('click', handleClick); + document.addEventListener('click', handleClick); + } +}; diff --git a/plugin/live/lang/en/videotimeplugin_live.php b/plugin/live/lang/en/videotimeplugin_live.php index afd8f0d6..b493329d 100644 --- a/plugin/live/lang/en/videotimeplugin_live.php +++ b/plugin/live/lang/en/videotimeplugin_live.php @@ -24,6 +24,8 @@ defined('MOODLE_INTERNAL') || die(); +$string['disableaudio'] = 'Disable audio'; +$string['enableaudio'] = 'Enable audio'; $string['enabledeftvideo'] = 'The Video Time live player requires the admin to install Deft response block and enable video bridging in the site settings'; diff --git a/plugin/live/templates/video_embed.mustache b/plugin/live/templates/video_embed.mustache index f0999a17..524bca87 100644 --- a/plugin/live/templates/video_embed.mustache +++ b/plugin/live/templates/video_embed.mustache @@ -60,9 +60,12 @@ + +
{{{video_description}}} @@ -70,12 +73,13 @@
{{/ instance }} {{#js}} - require(['videotimeplugin_live/videotime'], function(VideoTime) { + require(['videotimeplugin_live/audioswitch', 'videotimeplugin_live/videotime'], function(AudioSwitch, VideoTime) { var v = new VideoTime('video-embed-{{uniqueid}}', {{cmid}}, {{haspro}}, {{interval}}, {{{instance}}}); v.initialize( {{ contextid }}, '{{ token }}', {{ peerid }} ); + AudioSwitch.init(); }); {{/js}}