@jasonwch/nodebb-plugin-meilisearch-r 1.0.2 → 1.1.1

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.
@@ -86,19 +86,42 @@
86
86
  user-select: none;
87
87
  }
88
88
 
89
- /* Cap dropdown to roughly 3 result rows so it never overflows past the
90
- browser bottom bar when the composer is in half-screen mode. Activated
91
- only on composer dropdowns (data-meilisearch-decorated="1" set by
92
- static/lib/client/quick-search.js). */
89
+ /* Cap dropdown so it never overflows past the browser bottom bar when the
90
+ composer is in half-screen mode. Activated only on composer dropdowns
91
+ (data-meilisearch-decorated="1" set by static/lib/client/quick-search.js).
92
+ The max-height here is the single height control — the <ul> fills the
93
+ remaining space after the header and scrolls internally. */
93
94
  .quick-search-container[data-meilisearch-decorated="1"] {
94
- max-height: 320px;
95
+ max-height: 370px;
95
96
  overflow: hidden;
96
97
  display: flex;
97
98
  flex-direction: column;
98
99
  }
99
100
 
101
+ .quick-search-container[data-meilisearch-decorated="1"] .quick-search-results-container {
102
+ display: flex;
103
+ flex-direction: column;
104
+ flex: 1 1 auto;
105
+ min-height: 0;
106
+ overflow: hidden;
107
+ position: relative;
108
+ }
109
+
100
110
  .quick-search-container[data-meilisearch-decorated="1"] .quick-search-results {
101
111
  max-height: 260px !important;
102
112
  overflow: auto;
103
113
  flex: 1 1 auto;
114
+ min-height: 0;
115
+ padding-bottom: 2rem;
116
+ }
117
+
118
+ /* Overlay the desktop "See more results" button at lower-right corner of the
119
+ scrolling results. No gradient, no padding — just the bare button. */
120
+ .quick-search-container[data-meilisearch-decorated="1"] .quick-search-results-container > .text-center.mt-2.d-none.d-md-block {
121
+ position: absolute;
122
+ bottom: 0;
123
+ right: 0;
124
+ z-index: 10;
125
+ margin-top: 0 !important;
126
+ padding: 0;
104
127
  }
@@ -2,6 +2,6 @@
2
2
  <div class="form-group">
3
3
  <label for="rule">{{tx("meilisearch:admin.rankingRulesFormLabel")}}</label>
4
4
  <input type="text" id="rule" name="rule" class="form-control" placeholder="eg. cid:asc" />
5
- <p class="help-block">{{tx("meilisearch:admin.rankingRulesFormHelp")}} <a href="https://docs.meilisearch.com/learn/core_concepts/relevancy.html#custom-rules">https://docs.meilisearch.com/learn/core_concepts/relevancy.html#custom-rules</a></p>
5
+ <p class="help-block">{{tx("meilisearch:admin.rankingRulesFormHelp")}} <a href="https://docs.meilisearch.com/learn/core_concepts/relevancy.html#custom-rules" style="word-break: break-all;">https://docs.meilisearch.com/learn/core_concepts/relevancy.html#custom-rules</a></p>
6
6
  </div>
7
7
  </form>
@@ -2,6 +2,6 @@
2
2
  <div class="form-group">
3
3
  <label for="word">{{tx("meilisearch:admin.stopWordsFormLabel")}}</label>
4
4
  <input type="text" id="word" name="word" class="form-control" placeholder="the" />
5
- <p class="help-block">{{tx("meilisearch:admin.stopWordsFormHelp")}} <a href="https://docs.meilisearch.com/reference/api/settings.html#stop-words">https://docs.meilisearch.com/reference/api/settings.html#stop-words</a></p>
5
+ <p class="help-block">{{tx("meilisearch:admin.stopWordsFormHelp")}} <a href="https://docs.meilisearch.com/reference/api/settings.html#stop-words" style="word-break: break-all;">https://docs.meilisearch.com/reference/api/settings.html#stop-words</a></p>
6
6
  </div>
7
7
  </form>
