nodebb-theme-harmony 1.0.0-beta.5 → 1.0.0-beta.50

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.
Files changed (112) hide show
  1. package/languages/en-GB/harmony.json +5 -1
  2. package/library.js +21 -7
  3. package/package.json +1 -1
  4. package/public/harmony.js +124 -9
  5. package/public/settings.js +1 -0
  6. package/scss/chats.scss +24 -10
  7. package/scss/common.scss +45 -7
  8. package/scss/harmony.scss +2 -0
  9. package/scss/mixins.scss +7 -3
  10. package/scss/modals.scss +6 -1
  11. package/scss/modules/bottom-sheet.scss +1 -1
  12. package/scss/modules/composer.scss +0 -4
  13. package/scss/modules/cover.scss +1 -11
  14. package/scss/modules/paginator.scss +24 -0
  15. package/scss/overrides.scss +3 -1
  16. package/scss/search.scss +8 -0
  17. package/scss/sidebar.scss +7 -4
  18. package/scss/topic.scss +22 -12
  19. package/templates/account/blocks.tpl +35 -41
  20. package/templates/account/categories.tpl +23 -30
  21. package/templates/account/consent.tpl +66 -10
  22. package/templates/account/edit/password.tpl +25 -30
  23. package/templates/account/edit/username.tpl +21 -26
  24. package/templates/account/edit.tpl +105 -116
  25. package/templates/account/followers.tpl +12 -19
  26. package/templates/account/following.tpl +12 -18
  27. package/templates/account/groups.tpl +12 -17
  28. package/templates/account/info.tpl +178 -206
  29. package/templates/account/posts.tpl +31 -36
  30. package/templates/account/profile.tpl +66 -73
  31. package/templates/account/sessions.tpl +8 -30
  32. package/templates/account/settings.tpl +193 -198
  33. package/templates/account/theme.tpl +34 -25
  34. package/templates/account/topics.tpl +33 -38
  35. package/templates/account/uploads.tpl +33 -40
  36. package/templates/admin/plugins/harmony.tpl +17 -3
  37. package/templates/categories.tpl +1 -1
  38. package/templates/category.tpl +12 -13
  39. package/templates/chats.tpl +2 -2
  40. package/templates/flags/detail.tpl +24 -25
  41. package/templates/flags/list.tpl +11 -11
  42. package/templates/footer.tpl +2 -2
  43. package/templates/groups/details.tpl +20 -17
  44. package/templates/groups/members.tpl +0 -2
  45. package/templates/header.tpl +1 -1
  46. package/templates/partials/account/footer.tpl +3 -0
  47. package/templates/partials/account/header.tpl +78 -81
  48. package/templates/partials/account/session-list.tpl +18 -0
  49. package/templates/partials/breadcrumbs.tpl +6 -6
  50. package/templates/partials/categories/item.tpl +20 -19
  51. package/templates/partials/categories/lastpost.tpl +2 -2
  52. package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +8 -6
  53. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +3 -3
  54. package/templates/partials/category/subcategory.tpl +1 -1
  55. package/templates/partials/category/tags.tpl +0 -2
  56. package/templates/partials/category/watch.tpl +28 -4
  57. package/templates/partials/chats/message-window.tpl +10 -7
  58. package/templates/partials/chats/message.tpl +4 -6
  59. package/templates/partials/cookie-consent.tpl +5 -5
  60. package/templates/partials/flags/filters.tpl +1 -1
  61. package/templates/partials/groups/admin.tpl +4 -4
  62. package/templates/partials/groups/badge.tpl +1 -1
  63. package/templates/partials/groups/memberlist.tpl +1 -1
  64. package/templates/partials/groups/sidebar-left.tpl +1 -1
  65. package/templates/partials/header/brand.tpl +1 -1
  66. package/templates/partials/mobile-footer.tpl +69 -61
  67. package/templates/partials/paginator.tpl +9 -9
  68. package/templates/partials/post_bar.tpl +6 -5
  69. package/templates/partials/posts_list_item.tpl +5 -5
  70. package/templates/partials/quick-search-results.tpl +1 -1
  71. package/templates/partials/search-filters.tpl +184 -0
  72. package/templates/partials/search-results.tpl +28 -32
  73. package/templates/partials/sidebar/chats.tpl +2 -2
  74. package/templates/partials/sidebar/drafts.tpl +42 -34
  75. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  76. package/templates/partials/sidebar/notifications.tpl +3 -3
  77. package/templates/partials/sidebar/search.tpl +1 -1
  78. package/templates/partials/sidebar/user-menu.tpl +1 -1
  79. package/templates/partials/sidebar-left.tpl +13 -10
  80. package/templates/partials/sidebar-right.tpl +1 -1
  81. package/templates/partials/skin-switcher.tpl +2 -2
  82. package/templates/partials/tags_list.tpl +6 -4
  83. package/templates/partials/topic/browsing-users.tpl +0 -2
  84. package/templates/partials/topic/event.tpl +1 -1
  85. package/templates/partials/topic/navigation-post.tpl +5 -9
  86. package/templates/partials/topic/navigator-mobile.tpl +48 -0
  87. package/templates/partials/topic/post-editor.tpl +0 -2
  88. package/templates/partials/topic/post-menu-list.tpl +35 -37
  89. package/templates/partials/topic/post.tpl +27 -10
  90. package/templates/partials/topic/quickreply.tpl +6 -6
  91. package/templates/partials/topic/reply-button.tpl +1 -1
  92. package/templates/partials/topic/topic-menu-list.tpl +16 -18
  93. package/templates/partials/topic/watch.tpl +28 -4
  94. package/templates/partials/topic-list-bar.tpl +8 -8
  95. package/templates/partials/topics_list.tpl +40 -40
  96. package/templates/partials/users/filter-dropdown-content.tpl +20 -0
  97. package/templates/popular.tpl +1 -1
  98. package/templates/post-queue.tpl +112 -0
  99. package/templates/recent.tpl +1 -1
  100. package/templates/search.tpl +39 -177
  101. package/templates/tags.tpl +1 -1
  102. package/templates/top.tpl +1 -1
  103. package/templates/topic.tpl +7 -7
  104. package/templates/unread.tpl +1 -1
  105. package/templates/users.tpl +1 -1
  106. package/templates/modules/usercard.tpl +0 -39
  107. package/templates/partials/acceptTos.tpl +0 -11
  108. package/templates/partials/category-filter-right.tpl +0 -5
  109. package/templates/partials/category-filter.tpl +0 -3
  110. package/templates/partials/category-selector-right.tpl +0 -5
  111. package/templates/partials/category-selector.tpl +0 -3
  112. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,33 +1,42 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
