Skip to content

Commit 058d518

Browse files
fix: extract several styling
1 parent 8816028 commit 058d518

File tree

4 files changed

+62
-39
lines changed

4 files changed

+62
-39
lines changed

website/src/catalog/Option.vue

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<script setup lang="ts">
2+
// hohoho option, not the 0dte one
3+
4+
defineProps({
5+
text: String,
6+
highlight: Boolean,
7+
})
8+
</script>
9+
10+
<template>
11+
<code class="option" :class="{ highlight }">{{ text }}</code>
12+
</template>
13+
14+
<style scoped>
15+
code.option {
16+
cursor: pointer;
17+
filter: saturate(0);
18+
opacity: 0.8;
19+
user-select: none;
20+
border: 1px solid transparent;
21+
min-width: 3em;
22+
display: inline-block;
23+
height: 24px;
24+
line-height: 24px;
25+
text-align: center;
26+
padding-top: 0;
27+
}
28+
code.option:hover {
29+
opacity: 1;
30+
filter: saturate(1);
31+
}
32+
.highlight {
33+
color: var(--vp-c-brand-1);
34+
}
35+
.highlight-filter:hover {
36+
color: var(--vp-c-brand-1);
37+
}
38+
</style>

website/src/catalog/RuleFilter.vue

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup lang="ts">
22
import { watchEffect, ref } from 'vue'
3+
import Option from './Option.vue'
34
import {
45
languages,
56
ruleFilters,
@@ -25,24 +26,24 @@ watchEffect(() => {
2526
<template>
2627
<form class="filters">
2728
<details open>
28-
<summary>Language Filters</summary>
29+
<summary>📚Language Filters</summary>
2930
<div class="checkbox-group">
3031
<label v-for="displayName, lang in languages" :key="lang">
3132
<input type="checkbox" v-model="filter.selectedLanguages" :value="lang">
32-
<code class="option">{{ displayName }}</code>
33+
<Option :text="displayName"/>
3334
</label>
3435
</div>
3536
</details>
3637

37-
<details class="filter-group" style="display: none;">
38-
<summary>Rule Filters</summary>
38+
<details class="filter-group">
39+
<summary>📏Rule Filters</summary>
3940
<div class="rule-group">
4041
<div v-for="rules, type in ruleFilters">
4142
<em style="text-transform: capitalize;">{{ type }}</em>
4243
<div class="checkbox-group">
4344
<label v-for="rule in rules" :key="rule">
4445
<input type="checkbox" v-model="filter.selectedRuleFilters" :value="rule">
45-
<code class="option">{{ rule }}</code>
46+
<Option :text="rule"/>
4647
</label>
4748
</div>
4849
</div>
@@ -57,7 +58,7 @@ watchEffect(() => {
5758
<div class="checkbox-group">
5859
<label v-for="type in ruleTypes" :key="type">
5960
<input type="checkbox" v-model="filter.selectedTypes" :value="type">
60-
<code class="option">{{ type }}</code>
61+
<Option :text="type"/>
6162
</label>
6263
</div>
6364
</div>
@@ -66,7 +67,7 @@ watchEffect(() => {
6667
<div class="checkbox-group">
6768
<label v-for="feature in features" :key="feature">
6869
<input type="checkbox" v-model="filter.selectedFeatures" :value="feature">
69-
<code class="option">{{ feature }}</code>
70+
<Option :text="feature"/>
7071
</label>
7172
</div>
7273
</div>
@@ -77,8 +78,7 @@ watchEffect(() => {
7778

7879
<style scoped>
7980
.rule-group {
80-
display: grid;
81-
grid-template-columns: repeat(3, minmax(20%, 1fr));
81+
display: flex;
8282
margin-top: -2px;
8383
}
8484
@@ -114,24 +114,6 @@ input[type="checkbox"] {
114114
display: none;
115115
}
116116
117-
code.option {
118-
cursor: pointer;
119-
filter: saturate(0);
120-
opacity: 0.8;
121-
user-select: none;
122-
border: 1px solid var(--vp-code-bg);
123-
min-width: 3em;
124-
display: inline-block;
125-
height: 24px;
126-
line-height: 24px;
127-
text-align: center;
128-
padding-top: 0;
129-
}
130-
code.option:hover {
131-
opacity: 1;
132-
filter: saturate(1);
133-
}
134-
135117
input[type="checkbox"]:checked + code.option {
136118
filter: saturate(1);
137119
opacity: 1;

website/src/catalog/RuleItem.vue

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,11 @@ const moreFeatures = computed(() => Math.max(meta.features.length - 2, 0))
2626
<div class="rule-header">
2727
<a :href="meta.link" class="rule-name" target="_blank">{{ meta.name }}</a>
2828
<div class="rule-badges">
29-
<Badge type="info">
30-
<a
31-
:href="`/catalog/${meta.language}/`"
32-
class="override-badge-text-color"
33-
:class="filter.selectedLanguages.length && 'highlight-filter'"
34-
target="_blank"
35-
>
29+
<a :href="`/catalog/${meta.language}/`" target="_blank">
30+
<Badge type="info" :class="filter.selectedLanguages.length && 'highlight-filter'">
3631
{{ languages[meta.language] }}
37-
</a>
38-
</Badge>
32+
</Badge>
33+
</a>
3934
<Badge v-if="meta.hasFix" type="tip">
4035
<span class="override-badge-text-color">🛠️ Fix</span>
4136
</Badge>
@@ -46,7 +41,7 @@ const moreFeatures = computed(() => Math.max(meta.features.length - 2, 0))
4641
<Badge v-if="meta.type === 'Pattern'" type="info" text="Simple Pattern Example" />
4742
<template v-else>
4843
📏<span class="emoji-offset"/>
49-
<code class="used" v-for="rule in displayedRules">
44+
<code class="used" v-for="rule in displayedRules" :class="filter.selectedRuleFilters.includes(rule) && 'highlight-filter'">
5045
{{ rule }}
5146
</code>
5247
<code class="used" v-if="moreRules">
@@ -136,8 +131,14 @@ a:hover {
136131
/* Offset emoji visual spacing */
137132
margin-right: -2px;
138133
}
134+
/* hack vpbage's border transition */
135+
.VPBadge {
136+
transition-property: all;
137+
transition-duration: 0.25s;
138+
}
139139
.highlight-filter {
140140
color: var(--vp-c-brand-1);
141+
border-color: var(--vp-c-brand-1);
141142
}
142143
.highlight-filter:hover {
143144
color: var(--vp-c-brand-1);

website/src/catalog/data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export function getRuleMetaData(filter: Filter) {
55
const {
66
selectedLanguages,
77
} = filter
8-
return allRules.filter(rule => {
9-
return !selectedLanguages.length || selectedLanguages.includes(rule.language)
8+
return allRules.filter(meta => {
9+
const langFilter = !selectedLanguages.length || selectedLanguages.includes(meta.language)
10+
const ruleFilter = !filter.selectedRuleFilters.length || filter.selectedRuleFilters.some(r => meta.rules.includes(r))
11+
return langFilter && ruleFilter
1012
})
1113
}
1214

0 commit comments

Comments
 (0)