@@ -1,184 +1,222 @@
1
- <div class="card">
2
- <div class="card-header">
3
- <h2 class="card-title">{{tx("meilisearch:admin.actions")}}</h2>
4
- </div>
5
- <div class="card-body">
6
- <div class="row">
7
- <div class="col-sm-2 col-xs-12 settings-header">{{tx("meilisearch:admin.index")}}</div>
8
- <div class="col-sm-10 col-xs-12">
9
- <div class="row">
10
- <div class="col-sm-{{{ if lastReindexResult.finishedAt }}}8{{{ else }}}12{{{ end }}} col-xs-12">
11
- <p class="help-block">{{tx("meilisearch:admin.reindexHelp")}}</p>
12
- <div class="reindex-actions">
13
- <button type="button" id="reindex" class="btn btn-danger btn-sm">{{tx("meilisearch:admin.reindex")}}</button>
14
- </div>
15
- <div class="text-center">
16
- <div class="checkbox force-reindex-container" id="reindex-force-container">
17
- <label for="force-reindex" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
18
- <input type="checkbox" class="mdl-switch__input" id="force-reindex" name="force-reindex">
19
- <span class="mdl-switch__label"><strong>{{tx("meilisearch:admin.forceReindex")}}</strong></span>
20
- </label>
1
+ <div class="acp-page-container">
2
+ <!-- IMPORT admin/partials/settings/header.tpl -->
3
+
4
+ <div class="row m-0">
5
+ <div id="spy-container" class="col-12 col-md-8 px-0 mb-4" tabindex="0">
6
+
7
+ <!-- 1. Index result -->
8
+ <div id="index-result" class="mb-4">
9
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.indexResult")}}</h5>
10
+ <div class="card text-xs">
11
+ <div class="card-header d-flex align-items-center justify-content-between">
12
+ <span class="fw-bold">{{tx("meilisearch:admin.lastReindex")}}</span>
13
+ {{{ if !lastReindexResult.finishedAt }}}
14
+ <span class="badge bg-secondary">{{tx("meilisearch:admin.lastReindexNever")}}</span>
15
+ {{{ else }}}
16
+ {{{ if lastReindexResult.success }}}
17
+ <span class="badge bg-success">{{tx("meilisearch:admin.lastReindexSuccess")}}</span>
18
+ {{{ else }}}
19
+ <span class="badge bg-danger">{{tx("meilisearch:admin.lastReindexFailed")}}</span>
20
+ {{{ end }}}
21
+ {{{ end }}}
22
+ </div>
23
+ <div class="card-body">
24
+ {{{ if lastReindexResult.finishedAt }}}
25
+ <p class="mb-3"><strong>{{tx("meilisearch:admin.lastReindexDate")}}:</strong> <span data-finished-at="{lastReindexResult.finishedAt}">&mdash;</span></p>
26
+ <div class="row g-3 mb-3">
27
+ <div class="col-6">
28
+ <strong>{{tx("meilisearch:admin.lastReindexTopics")}}</strong><br>
29
+ <span>{{lastReindexResult.topic_progress.current}}/{{lastReindexResult.topic_progress.total}}</span>
21
30
  </div>
22
- </div>
23
- <div class="col-sm-12 col-xs-12 reindex-progress-container {{{ if !indexing.running}}}hidden{{{end}}}">
24
- <h4 class="text-center">{{tx("meilisearch:admin.reindexTopicsProgress")}} <span id="topic-reindex-progress-text">{indexing.topic_progress.current}/{indexing.topic_progress.total}</span></h4>
25
- <div class="progress">
26
- <div id="topic-reindex-progress" class="progress-bar reindex-progress-bar" role="progressbar" aria-valuenow="{indexing.topic_progress.current}" aria-valuemin="0" aria-valuemax="{indexing.topic_progress.total}" style="width: {{{ if topicPercent }}}{topicPercent}%{{{ else }}}0%{{{ end }}};">
27
- {indexing.topic_progress.current}/{indexing.topic_progress.total}
28
- </div>
31
+ <div class="col-6">
32
+ <strong>{{tx("meilisearch:admin.lastReindexPosts")}}</strong><br>
33
+ <span>{{lastReindexResult.post_progress.current}}/{{lastReindexResult.post_progress.total}}</span>
29
34
  </div>