3
2
 
4
- <div class="d-flex flex-column flex-md-row">
5
- <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
- <div class="mb-3 d-flex justify-content-between">
8
- <h3 class="fw-semibold fs-5">[[harmony:settings.title]]</h3>
3
+ <div class="mb-3 d-flex justify-content-between">
4
+ <h3 class="fw-semibold fs-5">[[harmony:settings.title]]</h3>
9
5
 
10
- <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
11
- </div>
6
+ <button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
7
+ </div>
12
8
 
13
- <form id="theme-settings" role="form">
14
- <div class="form-check mb-2">
15
- <input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply" {{{ if config.enableQuickReply }}}checked{{{ end }}}>
16
- <label class="form-check-label">[[harmony:settings.enableQuickReply]]</label>
17
- </div>
18
-
19
- <div class="form-check mb-2">
20
- <input class="form-check-input" type="checkbox" id="centerHeaderElements" name="centerHeaderElements" {{{ if config.centerHeaderElements }}}checked{{{ end }}}>
21
- <label class="form-check-label">[[harmony:settings.centerHeaderElements]]</label>
22
- </div>
9
+ <form id="theme-settings" role="form">
10
+ <div class="form-check mb-2">
11
+ <input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply" {{{ if config.theme.enableQuickReply }}}checked{{{ end }}}>
12
+ <label class="form-check-label">[[harmony:settings.enableQuickReply]]</label>
13
+ </div>
23
14
 
24
- <div class="form-check mb-2">
25
- <input class="form-check-input" type="checkbox" id="stickyToolbar" name="stickyToolbar" {{{ if config.stickyToolbar }}}checked{{{ end }}}>
26
- <label class="form-check-label">[[harmony:settings.stickyToolbar]]</label>
27
- </div>
15
+ <div class="form-check mb-2">
16
+ <input class="form-check-input" type="checkbox" id="centerHeaderElements" name="centerHeaderElements" {{{ if config.theme.centerHeaderElements }}}checked{{{ end }}}>
17
+ <label class="form-check-label">[[harmony:settings.centerHeaderElements]]</label>
18
+ </div>
28
19
 
