Merge pull request #2900 from dpalou/MOBILE-3763
MOBILE-3763 h5p: Fix height of iframes added using the embed code
This commit is contained in:
		
						commit
						8d17f87d65
					
				@ -18,6 +18,8 @@ import { CoreFilterDefaultHandler } from '@features/filter/services/handlers/def
 | 
				
			|||||||
import { CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter';
 | 
					import { CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter';
 | 
				
			||||||
import { makeSingleton } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
import { CoreH5PPlayerComponent } from '@features/h5p/components/h5p-player/h5p-player';
 | 
					import { CoreH5PPlayerComponent } from '@features/h5p/components/h5p-player/h5p-player';
 | 
				
			||||||
 | 
					import { CoreUrlUtils } from '@services/utils/url';
 | 
				
			||||||
 | 
					import { CoreH5PHelper } from '@features/h5p/classes/helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Handler to support the Display H5P filter.
 | 
					 * Handler to support the Display H5P filter.
 | 
				
			||||||
@ -63,6 +65,24 @@ export class AddonFilterDisplayH5PHandlerService extends CoreFilterDefaultHandle
 | 
				
			|||||||
            iframe.parentElement?.replaceChild(placeholder, iframe);
 | 
					            iframe.parentElement?.replaceChild(placeholder, iframe);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Handle H5P iframes embedded using the embed HTML code.
 | 
				
			||||||
 | 
					        const embeddedH5PIframes = <HTMLIFrameElement[]> Array.from(this.template.content.querySelectorAll('iframe.h5p-player'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        embeddedH5PIframes.forEach((iframe) => {
 | 
				
			||||||
 | 
					            // Add the preventredirect param to allow authenticating if auto-login fails.
 | 
				
			||||||
 | 
					            iframe.src = CoreUrlUtils.addParamsToUrl(iframe.src, { preventredirect: false });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Add resizer script so the H5P has the right height.
 | 
				
			||||||
 | 
					            CoreH5PHelper.addResizerScript();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // If the iframe has a small height, add some minimum initial height so it's seen if auto-login fails.
 | 
				
			||||||
 | 
					            const styleHeight = Number(iframe.style.height);
 | 
				
			||||||
 | 
					            const height = Number(iframe.getAttribute('height'));
 | 
				
			||||||
 | 
					            if ((!height || height < 400) && (!styleHeight || styleHeight < 400)) {
 | 
				
			||||||
 | 
					                iframe.style.height = '400px';
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return this.template.innerHTML;
 | 
					        return this.template.innerHTML;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,22 @@ import { CoreError } from '@classes/errors/error';
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
export class CoreH5PHelper {
 | 
					export class CoreH5PHelper {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Add the resizer script if it hasn't been added already.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    static addResizerScript(): void {
 | 
				
			||||||
 | 
					        if (document.head.querySelector('#core-h5p-resizer-script') != null) {
 | 
				
			||||||
 | 
					            // Script already added, don't add it again.
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const script = document.createElement('script');
 | 
				
			||||||
 | 
					        script.id = 'core-h5p-resizer-script';
 | 
				
			||||||
 | 
					        script.type = 'text/javascript';
 | 
				
			||||||
 | 
					        script.src = CoreH5P.h5pPlayer.getResizerScriptUrl();
 | 
				
			||||||
 | 
					        document.head.appendChild(script);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Convert the number representation of display options into an object.
 | 
					     * Convert the number representation of display options into an object.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
				
			|||||||
@ -138,7 +138,7 @@ export class CoreH5PIframeComponent implements OnChanges, OnDestroy {
 | 
				
			|||||||
            CoreDomUtils.showErrorModalDefault(error, 'Error loading H5P package.', true);
 | 
					            CoreDomUtils.showErrorModalDefault(error, 'Error loading H5P package.', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } finally {
 | 
					        } finally {
 | 
				
			||||||
            this.addResizerScript();
 | 
					            CoreH5PHelper.addResizerScript();
 | 
				
			||||||
            this.onIframeUrlSet.emit({ src: this.iframeSrc!, online: !!localUrl });
 | 
					            this.onIframeUrlSet.emit({ src: this.iframeSrc!, online: !!localUrl });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -185,22 +185,6 @@ export class CoreH5PIframeComponent implements OnChanges, OnDestroy {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Add the resizer script if it hasn't been added already.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected addResizerScript(): void {
 | 
					 | 
				
			||||||
        if (document.head.querySelector('#core-h5p-resizer-script') != null) {
 | 
					 | 
				
			||||||
            // Script already added, don't add it again.
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const script = document.createElement('script');
 | 
					 | 
				
			||||||
        script.id = 'core-h5p-resizer-script';
 | 
					 | 
				
			||||||
        script.type = 'text/javascript';
 | 
					 | 
				
			||||||
        script.src = CoreH5P.h5pPlayer.getResizerScriptUrl();
 | 
					 | 
				
			||||||
        document.head.appendChild(script);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * H5P iframe has been loaded.
 | 
					     * H5P iframe has been loaded.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user