30
- </div>
31
- <div class="col-sm-12 col-xs-12 reindex-progress-container {{{ if !indexing.running}}}hidden{{{end}}}">
32
- <h4 class="text-center">{{tx("meilisearch:admin.reindexPostsProgress")}} <span id="post-reindex-progress-text">{indexing.post_progress.current}/{indexing.post_progress.total}</span></h4>
33
- <div class="progress">
34
- <div id="post-reindex-progress" class="progress-bar reindex-progress-bar" role="progressbar" aria-valuenow="{indexing.post_progress.current}" aria-valuemin="0" aria-valuemax="{indexing.post_progress.total}" style="width: {{{ if postPercent }}}{postPercent}%{{{ else }}}0%{{{ end }}};">
35
- {indexing.post_progress.current}/{indexing.post_progress.total}
36
- </div>
35
+ <div class="col-6">
36
+ <strong>{{tx("meilisearch:admin.lastReindexMessages")}}</strong><br>
37
+ <span>{{lastReindexResult.message_progress.current}}/{{lastReindexResult.message_progress.total}}</span>
37
38
  </div>
38
- </div>
39
- </div>
40
- {{{ if lastReindexResult.finishedAt }}}
41
- <div class="col-sm-4 col-xs-12">
42
- <h4 class="text-center last-reindex-title">{{tx("meilisearch:admin.lastReindex")}}</h4>
43
- <div class="table-responsive">
44
- <table class="table table-bordered table-condensed last-reindex-table">
45
- <tbody>
46
- <tr>
47
- <th>{{tx("meilisearch:admin.lastReindexDate")}}</th>
48
- <td><span data-finished-at="{lastReindexResult.finishedAt}">&mdash;</span></td>
49
- </tr>
50
- <tr>
51
- <th>{{tx("meilisearch:admin.lastReindexTopics")}}</th>
52
- <td>{lastReindexResult.topic_progress.current}/{lastReindexResult.topic_progress.total}</td>
53
- </tr>
54
- <tr>
55
- <th>{{tx("meilisearch:admin.lastReindexPosts")}}</th>
56
- <td>{lastReindexResult.post_progress.current}/{lastReindexResult.post_progress.total}</td>
57
- </tr>
39
+ {{{ if lastReindexResult.skippedSystemMessages }}}
40
+ <div class="col-6">
41
+ <strong>{{tx("meilisearch:admin.lastReindexSkippedSystemMessages")}}</strong><br>
42
+ <span>{{lastReindexResult.skippedSystemMessages}}</span>
43
+ </div>
44
+ {{{ end }}}
58
45
  {{{ if lastReindexResult.skippedDeletedTopics }}}
59
- <tr>
60
- <th>{{tx("meilisearch:admin.lastReindexSkippedDeletedTopics")}}</th>
61
- <td>{lastReindexResult.skippedDeletedTopics}</td>
62
- </tr>
46
+ <div class="col-6">
47
+ <strong>{{tx("meilisearch:admin.lastReindexSkippedDeletedTopics")}}</strong><br>
48
+ <span>{{lastReindexResult.skippedDeletedTopics}}</span>
49
+ </div>
63
50
  {{{ end }}}
64
51
  {{{ if lastReindexResult.skippedDeletedPosts }}}
65
- <tr>
66
- <th>{{tx("meilisearch:admin.lastReindexSkippedDeletedPosts")}}</th>
67
- <td>{lastReindexResult.skippedDeletedPosts}</td>
68
- </tr>
52
+ <div class="col-6">
53
+ <strong>{{tx("meilisearch:admin.lastReindexSkippedDeletedPosts")}}</strong><br>
54
+ <span>{{lastReindexResult.skippedDeletedPosts}}</span>
55
+ </div>
56
+ {{{ end }}}
57
+ {{{ if lastReindexResult.skippedDeletedMessages }}}
58
+ <div class="col-6">
59
+ <strong>{{tx("meilisearch:admin.lastReindexSkippedDeletedMessages")}}</strong><br>
60
+ <span>{{lastReindexResult.skippedDeletedMessages}}</span>
61
+ </div>
62
+ {{{ end }}}
63
+ {{{ if lastReindexResult.skippedOrphanMessages }}}
64
+ <div class="col-6">
65
+ <strong>{{tx("meilisearch:admin.lastReindexSkippedOrphanMessages")}}</strong><br>
66
+ <span>{{lastReindexResult.skippedOrphanMessages}}</span>
67
+ </div>
69
68
  {{{ end }}}
