From 4f35924b9304f88adeb9000955d285f54695c2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Agneray?= <francois.agneray@lam.fr> Date: Mon, 27 Jun 2022 17:04:12 +0200 Subject: [PATCH] Dynamic link => external or internal link --- .../dynamic-router-link.component.html | 23 +++++++++++++------ .../dynamic-router-link.component.ts | 4 ++++ .../parsers/dynamic-router-link-parser.ts | 14 +++++------ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html b/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html index 54addb95..aa0d6e16 100644 --- a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html +++ b/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.html @@ -1,8 +1,17 @@ -<a *ngIf="link" - [routerLink]="link" - [queryParams]="queryParams ? queryParams : {}" - [fragment]="anchorFragment ? anchorFragment : null" - [ngClass]="css" +<a *ngIf="isExternalLink()" + href="{{ link }}" + [ngClass]="css" > - <ng-content></ng-content> -</a> \ No newline at end of file + <ng-container *ngTemplateOutlet="contentTpl"></ng-container> +</a> + +<a *ngIf="!isExternalLink()" + [routerLink]="link" + [queryParams]="queryParams ? queryParams : {}" + [fragment]="anchorFragment ? anchorFragment : null" + [ngClass]="css" +> + <ng-container *ngTemplateOutlet="contentTpl"></ng-container> +</a> + +<ng-template #contentTpl><ng-content></ng-content></ng-template> diff --git a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts b/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts index d3bff4e1..4cd0537e 100644 --- a/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts +++ b/client/src/app/instance/webpage/hooks/components/dynamic-router-link.component.ts @@ -10,4 +10,8 @@ export class DynamicRouterLinkComponent { @Input() queryParams: {[key: string]: any}; @Input() anchorFragment: string; @Input() css: string; + + isExternalLink() { + return this.link.startsWith('http'); + } } diff --git a/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts b/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts index 796a3f08..9a283f52 100644 --- a/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts +++ b/client/src/app/instance/webpage/hooks/parsers/dynamic-router-link-parser.ts @@ -11,10 +11,7 @@ export class DynamicRouterLinkParser implements HookParser { classAttrRegex: RegExp; constructor(private hookFinder: HookFinder) { - // Lets assemble a regex that finds the opening <a>-tags for internal links - const domainName = this.escapeRegExp(window.location.hostname.replace('www.', '')); // <-- This is our website name - const internalUrl = '(?:(?:https:)?\\/\\/(?:www\\.)?' + domainName + '|(?!(?:https:)?\\/\\/))([^\\"]*?)'; - const hrefAttr = '\\s+href\=\\"' + internalUrl + '\\"'; + const hrefAttr = '\\s+href\=\\"([^\\"]*?)\\"'; const anyOtherAttr = '\\s+[a-zA-Z]+\\=\\"[^\\"]*?\\"'; const linkOpeningTag = '\\<a(?:' + anyOtherAttr + ')*?' + hrefAttr + '(?:' + anyOtherAttr + ')*?\\>'; @@ -43,10 +40,13 @@ export class DynamicRouterLinkParser implements HookParser { // e.g. '/jedi/windu' from 'https://www.mysite.com/jedi/windu', which is what we need const hrefAttrMatch = hookValue.openingTag.match(this.hrefAttrRegex); let relativeLink = hrefAttrMatch[1]; - + // Select css part + let css = null; const classAttrMatch = hookValue.openingTag.match(this.classAttrRegex); - let css = classAttrMatch[1]; + if (classAttrMatch) { + css = classAttrMatch[1]; + } // The relative part of the link may still contain the query string and the // anchor fragment, so we need to split it up accordingly @@ -64,7 +64,7 @@ export class DynamicRouterLinkParser implements HookParser { link: relativeLink, queryParams: queryParams, anchorFragment: anchorFragment, - css: css + css } }; } -- GitLab