Skip to content

Commit 017bd7b

Browse files
committed
feat: item filter (linters/formatters)
1 parent 5311ec4 commit 017bd7b

File tree

7 files changed

+175
-8
lines changed

7 files changed

+175
-8
lines changed

docs/assets/css/custom.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@
1212
.author-cards {
1313
grid-template-columns: repeat(auto-fill, minmax(max(150px, calc((100% - 1rem * 4) / var(--hextra-cards-grid-cols))), 1fr));
1414
}
15+
16+
.gl-hidden {
17+
display: none;
18+
}

docs/content/docs/formatters/_index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ golangci-lint formatters
2525

2626
## All formatters
2727

28+
<div class="hx-mt-6">
29+
{{< icon "filter" >}}
30+
{{< clickable-badge icon="fire" id="new-filter" content="New" class="gl-filter hx-cursor-pointer" type="warning" border=false >}}
31+
{{< clickable-badge icon="emoji-sad" id="deprecated-filter" content="Deprecated" class="gl-filter hx-cursor-pointer" type="info" border=false >}}
32+
{{< clickable-badge icon="trash" id="reset-filter" content="Reset" class="gl-filter-reset gl-hidden hx-cursor-pointer" type="error" border=true >}}
33+
</div>
34+
2835
{{< cards >}}
2936
{{< item-cards path="formatters" data="formatters_info" >}}
3037
{{< /cards >}}

docs/content/docs/linters/_index.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,19 @@ golangci-lint linters
2323
{{< card link="/docs/linters/configuration/" title="Linter Settings" icon="adjustments" >}}
2424
{{< /cards >}}
2525

26-
## Enabled by Default
26+
## All Linters
27+
28+
<div class="hx-mt-6">
29+
{{< icon "filter" >}}
30+
{{< clickable-badge icon="inbox" id="default-filter" content="Default" class="gl-filter hx-cursor-pointer" type="info" border=false >}}
31+
{{< clickable-badge icon="fire" id="new-filter" content="New" class="gl-filter hx-cursor-pointer" type="warning" border=false >}}
32+
{{< clickable-badge icon="sparkles" id="autofix-filter" content="Autofix" class="gl-filter hx-cursor-pointer" type="info" border=false >}}
33+
{{< clickable-badge icon="fast-forward" id="fast-filter" content="Fast" class="gl-filter hx-cursor-pointer" border=false >}}
34+
{{< clickable-badge icon="play" id="slow-filter" content="Slow" class="gl-filter hx-cursor-pointer" border=false >}}
35+
{{< clickable-badge icon="emoji-sad" id="deprecated-filter" content="Deprecated" class="gl-filter hx-cursor-pointer" type="info" border=false >}}
36+
{{< clickable-badge icon="trash" id="reset-filter" content="Reset" class="gl-filter-reset gl-hidden hx-cursor-pointer" type="error" border=true >}}
37+
</div>
2738

2839
{{< cards >}}
29-
{{< item-cards path="linters" data="linters_info" group="standard" >}}
30-
{{< /cards >}}
31-
32-
## Disabled by Default
33-
34-
{{< cards >}}
35-
{{< item-cards path="linters" data="linters_info" group="!standard" >}}
40+
{{< item-cards path="linters" data="linters_info" >}}
3641
{{< /cards >}}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{{- /* Modified version of https://github.com/imfing/hextra/blob/v0.9.7/layouts/partials/shortcodes/badge.html */ -}}
2+
{{- /*
3+
Creates a badge with the given id and class.
4+
5+
@param {string} content The content of the badge.
6+
@param {string} type The type of the badge.
7+
@param {string} id The id of the badge.
8+
@param {string} class The class of the badge.
9+
@param {boolean} border Whether to render a border around the badge.
10+
@param {string} icon The icon of the badge.
11+
12+
*/ -}}
13+
14+
{{- $content := .content -}}
15+
{{- $type := .type -}}
16+
{{- $id := .id | default "" -}}
17+
{{- $class := .class | default "" -}}
18+
{{- $border := .border | default false -}}
19+
{{- $icon := .icon | default "" -}}
20+
21+
{{- $defaultClass := "hx-text-gray-600 hx-bg-gray-100 dark:hx-bg-neutral-800 dark:hx-text-neutral-200 hx-border-gray-200 dark:hx-border-neutral-700" -}}
22+
23+
{{- $styleClass := newScratch -}}
24+
{{- $styleClass.Set "info" "hx-border-blue-200 hx-bg-blue-100 hx-text-blue-900 dark:hx-border-blue-200/30 dark:hx-bg-blue-900/30 dark:hx-text-blue-200" -}}
25+
{{- $styleClass.Set "warning" "hx-border-yellow-100 hx-bg-yellow-50 hx-text-yellow-900 dark:hx-border-yellow-200/30 dark:hx-bg-yellow-700/30 dark:hx-text-yellow-200" -}}
26+
{{- $styleClass.Set "error" "hx-border-red-200 hx-bg-red-100 hx-text-red-900 dark:hx-border-red-200/30 dark:hx-bg-red-900/30 dark:hx-text-red-200" -}}
27+
{{- $styleClass.Set "green" "hx-border-green-200 hx-bg-green-100 hx-text-green-900 dark:hx-border-green-200/30 dark:hx-bg-green-900/30 dark:hx-text-green-200" -}}
28+
{{- $styleClass.Set "indigo" "hx-border-indigo-200 hx-bg-indigo-100 hx-text-indigo-900 dark:hx-border-indigo-200/30 dark:hx-bg-indigo-900/30 dark:hx-text-indigo-200" -}}
29+
{{- $styleClass.Set "amber" "hx-border-amber-200 hx-bg-amber-100 hx-text-amber-900 dark:hx-border-amber-200/30 dark:hx-bg-amber-900/30 dark:hx-text-amber-200" -}}
30+
31+
{{- $borderClass := cond (eq $border true) "hx-border" "" -}}
32+
{{- $badgeClass := or ($styleClass.Get $type) $defaultClass -}}
33+
<div class="hextra-badge">
34+
<div id="{{ $id }}" class="hx-inline-flex hx-gap-1 hx-items-center hx-rounded-full hx-px-2.5 hx-leading-6 hx-text-[.65rem] {{ $borderClass }} {{ $badgeClass }} {{ $class }}">
35+
{{- with $icon -}}{{- partial "utils/icon" (dict "name" . "attributes" "height=12") -}}{{- end -}}
36+
{{- $content -}}
37+
</div>
38+
</div>
39+
{{- /* Strip trailing newline. */ -}}