70
- <tr>
71
- <th>{{tx("meilisearch:admin.lastReindexStatus")}}</th>
72
- <td>
73
- {{{ if lastReindexResult.success }}}
74
- <span class="label label-success">{{tx("meilisearch:admin.lastReindexSuccess")}}</span>
75
- {{{ else }}}
76
- <span class="label label-danger">{{tx("meilisearch:admin.lastReindexFailed")}}</span>
77
- {{{ end }}}
78
- </td>
79
- </tr>
80
- {{{ if lastReindexResult.error }}}
81
- <tr>
82
- <th>{{tx("meilisearch:admin.lastReindexError")}}</th>
83
- <td class="text-danger">{lastReindexResult.error}</td>
84
- </tr>
85
- {{{ end }}}
86
- </tbody>
87
- </table>
88
69
  </div>
70
+
71
+ {{{ if lastReindexResult.error }}}
72
+ <div class="text-danger">
73
+ <strong>{{tx("meilisearch:admin.lastReindexError")}}:</strong> {lastReindexResult.error}
74
+ </div>
75
+ {{{ end }}}
76
+ {{{ else }}}
77
+ <p class="text-muted mb-3">{{tx("meilisearch:admin.lastReindexNever")}}</p>
78
+ {{{ end }}}
89
79
  </div>
90
- {{{ end }}}
91
80
  </div>
92
81
  </div>
93
- </div>
94
- </div>
95
- </div>
96
- <div class="card">
97
- <div class="card-header">
98
- <h2 class="card-title">{{tx("meilisearch:admin.settings")}}</h2>
99
- </div>
100
- <div class="card-body">
101
- <form role="form" class="meilisearch-settings">
102
- <div class="row">
103
- <div class="col-sm-2 col-xs-12 settings-header">{{tx("meilisearch:admin.connection")}}</div>
104
- <div class="col-sm-10 col-xs-12">
105
- <div class="form-group">
106
- <label for="host">{{tx("meilisearch:admin.host")}}</label>
82
+
83
+ <!-- 2. Index action -->
84
+ <div id="index-action" class="mb-4">
85
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.indexAction")}}</h5>
86
+ <p class="form-text">{{tx("meilisearch:admin.reindexHelp")}}</p>
87
+ <div class="reindex-actions mb-3">
88
+ <button type="button" id="reindex" class="btn btn-danger btn-sm">{{tx("meilisearch:admin.reindex")}}</button>
89
+ </div>
90
+ <div class="d-flex justify-content-center align-items-center mb-3 force-reindex-container" id="reindex-force-container">
91
+ <div class="form-check form-switch mb-0">
92
+ <input class="form-check-input" type="checkbox" id="force-reindex" name="force-reindex">
93
+ <label class="form-check-label" for="force-reindex"><strong>{{tx("meilisearch:admin.forceReindex")}}</strong></label>
94
+ </div>
95
+ </div>
96
+ <div class="reindex-progress-container {{{ if !indexing.running}}}hidden{{{end}}}">
97
+ <h6 class="text-center">{{tx("meilisearch:admin.reindexTopicsProgress")}} <span id="topic-reindex-progress-text">{indexing.topic_progress.current}/{indexing.topic_progress.total}</span></h6>
98
+ <div class="progress mb-3">
99
+ <div id="topic-reindex-progress" class="progress-bar reindex-progress-bar" role="progressbar" aria-valuenow="{indexing.topic_progress.current}" aria-valuemin="0" aria-valuemax="{indexing.topic_progress.total}" style="width: {{{ if topicPercent }}}{topicPercent}%{{{ else }}}0%{{{ end }}};">
100
+ {indexing.topic_progress.current}/{indexing.topic_progress.total}
101
+ </div>
102
+ </div>
103
+ <h6 class="text-center">{{tx("meilisearch:admin.reindexPostsProgress")}} <span id="post-reindex-progress-text">{indexing.post_progress.current}/{indexing.post_progress.total}</span></h6>
104
+ <div class="progress mb-3">
105
+ <div id="post-reindex-progress" class="progress-bar reindex-progress-bar" role="progressbar" aria-valuenow="{indexing.post_progress.current}" aria-valuemin="0" aria-valuemax="{indexing.post_progress.total}" style="width: {{{ if postPercent }}}{postPercent}%{{{ else }}}0%{{{ end }}};">
106
+ {indexing.post_progress.current}/{indexing.post_progress.total}
107
+ </div>
108
+ </div>
109
+ <h6 class="text-center">{{tx("meilisearch:admin.reindexMessagesProgress")}} <span id="message-reindex-progress-text">{indexing.message_progress.current}/{indexing.message_progress.total}</span></h6>
110
+ <div class="progress mb-3">
111
+ <div id="message-reindex-progress" class="progress-bar reindex-progress-bar" role="progressbar" aria-valuenow="{indexing.message_progress.current}" aria-valuemin="0" aria-valuemax="{indexing.message_progress.total}" style="width: {{{ if messagePercent }}}{messagePercent}%{{{ else }}}0%{{{ end }}};">
112
+ {indexing.message_progress.current}/{indexing.message_progress.total}
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+
118
+ <!-- Settings form -->
119
+ <form role="form" class="meilisearch-settings">
120
+
121
+ <!-- 3. Connection settings -->
122
+ <div id="connection-settings" class="mb-4">
123
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.connection")}}</h5>
124
+ <div class="mb-3">
125
+ <label class="form-label" for="host">{{tx("meilisearch:admin.host")}}</label>
107
126
  <input type="text" id="host" name="host" title="Host" class="form-control" placeholder="http://localhost:7700">
