protected override void Write()

in src/Elastic.Markdown/Myst/Renderers/HtmxLinkInlineRenderer.cs [17:76]


	protected override void Write(HtmlRenderer renderer, LinkInline link)
	{
		if (renderer.EnableHtmlForInline && !link.IsImage)
		{
			// ReSharper disable once UnusedVariable
			if (link.GetData(nameof(ParserContext.CurrentUrlPath)) is not string currentUrl)
			{
				base.Write(renderer, link);
				return;
			}

			var url = link.GetDynamicUrl != null ? link.GetDynamicUrl() : link.Url;

			_ = renderer.Write("<a href=\"");
			_ = renderer.WriteEscapeUrl(url);
			_ = renderer.Write('"');
			_ = renderer.WriteAttributes(link);


			if (link.Url?.StartsWith('/') == true)
			{
				var currentRootNavigation = link.GetData(nameof(MarkdownFile.NavigationRoot)) as INavigationGroup;
				var targetRootNavigation = link.GetData($"Target{nameof(MarkdownFile.NavigationRoot)}") as INavigationGroup;
				_ = renderer.Write(" hx-get=\"");
				_ = renderer.WriteEscapeUrl(url);
				_ = renderer.Write('"');
				_ = renderer.Write($" hx-select-oob=\"{Htmx.GetHxSelectOob(currentRootNavigation?.Id == targetRootNavigation?.Id)}\"");
				_ = renderer.Write($" hx-swap=\"{Htmx.HxSwap}\"");
				_ = renderer.Write($" hx-push-url=\"{Htmx.HxPushUrl}\"");
				_ = renderer.Write($" hx-indicator=\"{Htmx.HxIndicator}\"");
				_ = renderer.Write($" preload=\"{Htmx.Preload}\"");
			}
			else if (link.Url?.StartsWith("http") == true && (link.GetData("isCrossLink") as bool?) == false)
			{
				_ = renderer.Write(" target=\"_blank\"");
				_ = renderer.Write(" rel=\"noopener noreferrer\"");
			}

			if (!string.IsNullOrEmpty(link.Title))
			{
				_ = renderer.Write(" title=\"");
				_ = renderer.WriteEscape(link.Title);
				_ = renderer.Write('"');
			}

			if (!string.IsNullOrWhiteSpace(Rel) && link.Url?.StartsWith('/') == false)
			{
				_ = renderer.Write(" rel=\"");
				_ = renderer.Write(Rel);
				_ = renderer.Write('"');
			}

			_ = renderer.Write('>');
			renderer.WriteChildren(link);

			_ = renderer.Write("</a>");
		}
		else
			base.Write(renderer, link);
	}