Skip to content

Commit 1652311

Browse files
authored
Merge branch 'main' into add-edot-sdk-relnotes
2 parents 243c028 + d708737 commit 1652311

File tree

15 files changed

+791
-575
lines changed

15 files changed

+791
-575
lines changed

.github/dependabot.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ updates:
1717
day: 'monday'
1818
time: '08:00'
1919
groups:
20+
eui:
21+
patterns:
22+
- '@elastic/eui*'
2023
tailwindcss:
2124
patterns:
2225
- 'tailwindcss'

src/Elastic.Documentation.Site/Htmx.cs

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,74 @@
22
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
33
// See the LICENSE file in the project root for more information
44

5+
using System.Reflection;
56
using System.Text;
7+
using System.Text.Encodings.Web;
8+
using Elastic.Documentation.Extensions;
69

710
namespace Elastic.Documentation.Site;
811

12+
public static class UrlHelper
13+
{
14+
private static readonly KeyValuePair<string, string?>[] VersionParameters = [new("v", Htmx.VersionHash)];
15+
16+
public static string AddVersionParameters(string uri) => AddQueryString(uri, VersionParameters);
17+
18+
/// <summary>
19+
/// Append the given query keys and values to the URI.
20+
/// </summary>
21+
/// <param name="uri">The base URI.</param>
22+
/// <param name="queryString">A collection of name value query pairs to append.</param>
23+
/// <returns>The combined result.</returns>
24+
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <c>null</c>.</exception>
25+
/// <exception cref="ArgumentNullException"><paramref name="queryString"/> is <c>null</c>.</exception>
26+
public static string AddQueryString(
27+
string uri,
28+
IEnumerable<KeyValuePair<string, string?>> queryString)
29+
{
30+
ArgumentNullException.ThrowIfNull(uri);
31+
ArgumentNullException.ThrowIfNull(queryString);
32+
33+
var anchorIndex = uri.IndexOf('#');
34+
var uriToBeAppended = uri.AsSpan();
35+
var anchorText = ReadOnlySpan<char>.Empty;
36+
// If there is an anchor, then the query string must be inserted before its first occurrence.
37+
if (anchorIndex != -1)
38+
{
39+
anchorText = uriToBeAppended.Slice(anchorIndex);
40+
uriToBeAppended = uriToBeAppended.Slice(0, anchorIndex);
41+
}
42+
43+
var queryIndex = uriToBeAppended.IndexOf('?');
44+
var hasQuery = queryIndex != -1;
45+
46+
var sb = new StringBuilder();
47+
_ = sb.Append(uriToBeAppended);
48+
foreach (var parameter in queryString)
49+
{
50+
if (parameter.Value == null)
51+
continue;
52+
53+
_ = sb.Append(hasQuery ? '&' : '?')
54+
.Append(UrlEncoder.Default.Encode(parameter.Key))
55+
.Append('=')
56+
.Append(UrlEncoder.Default.Encode(parameter.Value));
57+
hasQuery = true;
58+
}
59+
60+
_ = sb.Append(anchorText);
61+
return sb.ToString();
62+
}
63+
}
64+
965
public static class Htmx
1066
{
67+
private static readonly string Version =
68+
Assembly.GetExecutingAssembly().GetCustomAttributes<AssemblyInformationalVersionAttribute>()
69+
.FirstOrDefault()?.InformationalVersion ?? "0.0.0";
70+
71+
public static readonly string VersionHash = ShortId.Create(Version);
72+
1173
public static string GetHxSelectOob(bool hasSameTopLevelGroup) => hasSameTopLevelGroup ? "#content-container,#toc-nav" : "#main-container";
1274
public const string Preload = "mousedown";
1375
public const string HxSwap = "none";
@@ -24,8 +86,10 @@ public static string GetHxAttributes(
2486
string? hxIndicator = HxIndicator
2587
)
2688
{
89+
var hxGetUrl = UrlHelper.AddVersionParameters(targetUrl);
90+
2791
var attributes = new StringBuilder();
28-
_ = attributes.Append($" hx-get={targetUrl}");
92+
_ = attributes.Append($" hx-get={hxGetUrl}");
2993
_ = attributes.Append($" hx-select-oob={hxSwapOob ?? GetHxSelectOob(hasSameTopLevelGroup)}");
3094
_ = attributes.Append($" hx-swap={hxSwap}");
3195
_ = attributes.Append($" hx-push-url={hxPushUrl}");

0 commit comments

Comments
 (0)