@@ -17,7 +17,7 @@ public class HtmxLinkInlineRenderer : LinkInlineRenderer
1717{
1818 protected override void Write ( HtmlRenderer renderer , LinkInline link )
1919 {
20- if ( renderer . EnableHtmlForInline && ! link . IsImage && link . Url ? . StartsWith ( '/' ) == true )
20+ if ( renderer . EnableHtmlForInline && ! link . IsImage )
2121 {
2222 // ReSharper disable once UnusedVariable
2323 if ( link . GetData ( nameof ( ParserContext . CurrentUrlPath ) ) is not string currentUrl )
@@ -26,21 +26,32 @@ protected override void Write(HtmlRenderer renderer, LinkInline link)
2626 return ;
2727 }
2828
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 ;
3130
3231 _ = renderer . Write ( "<a href=\" " ) ;
33- _ = renderer . WriteEscapeUrl ( link . GetDynamicUrl != null ? link . GetDynamicUrl ( ) : link . Url ) ;
32+ _ = renderer . WriteEscapeUrl ( url ) ;
3433 _ = renderer . Write ( '"' ) ;
3534 _ = 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+ }
4455
4556 if ( ! string . IsNullOrEmpty ( link . Title ) )
4657 {
@@ -49,7 +60,7 @@ protected override void Write(HtmlRenderer renderer, LinkInline link)
4960 _ = renderer . Write ( '"' ) ;
5061 }
5162
52- if ( ! string . IsNullOrWhiteSpace ( Rel ) )
63+ if ( ! string . IsNullOrWhiteSpace ( Rel ) && link . Url ? . StartsWith ( '/' ) == false )
5364 {
5465 _ = renderer . Write ( " rel=\" " ) ;
5566 _ = renderer . Write ( Rel ) ;
0 commit comments