Skip to content

Commit d3b4b8f

Browse files
authored
Add search and tag support for the wikilist (#262)
* Add search and tag support for the wikilist * Update WikiList SearchList Style.tid * updated class names to tiddlydesktop format * Corrected class names * corrected class names * Fix for duplicate results
1 parent 0b204c4 commit d3b4b8f

File tree

5 files changed

+182
-2
lines changed

5 files changed

+182
-2
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
title: WikiList/edit-tags-template
2+
3+
\import [[$:/core/ui/EditTemplate/tags]]
4+
\define tag-button(classes)
5+
<$let button-classes='tc-btn-invisible $classes$' currentTiddler=<<tag>>>
6+
{{||$:/core/ui/TagPickerTagTemplate}}
7+
</$let>
8+
\end
9+
\define tagsAutoComplete()
10+
<$list filter=<<tagsAutoCompleteFilter>> emptyMessage=<<tagsAutoCompleteEmptyMessage>> variable="listItem">
11+
<$list filter=<<tagsFilter>> variable="tag">
12+
<$list
13+
filter="[<tag>addsuffix<suffix>] -[<tagSelectionState>get[text]]"
14+
emptyMessage=<<tag-button 'tc-tag-button-selected'>>
15+
variable="ignore"
16+
>
17+
<<tag-button>>
18+
</$list>
19+
</$list>
20+
</$list>
21+
\end
22+
\define tag-picker-inner(actions,tagField:"tags")
23+
\whitespace trim
24+
<$let
25+
newTagNameInputTiddlerQualified=<<qualify "$:/temp/NewTagName/input">>
26+
newTagNameSelectionTiddlerQualified=<<qualify "$:/temp/NewTagName/selected-item">>
27+
fallbackTarget={{$(palette)$##tag-background}}
28+
colourA={{$(palette)$##foreground}}
29+
colourB={{$(palette)$##background}}
30+
storeTitle={{{ [<newTagNameInputTiddler>!match[]] ~[<newTagNameInputTiddlerQualified>] }}}
31+
tagSelectionState={{{ [<newTagNameSelectionTiddler>!match[]] ~[<newTagNameSelectionTiddlerQualified>] }}}
32+
refreshTitle=<<qualify "$:/temp/NewTagName/refresh">>
33+
nonSystemTagsFilter="[tags[]] $(tagListFilter)$ +[!is[system]] -[<storyTiddler>tags[]] :filter[search:title<userInput>]+[sort[]]"
34+
systemTagsFilter="[tags[]] $(tagListFilter)$ +[is[system]] -[<storyTiddler>tags[]] :filter[search:title<userInput>]+[sort[]]"
35+
displayTagsPopup="[all[tiddlers]subfilter<systemTagsFilter>][all[tiddlers]subfilter<nonSystemTagsFilter>] +[limit[1]]"
36+
>
37+
<div class="tc-edit-add-tag">
38+
<div>
39+
<span class="tc-add-tag-name tc-small-gap-right">
40+
<$macrocall $name="keyboard-driven-input"
41+
tiddler=<<newTagNameTiddler>>
42+
storeTitle=<<storeTitle>>
43+
refreshTitle=<<refreshTitle>>
44+
selectionStateTitle=<<tagSelectionState>>
45+
inputAcceptActions="<$macrocall $name='add-tag-actions'
46+
actions=<<__actions__>>
47+
tagField=<<__tagField__>>/>"
48+
inputCancelActions=<<clear-tags-actions>>
49+
tag="input"
50+
placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}
51+
focusPopup=<<qualify "$:/state/popup/tags-auto-complete">>
52+
class="tc-edit-texteditor tc-popup-handle"
53+
tabindex=<<tabIndex>>
54+
focus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}}
55+
filterMinLength={{$:/config/Tags/MinLength}}
56+
cancelPopups=<<cancelPopups>>
57+
configTiddlerFilter="[[$:/core/macros/tag-picker]]"
58+
/>
59+
</span>
60+
<$button
61+
popup=<<qualify "$:/state/popup/tags-auto-complete">>
62+
class="tc-btn-invisible tc-btn-dropdown"
63+
tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}}
64+
aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}
65+
>
66+
{{$:/core/images/down-arrow}}
67+
</$button>
68+
<$reveal state=<<storeTitle>> type="nomatch" text="">
69+
<$button
70+
class="tc-btn-invisible tc-small-gap tc-btn-dropdown"
71+
tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}}
72+
aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}
73+
actions=<<delete-tag-state-tiddlers>>
74+
>
75+
{{$:/core/images/close-button}}
76+
</$button>
77+
</$reveal>
78+
<span class="tc-add-tag-button tc-small-gap-left">
79+
<$let tag={{{ [<newTagNameTiddler>get[text]] }}} currentTiddlerCSSEscaped={{{ [<saveTiddler>escapecss[]] }}}>
80+
<$button set=<<newTagNameTiddler>> setTo="">
81+
<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter="[<tag>trim[]]"/>
82+
$actions$
83+
<<delete-tag-state-tiddlers>>
84+
<$action-sendmessage $message="tm-focus-selector" $param=<<get-tagpicker-focus-selector>>/>
85+
{{$:/language/EditTemplate/Tags/Add/Button}}
86+
</$button>
87+
</$let>
88+
</span>
89+
</div>
90+
<$reveal
91+
class="tc-block-dropdown tc-block-tags-dropdown tc-block-dropdown-wrapper"
92+
default={{{ [subfilter<displayTagsPopup>then[]else[hide]] }}}
93+
state=<<qualify "$:/state/popup/tags-auto-complete">>
94+
tag={{{ [subfilter<displayTagsPopup>then[div]else[template]] }}}
95+
text=""
96+
type="nomatch"
97+
>
98+
<$let
99+
actions=<<__actions__>>
100+
currentTiddler=<<tag>>
101+
tagField=<<__tagField__>>
102+
userInput={{{ [<storeTitle>get[text]] }}}
103+
tagsAutoCompleteFilter="[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]"
104+
tagsAutoCompleteEmptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>"
105+
>
106+
<$let tagsFilter=<<nonSystemTagsFilter>> suffix="-primaryList"><<tagsAutoComplete>></$let>
107+
<hr>
108+
<$let tagsFilter=<<systemTagsFilter>> suffix="-secondaryList"><<tagsAutoComplete>></$let>
109+
</$let>
110+
</$reveal>
111+
</div>
112+
</$let>
113+
\end
114+
115+
<$let saveTiddler=<<currentTiddler>> tagListFilter="+[all[tiddlers]tag[wikilist]addprefix[$:/TiddlyDesktop/Config/wiki-tags/]tags[]]">
116+
<$macrocall $name="edit-tags-template" tagField=<<tagField>>/>
117+
</$let>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
tags: $:/tags/Stylesheet
2+
title: WikiList/SearchListStyle
3+
4+
.td-search{
5+
display:flex;
6+
gap:1ch;
7+
flex-wrap:wrap;
8+
}
9+
10+
.td-search,.td-tags{
11+
padding:10px;
12+
padding-bottom:0;
13+
padding-top:0;
14+
}
15+
16+
.td-search .tc-edit-texteditor{
17+
flex:1;
18+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
tags: $:/tags/StartupAction
2+
title: WikiList/ui/Buttons/DeleteUnusedTags
3+
4+
\define delete-unused-tags()
5+
<$action-deletetiddler $filter="[all[tiddlers]prefix[$:/TiddlyDesktop/Config/wiki-tags/]]:filter[removeprefix[$:/TiddlyDesktop/Config/wiki-tags/]!is[tiddler]]"/>
6+
\end
7+
8+
<$list filter="[prefix[$:/TiddlyDesktop/Config/wiki-tags/]removeprefix[$:/TiddlyDesktop/Config/wiki-tags/]!is[tiddler]limit[1]]">
9+
<$button actions=<<delete-unused-tags>> tooltip="delete unused tags" class="tc-btn-invisible">
10+
{{$:/core/images/refresh-button}}
11+
</$button>
12+
</$list>

plugins/tiddlydesktop/WikiList.tid

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,33 @@
11
title: WikiList
22

3+
<p class="td-search">
4+
<$edit-text tiddler=<<qualify '$:/temp/WikiList/search'>> tag="input" class="tc-edit-texteditor" placeholder="search"/>
5+
6+
<$list filter="[<qualify '$:/temp/WikiList/search'>get[text]minlength[1]]">
7+
<$button class="tc-btn-invisible" tooltip="Clear search" set=<<qualify '$:/temp/WikiList/search'>> setTo="">{{$:/core/images/close-button}}</$button>
8+
</$list>
9+
</p>
10+
11+
<p class="td-tags">
12+
<$list filter="[prefix[$:/TiddlyDesktop/Config/wiki-tags/]tags[]]" variable="tag">
13+
<$button set=<<qualify '$:/temp/WikiList/search'>> setTo={{{ "[tag["[<tag>]"]]"+[join[]] }}} class="tc-tag-label tc-btn-invisible" style="background-color:;
14+
fill:#333333;
15+
color:#333333;"><<tag>></$button>
16+
</$list>
17+
18+
{{WikiList/ui/Buttons/DeleteUnusedTags}}
19+
</p>
20+
21+
<$let
22+
input={{{ [<qualify '$:/temp/WikiList/search'>get[text]] }}}
23+
textsearch="[prefix[$:/TiddlyDesktop/Config/title/]search<input>removeprefix[$:/TiddlyDesktop/Config/title/]]"
24+
filtersearch="[all[tiddlers]subfilter<input>removeprefix[$:/TiddlyDesktop/Config/wiki-tags/]tag[wikilist]] ~[all[tiddlers]subfilter<input>tag[wikilist]]"
25+
beginfilter="["
26+
filter={{{ [<input>minlength[3]]:map[search<beginfilter>then<filtersearch>else<textsearch>]~"[all[tiddlers]tag[wikilist]]" }}}
27+
>
28+
329
<div class="td-wikilist">
4-
<$macrocall $name="list-tagged-draggable" tag="wikilist" itemTemplate="WikiListRow" emptyMessage="Add a ~TiddlyWiki file or folder to get started.
30+
<$macrocall $name="list-tagged-draggable" subFilter="all[tiddlers]subfilter<filter>unique[]" itemTemplate="WikiListRow" emptyMessage="Add a ~TiddlyWiki file or folder to get started.
531

632
Click the buttons above to browse, or drag and drop from your file Explorer/Finder"/>
733
</div>

plugins/tiddlydesktop/WikiListRow.tid

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ remove
4747
advanced
4848
</$button>
4949
</div>
50+
<div class="td-wiki-toolbar-item">
51+
<$let storyTiddler="$:/TiddlyDesktop/Config/wiki-tags/$(currentTiddler)$">
52+
<$tiddler tiddler=<<storyTiddler>>>
53+
{{||WikiList/edit-tags-template}}
54+
</$tiddler>
55+
</$let>
56+
</div>
5057
</div>
5158
<$reveal type="nomatch" state="""$:/TiddlyDesktop/Config/advanced/$(currentTiddler)$""" text="">
5259
<div class="td-wiki-advanced tc-popup-handle">
@@ -88,4 +95,4 @@ Writers: <$edit-text tag="input" tiddler="""$:/TiddlyDesktop/Config/writers/$(cu
8895
</$draggable>
8996
\end
9097

91-
<<wikilist-row>>
98+
<<wikilist-row>>

0 commit comments

Comments
 (0)