20
+ <div class="form-check mb-2">
21
+ <input class="form-check-input" type="checkbox" id="stickyToolbar" name="stickyToolbar" {{{ if config.theme.stickyToolbar }}}checked{{{ end }}}>
22
+ <div class="form-check-label">
23
+ [[harmony:settings.stickyToolbar]]
24
+ <p class="form-text">
25
+ [[harmony:settings.stickyToolbar.help]]
26
+ </p>
27
+ </div>
28
+ </div>
29
29
 
30
- </form>
30
+ <div class="form-check mb-2">
31
+ <input class="form-check-input" type="checkbox" id="autohideBottombar" name="autohideBottombar" {{{ if config.theme.autohideBottombar }}}checked{{{ end }}}>
32
+ <div class="form-check-label">
33
+ [[harmony:settings.autohideBottombar]]
34
+ <p class="form-text">
35
+ [[harmony:settings.autohideBottombar.help]]
36
+ </p>
31
37
  </div>
32
38
  </div>
33
- </div>
39
+
40
+ </form>
41
+
42
+ <!-- IMPORT partials/account/footer.tpl -->
@@ -1,44 +1,39 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
1
+ <!-- IMPORT partials/account/header.tpl -->
3
2
 
4
- <div class="d-flex flex-column flex-md-row">
5
- <!-- IMPORT partials/account/sidebar-left.tpl -->
6
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
7
- <div class="d-flex justify-content-between align-items-center mb-3">
8
- <div class="d-flex gap-1">
9
- <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
10
- {{{ if showSort }}}
11
- <div class="btn-group bottom-sheet" component="thread/sort">
12
- <button title="[[global:sort]]" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" type="button"><i class="fa-solid fa-arrow-up-wide-short"></i></button>
13
- <ul class="dropdown-menu">
14
- {{{each sortOptions }}}
15
- <li><a class="dropdown-item" href="{config.relative_path}{./url}"><i class="fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>{./name}</a></li>
16
- {{{end}}}
17
- </ul>
18
- </div>
19
- {{{ end }}}
20
- </div>
3
+ <div class="d-flex justify-content-between align-items-center mb-3">
4
+ <div class="d-flex gap-1">
5
+ <h3 class="fw-semibold fs-5 mb-0">[[global:topics]]</h3>
6
+ {{{ if showSort }}}
7
+ <div class="btn-group bottom-sheet" component="thread/sort">
8
+ <button title="[[global:sort]]" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" type="button"><i class="fa-solid fa-arrow-up-wide-short"></i></button>
9
+ <ul class="dropdown-menu">
10
+ {{{each sortOptions }}}
11
+ <li><a class="dropdown-item" href="{config.relative_path}{./url}"><i class="fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>{./name}</a></li>
12
+ {{{end}}}
13
+ </ul>
14
+ </div>
15
+ {{{ end }}}
16
+ </div>
21
17
 
22
- <div class="d-flex gap-1">
23
- {{{ if canEdit }}}
24
- <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
25
- <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
26
- <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
27
- {{{ end }}}
28
- </div>
29
- </div>
18
+ <div class="d-flex gap-1">
19
+ {{{ if canEdit }}}
20
+ <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
21
+ <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
22
+ <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
23
+ {{{ end }}}
24
+ </div>
25
+ </div>
30
26
 
31
27
 
32
- {{{ if !topics.length }}}
33
- <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
34
- {{{ end }}}
28
+ {{{ if !topics.length }}}
29
+ <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
30
+ {{{ end }}}
35
31
 
36
- <div class="category">
37
- <!-- IMPORT partials/topics_list.tpl -->
38
- {{{ if config.usePagination }}}
39
- <!-- IMPORT partials/paginator.tpl -->
40
- {{{ end }}}
41
- </div>
42
- </div>
43
- </div>
32
+ <div class="category">
33
+ <!-- IMPORT partials/topics_list.tpl -->
34
+ {{{ if config.usePagination }}}
35
+ <!-- IMPORT partials/paginator.tpl -->
36
+ {{{ end }}}
44
37
  </div>
38
+
39
+ <!-- IMPORT partials/account/footer.tpl -->
@@ -1,44 +1,37 @@
1
- <div class="account">
2
- <!-- IMPORT partials/account/header.tpl -->
3
- <div class="d-flex flex-column flex-md-row">
4
- <!-- IMPORT partials/account/sidebar-left.tpl -->
5
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
6
- <h3 class="fw-semibold fs-5">{title}</h3>
1
+ <!-- IMPORT partials/account/header.tpl -->
7
2
 
