nodebb-theme-harmony 1.0.37 → 1.0.39

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "1.0.37",
3
+ "version": "1.0.39",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.0.0"
6
6
  },
package/public/harmony.js CHANGED
@@ -223,9 +223,18 @@ $(document).ready(function () {
223
223
  // remove title from user icon in sidebar to prevent double tooltip
224
224
  $('.sidebar [component="header/avatar"] .avatar').removeAttr('title');
225
225
  const tooltipEls = $('.sidebar [title]');
226
- tooltipEls.tooltip({
226
+ const lefttooltipEls = $('.sidebar-left [title]');
227
+ const rightooltipEls = $('.sidebar-right [title]');
228
+ const isRtl = $('html').attr('data-dir') === 'rtl';
229
+ lefttooltipEls.tooltip({
227
230
  trigger: 'manual',
228
231
  animation: false,
232
+ placement: isRtl ? 'left' : 'right',
233
+ });
234
+ rightooltipEls.tooltip({
235
+ trigger: 'manual',
236
+ animation: false,
237
+ placement: isRtl ? 'right' : 'left',
229
238
  });
230
239
 
231
240
  tooltipEls.on('mouseenter', function (ev) {
package/screenshot.png ADDED
Binary file
package/scss/common.scss CHANGED
@@ -83,7 +83,7 @@ body:not(.page-user) {
83
83
  z-index: 3;
84
84
  top: 0;
85
85
  padding: 0.25rem 0;
86
- background-color: $body-bg;
86
+ background-color: var(--bs-body-bg);
87
87
  }
88
88
  // quartz doesn't need body-bg for tool background
89
89
  .skin-quartz .sticky-tools {
package/scss/groups.scss CHANGED
@@ -16,14 +16,6 @@
16
16
  .groups.details {
17
17
  margin-top: 200px;
18
18
 
19
- [component="groups/members"] {
20
- tbody {
21
- max-height: 500px;
22
- display: block;
23
- overflow-y: auto;
24
- }
25
- }
26
-
27
19
  @include media-breakpoint-up(md) {
28
20
  margin-top: 300px;
29
21
  }
package/scss/topic.scss CHANGED
@@ -46,6 +46,20 @@
46
46
  [component="post/content"] {
47
47
  @include fix-lists();
48
48
 
49
+ > blockquote {
50
+ > blockquote {
51
+ > *:not(.blockquote) {
52
+ display: none;
53
+ }
54
+ }
55
+
56
+ > blockquote.uncollapsed {
57
+ > *:not(.blockquote) {
58
+ display: block;
59
+ }
60
+ }
61
+ }
62
+
49
63
  pre {
50
64
  max-height: calc($font-size-base * 24);
51
65
  }
@@ -13,21 +13,21 @@
13
13
  <button type="button" class="btn btn-primary btn-sm float-end" component="groups/members/bulk-invite-button">[[groups:bulk-invite]]</button>
14
14
  </div>
15
15
 
16
- <table component="groups/invited" class="table table-hover">
17
- {{{ if !group.invited.length }}}
18
- <div class="alert alert-info">[[groups:invited.none]]</div>
19
- {{{ end }}}
20
- {{{each group.invited}}}
21
- <tr data-uid="{group.invited.uid}" class="align-middle">
22
- <td class="p-2">
23
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.invited.userslug}">{buildAvatar(group.invited, "24px", true)}</a>
24
- </td>
25
- <td class="member-name p-2 w-100">
26
- <a href="{config.relative_path}/user/{group.invited.userslug}">{group.invited.username}</a>
27
- </td>
28
- <td class="p-2">
29
- <button class="btn btn-outline-secondary btn-sm text-nowrap" data-action="rescindInvite">[[groups:invited.uninvite]]</button>
30
- </td>
31
- </tr>
32
- {{{end}}}
33
- </table>
16
+ <div style="max-height: 500px; overflow: auto;">
17
+ <table component="groups/invited" class="table table-hover">
18
+ {{{ if !group.invited.length }}}
19
+ <div class="alert alert-info">[[groups:invited.none]]</div>
20
+ {{{ end }}}
21
+ {{{each group.invited}}}
22
+ <tr data-uid="{group.invited.uid}" class="align-middle">
23
+ <td class="member-name p-2 d-flex align-items-center justify-content-between">
24
+ <div class="d-flex align-items-center gap-2">
25
+ <a class="text-decoration-none" href="{config.relative_path}/user/{group.invited.userslug}">{buildAvatar(group.invited, "24px", true)}</a>
26
+ <a href="{config.relative_path}/user/{group.invited.userslug}">{group.invited.username}</a>
27
+ </div>
28
+ <button class="btn btn-outline-secondary btn-sm text-nowrap" data-action="rescindInvite">[[groups:invited.uninvite]]</button>
29
+ </td>
30
+ </tr>
31
+ {{{end}}}
32
+ </table>
33
+ </div>
@@ -14,34 +14,34 @@
14
14
  </div>
15
15
  </div>
16
16
 
17
- <table component="groups/members" class="table table-hover" data-nextstart="{group.membersNextStart}">
18
- <tbody>
19
- {{{each group.members}}}
20
- <tr data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
21
- <td class="p-2">
22
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
23
- </td>
24
- <td class="member-name p-2 w-100 ">
25
- <div class="d-flex align-items-center justify-content-between">
26
- <div class="d-flex align-items-center gap-2">
27
- <a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
28
- <i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning {{{ if !group.members.isOwner }}}invisible{{{ end }}}"></i>
29
- </div>
17
+ <div style="max-height: 500px; overflow: auto;">
18
+ <table component="groups/members" class="table table-hover" data-nextstart="{group.membersNextStart}">
19
+ <tbody>
20
+ {{{each group.members}}}
21
+ <tr class="w-100" data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
22
+ <td class="member-name p-2 w-100 ">
23
+ <div class="d-flex align-items-center justify-content-between">
24
+ <div class="d-flex align-items-center gap-2">
25
+ <a class="text-decoration-none" href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
26
+ <a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
27
+ <i component="groups/owner/icon" title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning {{{ if !group.members.isOwner }}}invisible{{{ end }}}"></i>
28
+ </div>
30
29
 
31
- {{{ if group.isOwner }}}
32
- <div class="owner-controls btn-group">
33
- <a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
34
- <i class="fa fa-star"></i>
35
- </a>
30
+ {{{ if group.isOwner }}}
31
+ <div class="owner-controls d-flex gap-1">
32
+ <a class="btn btn-light btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
33
+ <i class="fa fa-star text-warning"></i>
34
+ </a>
36
35
 
37
- <a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
38
- <i class="fa fa-ban"></i>
39
- </a>
40
- </div>
41
- {{{ end }}}
42
- </div>
43
- </td>
44
- </tr>
45
- {{{end}}}
46
- </tbody>
47
- </table>
36
+ <a class="btn btn-light btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
37
+ <i class="fa fa-ban text-danger"></i>
38
+ </a>
39
+ </div>
40
+ {{{ end }}}
41
+ </div>
42
+ </td>
43
+ </tr>
44
+ {{{end}}}
45
+ </tbody>
46
+ </table>
47
+ </div>
@@ -6,25 +6,24 @@
6
6
  </div>
7
7
  {{{ end }}}
8
8
 
9
- <table component="groups/pending" class="table table-hover">
9
+ <div style="max-height: 500px;overflow: auto;">
10
+ <table component="groups/pending" class="table table-hover">
10
11
  {{{ if !group.pending.length }}}
11
12
  <div class="alert alert-info">[[groups:pending.none]]</div>
12
13
  {{{ end }}}
13
14
  {{{each group.pending}}}
14
15
  <tr data-uid="{group.pending.uid}" class="align-middle">
15
- <td class="p-2">
16
- <a class="text-decoration-none" href="{config.relative_path}/user/{group.pending.userslug}">{buildAvatar(group.pending, "24px", true)}</a>
17
- </td>
18
- <td class="member-name p-2 w-100">
19
- <a href="{config.relative_path}/user/{group.pending.userslug}">{group.pending.username}</a>
20
- </td>
21
- <td class="p-2">
16
+ <td class="member-name p-2 d-flex align-items-center justify-content-between">
17
+ <div class="d-flex gap-2">
18
+ <a class="text-decoration-none" href="{config.relative_path}/user/{group.pending.userslug}">{buildAvatar(group.pending, "24px", true)}</a>
19
+ <a href="{config.relative_path}/user/{group.pending.userslug}">{group.pending.username}</a>
20
+ </div>
22
21
  <div class="d-flex gap-2">
23
22
  <button class="btn btn-danger btn-sm" data-action="reject">[[groups:pending.reject]]</a></li>
24
23
  <button class="btn btn-success btn-sm" data-action="accept">[[groups:pending.accept]]</a></li>
25
-
26
24
  </div>
27
25
  </td>
28
26
  </tr>
29
27
  {{{end}}}
30
- </table>
28
+ </table>
29
+ </div>
@@ -27,10 +27,10 @@
27
27
  <i class="fa fa-lock"></i>
28
28
  [[topic:locked]]
29
29
  </span>
30
- <span class="badge badge border border-gray-300 text-primary {{{ if !oldCid }}}hidden{{{ end }}}">
30
+ <a href="{config.relative_path}/category/{oldCid}" class="badge badge border border-gray-300 text-primary text-decoration-none {{{ if !oldCid }}}hidden{{{ end }}}">
31
31
  <i class="fa fa-arrow-circle-right"></i>
32
32
  {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
33
- </span>
33
+ </a>
34
34
  {{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
35
35
  </span>
36
36
  <a class="lh-1" href="{config.relative_path}/category/{category.slug}">{function.buildCategoryLabel, category, "border"}</a>