108
127
  </div>
109
- <div class="form-group">
110
- <label for="apiKey">{{tx("meilisearch:admin.apiKey")}}</label>
128
+ <div class="mb-3">
129
+ <label class="form-label" for="apiKey">{{tx("meilisearch:admin.apiKey")}}</label>
111
130
  <input type="password" id="apiKey" name="apiKey" title="API Key" class="form-control" placeholder="*****">
112
131
  </div>
113
- <div class="form-group">
114
- <label for="healthCheckInterval">{{tx("meilisearch:admin.healthCheckInterval")}}</label>
132
+ <div class="mb-3">
133
+ <label class="form-label" for="healthCheckInterval">{{tx("meilisearch:admin.healthCheckInterval")}}</label>
115
134
  <input type="number" id="healthCheckInterval" name="healthCheckInterval" title="Health Check Interval" class="form-control" placeholder="60">
116
135
  </div>
117
136
  </div>
118
- </div>
119
137
 
120
- <br />
121
-
122
- <div class="row">
123
- <div class="col-sm-2 col-xs-12 settings-header">{{tx("meilisearch:admin.search")}}</div>
124
- <div class="col-sm-10 col-xs-12">
125
- <div class="form-group">
126
- <label for="maxDocuments">{{tx("meilisearch:admin.maxDocuments")}}</label>
138
+ <!-- 4. Search options -->
139
+ <div id="search-options" class="mb-4">
140
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.search")}}</h5>
141
+ <div class="mb-3">
142
+ <label class="form-label" for="maxDocuments">{{tx("meilisearch:admin.maxDocuments")}}</label>
127
143
  <input type="number" id="maxDocuments" name="maxDocuments" title="Max Documents" class="form-control" placeholder="500">
144
+ <p class="form-text">
145
+ <span class="text-danger fw-bold fst-italic">({{tx("meilisearch:admin.perRoomSearchLimit")}})</span>
146
+ </p>
147
+ </div>
148
+ <div class="mb-3">
149
+ <div class="form-check form-switch">
150
+ <input class="form-check-input" type="checkbox" id="globalChatSearchEnabled" name="globalChatSearchEnabled">
151
+ <label class="form-check-label" for="globalChatSearchEnabled"><strong>{{tx("meilisearch:admin.globalChatSearchEnabled")}}</strong></label>
128
152
  </div>