8
- <!-- IF privateUploads -->
9
- <div class="alert alert-info text-center">[[uploads:private-uploads-info]]</div>
10
- <!-- ELSE -->
11
- <div class="alert alert-info text-center">[[uploads:public-uploads-info]]</div>
12
- <!-- ENDIF privateUploads -->
3
+ <h3 class="fw-semibold fs-5">{title}</h3>
13
4
 
14
- <!-- IF !uploads.length -->
15
- <div class="alert alert-warning text-center">[[uploads:no-uploads-found]]</div>
16
- <!-- ENDIF !uploads.length -->
5
+ <div class="alert alert-info text-center">
6
+ {{{ if privateUploads }}}[[uploads:private-uploads-info]]{{{ else }}}[[uploads:public-uploads-info]]{{{ end }}}
7
+ </div>
17
8
 
18
- <table class="table table-striped table-responsive">
19
- <thead>
20
- <tr>
21
- <th></th>
22
- <th></th>
23
- </tr>
24
- </thead>
25
- <tbody>
26
- {{{each uploads}}}
27
- <tr data-name="{uploads.name}">
28
- <td>
29
- <a class="text-break" href="{config.relative_path}{uploads.url}">{uploads.url}</a>
30
- </td>
31
- <td>
32
- <div class="btn-group ">
33
- <button class="btn btn-danger btn-sm" data-action="delete"><i class="fa fa-trash"></i></button>
34
- </div>
35
- </td>
36
- </tr>
37
- {{{end}}}
38
- </tbody>
39
- </table>
9
+ {{{ if !uploads.length }}}
10
+ <div class="alert alert-warning text-center">[[uploads:no-uploads-found]]</div>
11
+ {{{ end }}}
40
12
 
41
- <!-- IMPORT partials/paginator.tpl -->
42
- </div>
43
- </div>
44
- </div>
13
+ <table class="table table-striped table-responsive">
14
+ <thead>
15
+ <tr>
16
+ <th></th>
17
+ <th></th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ {{{ each uploads }}}
22
+ <tr data-name="{./name}">
23
+ <td>
24
+ <a class="text-break" href="{config.relative_path}{./url}">{./url}</a>
25
+ </td>
26
+ <td>
27
+ <div class="btn-group ">
28
+ <button class="btn btn-danger btn-sm" data-action="delete"><i class="fa fa-trash"></i></button>
29
+ </div>
30
+ </td>
31
+ </tr>
32
+ {{{ end }}}
33
+ </tbody>
34
+ </table>
35
+
36
+ <!-- IMPORT partials/paginator.tpl -->
37
+ <!-- IMPORT partials/account/footer.tpl -->
@@ -4,15 +4,29 @@
4
4
  <form role="form" class="harmony-settings">
5
5
  <div class="form-check form-switch">
6
6
  <input type="checkbox" class="form-check-input" id="enableQuickReply" name="enableQuickReply" />
7
- <label for="enableQuickReply" class="form-check-label">Enable quick reply</label>
7
+ <label for="enableQuickReply" class="form-check-label">[[harmony:settings.enableQuickReply]]</label>
8
8
  </div>
9
9
  <div class="form-check form-switch">
10
10
  <input type="checkbox" class="form-check-input" id="centerHeaderElements" name="centerHeaderElements" />
11
- <label for="centerHeaderElements" class="form-check-label">Center header elements</label>
11
+ <label for="centerHeaderElements" class="form-check-label">[[harmony:settings.centerHeaderElements]]</label>
12
12
  </div>
13
13
  <div class="form-check form-switch">
14
14
  <input type="checkbox" class="form-check-input" id="stickyToolbar" name="stickyToolbar" />
15
- <label for="stickyToolbar" class="form-check-label">Sticky toolbar on topic and category pages</label>
15
+ <div for="stickyToolbar" class="form-check-label">
16
+ [[harmony:settings.stickyToolbar]]
17
+ <p class="form-text">
18
+ [[harmony:settings.stickyToolbar.help]]
19
+ </p>
20
+ </div>
21
+ </div>
22
+ <div class="form-check form-switch">
23
+ <input type="checkbox" class="form-check-input" id="autohideBottombar" name="autohideBottombar" />
24
+ <div for="autohideBottombar" class="form-check-label">
25
+ [[harmony:settings.autohideBottombar]]
26
+ <p class="form-text">
27
+ [[harmony:settings.autohideBottombar.help]]
28
+ </p>
29
+ </div>
16
30
  </div>
