diff --git a/amd/build/resize.min.js b/amd/build/resize.min.js index 5317ab1..87f6069 100644 --- a/amd/build/resize.min.js +++ b/amd/build/resize.min.js @@ -6,6 +6,6 @@ define("mod_exeweb/resize",["exports","core/log"],(function(_exports,_log){var o * @copyright 2023 3&Punt * @author Juan Carrera * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.exewebResize=_exports.exewebIframeOnload=void 0,_log=(obj=_log)&&obj.__esModule?obj:{default:obj};const exewebResize=function(){let iFrame=document.querySelector("#exewebobject");if(iFrame.contentDocument.body){iFrame.style.width="100%";let iFrameHeight=iFrame.contentDocument.body.scrollHeight;iFrame.style.height=iFrameHeight+50+"px",_log.default.debug("iFrame height: "+(iFrameHeight+50)+"px")}};_exports.exewebResize=exewebResize;const exewebIframeOnload=function(event){exewebResize();let iFrame=event.target;new MutationObserver(window.exewebResize).observe(iFrame.contentDocument.body,{attributes:!0,childList:!0,subtree:!0})};_exports.exewebIframeOnload=exewebIframeOnload;_exports.init=()=>{window.exewebResize=exewebResize,window.exewebIframeOnload=exewebIframeOnload;let page=document.getElementById("exewebpage"),iframe=document.getElementById("exewebobject");_log.default.debug("Setting iFframe load event listener"),iframe.addEventListener("load",exewebIframeOnload),"complete"===iframe.contentDocument.readyState&&exewebResize();new ResizeObserver(exewebResize).observe(page)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.exewebResize=_exports.exewebIframeOnload=void 0,_log=(obj=_log)&&obj.__esModule?obj:{default:obj};let contentName="";const updateIframeTitle=function(iframe){try{const rawTitle=iframe.contentDocument&&iframe.contentDocument.title;const pageTitle=rawTitle?rawTitle.replace(/\s*\|[^|]*$/,"").replace(/['"]/g,"").trim():rawTitle;iframe.title=pageTitle?contentName+": "+pageTitle:contentName}catch(e){}};const exewebResize=function(){let iFrame=document.querySelector("#exewebobject");if(iFrame.contentDocument.body){iFrame.style.width="100%";let iFrameHeight=iFrame.contentDocument.body.scrollHeight;iFrame.style.height=iFrameHeight+50+"px",_log.default.debug("iFrame height: "+(iFrameHeight+50)+"px")}};_exports.exewebResize=exewebResize;const exewebIframeOnload=function(event){exewebResize();let iFrame=event.target;updateIframeTitle(iFrame);const titleEl=iFrame.contentDocument.querySelector("title");titleEl&&new MutationObserver(()=>updateIframeTitle(iFrame)).observe(titleEl,{childList:!0});new MutationObserver(window.exewebResize).observe(iFrame.contentDocument.body,{attributes:!0,childList:!0,subtree:!0})};_exports.exewebIframeOnload=exewebIframeOnload;_exports.init=(iframeid,name)=>{contentName=name||"",window.exewebResize=exewebResize,window.exewebIframeOnload=exewebIframeOnload;let page=document.getElementById("exewebpage"),iframe=document.getElementById("exewebobject");_log.default.debug("Setting iFframe load event listener"),iframe.addEventListener("load",exewebIframeOnload),"complete"===iframe.contentDocument.readyState&&(exewebResize(),updateIframeTitle(iframe));new ResizeObserver(exewebResize).observe(page)}})); //# sourceMappingURL=resize.min.js.map diff --git a/amd/src/resize.js b/amd/src/resize.js index 953005a..829b400 100644 --- a/amd/src/resize.js +++ b/amd/src/resize.js @@ -26,6 +26,18 @@ import Log from 'core/log'; +let contentName = ''; + +const updateIframeTitle = function(iframe) { + try { + const rawTitle = iframe.contentDocument && iframe.contentDocument.title; + const pageTitle = rawTitle ? rawTitle.replace(/\s*\|[^|]*$/, '').replace(/['"]/g, '').trim() : rawTitle; + iframe.title = pageTitle ? contentName + ': ' + pageTitle : contentName; + } catch (e) { + // cross-origin content, keep existing title + } +}; + /** * Resizes iFrame and container height to iframes body size. * This function is to be declared on window namespace so iframe onload event can find it. @@ -49,15 +61,22 @@ export const exewebResize = function() { */ export const exewebIframeOnload = function(event) { exewebResize(); + let iFrame = event.target; + updateIframeTitle(iFrame); // Set a mutation observer, so we can adapt to changes from iFrame's javascript (such // as tab clicks o hide/show sections). - let iFrame = event.target; const config = {attributes: true, childList: true, subtree: true}; const observer = new MutationObserver(window.exewebResize); observer.observe(iFrame.contentDocument.body, config); + // Watch for title changes caused by hash-based navigation within the same page. + const titleEl = iFrame.contentDocument.querySelector('title'); + if (titleEl) { + new MutationObserver(() => updateIframeTitle(iFrame)).observe(titleEl, {childList: true}); + } }; -export const init = () => { +export const init = (iframeid, name) => { + contentName = name || ''; // Declare on window namespace so iframe onload event can find it. window.exewebResize = exewebResize; window.exewebIframeOnload = exewebIframeOnload; @@ -69,6 +88,7 @@ export const init = () => { if (iframe.contentDocument.readyState === 'complete') { exewebResize(); + updateIframeTitle(iframe); } // Watch for page changes. diff --git a/view.php b/view.php index 7c8f1a5..6a7ac9e 100644 --- a/view.php +++ b/view.php @@ -87,7 +87,7 @@ $renderer = $PAGE->get_renderer('mod_exeweb'); $PAGE->requires->js_call_amd('mod_exeweb/fullscreen', 'init'); -$PAGE->requires->js_call_amd('mod_exeweb/resize', 'init', ['exewebobject', ]); +$PAGE->requires->js_call_amd('mod_exeweb/resize', 'init', ['exewebobject', $exeweb->name]); $PAGE->requires->js_call_amd('mod_exeweb/editor_modal', 'init'); switch ($displaytype) { case RESOURCELIB_DISPLAY_EMBED: