From 28f8a8dc8a4b15446c486c1b438dd2f078cdbbd9 Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Mon, 20 Apr 2015 15:37:49 +0200 Subject: [PATCH 1/5] Create a spaceholder when resizing iframes. --- js/h5p-resizer.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/js/h5p-resizer.js b/js/h5p-resizer.js index 6318fc8..3d83db6 100644 --- a/js/h5p-resizer.js +++ b/js/h5p-resizer.js @@ -46,6 +46,11 @@ */ actionHandlers.prepareResize = function (iframe, data, respond) { responseData = {}; + + // Create spaceholder and insert after iframe. + var spaceholder = document.createElement('div'); + spaceholder.style.height = (iframe.clientHeight - 1) + 'px'; + iframe.parentNode.insertBefore(spaceholder, iframe.nextSibling); // Reset iframe height, in case content has shrinked. iframe.style.height = '1px'; @@ -64,6 +69,7 @@ actionHandlers.resize = function (iframe, data, respond) { // Resize iframe so all content is visible. iframe.style.height = data.height + 'px'; + iframe.nextSibling.remove(); }; /** From b3dea65fd8cd548760e578b58fa796f68ca9c03f Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Tue, 21 Apr 2015 13:56:24 +0200 Subject: [PATCH 2/5] Remove element from DOM the correct way. --- js/h5p-resizer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/h5p-resizer.js b/js/h5p-resizer.js index 3d83db6..894951b 100644 --- a/js/h5p-resizer.js +++ b/js/h5p-resizer.js @@ -46,7 +46,7 @@ */ actionHandlers.prepareResize = function (iframe, data, respond) { responseData = {}; - + // Create spaceholder and insert after iframe. var spaceholder = document.createElement('div'); spaceholder.style.height = (iframe.clientHeight - 1) + 'px'; @@ -69,7 +69,7 @@ actionHandlers.resize = function (iframe, data, respond) { // Resize iframe so all content is visible. iframe.style.height = data.height + 'px'; - iframe.nextSibling.remove(); + iframe.parentNode.removeChild(iframe.nextSibling); }; /** From cdceb41d743ac254718ee1cae0bd0b764bd17007 Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Tue, 21 Apr 2015 15:08:59 +0200 Subject: [PATCH 3/5] Prevent running multiple resizer. --- js/h5p-resizer.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/h5p-resizer.js b/js/h5p-resizer.js index 894951b..bbfb009 100644 --- a/js/h5p-resizer.js +++ b/js/h5p-resizer.js @@ -1,8 +1,9 @@ // H5P iframe Resizer (function () { - if (!window.postMessage || !window.addEventListener) { + if (!window.postMessage || !window.addEventListener || window.h5pResizerInitialized) { return; // Not supported } + window.h5pResizerInitialized = true; // Map actions to handlers var actionHandlers = {}; From c13e0a0a9a2230dddd226b04c3a83afdf74a2d0a Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Tue, 21 Apr 2015 16:22:51 +0200 Subject: [PATCH 4/5] Fixed fullscreen checker. --- js/h5p.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/h5p.js b/js/h5p.js index f8efddb..9c3dbac 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -67,7 +67,7 @@ H5P.init = function (target) { // Determine if we can use full screen if (H5P.canHasFullScreen === undefined) { - H5P.canHasFullScreen = (H5P.isFramed && H5P.externalEmbed !== false) ? (document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled) : true; + H5P.canHasFullScreen = (H5P.isFramed && H5P.externalEmbed !== false) ? ((document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled) ? true : false) : true; } // H5Ps added in normal DIV. @@ -111,7 +111,7 @@ H5P.init = function (target) { var instance = H5P.newRunnable(library, contentId, $container, true); // Check if we should add and display a fullscreen button for this H5P. - if (contentData.fullScreen == 1) { + if (contentData.fullScreen == 1 && H5P.canHasFullScreen) { H5P.jQuery('
').prependTo($container).children().click(function () { H5P.fullScreen($container, instance); }); From af8e9e8f304230c4357a52d6930376131bac166e Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Wed, 22 Apr 2015 09:49:58 +0200 Subject: [PATCH 5/5] Relay events to top window. --- js/h5p-x-api.js | 4 ---- js/h5p.js | 6 +++++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/js/h5p-x-api.js b/js/h5p-x-api.js index 14cbb7e..87a6267 100644 --- a/js/h5p-x-api.js +++ b/js/h5p-x-api.js @@ -3,10 +3,6 @@ var H5P = H5P || {}; // Create object where external code may register and listen for H5P Events H5P.externalDispatcher = new H5P.EventDispatcher(); -if (H5P.isFramed && H5P.externalEmbed === false) { - H5P.externalDispatcher.on('*', window.top.H5P.externalDispatcher.trigger); -} - // EventDispatcher extensions /** diff --git a/js/h5p.js b/js/h5p.js index 9c3dbac..f257f34 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -1747,12 +1747,16 @@ H5P.createTitle = function(rawTitle, maxLength) { if (state !== undefined) { // Async is not used to prevent the request from being cancelled. H5P.setUserData(instance.contentId, 'state', state, {deleteOnChange: true, async: false}); - } } } }); } + + // Relay events to top window. + if (H5P.isFramed && H5P.externalEmbed === false) { + H5P.externalDispatcher.on('*', window.top.H5P.externalDispatcher.trigger); + } }); })(H5P.jQuery);