17
31
  </form>
18
32
  </div>
@@ -6,7 +6,7 @@
6
6
  <div class="row">
7
7
  <div class="{{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
8
8
  {{{ if pagination.pages.length }}}
9
- <div><!-- IMPORT partials/category-selector.tpl --></div>
9
+ <div><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
10
10
  {{{ end }}}
11
11
  <ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
12
12
  {{{ each categories }}}
@@ -1,19 +1,10 @@
1
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
2
-
3
- {{{ if widgets.header.length }}}
4
- <div data-widget-area="header">
5
- {{{ each widgets.header }}}
6
- {{widgets.header.html}}
7
- {{{ end }}}
8
- </div>
9
- {{{ end }}}
10
-
11
2
  <div class="d-flex flex-column gap-2">
12
- <div class="d-flex gap-2 align-items-center mb-1 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
3
+ <div class="d-flex gap-2 align-items-center mb-1 {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
13
4
  {buildCategoryIcon(@value, "40px", "rounded-1 flex-shrink-0")}
14
5
  <h2 class="fs-2 fw-semibold mb-0 text-center">{./name}</h2>
15
6
  </div>
16
- <div class="d-flex flex-wrap gap-2 {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
7
+ <div class="d-flex flex-wrap gap-2 {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
17
8
  <span class="badge text-body border border-gray-300 stats text-xs">
18
9
  <span title="{totalTopicCount}" class="human-readable-number fw-bold">{totalTopicCount}</span>
19
10
  <span class="text-lowercase fw-normal">[[global:topics]]</span>
@@ -25,6 +16,15 @@
25
16
  </div>
26
17
  </div>
27
18
 
19
+ {{{ if widgets.header.length }}}
20
+ <div data-widget-area="header">
21
+ {{{ each widgets.header }}}
22
+ {{widgets.header.html}}
23
+ {{{ end }}}
24
+ </div>
25
+ {{{ end }}}
26
+
27
+
28
28
  <div class="row mt-3">
29
29
  <div class="category d-flex flex-column {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
30
30
  <!-- IMPORT partials/category/subcategory.tpl -->
@@ -33,8 +33,7 @@
33
33
 
34
34
  {{{ if !topics.length }}}
35
35
  {{{ if privileges.topics:create }}}
36
- <hr class="visible-xs" />
37
- <div class="alert alert-warning" id="category-no-topics">
36
+ <div class="alert alert-info mt-3" id="category-no-topics">
38
37
  [[category:no_topics]]
39
38
  </div>
40
39
  {{{ end }}}
@@ -1,4 +1,4 @@
1
- <div class="chats-full d-flex gap-1 vh-100 py-3">
1
+ <div class="chats-full d-flex gap-1 h-100 mt-3 mt-md-0 py-md-3">
2
2
  <div class="d-flex flex-column h-100" component="chat/nav-wrapper" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
3
3
  <div class="chat-search dropdown mb-2">
4
4
  <label class="text-xs text-muted">[[users:search-user-for-chat]]</label>
@@ -21,7 +21,7 @@
21
21
  {{{end}}}
22
22
  </ul>
23
23
  </div>
24
- <div class="flex-1 ms-md-2 ps-md-2 border-1 border-start-md" component="chat/main-wrapper">
24
+ <div class="flex-1 ms-md-2 ps-md-2 border-1 border-start-md h-100" component="chat/main-wrapper">
25
25
  <!-- IMPORT partials/chats/message-window.tpl -->
26
26
  </div>
27
27
  <div class="imagedrop"><div>[[topic:composer.drag_and_drop_images]]</div></div>
@@ -11,7 +11,7 @@
11
11
 
12
12
  <hr />
13
13
 
14
- <!-- IF type_bool.post -->
14
+ {{{ if type_bool.post }}}
15
15
  <div class="d-flex">
16
16
  <div class="flex-shrink-0">
17
17
  <a href="{config.relative_path}/user/{target.user.userslug}">{buildAvatar(target.user, "64px", true, "media-object")}</a>
@@ -21,9 +21,9 @@
21
21
  {target.content}
22
22
  </div>
23
23
  </div>
