nodebb-theme-persona 13.0.66 → 13.0.68
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 +1 -1
- package/scss/chats.scss +0 -8
- package/templates/chat.tpl +1 -13
- package/templates/partials/category/filter-dropdown-content.tpl +4 -2
- package/templates/partials/chats/composer.tpl +13 -0
- package/templates/partials/chats/message-window.tpl +1 -13
- package/templates/partials/search-filters.tpl +184 -0
package/package.json
CHANGED
package/scss/chats.scss
CHANGED
package/templates/chat.tpl
CHANGED
|
@@ -26,19 +26,7 @@
|
|
|
26
26
|
<!-- IMPORT partials/chats/messages.tpl -->
|
|
27
27
|
</ul>
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
<div class="w-100 flex-grow-1 position-relative">
|
|
31
|
-
<textarea component="chat/input" placeholder="[[modules:chat.placeholder.mobile]]" class="form-control chat-input mousetrap" style="height:0;resize:none;"></textarea>
|
|
32
|
-
<span component="chat/message/remaining" class="text-xs text-muted position-absolute me-1 mb-1" style="right: 0px; bottom:0px;">{maximumChatMessageLength}</span>
|
|
33
|
-
</div>
|
|
34
|
-
<div class="d-flex justify-content-between align-self-stretch gap-2">
|
|
35
|
-
<button component="chat/upload/button" class="btn btn-light btn-sm align-self-end" type="button"><i class="fa fa-fw fa-upload"></i></button>
|
|
36
|
-
<button class="btn btn-primary btn-sm align-self-end" type="button" data-action="send"><i class="fa fa-fw fa-paper-plane"></i></button>
|
|
37
|
-
</div>
|
|
38
|
-
<form class="hidden" component="chat/upload" method="post" enctype="multipart/form-data">
|
|
39
|
-
<input type="file" name="files[]" multiple class="hidden"/>
|
|
40
|
-
</form>
|
|
41
|
-
</div>
|
|
29
|
+
<!-- IMPORT partials/chats/composer.tpl -->
|
|
42
30
|
</div>
|
|
43
31
|
<div class="imagedrop"><div>[[topic:composer.drag_and_drop_images]]</div></div>
|
|
44
32
|
</div>
|
|
@@ -12,15 +12,17 @@
|
|
|
12
12
|
<input type="text" class="form-control form-control-sm" placeholder="[[search:type-to-search]]" autocomplete="off">
|
|
13
13
|
</div>
|
|
14
14
|
<ul component="category/list" class="dropdown-menu category-dropdown-menu" role="menu">
|
|
15
|
-
<li role="presentation" class="category" data-
|
|
16
|
-
<a class="dropdown-item" role="menu-item" href="{config.relative_path}/{allCategoriesUrl}"><i component="category/select/icon" class="fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i> [[unread:all_categories]]</a>
|
|
15
|
+
<li role="presentation" class="category" data-cid="all">
|
|
16
|
+
<a class="dropdown-item" role="menu-item" href="{{{ if allCategoriesUrl }}}{config.relative_path}/{allCategoriesUrl}{{{ else }}}#{{{ end }}}"><i component="category/select/icon" class="fa fa-fw fa-check {{{if selectedCategory}}}invisible{{{end}}}"></i> [[unread:all_categories]]</a>
|
|
17
17
|
</li>
|
|
18
18
|
{{{each categoryItems}}}
|
|
19
19
|
<li role="presentation" class="category {{{ if ../disabledClass }}}disabled{{{ end }}}" data-cid="{../cid}" data-parent-cid="{../parentCid}" data-name="{../name}">
|
|
20
20
|
<a class="dropdown-item" role="menu-item" href="#">{../level}<i component="category/select/icon" class="fa fa-fw fa-check {{{ if !../selected }}}invisible{{{ end }}}"></i>
|
|
21
21
|
<span component="category-markup" style="{{{ if ../match }}}font-weight: bold;{{{end}}}">
|
|
22
22
|
<div class="category-item d-inline-block">
|
|
23
|
+
{{{ if ./icon}}}
|
|
23
24
|
{buildCategoryIcon(@value, "24px", "rounded-circle")}
|
|
25
|
+
{{{ end }}}
|
|
24
26
|
{./name}
|
|
25
27
|
</div>
|
|
26
28
|
</span>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div component="chat/composer" class="d-flex flex-column flex-md-row gap-2 border-top pt-2 align-items-start align-items-md-end">
|
|
2
|
+
<div class="w-100 flex-grow-1 flex-nowrap position-relative d-flex rounded-2 border border-secondary p-1 align-items-end">
|
|
3
|
+
<button component="chat/upload/button" class="btn btn-light btn-sm px-2 rounded-1" type="button"><i class="fa fa-fw fa-upload"></i></button>
|
|
4
|
+
<div class="flex-grow-1 align-self-center">
|
|
5
|
+
<textarea component="chat/input" placeholder="[[modules:chat.placeholder.mobile]]" class="bg-transparent text-body form-control chat-input mousetrap rounded-0 border-0 shadow-none ps-1 py-0" style="min-height: 1.5rem;height:0;max-height:30vh;resize:none;"></textarea>
|
|
6
|
+
</div>
|
|
7
|
+
<div component="chat/message/remaining" class="text-xs text-muted me-1">{maximumChatMessageLength}</div>
|
|
8
|
+
<button class="btn btn-primary btn-sm px-2 rounded-1" type="button" data-action="send"><i class="fa fa-fw fa-paper-plane"></i></button>
|
|
9
|
+
</div>
|
|
10
|
+
<form class="hidden" component="chat/upload" method="post" enctype="multipart/form-data">
|
|
11
|
+
<input type="file" name="files[]" multiple class="hidden"/>
|
|
12
|
+
</form>
|
|
13
|
+
</div>
|
|
@@ -18,19 +18,7 @@
|
|
|
18
18
|
<ul class="chat-content">
|
|
19
19
|
<!-- IMPORT partials/chats/messages.tpl -->
|
|
20
20
|
</ul>
|
|
21
|
-
|
|
22
|
-
<div class="w-100 flex-grow-1 position-relative">
|
|
23
|
-
<textarea component="chat/input" placeholder="[[modules:chat.placeholder.mobile]]" class="form-control chat-input mousetrap" style="height:0;resize:none;"></textarea>
|
|
24
|
-
<span component="chat/message/remaining" class="text-xs text-muted position-absolute me-1 mb-1" style="right: 0px; bottom:0px;">{maximumChatMessageLength}</span>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="d-flex justify-content-between align-self-stretch gap-2">
|
|
27
|
-
<button component="chat/upload/button" class="btn btn-light btn-sm align-self-end" type="button"><i class="fa fa-fw fa-upload"></i></button>
|
|
28
|
-
<button class="btn btn-primary btn-sm align-self-end" type="button" data-action="send"><i class="fa fa-fw fa-paper-plane"></i></button>
|
|
29
|
-
</div>
|
|
30
|
-
<form class="hidden" component="chat/upload" method="post" enctype="multipart/form-data">
|
|
31
|
-
<input type="file" name="files[]" multiple class="hidden"/>
|
|
32
|
-
</form>
|
|
33
|
-
</div>
|
|
21
|
+
<!-- IMPORT partials/chats/composer.tpl -->
|
|
34
22
|
</div>
|
|
35
23
|
<!-- ELSE -->
|
|
36
24
|
<div class="alert alert-info me-3">
|
|
@@ -0,0 +1,184 @@
|
|
|
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-expanded="false">
|
|
6
|
+
<span class="filter-label">{{{ if filters.categories.active }}}{filters.categories.label}{{{ else }}}[[search:categories]]{{{ end }}}</span>
|
|
7
|
+
<span class="caret"></span>
|
|
8
|
+
</a>
|
|
9
|
+
|
|
10
|
+
<ul class="dropdown-menu p-1 text-sm">
|
|
11
|
+
<li class="px-3 py-1 mb-2 d-flex flex-column gap-2">
|
|
12
|
+
<div component="category-selector-search">
|
|
13
|
+
<input type="text" class="form-control" component="category/filter/search" placeholder="[[search:type-a-category]]">
|
|
14
|
+
</div>
|
|
15
|
+
</li>
|
|
16
|
+
<div component="category/list" class="overflow-auto" 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-expanded="false">
|
|
32
|
+
<span class="filter-label">{{{ if filters.tags.active }}}{filters.tags.label}{{{ else }}}[[search:tags]]{{{ end }}}</span>
|
|
33
|
+
<span class="caret"></span>
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
|
|
37
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
38
|
+
<input type="text" class="form-control" 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>{./valueEscaped}</div>
|
|
43
|
+
<button component="tag/filter/delete" data-tag="{./valueEscaped}" 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/>
|
|
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="{./valueEscaped}">{./valueEscaped}</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-expanded="false">
|
|
62
|
+
<span class="filter-label">{{{ if filters.users.active }}}{filters.users.label}{{{ else }}}[[search:posted-by]]{{{ end }}}</span>
|
|
63
|
+
<span class="caret"></span>
|
|
64
|
+
</a>
|
|
65
|
+
|
|
66
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
|
|
67
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
68
|
+
<input type="text" class="form-control" 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/>
|
|
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-expanded="false">
|
|
93
|
+
<span class="filter-label">{{{ if filters.replies.active }}}{filters.replies.label}{{{ else }}}[[search:replies]]{{{ end }}}</span>
|
|
94
|
+
<span class="caret"></span>
|
|
95
|
+
</a>
|
|
96
|
+
|
|
97
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
|
|
98
|
+
<li class="px-3 py-1 d-flex flex-nowrap gap-2">
|
|
99
|
+
<select id="reply-count-filter" class="form-select py-2 ps-2 pe-3">
|
|
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 py-2 ps-2 pe-3" />
|
|
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-expanded="false">
|
|
113
|
+
<span class="filter-label">{{{ if filters.time.active }}}{filters.time.label}{{{ else }}}[[search:time]]{{{ end }}}</span>
|
|
114
|
+
<span class="caret"></span>
|
|
115
|
+
</a>
|
|
116
|
+
|
|
117
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 350px;">
|
|
118
|
+
<li class="px-3 py-1 d-flex flex-nowrap gap-2">
|
|
119
|
+
<select id="post-time-filter" class="form-select py-2 ps-2 pe-3">
|
|
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 py-2 ps-2 pe-3">
|
|
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-expanded="false">
|
|
142
|
+
<span class="filter-label">{{{ if filters.sort.active }}}{filters.sort.label}{{{ else }}}[[search:sort]]{{{ end }}}</span>
|
|
143
|
+
<span class="caret"></span>
|
|
144
|
+
</a>
|
|
145
|
+
|
|
146
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 250px;">
|
|
147
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
148
|
+
<select id="post-sort-by" class="form-select py-2 ps-2 pe-3">
|
|
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 py-2 ps-2 pe-3">
|
|
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-expanded="false">[[search:save]] <span class="caret"></span>
|
|
174
|
+
</a>
|
|
175
|
+
|
|
176
|
+
<ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
|
|
177
|
+
<li class="px-3 py-1 d-flex flex-column gap-2">
|
|
178
|
+
<button id="save-preferences" class="btn btn-primary">[[search:save-preferences]]</button>
|
|
179
|
+
<button id="clear-preferences" class="btn-outline border">[[search:clear-preferences]]</button>
|
|
180
|
+
</li>
|
|
181
|
+
</ul>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|