diff --git a/src/core/directives/external-content.ts b/src/core/directives/external-content.ts index a4cd4afa73f..d1a561b68ee 100644 --- a/src/core/directives/external-content.ts +++ b/src/core/directives/external-content.ts @@ -81,7 +81,7 @@ export class CoreExternalContentDirective implements AfterViewInit, OnChanges, O } /** - * View has been initialized + * @inheritdoc */ ngAfterViewInit(): void { this.checkAndHandleExternalContent(); @@ -90,9 +90,7 @@ export class CoreExternalContentDirective implements AfterViewInit, OnChanges, O } /** - * Listen to changes. - * - * * @param {{[name: string]: SimpleChange}} changes Changes. + * @inheritdoc */ ngOnChanges(changes: { [name: string]: SimpleChange }): void { if (changes && this.initialized) { @@ -134,23 +132,23 @@ export class CoreExternalContentDirective implements AfterViewInit, OnChanges, O protected async checkAndHandleExternalContent(): Promise { const siteId = this.siteId || CoreSites.getRequiredCurrentSite().getId(); const tagName = this.element.tagName.toUpperCase(); - let targetAttr; - let url; + let targetAttr: string; + let url: string; // Always handle inline styles (if any). this.handleInlineStyles(siteId); if (tagName === 'A' || tagName == 'IMAGE') { targetAttr = 'href'; - url = this.href; + url = this.href ?? ''; } else if (tagName === 'IMG') { targetAttr = 'src'; - url = this.src; + url = this.src ?? ''; } else if (tagName === 'AUDIO' || tagName === 'VIDEO' || tagName === 'SOURCE' || tagName === 'TRACK') { targetAttr = 'src'; - url = this.targetSrc || this.src; + url = (this.targetSrc || this.src) ?? ''; if (tagName === 'VIDEO') { if (this.poster) { diff --git a/src/core/services/utils/url.ts b/src/core/services/utils/url.ts index fa3af951576..f04f7c922ea 100644 --- a/src/core/services/utils/url.ts +++ b/src/core/services/utils/url.ts @@ -332,12 +332,13 @@ export class CoreUrlUtilsProvider { * @returns Last file without params. */ getLastFileWithoutParams(url: string): string { - let filename = url.substring(url.lastIndexOf('/') + 1); - if (filename.indexOf('?') != -1) { - filename = filename.substring(0, filename.indexOf('?')); + const parsedUrl = CoreUrl.parse(url); + if (!parsedUrl) { + return ''; } + const path = parsedUrl.path ?? ''; - return filename; + return path.split('/').pop() ?? ''; } /** @@ -346,6 +347,7 @@ export class CoreUrlUtilsProvider { * * @param url URL to treat. * @returns Protocol, undefined if no protocol found. + * @todo Use CoreUrl.parse */ getUrlProtocol(url: string): string | void { if (!url) { @@ -381,6 +383,7 @@ export class CoreUrlUtilsProvider { * * @param url URL to treat. * @returns Username. Undefined if no username found. + * @todo Use CoreUrl.parse */ getUsernameFromUrl(url: string): string | undefined { if (url.indexOf('@') > -1) { @@ -430,6 +433,7 @@ export class CoreUrlUtilsProvider { * * @param url The url to test. * @returns Whether the url uses http or https protocol. + * @todo Use CoreUrl.parse */ isHttpURL(url: string): boolean { return /^https?:\/\/.+/i.test(url);