24
- <!-- ENDIF type_bool.post -->
24
+ {{{ end }}}
25
25
 
26
- <!-- IF type_bool.user -->
26
+ {{{ if type_bool.user }}}
27
27
  <div class="d-flex">
28
28
  <div class="flex-shrink-0">
29
29
  <a href="{config.relative_path}/user/{target.userslug}">{buildAvatar(target, "64px", true, "media-object")}</a>
@@ -36,11 +36,11 @@
36
36
  </p>
37
37
  </div>
38
38
  </div>
39
- <!-- ENDIF type_bool.user -->
39
+ {{{ end }}}
40
40
 
41
- <!-- IF type_bool.empty -->
41
+ {{{ if type_bool.empty }}}
42
42
  <div class="alert alert-warning" role="alert">[[flags:target-purged]]</div>
43
- <!-- ENDIF type_bool.empty -->
43
+ {{{ end }}}
44
44
 
45
45
  <hr />
46
46
 
@@ -95,27 +95,27 @@
95
95
  </form>
96
96
 
97
97
  <div component="flag/notes">
98
- <!-- IF !notes.length -->
98
+ {{{ if !notes.length }}}
99
99
  <div class="alert alert-success text-center">[[flags:no-notes]]</div>
100
- <!-- ENDIF !notes.length -->
101
- {{{each notes}}}
100
+ {{{ end }}}
101
+ {{{ each notes }}}
102
102
  <div class="d-flex mb-3">
103
103
  <div class="flex-shrink-0">
104
- <a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(notes.user, "32px", true, "media-object")}</a>
104
+ <a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "32px", true, "media-object")}</a>
105
105
  </div>
106
106
  <div class="flex-grow-1 mx-3">
107
107
  <h2 class="h5">
108
- <a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
109
- <small><span class="timeago" title="{../datetimeISO}"></span></small>
108
+ <a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
109
+ <small><span class="timeago" title="{./datetimeISO}"></span></small>
110
110
  </h4>
111
- {../content}
111
+ {./content}
112
112
  </div>
113
113
  <div class="flex-shrink-0">
114
114
  <a href="#" class="btn btn-sm btn-link" data-action="prepare-edit"><i class="fa fa-pencil"></i></a>
115
115
  <a href="#" class="btn btn-sm btn-link" data-action="delete-note"><i class="fa fa-trash text-danger"></i></a>
116
116
  </div>
117
117
  </div>
118
- {{{end}}}
118
+ {{{ end }}}
119
119
  </div>
120
120
  </div>
121
121
  <div class="col-sm-6">
@@ -146,7 +146,6 @@
146
146
  <button type="button" class="btn btn-light dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
147
147
  <i class="fa fa-street-view"></i>
148
148
  [[flags:flagged-user]]
149
- <span class="caret"></span>
150
149
  </button>
151
150
  <ul class="dropdown-menu">
152
151
  <li><a class="dropdown-item" href="{config.relative_path}/uid/{target.uid}">[[flags:view-profile]]</a></li>
@@ -176,25 +175,25 @@
176
175
 
177
176
  <h2 class="h4">[[flags:history]]</h2>
178
177
  <div component="flag/history">
179
- <!-- IF !history.length -->
178
+ {{{ if !history.length }}}
180
179
  <div class="alert alert-success text-center">[[flags:no-history]]</div>
181
- <!-- ENDIF !history.length -->
182
- {{{each history}}}
180
+ {{{ end }}}
181
+ {{{ each history }}}
183
182
  <div class="d-flex">
184
183
  <div class="flex-shrink-0">
185
- <a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(history.user, "32px", true, "media-object")}</a>
184
+ <a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "32px", true, "media-object")}</a>
186
185
  </div>
187
186
  <div class="flex-grow-1 ms-3">
188
187
  <h4 class="media-heading">
189
- <a href="{config.relative_path}/user/{../user.userslug}">{../user.username}</a>
190
- <small><span class="timeago" title="{../datetimeISO}"></span></small>
188
+ <a href="{config.relative_path}/user/{./user.userslug}">{./user.username}</a>
189
+ <small><span class="timeago" title="{./datetimeISO}"></span></small>
191
190
  </h4>
192
191
  <ul>
193
- {{{each ./fields}}}
192
+ {{{ each ./fields }}}
194
193
  <li>
