nodebb-theme-harmony 3.0.6 → 3.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{{{ each breadcrumbs }}}{{{ if !@first}}},{
|
|
11
11
|
"@type": "ListItem",
|
|
12
12
|
"position": {increment(@index, "1")},
|
|
13
|
-
"name": "{
|
|
13
|
+
"name": "{{tx(./text)}}"
|
|
14
14
|
{{{ if !@last }}},"item": "{./url}"{{{ end }}}
|
|
15
15
|
}{{{ end }}}{{{ end }}}
|
|
16
16
|
]}</script>
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
<div class="d-flex flex-wrap gap-2 align-items-center" component="search/filters">
|
|
2
|
-
<!-- category filter -->
|
|
3
|
-
<div class="post-search-item">
|
|
4
|
-
<div component="category/filter" class="dropdown" data-filter-name="category">
|
|
5
|
-
<a component="category/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.categories.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
|
|
6
|
-
<span class="filter-label">{{{ if filters.categories.active }}}{tx(filters.categories.label)}{{{ else }}}[[search:categories]]{{{ end }}}</span>
|
|
7
|
-
<span class="caret text-primary opacity-75"></span>
|
|
8
|
-
</a>
|
|
9
|
-
|
|
10
|
-
<ul class="dropdown-menu p-1 text-sm" role="menu">
|
|
11
|
-
<li class="px-2 py-1 mb-2 d-flex flex-column gap-2">
|
|
12
|
-
<div component="category-selector-search">
|
|
13
|
-
<input type="text" class="form-control form-control-sm" component="category/filter/search" placeholder="[[search:type-a-category]]">
|
|
14
|
-
</div>
|
|
15
|
-
</li>
|
|
16
|
-
<div component="category/list" class="overflow-auto ghost-scrollbar" style="max-height: 350px;"></div>
|
|
17
|
-
<div class="px-3 py-1">
|
|
18
|
-
<div class="form-check">
|
|
19
|
-
<input id="search-children" class="form-check-input" type="checkbox"/>
|
|
20
|
-
<label class="form-check-label" for="search-children">[[search:search-child-categories]]</label>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
</ul>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
<!-- tag filter -->
|
|
29
|
-
<div class="post-search-item">
|
|
30
|
-
<div component="tag/filter" class="dropdown" data-filter-name="tag">
|
|
31
|
-
<a component="tag/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.tags.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
|
|
32
|
-
<span class="filter-label">{{{ if filters.tags.active }}}{{tx(filters.tags.label)}}{{{ else }}}[[search:tags]]{{{ end }}}</span>
|
|
33
|
-
<span class="caret text-primary opacity-75"></span>
|
|
34
|
-
</a>
|
|
35
|
-
|
|
36
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
|
|
37
|
-
<li class="px-2 py-1 d-flex flex-column gap-2">
|
|
38
|
-
<input type="text" class="form-control form-control-sm" component="tag/filter/search" placeholder="[[search:type-a-tag]]">
|
|
39
|
-
<div component="tag/filter/selected" class="d-flex flex-wrap gap-2">
|
|
40
|
-
{{{ each tagFilterSelected }}}
|
|
41
|
-
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
42
|
-
<div>{./value}</div>
|
|
43
|
-
<button component="tag/filter/delete" data-tag="{./value}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
44
|
-
</div>
|
|
45
|
-
{{{ end }}}
|
|
46
|
-
</div>
|
|
47
|
-
<hr class="my-2"/>
|
|
48
|
-
<div component="tag/filter/results" class="d-flex flex-wrap gap-2">
|
|
49
|
-
{{{ each tagFilterResults }}}
|
|
50
|
-
<button class="btn btn-light btn-sm border" data-tag="{./value}">{./value}</button>
|
|
51
|
-
{{{ end }}}
|
|
52
|
-
</div>
|
|
53
|
-
</li>
|
|
54
|
-
</ul>
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
<!-- user name filter -->
|
|
59
|
-
<div class="post-search-item">
|
|
60
|
-
<div component="user/filter" class="dropdown" data-filter-name="user">
|
|
61
|
-
<a component="user/filter/button" class="filter-btn btn btn-light btn-sm border {{{ if filters.users.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-haspopup="true" aria-expanded="false">
|
|
62
|
-
<span class="filter-label">{{{ if filters.users.active }}}{{tx(filters.users.label)}}{{{ else }}}[[search:posted-by]]{{{ end }}}</span>
|
|
63
|
-
<span class="caret text-primary opacity-75"></span>
|
|
64
|
-
</a>
|
|
65
|
-
|
|
66
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
|
|
67
|
-
<li class="px-2 py-1 d-flex flex-column gap-2">
|
|
68
|
-
<input type="text" class="form-control form-control-sm" component="user/filter/search" placeholder="[[search:type-a-username]]">
|
|
69
|
-
<div component="user/filter/selected" class="d-flex flex-wrap gap-2">
|
|
70
|
-
{{{ each userFilterSelected }}}
|
|
71
|
-
<div class="d-flex px-2 py-1 rounded-1 text-bg-primary gap-2 align-items-center text-sm">
|
|
72
|
-
{{buildAvatar(@value, "16px", true)}} {./username}
|
|
73
|
-
<button component="user/filter/delete" data-uid="{./uid}" class="btn btn-primary btn-sm py-0"><i class="fa fa-times fa-xs"></i></button>
|
|
74
|
-
</div>
|
|
75
|
-
{{{ end }}}
|
|
76
|
-
</div>
|
|
77
|
-
<hr class="my-2"/>
|
|
78
|
-
<div component="user/filter/results" class="d-flex flex-wrap gap-2">
|
|
79
|
-
{{{ each userFilterResults }}}
|
|
80
|
-
<button class="btn btn-light btn-sm border" data-uid="{./uid}" data-username="{./username}">{{buildAvatar(@value, "16px", true)}} {./username}</button>
|
|
81
|
-
{{{ end }}}
|
|
82
|
-
</div>
|
|
83
|
-
</li>
|
|
84
|
-
</ul>
|
|
85
|
-
</div>
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
<!-- reply count filter -->
|
|
90
|
-
<div class="post-search-item">
|
|
91
|
-
<div class="dropdown" data-filter-name="replies">
|
|
92
|
-
<a id="reply-count-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.replies.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
93
|
-
<span class="filter-label">{{{ if filters.replies.active }}}{tx(filters.replies.label)}{{{ else }}}[[search:replies]]{{{ end }}}</span>
|
|
94
|
-
<span class="caret text-primary opacity-75"></span>
|
|
95
|
-
</a>
|
|
96
|
-
|
|
97
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 300px;" role="menu">
|
|
98
|
-
<li class="px-2 py-1 d-flex flex-nowrap gap-2">
|
|
99
|
-
<select id="reply-count-filter" class="form-select form-select-sm">
|
|
100
|
-
<option value="atleast">[[search:at-least]]</option>
|
|
101
|
-
<option value="atmost">[[search:at-most]]</option>
|
|
102
|
-
</select>
|
|
103
|
-
<input id="reply-count" type="number" min="0" class="form-control form-control-sm" />
|
|
104
|
-
</li>
|
|
105
|
-
</ul>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
|
|
109
|
-
<!-- time filter -->
|
|
110
|
-
<div class="post-search-item">
|
|
111
|
-
<div class="dropdown" data-filter-name="time">
|
|
112
|
-
<a id="post-time-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.time.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
113
|
-
<span class="filter-label">{{{ if filters.time.active }}}{tx(filters.time.label)}{{{ else }}}[[search:time]]{{{ end }}}</span>
|
|
114
|
-
<span class="caret text-primary opacity-75"></span>
|
|
115
|
-
</a>
|
|
116
|
-
|
|
117
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;" role="menu">
|
|
118
|
-
<li class="px-2 py-1 d-flex flex-nowrap gap-2">
|
|
119
|
-
<select id="post-time-filter" class="form-select form-select-sm">
|
|
120
|
-
<option value="newer">[[search:newer-than]]</option>
|
|
121
|
-
<option value="older">[[search:older-than]]</option>
|
|
122
|
-
</select>
|
|
123
|
-
<select id="post-time-range" class="form-select form-select-sm">
|
|
124
|
-
<option value="">[[search:any-date]]</option>
|
|
125
|
-
<option value="86400">[[search:yesterday]]</option>
|
|
126
|
-
<option value="604800">[[search:one-week]]</option>
|
|
127
|
-
<option value="1209600">[[search:two-weeks]]</option>
|
|
128
|
-
<option value="2592000">[[search:one-month]]</option>
|
|
129
|
-
<option value="7776000">[[search:three-months]]</option>
|
|
130
|
-
<option value="15552000">[[search:six-months]]</option>
|
|
131
|
-
<option value="31104000">[[search:one-year]]</option>
|
|
132
|
-
</select>
|
|
133
|
-
</li>
|
|
134
|
-
</ul>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
|
|
138
|
-
<!-- sort filter -->
|
|
139
|
-
<div class="post-search-item">
|
|
140
|
-
<div class="dropdown" data-filter-name="sort">
|
|
141
|
-
<a id="sort-by-button" class="filter-btn btn btn-light btn-sm border {{{ if filters.sort.active }}}active-filter{{{ end }}} dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
142
|
-
<span class="filter-label">{{{ if filters.sort.active }}}{tx(filters.sort.label)}{{{ else }}}[[search:sort]]{{{ end }}}</span>
|
|
143
|
-
<span class="caret text-primary opacity-75"></span>
|
|
144
|
-
</a>
|
|
145
|
-
|
|
146
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 250px;" role="menu">
|
|
147
|
-
<li class="px-2 py-1 d-flex flex-column gap-2">
|
|
148
|
-
<select id="post-sort-by" class="form-select form-select-sm">
|
|
149
|
-
<option value="relevance">[[search:relevance]]</option>
|
|
150
|
-
<option value="timestamp">[[search:post-time]]</option>
|
|
151
|
-
<option value="votes">[[search:votes]]</option>
|
|
152
|
-
<option value="topic.lastposttime">[[search:last-reply-time]]</option>
|
|
153
|
-
<option value="topic.title">[[search:topic-title]]</option>
|
|
154
|
-
<option value="topic.postcount">[[search:number-of-replies]]</option>
|
|
155
|
-
<option value="topic.viewcount">[[search:number-of-views]]</option>
|
|
156
|
-
<option value="topic.votes">[[search:topic-votes]]</option>
|
|
157
|
-
<option value="topic.timestamp">[[search:topic-start-date]]</option>
|
|
158
|
-
<option value="user.username">[[search:username]]</option>
|
|
159
|
-
<option value="category.name">[[search:category]]</option>
|
|
160
|
-
</select>
|
|
161
|
-
<select id="post-sort-direction" class="form-select form-select-sm">
|
|
162
|
-
<option value="desc">[[search:descending]]</option>
|
|
163
|
-
<option value="asc">[[search:ascending]]</option>
|
|
164
|
-
</select>
|
|
165
|
-
</li>
|
|
166
|
-
</ul>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
|
|
170
|
-
<!-- save & reset preferences -->
|
|
171
|
-
<div class="post-search-item">
|
|
172
|
-
<div class="dropdown">
|
|
173
|
-
<a class="btn btn-light btn-sm border border-gray-300 dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">[[search:save]] <span class="caret text-primary opacity-75"></span>
|
|
174
|
-
</a>
|
|
175
|
-
|
|
176
|
-
<ul class="dropdown-menu p-1 text-sm" style="width: 300px;" role="menu">
|
|
177
|
-
<li class="px-2 py-1 d-flex flex-column gap-2">
|
|
178
|
-
<button id="save-preferences" class="btn btn-sm btn-primary">[[search:save-preferences]]</button>
|
|
179
|
-
<button id="clear-preferences" class="btn btn-sm btn-ghost border">[[search:clear-preferences]]</button>
|
|
180
|
-
</li>
|
|
181
|
-
</ul>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</div>
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{{{ if matchCount }}}
|
|
2
|
-
<div class="card card-header text-xs px-2 py-1 fw-semibold border-0 align-self-start">{{tx("search:results-matching", matchCount, txEscape(search_query), time)}}</div>
|
|
3
|
-
{{{ else }}}
|
|
4
|
-
{{{ if search_query }}}
|
|
5
|
-
<div class="badge text-bg-warning align-self-start">[[search:no-matches]]</div>
|
|
6
|
-
{{{ end }}}
|
|
7
|
-
{{{ end }}}
|
|
8
|
-
|
|
9
|
-
<div id="results" class="search-results" data-search-query="{search_query}">
|
|
10
|
-
{{{ if showAsPosts }}}
|
|
11
|
-
{{{ if posts.length }}}
|
|
12
|
-
<!-- IMPORT partials/posts_list.tpl -->
|
|
13
|
-
{{{ end }}}
|
|
14
|
-
{{{ end }}}
|
|
15
|
-
|
|
16
|
-
{{{ if showAsTopics }}}
|
|
17
|
-
{{{ each posts }}}
|
|
18
|
-
<hr/>
|
|
19
|
-
<div class="topic-row mb-3">
|
|
20
|
-
<a class="topic-title fw-semibold fs-5 text-reset text-break" href="{config.relative_path}/post/{encodeURIComponent(./pid)}">
|
|
21
|
-
{{{ if !./isMainPost }}}RE: {{{ end }}}{./topic.title}
|
|
22
|
-
</a>
|
|
23
|
-
<div class="post-body d-flex flex-column gap-1">
|
|
24
|
-
<div class="d-flex gap-3 post-info">
|
|
25
|
-
<div class="post-author d-flex gap-1">
|
|
26
|
-
<a class="lh-1 text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{{buildAvatar(./user, "16px", true, "not-responsive")}}</a>
|
|
27
|
-
<a class="fw-semibold text-sm" href="{config.relative_path}/user/{./user.userslug}">{./user.displayname}</a>
|
|
28
|
-
</div>
|
|
29
|
-
<span class="timeago text-sm text-muted" title="{./timestampISO}"></span>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
{{{ end }}}
|
|
34
|
-
{{{ end }}}
|
|
35
|
-
|
|
36
|
-
{{{ if users.length }}}
|
|
37
|
-
<!-- IMPORT partials/users_list.tpl -->
|
|
38
|
-
{{{ end }}}
|
|
39
|
-
|
|
40
|
-
{{{ if tags.length }}}
|
|
41
|
-
<div class="tag-list row row-cols-2 row-cols-lg-3 row-cols-xl-4 gx-3 gy-2">
|
|
42
|
-
<!-- IMPORT partials/tags_list.tpl -->
|
|
43
|
-
</div>
|
|
44
|
-
{{{ end }}}
|
|
45
|
-
|
|
46
|
-
{{{ if categories.length }}}
|
|
47
|
-
<ul class="categories list-unstyled">
|
|
48
|
-
{{{each categories}}}
|
|
49
|
-
<!-- IMPORT partials/categories/item.tpl -->
|
|
50
|
-
{{{end}}}
|
|
51
|
-
</ul>
|
|
52
|
-
{{{ end }}}
|
|
53
|
-
|
|
54
|
-
<!-- IMPORT partials/paginator.tpl -->
|
|
55
|
-
</div>
|
package/templates/search.tpl
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
<div class="search flex-fill">
|
|
2
|
-
<div id="advanced-search" class="d-flex flex-column flex-md-row">
|
|
3
|
-
<!-- sidebar -->
|
|
4
|
-
<div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3" style="flex-basis: 240px!important;">
|
|
5
|
-
<form action="{config.relative_path}/search" method="get" class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-3 pe-md-3" style="top: 1rem; z-index: 1;">
|
|
6
|
-
<h2 class="fw-semibold tracking-tight mb-0">[[global:search]]</h2>
|
|
7
|
-
|
|
8
|
-
<input id="search-input" name="term" type="text" class="form-control fw-semibold py-2 ps-2 pe-3" id="search-input" placeholder="[[search:type-to-search]]">
|
|
9
|
-
|
|
10
|
-
<select id="search-in" name="in" class="form-select text-sm py-2 ps-2 pe-3">
|
|
11
|
-
<option value="titlesposts">[[search:in-titles-posts]]</option>
|
|
12
|
-
<option value="titles">[[search:in-titles]]</option>
|
|
13
|
-
<option value="posts">[[search:in-posts]]</option>
|
|
14
|
-
<option value="bookmarks">[[search:in-bookmarks]]</option>
|
|
15
|
-
<option value="categories">[[search:in-categories]]</option>
|
|
16
|
-
{{{if privileges.search:users}}}
|
|
17
|
-
<option value="users">[[search:in-users]]</option>
|
|
18
|
-
{{{end}}}
|
|
19
|
-
{{{if privileges.search:tags}}}
|
|
20
|
-
<option value="tags">[[search:in-tags]]</option>
|
|
21
|
-
{{{end}}}
|
|
22
|
-
</select>
|
|
23
|
-
|
|
24
|
-
<select id="match-words-filter" name="matchWords" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
|
|
25
|
-
<option value="all">[[search:match-all-words]]</option>
|
|
26
|
-
<option value="any">[[search:match-any-word]]</option>
|
|
27
|
-
</select>
|
|
28
|
-
|
|
29
|
-
<select id="show-results-as" name="showAs" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
|
|
30
|
-
<option value="posts" selected>[[search:show-results-as-posts]]</option>
|
|
31
|
-
<option value="topics">[[search:show-results-as-topics]]</option>
|
|
32
|
-
</select>
|
|
33
|
-
|
|
34
|
-
<button type="submit" class="btn btn-primary fw-semibold form-control py-2 px-3">[[global:search]]</button>
|
|
35
|
-
</form>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<!-- filters and search results -->
|
|
39
|
-
<div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
|
|
40
|
-
<div class="d-flex flex-column gap-3">
|
|
41
|
-
<!-- IMPORT partials/search-filters.tpl -->
|
|
42
|
-
<!-- IMPORT partials/search-results.tpl -->
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
</div>
|