129
- <div class="form-group">
130
- <label for="searchMinTermLength">{{tx("meilisearch:admin.searchMinTermLength")}}</label>
153
+ <p class="form-text" id="globalChatSearchLimitNotice" style="display:none;">
154
+ <span class="text-danger fw-bold fst-italic">({{tx("meilisearch:admin.globalChatSearchLimit")}})</span>
155
+ </p>
156
+ </div>
157
+ <div class="mb-3">
158
+ <label class="form-label" for="searchMinTermLength">{{tx("meilisearch:admin.searchMinTermLength")}}</label>
131
159
  <input type="number" id="searchMinTermLength" name="searchMinTermLength" min="2" title="{{tx("meilisearch:admin.searchMinTermLength")}}" class="form-control" placeholder="2">
132
- <p class="help-block">{{tx("meilisearch:admin.searchMinTermLengthHelp")}}</p>
160
+ <p class="form-text">{{tx("meilisearch:admin.searchMinTermLengthHelp")}}</p>
133
161
  </div>
162
+ </div>
163
+
164
+ <!-- 5. Ranking rules -->
165
+ <div id="ranking-rules" class="mb-4">
166
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.rankingRules")}}</h5>
167
+ <p class="form-text">{{tx("meilisearch:admin.rankingRulesHelp")}} <a href="https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules" style="word-break: break-all;">https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules</a></p>
134
168
  <div class="form-group" data-type="sorted-list" data-sorted-list="rankingRules" data-item-template="admin/plugins/meilisearch/partials/rankingRules/item" data-form-template="admin/plugins/meilisearch/partials/rankingRules/form">
135
- <label for="rankingRulesList">{{tx("meilisearch:admin.rankingRules")}}</label>
136
- <p class="help-block">{{tx("meilisearch:admin.rankingRulesHelp")}} <a href="https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules">https://docs.meilisearch.com/learn/core_concepts/relevancy.html#ranking-rules</a></p>
137
169
  <ul name="rankingRulesList" data-type="list" class="list-group"></ul>
138
170
  <button type="button" data-type="add" class="btn btn-info">{{tx("meilisearch:admin.addRankingRule")}}</button>
139
171
  </div>
172
+ </div>
173
+
174
+ <!-- 6. Stop words -->
175
+ <div id="stop-words" class="mb-4">
176
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.stopWords")}}</h5>
177
+ <p class="form-text">{{tx("meilisearch:admin.stopWordsHelp")}} <a href="https://docs.meilisearch.com/reference/api/settings.html#get-stop-words" style="word-break: break-all;">https://docs.meilisearch.com/reference/api/settings.html#get-stop-words</a></p>
140
178
  <div class="form-group" data-type="sorted-list" data-sorted-list="stopWords" data-item-template="admin/plugins/meilisearch/partials/stopWords/item" data-form-template="admin/plugins/meilisearch/partials/stopWords/form">
141
- <label for="stopWordsList">{{tx("meilisearch:admin.stopWords")}}</label>
142
- <p class="help-block">{{tx("meilisearch:admin.stopWordsHelp")}} <a href="https://docs.meilisearch.com/reference/api/settings.html#get-stop-words">https://docs.meilisearch.com/reference/api/settings.html#get-stop-words</a></p>
143
179
  <ul name="stopWordsList" data-type="list" class="list-group"></ul>
144
180
  <button type="button" data-type="add" class="btn btn-info">{{tx("meilisearch:admin.addStopWord")}}</button>
145
181
  </div>
182
+ </div>
183
+
184
+ <!-- 7. Synonyms -->
185
+ <div id="synonyms" class="mb-4">
186
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.synonyms")}}</h5>
187
+ <p class="form-text">{{tx("meilisearch:admin.synonymsHelp")}} <a href="https://docs.meilisearch.com/learn/configuration/synonyms.html" style="word-break: break-all;">https://docs.meilisearch.com/learn/configuration/synonyms.html</a></p>
146
188
  <div class="form-group" data-type="sorted-list" data-sorted-list="synonyms" data-item-template="admin/plugins/meilisearch/partials/synonyms/item" data-form-template="admin/plugins/meilisearch/partials/synonyms/form">
