@@ -17,7 +17,7 @@ public class HtmxLinkInlineRenderer : LinkInlineRenderer
17
17
{
18
18
protected override void Write ( HtmlRenderer renderer , LinkInline link )
19
19
{
20
- if ( renderer . EnableHtmlForInline && ! link . IsImage && link . Url ? . StartsWith ( '/' ) == true )
20
+ if ( renderer . EnableHtmlForInline && ! link . IsImage )
21
21
{
22
22
// ReSharper disable once UnusedVariable
23
23
if ( link . GetData ( nameof ( ParserContext . CurrentUrlPath ) ) is not string currentUrl )
@@ -26,21 +26,32 @@ protected override void Write(HtmlRenderer renderer, LinkInline link)
26
26
return ;
27
27
}
28
28
29
- var currentRootNavigation = link . GetData ( nameof ( MarkdownFile . RootNavigation ) ) as INavigation ;
30
- var targetRootNavigation = link . GetData ( $ "Target{ nameof ( MarkdownFile . RootNavigation ) } ") as INavigation ;
29
+ var url = link . GetDynamicUrl != null ? link . GetDynamicUrl ( ) : link . Url ;
31
30
32
31
_ = renderer . Write ( "<a href=\" " ) ;
33
- _ = renderer . WriteEscapeUrl ( link . GetDynamicUrl != null ? link . GetDynamicUrl ( ) : link . Url ) ;
32
+ _ = renderer . WriteEscapeUrl ( url ) ;
34
33
_ = renderer . Write ( '"' ) ;
35
34
_ = renderer . WriteAttributes ( link ) ;
36
- _ = renderer . Write ( " hx-get=\" " ) ;
37
- _ = renderer . WriteEscapeUrl ( link . GetDynamicUrl != null ? link . GetDynamicUrl ( ) : link . Url ) ;
38
- _ = renderer . Write ( '"' ) ;
39
- _ = renderer . Write ( $ " hx-select-oob=\" { Htmx . GetHxSelectOob ( currentRootNavigation ? . Id == targetRootNavigation ? . Id ) } \" ") ;
40
- _ = renderer . Write ( " hx-swap=\" none\" " ) ;
41
- _ = renderer . Write ( " hx-push-url=\" true\" " ) ;
42
- _ = renderer . Write ( " hx-indicator=\" #htmx-indicator\" " ) ;
43
- _ = renderer . Write ( $ " preload=\" { Htmx . GetPreload ( ) } \" ") ;
35
+
36
+
37
+ if ( link . Url ? . StartsWith ( '/' ) == true )
38
+ {
39
+ var currentRootNavigation = link . GetData ( nameof ( MarkdownFile . RootNavigation ) ) as INavigation ;
40
+ var targetRootNavigation = link . GetData ( $ "Target{ nameof ( MarkdownFile . RootNavigation ) } ") as INavigation ;
41
+ _ = renderer . Write ( " hx-get=\" " ) ;
42
+ _ = renderer . WriteEscapeUrl ( url ) ;
43
+ _ = renderer . Write ( '"' ) ;
44
+ _ = renderer . Write ( $ " hx-select-oob=\" { Htmx . GetHxSelectOob ( currentRootNavigation ? . Id == targetRootNavigation ? . Id ) } \" ") ;
45
+ _ = renderer . Write ( " hx-swap=\" none\" " ) ;
46
+ _ = renderer . Write ( " hx-push-url=\" true\" " ) ;
47
+ _ = renderer . Write ( " hx-indicator=\" #htmx-indicator\" " ) ;
48
+ _ = renderer . Write ( $ " preload=\" { Htmx . GetPreload ( ) } \" ") ;
49
+ }
50
+ else if ( link . Url ? . StartsWith ( "http" ) == true && ( link . GetData ( "isCrossLink" ) as bool ? ) == false )
51
+ {
52
+ _ = renderer . Write ( " target=\" _blank\" " ) ;
53
+ _ = renderer . Write ( " rel=\" noopener noreferrer\" " ) ;
54
+ }
44
55
45
56
if ( ! string . IsNullOrEmpty ( link . Title ) )
46
57
{
@@ -49,7 +60,7 @@ protected override void Write(HtmlRenderer renderer, LinkInline link)
49
60
_ = renderer . Write ( '"' ) ;
50
61
}
51
62
52
- if ( ! string . IsNullOrWhiteSpace ( Rel ) )
63
+ if ( ! string . IsNullOrWhiteSpace ( Rel ) && link . Url ? . StartsWith ( '/' ) == false )
53
64
{
54
65
_ = renderer . Write ( " rel=\" " ) ;
55
66
_ = renderer . Write ( Rel ) ;
0 commit comments