195
- <span class="badge bg-primary">[[flags:{@key}]]</span><!-- IF @value --> &rarr; <span class="badge bg-light text-dark">{@value}</span><!-- ENDIF @value -->
194
+ <span class="badge bg-primary">[[flags:{@key}]]</span>{{{ if @value }}} &rarr; <span class="badge bg-light text-dark">{@value}</span>{{{ end }}}
196
195
  </li>
197
- {{{end}}}
196
+ {{{ end }}}
198
197
  {{{ each ./meta }}}
199
198
  <li>
200
199
  <span class="badge bg-{{./labelClass}}">{{./key}}</span>{{{ if ./value }}} &rarr; <span class="badge bg-light text-dark">{{ ./value }}</span>{{{ end }}}
@@ -203,7 +202,7 @@
203
202
  </ul>
204
203
  </div>
205
204
  </div>
206
- {{{end}}}
205
+ {{{ end }}}
207
206
  </div>
208
207
  </div>
209
208
  </div>
@@ -7,18 +7,18 @@
7
7
  <!-- IMPORT partials/flags/filters.tpl -->
8
8
  </div>
9
9
  <div class="col-sm-8 col-md-9">
10
- <!-- IF hasFilter -->
10
+ {{{ if hasFilter }}}
11
11
  <div class="alert alert-warning">
12
12
  <p class="float-end">
13
13
  <a href="{config.relative_path}/flags">[[flags:filter-reset]]</a>
14
14
  </p>
15
15
  [[flags:filter-active]]
16
16
  </div>
17
- <!-- ENDIF hasFilter -->
17
+ {{{ end }}}
18
18
 
19
19
  <div class="btn-group float-end" component="flags/bulk-actions">
20
20
  <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false" disabled="disabled">
21
- <i class="fa fa-clone"></i> [[flags:bulk-actions]] <span class="caret"></span>
21
+ <i class="fa fa-clone"></i> <span class="fw-semibold">[[flags:bulk-actions]]</span>
22
22
  </button>
23
23
  <ul class="dropdown-menu">
24
24
  <li><a href="#" class="dropdown-item" data-action="bulk-assign">[[flags:assign-to-me]]</a></li>
@@ -39,7 +39,7 @@
39
39
  </tr>
40
40
  </thead>
41
41
  <tbody>
42
- <!-- IF !flags.length -->
42
+ {{{ if !flags.length }}}
43
43
  <tr>
44
44
  <td colspan="5">
45
45
  <div class="alert alert-success text-center">
@@ -47,22 +47,22 @@
47
47
  </div>
48
48
  </td>
49
49
  </tr>
50
- <!-- ENDIF !flags.length -->
51
- {{{each flags}}}
52
- <tr data-flag-id="{../flagId}">
50
+ {{{ end }}}
51
+ {{{ each flags }}}
52
+ <tr data-flag-id="{./flagId}">
53
53
  <td>
54
54
  <input type="checkbox" autocomplete="off" />
55
55
  </td>
56
56
  <td>
57
- <a href="{config.relative_path}/flags/{../flagId}">
58
- <strong>{../target_readable}</strong>
57
+ <a href="{config.relative_path}/flags/{./flagId}">
58
+ <strong>{./target_readable}</strong>
59
59
  </a>
60
60
  </td>
61
61
  <td>
62
62
  {./heat}
63
63
  </td>
64
- <td><span class="timeago" title="{../datetimeISO}"></span></td>
65
- <td><span class="badge bg-{../labelClass}">[[flags:state-{../state}]]</span></td>
64
+ <td><span class="timeago" title="{./datetimeISO}"></span></td>
65
+ <td><span class="badge bg-{./labelClass}">[[flags:state-{./state}]]</span></td>
66
66
  </tr>
67
67
  {{{end}}}
68
68
  </tbody>
@@ -5,8 +5,8 @@
5
5
  </div>
6
6
  <!-- IMPORT partials/mobile-footer.tpl -->
7
7
  {{{ if !isSpider }}}
8
- <div class="row">
9
- <div component="toaster/tray" class="col-12 col-md-3 alert-window fixed-bottom pb-3 mb-5 mb-md-2 me-md-5 ms-auto">
8
+ <div class="">
9
+ <div component="toaster/tray" class="alert-window fixed-bottom mb-5 mb-md-2 me-2 me-md-5 ms-auto" style="width:300px;">
10
10
  <div id="reconnect-alert" class="alert alert-dismissible alert-warning clearfix hide" component="toaster/toast">