147
- <label for="synonymsList">{{tx("meilisearch:admin.synonyms")}}</label>
148
- <p class="help-block">{{tx("meilisearch:admin.synonymsHelp")}} <a href="https://docs.meilisearch.com/learn/configuration/synonyms.html">https://docs.meilisearch.com/learn/configuration/synonyms.html</a></p>
149
189
  <ul name="synonymsList" data-type="list" class="list-group"></ul>
150
190
  <button type="button" data-type="add" class="btn btn-info">{{tx("meilisearch:admin.addSynonym")}}</button>
151
191
  </div>
152
192
  </div>
153
- </div>
154
- <div class="row">
155
- <div class="col-sm-2 col-xs-12 settings-header">{{tx("meilisearch:admin.typoTolerance")}}</div>
156
- <div class="col-sm-10 col-xs-12">
157
- <div class="checkbox" id="typoTolerance-container">
158
- <label for="typoTolerance" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
159
- <input type="checkbox" class="mdl-switch__input" id="typoTolerance" name="typoTolerance">
160
- <span class="mdl-switch__label"><strong>{{tx("meilisearch:admin.typoToleranceEnable")}}</strong></span>
161
- </label>
162
- </div>
163
- <div class="form-group">
164
- <label for="typoToleranceMinWordSizeOneTypo">{{tx("meilisearch:admin.typoToleranceMinWordSizeOneTypo")}}</label>
193
+
194
+ <!-- 8. Typo tolerance -->
195
+ <div id="typo-tolerance" class="mb-4">
196
+ <h5 class="fw-bold tracking-tight settings-header">{{tx("meilisearch:admin.typoTolerance")}}</h5>
197
+ <div class="form-check form-switch mb-3" id="typoTolerance-container">
198
+ <input class="form-check-input" type="checkbox" id="typoTolerance" name="typoTolerance">
199
+ <label class="form-check-label" for="typoTolerance"><strong>{{tx("meilisearch:admin.typoToleranceEnable")}}</strong></label>
200
+ </div>
201
+ <div class="mb-3">
202
+ <label class="form-label" for="typoToleranceMinWordSizeOneTypo">{{tx("meilisearch:admin.typoToleranceMinWordSizeOneTypo")}}</label>
165
203
  <input type="number" id="typoToleranceMinWordSizeOneTypo" name="typoToleranceMinWordSizeOneTypo" title="Typo Tolerance Min Word Size One Typo" class="form-control" placeholder="5">
166
204
  </div>
167
- <div class="form-group">
168
- <label for="typoToleranceMinWordSizeTwoTypos">{{tx("meilisearch:admin.typoToleranceMinWordSizeTwoTypos")}}</label>
205
+ <div class="mb-3">
206
+ <label class="form-label" for="typoToleranceMinWordSizeTwoTypos">{{tx("meilisearch:admin.typoToleranceMinWordSizeTwoTypos")}}</label>
169
207
  <input type="number" id="typoToleranceMinWordSizeTwoTypos" name="typoToleranceMinWordSizeTwoTypos" title="Typo Tolerance Min Word Size Two Typos" class="form-control" placeholder="9">
170
208
  </div>
209
+ <p class="form-text">{{tx("meilisearch:admin.typoToleranceDisableOnWordsHelp")}} <a href="https://docs.meilisearch.com/learn/configuration/typo_tolerance.html#disableonwords" style="word-break: break-all;">https://docs.meilisearch.com/learn/configuration/typo_tolerance.html#disableonwords</a></p>
171
210
  <div class="form-group" data-type="sorted-list" data-sorted-list="typoToleranceDisableOnWords" data-item-template="admin/plugins/meilisearch/partials/typoToleranceDisableOnWords/item" data-form-template="admin/plugins/meilisearch/partials/typoToleranceDisableOnWords/form">
