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 54addb95ae6a455d614f422c280527a666460530..aa0d6e1681e2dc5ba7a386ef3e87ef2aa04820d6 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 d3bff4e14bdc2a4647a58ce8a4a4aeed6719c1f7..4cd0537e902b8e19c04ff6553c4f929c69f97ada 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 796a3f0812de7efc0ec9cce1842ef5a88d55fc26..9a283f5229b52b2dc7995d450fe2c724d6cb464a 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 } }; }