docs/layouts/_partials/custom/head-end.html

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,63 @@
44
quicklink.listen();
55
});
66
</script>
7+
<script>
8+
window.addEventListener('load', () => {
9+
const resetButton = document.querySelector('.gl-filter-reset');
10+
11+
const borderClass = 'hx-border'
12+
const hiddenClass = 'gl-hidden'
13+
14+
document.querySelectorAll('.gl-filter').forEach(button => {
15+
button.addEventListener('click', event => {
16+
let clean = event.currentTarget.classList.contains(borderClass)
17+
18+
document.querySelectorAll('.gl-item').forEach(element => element.classList.remove(hiddenClass));
19+
document.querySelectorAll('.gl-filter').forEach(element => element.classList.remove(borderClass));
20+
21+
if (clean) {
22+
resetButton.classList.add(hiddenClass);
23+
} else {
24+
resetButton.classList.remove(hiddenClass);
25+
26+
document.querySelectorAll('.gl-filter').forEach(element => element.classList.remove(borderClass))
27+
28+
event.currentTarget.classList.add(borderClass);
29+
30+
let selector = ''
31+
switch (event.currentTarget.id) {
32+
case 'default-filter':
33+
selector = '.gl-item:not(.gl-default)'
34+
break;
35+
case 'new-filter':
36+
selector = '.gl-item:not(.gl-new)'
37+
break;
38+
case 'autofix-filter':
39+
selector = '.gl-item:not(.gl-autofix)'
40+
break;
41+
case 'fast-filter':
42+
selector = '.gl-item:not(.gl-slow)'
43+
break;
44+
case 'slow-filter':
45+
selector = '.gl-item:not(.gl-fast)'
46+
break;
47+
case 'deprecated-filter':
48+
selector = '.gl-item:not(.gl-deprecated)'
49+
break;
50+
}
51+
52+
if (selector) {
53+
document.querySelectorAll(selector).forEach(element => element.classList.add(hiddenClass));
54+
}
55+
}
56+
});
57+
});
58+
59+
resetButton.addEventListener('click', (event) => {
60+
event.currentTarget.classList.add(hiddenClass);
61+
62+
document.querySelectorAll('.gl-item').forEach(element => element.classList.remove(hiddenClass));
63+
document.querySelectorAll('.gl-filter').forEach(element => element.classList.remove(borderClass));
64+
});
65+
});
66+
</script>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{{- /* Modified version of https://github.com/imfing/hextra/blob/v0.9.7/layouts/shortcodes/badge.html */ -}}
2+
{{- /*
3+
Creates a badge with the given id and class.
4+
5+
@param {string} content The content of the badge.
6+
@param {string} type The type of the badge.
7+
@param {string} id The id of the badge.
8+
@param {string} class The class of the badge.
9+
@param {boolean} border Whether to render a border around the badge.
10+
@param {string} icon The icon of the badge.
11+
12+
@example {{< clickable-badge icon="inbox" id="my-id" content="Text" class="my-class" type="info" border=true >}}
13+
*/}}
14+
15+
{{- $content := .Get "content" -}}
16+
{{- $type := .Get "type" | default "" -}}
17+
{{- $id := .Get "id" | default "" -}}
18+
{{- $class := .Get "class" | default "" -}}
19+
{{- $icon := .Get "icon" | default "" -}}
20+
{{- $border := .Get "border" | default false -}}
21+
22+
{{- partial "clickable-badge.html" (dict
23+
"id" $id
24+
"class" $class
25+
"content" $content
26+
"type" $type
27+
"border" $border
28+
"icon" $icon
29+
)
30+
-}}

docs/layouts/_shortcodes/item-cards.html

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,28 @@
6060
{{- $s.SetInMap "options" $k $v -}}
6161
{{- end -}}
6262

63+
{{- /* CSS classes */ -}}
64+
{{- $class := slice "gl-item" -}}
65+
{{- if .canAutoFix -}}
66+
{{- $class = $class | append "gl-autofix" -}}
67+
{{- end -}}
68+
{{- if .deprecation -}}
69+
{{- $class = $class | append "gl-deprecated" -}}
70+
{{- end -}}
71+
{{- if .isSlow -}}
72+
{{- $class = $class | append "gl-slow" -}}
73+
{{- else -}}
74+
{{- $class = $class | append "gl-fast" -}}
75+
{{- end -}}
76+
{{- if in .groups "standard" -}}
77+
{{- $class = $class | append "gl-default" -}}
78+
{{- end -}}
79+
{{- if (partial "compare-versions.html" (dict "a" $gcilVersion "b" .since)) -}}
80+
{{- $class = $class | append "gl-new" -}}
81+
{{- end -}}
82+
83+
<div class="{{ delimit $class " " | safeHTMLAttr }}">
6384
{{- partial "shortcodes/card" ($s.Get "options") -}}
85+
</div>
6486

6587
{{- end -}}

0 commit comments

Comments
 (0)