11
11
  <button type="button" class="btn-close float-end" data-bs-dismiss="alert" aria-hidden="true"></button>
12
12
  <p>[[global:reconnecting-message, {config.siteTitle}]]</p>
@@ -2,10 +2,10 @@
2
2
  <div class="cover position-absolute start-0 top-0" component="groups/cover" style="background-image: url({group.cover:url}); background-position: {group.cover:position};">
3
3
  <div class="container">
4
4
  {{{ if group.isOwner }}}
5
- <div class="controls">
6
- <span class="upload"><i class="fa fa-fw fa-2x fa-upload"></i></span>
7
- <span class="resize"><i class="fa fa-fw fa-2x fa-arrows"></i></span>
8
- <span class="remove"><i class="fa fa-fw fa-2x fa-times"></i></span>
5
+ <div class="controls text-center">
6
+ <span class="upload p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-upload"></i></span>
7
+ <span class="resize p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-arrows"></i></span>
8
+ <span class="remove p-2 m-2 rounded-1 text-bg-light opacity-75"><i class="fa fa-fw fa-times"></i></span>
9
9
  </div>
10
10
  <div class="save text-bg-primary">[[groups:cover-save]] <i class="fa fa-fw fa-floppy-o"></i></div>
11
11
  <div class="indicator text-bg-primary">[[groups:cover-saving]] <i class="fa fa-fw fa-refresh fa-spin"></i></div>
@@ -13,24 +13,27 @@
13
13
  </div>
14
14
  </div>
15
15
 
16
- <div class="d-flex flex-column pb-4 mb-4 mt-2 border-bottom">
17
- <div class="d-flex justify-content-between mt-1 align-items-center">
16
+ <div class="d-flex flex-column flex-md-row justify-content-md-between pb-4 mb-4 mt-2 border-bottom">
17
+ <div class="d-flex flex-column mt-1">
18
18
  <div class="d-flex align-items-center gap-2">
19
19
  <h2 class="mb-0">{group.displayName}</h2>
20
- {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
21
- {{{ if group.hidden }}}<span class="badge text-bg-light border border-1">[[groups:details.hidden]]</span>{{{ end }}}
22
20
  </div>
23
-
24
- <div>
25
- {{{ if loggedIn }}}
26
- {function.membershipBtn, group}
27
- {{{ end }}}
28
- {{{ if isAdmin }}}
29
- <a href="{config.relative_path}/admin/manage/groups/{group.nameEncoded}" target="_blank" class="btn btn-light"><i class="fa fa-gear"></i> [[user:edit]]</a>
30
- {{{ end }}}
21
+ <div class="d-flex gap-2">
22
+ {group.descriptionParsed}
23
+ <div>
24
+ {{{ if group.private }}}<span class="badge text-bg-light border border-1">[[groups:details.private]]</span>{{{ end }}}
25
+ {{{ if group.hidden }}}<span class="badge text-bg-light border border-1">[[groups:details.hidden]]</span>{{{ end }}}
26
+ </div>
31
27
  </div>
32
28
  </div>
33
- {group.descriptionParsed}
29
+ <div>
30
+ {{{ if loggedIn }}}
31
+ {function.membershipBtn, group}
32
+ {{{ end }}}
33
+ {{{ if isAdmin }}}
34
+ <a href="{config.relative_path}/admin/manage/groups/{group.nameEncoded}" target="_blank" class="btn btn-light"><i class="fa fa-gear"></i> [[user:edit]]</a>
35
+ {{{ end }}}
36
+ </div>
34
37
  </div>
35
38
 
36
39
  <div class="d-flex flex-column flex-md-row">
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div class="users">
5
3
  <!-- IMPORT partials/users_list.tpl -->
@@ -24,7 +24,7 @@
24
24
  </head>
25
25
 
26
26
  <body class="{bodyClass} skin-{{{if bootswatchSkin}}}{bootswatchSkin}{{{else}}}noskin{{{end}}}">
27
- <div class="d-flex justify-content-between pb-4 pb-md-0">
27
+ <div class="layout-container d-flex justify-content-between pb-4 pb-md-0">
28
28
  <!-- IMPORT partials/sidebar-left.tpl -->
29
29
 
30
30
  <main id="panel" class="d-flex flex-column gap-3 flex-grow-1 mt-3" style="min-width: 0;">
@@ -0,0 +1,3 @@
1
+ </div>
2
+ </div>
3
+ </div>