|
9 | 9 |
|
10 | 10 | namespace Elastic.Documentation.Site;
|
11 | 11 |
|
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 |
| - |
65 | 12 | public static class Htmx
|
66 | 13 | {
|
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 |
| - |
73 | 14 | public static string GetHxSelectOob(bool hasSameTopLevelGroup) => hasSameTopLevelGroup ? "#content-container,#toc-nav" : "#main-container";
|
74 | 15 | public const string Preload = "mousedown";
|
75 |
| - public const string HxSwap = "none"; |
76 |
| - public const string HxPushUrl = "true"; |
77 |
| - public const string HxIndicator = "#htmx-indicator"; |
78 | 16 |
|
79 | 17 | public static string GetHxAttributes(
|
80 |
| - string targetUrl, |
81 | 18 | bool hasSameTopLevelGroup = false,
|
82 | 19 | string? preload = Preload,
|
83 |
| - string? hxSwapOob = null, |
84 |
| - string? hxSwap = HxSwap, |
85 |
| - string? hxPushUrl = HxPushUrl, |
86 |
| - string? hxIndicator = HxIndicator |
| 20 | + string? hxSwapOob = null |
87 | 21 | )
|
88 | 22 | {
|
89 |
| - var hxGetUrl = UrlHelper.AddVersionParameters(targetUrl); |
90 |
| - |
91 | 23 | var attributes = new StringBuilder();
|
92 |
| - _ = attributes.Append($" hx-get={hxGetUrl}"); |
93 | 24 | _ = attributes.Append($" hx-select-oob={hxSwapOob ?? GetHxSelectOob(hasSameTopLevelGroup)}");
|
94 |
| - _ = attributes.Append($" hx-swap={hxSwap}"); |
95 |
| - _ = attributes.Append($" hx-push-url={hxPushUrl}"); |
96 |
| - _ = attributes.Append($" hx-indicator={hxIndicator}"); |
97 | 25 | _ = attributes.Append($" preload={preload}");
|
98 | 26 | return attributes.ToString();
|
99 | 27 | }
|
|
0 commit comments