From 507493f57c0c4409484a0d7aa3b0f3a90e317487 Mon Sep 17 00:00:00 2001 From: Laurent David Date: Thu, 11 Jul 2024 11:59:52 +0200 Subject: [PATCH] MDL-75692 core_h5p: Debounce resize events * Make sure that we don't call the resize event too often to avoid infinite loop when content is auto resizing (fonts for example) --- h5p/js/embed.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/h5p/js/embed.js b/h5p/js/embed.js index f8ee2703468..72ce9aa8bb5 100644 --- a/h5p/js/embed.js +++ b/h5p/js/embed.js @@ -159,6 +159,17 @@ var getH5PObject = async (iFrame) => { return H5P; }; +/* eslint-disable promise/no-native */ +/** + * Load the core/pending module. + * @returns {Promise} + */ +const getPendingClass = () => new Promise((resolve) => { + require(['core/pending'], (Pending) => { + resolve(Pending); + }); +}); + document.onreadystatechange = async() => { // Wait for instances to be initialize. if (document.readyState !== 'complete') { @@ -212,6 +223,9 @@ document.onreadystatechange = async() => { H5P.trigger(instance, 'resize'); }); + const Pending = await getPendingClass(); + var resizePending = new Pending('core_h5p/iframe:resize'); + H5P.on(instance, 'resize', function() { if (H5P.isFullscreen) { return; // Skip iframe resize. @@ -231,7 +245,8 @@ document.onreadystatechange = async() => { } else { H5PEmbedCommunicator.send('hello'); } - }, 0); + resizePending.resolve(); + }, 150); }); // Get emitted xAPI data. @@ -294,6 +309,5 @@ document.onreadystatechange = async() => { } }); - // Trigger initial resize for instance. H5P.trigger(instance, 'resize'); };