Skip to content

Commit 5833c59

Browse files
author
Timothy Johnson
committed
Highlight search terms
1 parent fd9be3d commit 5833c59

File tree

6 files changed

+85
-22
lines changed

6 files changed

+85
-22
lines changed

src/nodes/Block.svelte

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script>
22
import Collapse from './Collapse.svelte'
3+
import SearchTerm from './SearchTerm.svelte'
34
45
export let style
56
export let hover
@@ -31,12 +32,24 @@
3132
{style}
3233
on:dblclick={e => (collapsed = !collapsed)}>
3334
<Collapse {selected} bind:collapsed />
34-
{#if source}{source}{:else}&lbrace;#{tagName}&rbrace;{/if}
35-
{#if collapsed}&hellip;&lbrace;/{tagName}&rbrace;{/if}
35+
{#if source}
36+
{source}
37+
{:else}
38+
&lbrace;#
39+
<SearchTerm text={tagName} />
40+
&rbrace;
41+
{/if}
42+
{#if collapsed}
43+
&hellip;&lbrace;/
44+
<SearchTerm text={tagName} />
45+
&rbrace;
46+
{/if}
3647
</div>
3748
{#if !collapsed}
3849
<slot />
3950
<div class="tag-close tag-name" class:hover {style}>
40-
&lbrace;/{tagName}&rbrace;
51+
&lbrace;/
52+
<SearchTerm text={tagName} />
53+
&rbrace;
4154
</div>
4255
{/if}

src/nodes/Element.svelte

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script>
22
import Collapse from './Collapse.svelte'
3+
import SearchTerm from './SearchTerm.svelte'
34
45
export let style
56
export let hasChildren
@@ -72,17 +73,20 @@
7273
<span class:flash>
7374
<span class="attr-name">
7475
{#if isBound}bind:{/if}
75-
{key}
76+
<SearchTerm text={key} />
7677
</span>
7778
=
78-
<span class="attr-value">{value}</span>
79+
<span class="attr-value">
80+
<SearchTerm text={value} />
81+
</span>
7982
</span>
8083
{/each}
8184

8285
{#each listeners as { event, handler, modifiers }}
8386
&nbsp;
8487
<span class="attr-name" data-tooltip={handler}>
85-
on:{event}
88+
on:
89+
<SearchTerm text={event} />
8690
{#if modifiers}|{modifiers.join('|')}{/if}
8791
</span>
8892
{/each}
@@ -96,27 +100,35 @@
96100
on:dblclick={e => (collapsed = !collapsed)}>
97101
<Collapse {selected} bind:collapsed />
98102
&lt;
99-
<span class="tag-name">{tagName}</span>
103+
<span class="tag-name">
104+
<SearchTerm text={tagName} />
105+
</span>
100106
<!--use attributes-->
101107
&gt;
102108
{#if collapsed}
103109
&hellip;&lt;/
104-
<span class="tag-name">{tagName}</span>
110+
<span class="tag-name">
111+
<SearchTerm text={tagName} />
112+
</span>
105113
&gt;
106114
{/if}
107115
</div>
108116
{#if !collapsed}
109117
<slot />
110118
<div class:hover {style}>
111119
&lt;/
112-
<span class="tag-name">{tagName}</span>
120+
<span class="tag-name">
121+
<SearchTerm text={tagName} />
122+
</span>
113123
&gt;
114124
</div>
115125
{/if}
116126
{:else}
117127
<div class:hover class:selected {style}>
118128
&lt;
119-
<span class="tag-name">{tagName}</span>
129+
<span class="tag-name">
130+
<SearchTerm text={tagName} />
131+
</span>
120132
<!--use attributes-->
121133
&nbsp;/&gt;
122134
</div>

src/nodes/SearchTerm.svelte

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<script>
2+
import { searchValue } from '../store.js'
3+
4+
export let text
5+
6+
$: i = text.indexOf($searchValue)
7+
$: pre = text.substring(0, i)
8+
$: highlight = text.substring(i, i + $searchValue.length)
9+
$: post = text.substring(i + $searchValue.length)
10+
</script>
11+
12+
<style>
13+
span {
14+
background-color: yellow !important;
15+
color: black !important;
16+
}
17+
</style>
18+
19+
{#if i == -1 || $searchValue.length < 2}
20+
{text}
21+
{:else}
22+
{pre}
23+
<span>{highlight}</span>
24+
{post}
25+
{/if}

src/nodes/Slot.svelte

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script>
22
import Collapse from './Collapse.svelte'
3+
import SearchTerm from './SearchTerm.svelte'
34
45
export let style
56
export let hover
@@ -31,10 +32,20 @@
3132
{style}
3233
on:dblclick={e => (collapsed = !collapsed)}>
3334
<Collapse {selected} bind:collapsed />
34-
&lt;{tagName}&gt;
35-
{#if collapsed}&hellip;&lt;/{tagName}&gt;{/if}
35+
&lt;
36+
<SearchTerm text={tagName} />
37+
&gt;
38+
{#if collapsed}
39+
&hellip;&lt;/
40+
<SearchTerm text={tagName} />
41+
&gt;
42+
{/if}
3643
</div>
3744
{#if !collapsed}
3845
<slot />
39-
<div class="tag-close tag-name" class:hover {style}>&lt;/{tagName}&gt;</div>
46+
<div class="tag-close tag-name" class:hover {style}>
47+
&lt;/
48+
<SearchTerm text={tagName} />
49+
&gt;
50+
</div>
4051
{/if}

src/nodes/Text.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
<script>
2+
import SearchTerm from './SearchTerm.svelte'
3+
24
export let style
35
export let nodeValue
46
</script>
57

6-
<div {style}>{nodeValue}</div>
8+
<div {style}>
9+
<SearchTerm text={nodeValue} />
10+
</div>

src/toolbar/Search.svelte

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script>
2-
import { rootNodes, selectedNode } from '../store.js'
2+
import { rootNodes, selectedNode, searchValue } from '../store.js'
33
import Button from './Button.svelte'
44
55
function next() {
@@ -15,23 +15,21 @@
1515
function search(nodeList = $rootNodes) {
1616
for (const node of nodeList) {
1717
if (
18-
node.tagName.includes(value) ||
19-
(node.detail && JSON.stringify(node.detail).includes(value))
18+
node.tagName.includes($searchValue) ||
19+
(node.detail && JSON.stringify(node.detail).includes($searchValue))
2020
)
2121
results.push(node)
2222
search(node.children)
2323
}
2424
}
2525
26-
let value
2726
let results
2827
let resultsPosition
29-
3028
$: {
31-
value
29+
$searchValue
3230
results = []
3331
resultsPosition = -1
34-
if (value && value.length > 1) search()
32+
if ($searchValue.length > 1) search()
3533
}
3634
</script>
3735

@@ -95,7 +93,7 @@
9593
fill-rule="evenodd"
9694
d="M6 10a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0 2A6 6 0 1 0 6 0a6 6 0 0 0 0 12z" />
9795
</svg>
98-
<input placeholder="Search" bind:value />
96+
<input placeholder="Search" bind:value={$searchValue} />
9997
{#if resultsPosition > -1}
10098
{resultsPosition + 1}&nbsp;of&nbsp;{results.length}&nbsp;
10199
{/if}

0 commit comments

Comments
 (0)