172
- <label for="typoToleranceDisableOnWordsList">{{tx("meilisearch:admin.typoToleranceDisableOnWords")}}</label>
173
- <p class="help-block">{{tx("meilisearch:admin.typoToleranceDisableOnWordsHelp")}} <a href="https://docs.meilisearch.com/learn/configuration/typo_tolerance.html#disableonwords">https://docs.meilisearch.com/learn/configuration/typo_tolerance.html#disableonwords</a></p>
211
+ <label class="form-label" for="typoToleranceDisableOnWordsList">{{tx("meilisearch:admin.typoToleranceDisableOnWords")}}</label>
174
212
  <ul name="typoToleranceDisableOnWordsList" data-type="list" class="list-group"></ul>
175
213
  <button type="button" data-type="add" class="btn btn-info">{{tx("meilisearch:admin.addTypoToleranceDisabledWord")}}</button>
176
214
  </div>
177
215
  </div>
178
- </div>
179
- </form>
180
- <button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
181
- <i class="material-icons">{{tx("meilisearch:admin.save")}}</i>
182
- </button>
216
+
217
+ </form>
218
+ </div>
219
+
220
+ <!-- IMPORT admin/partials/settings/toc.tpl -->
183
221
  </div>
184
222
  </div>
@@ -0,0 +1,9 @@
1
+ <div id="global-chat-search-container" data-plugin="meilisearch" style="padding: 10px; background-color: var(--bs-body-bg); border-bottom: 1px solid var(--bs-border-color); margin-bottom: 5px;">
2
+ <div class="input-group">
3
+ <input type="text" id="global-chat-search" class="form-control" placeholder="{placeholder}" style="font-size: 14px; height: 34px;">
4
+ <span class="input-group-btn">
5
+ <button class="btn btn-primary" id="btn-chat-search" type="button" style="height: 34px;"><i class="fa fa-search"></i></button>
6
+ </span>
7
+ </div>
8
+ <div id="global-search-results" class="chats-list overflow-auto ghost-scrollbar" style="margin-top: 5px; max-height: 400px; display:none;"></div>
9
+ </div>
@@ -0,0 +1,38 @@
1
+ <div class="d-flex flex-column">
2
+ {{{each messages}}}
3
+ <div component="chat/search/result" class="rounded-1 search-result" data-roomid="{messages.roomId}">
4
+ <div class="d-flex gap-1 justify-content-between">
5
+ <a href="{messages.chatLink}" onclick="ajaxify.go('{messages.chatLink}'); return false;" class="chat-room-btn position-relative d-flex flex-grow-1 gap-2 justify-content-start align-items-start btn btn-ghost btn-sm ff-sans text-start" style="padding: 0.5rem;">
6
+
7
+ <div class="main-avatar">
8
+ {{{ if messages.mainParticipant }}}
9
+ {{buildAvatar(messages.mainParticipant, "32px", true)}}
10
+ {{{ else }}}
11
+ <span class="avatar avatar-rounded" style="--avatar-size: 32px; width:32px; height:32px; background-color: var(--bs-tertiary-bg)">?</span>
12
+ {{{ end }}}
13
+ </div>
14
+
15
+ <div class="d-flex flex-grow-1 flex-column w-100" style="min-width:0;">
16
+ <div component="chat/room/title" class="room-name fw-semibold text-xs text-break">
17
+ {messages.roomName}
18
+ </div>
19
+ <div component="chat/room/teaser">
20
+
21
+ <div class="teaser-content text-sm line-clamp-3 text-break mb-0">
22
+ {{buildAvatar(messages.user, "14px", true, "align-middle")}}
23
+ <strong class="text-xs fw-semibold teaser-username">{messages.senderName}:</strong>
24
+ {messages.cleanedContent}
25
+ </div>
26
+
27
+ <div class="teaser-timestamp text-muted text-xs" style="margin-top: 2px; line-height: 1;">
28
+ <span class="timeago" title="{messages.isoTime}"></span>
29
+ </div>
30
+
31
+ </div>
32
+ </div>
33
+ </a>
34
+ </div>
35
+ </div>
36
+ <hr class="my-1">
37
+ {{{end}}}
38
+ </div>