nodebb-theme-harmony 0.0.1 → 0.0.3

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 (139) hide show
  1. package/languages/en-GB/harmony.json +5 -0
  2. package/library.js +101 -26
  3. package/package.json +5 -2
  4. package/plugin.json +14 -2
  5. package/public/harmony.js +101 -0
  6. package/scss/account.scss +38 -0
  7. package/scss/chats.scss +72 -0
  8. package/scss/common.scss +65 -0
  9. package/scss/fonts.scss +17 -0
  10. package/scss/groups.scss +30 -0
  11. package/scss/harmony.scss +23 -3
  12. package/scss/header.scss +16 -0
  13. package/scss/mixins.scss +183 -0
  14. package/scss/modals.scss +4 -0
  15. package/scss/modules/bottom-sheet.scss +52 -0
  16. package/scss/modules/breadcrumbs.scss +16 -0
  17. package/scss/modules/composer.scss +21 -0
  18. package/scss/modules/cover.scss +115 -0
  19. package/scss/modules/tags.scss +6 -0
  20. package/scss/modules/topic-navigator.scss +61 -0
  21. package/scss/modules/topics-list.scss +20 -0
  22. package/scss/modules/user-menu.scss +5 -0
  23. package/scss/overrides.scss +65 -0
  24. package/scss/sidebar.scss +125 -0
  25. package/scss/skins.scss +13 -0
  26. package/scss/status.scss +25 -0
  27. package/scss/topic.scss +128 -0
  28. package/templates/account/best.tpl +0 -2
  29. package/templates/account/blocks.tpl +31 -26
  30. package/templates/account/bookmarks.tpl +0 -2
  31. package/templates/account/categories.tpl +1 -3
  32. package/templates/account/controversial.tpl +0 -2
  33. package/templates/account/downvoted.tpl +0 -2
  34. package/templates/account/followers.tpl +14 -10
  35. package/templates/account/following.tpl +14 -10
  36. package/templates/account/groups.tpl +13 -11
  37. package/templates/account/ignored.tpl +0 -2
  38. package/templates/account/posts.tpl +29 -10
  39. package/templates/account/profile.tpl +76 -159
  40. package/templates/account/topics.tpl +32 -21
  41. package/templates/account/uploads.tpl +38 -35
  42. package/templates/account/upvoted.tpl +0 -2
  43. package/templates/account/watched.tpl +0 -2
  44. package/templates/admin/plugins/harmony.tpl +17 -0
  45. package/templates/categories.tpl +5 -5
  46. package/templates/category.tpl +26 -26
  47. package/templates/chat.tpl +9 -9
  48. package/templates/chats.tpl +5 -7
  49. package/templates/footer.tpl +11 -7
  50. package/templates/groups/details.tpl +74 -64
  51. package/templates/groups/list.tpl +19 -14
  52. package/templates/header.tpl +34 -21
  53. package/templates/login.tpl +51 -45
  54. package/templates/partials/account/admin-menu.tpl +36 -0
  55. package/templates/partials/account/category-item.tpl +17 -17
  56. package/templates/partials/account/header.tpl +77 -35
  57. package/templates/partials/account/sidebar-left.tpl +82 -0
  58. package/templates/partials/breadcrumbs.tpl +4 -12
  59. package/templates/partials/categories/item.tpl +48 -44
  60. package/templates/partials/categories/lastpost.tpl +17 -19
  61. package/templates/partials/categories/link.tpl +5 -13
  62. package/templates/partials/category/sort.tpl +4 -7
  63. package/templates/partials/category/subcategory.tpl +4 -4
  64. package/templates/partials/category/tools.tpl +6 -9
  65. package/templates/partials/category/watch.tpl +7 -11
  66. package/templates/partials/category-filter-content.tpl +5 -6
  67. package/templates/partials/category-filter.tpl +0 -2
  68. package/templates/partials/category-selector-content.tpl +4 -5
  69. package/templates/partials/category-selector.tpl +0 -2
  70. package/templates/partials/chats/dropdown.tpl +24 -32
  71. package/templates/partials/chats/message-window.tpl +7 -7
  72. package/templates/partials/chats/message.tpl +34 -34
  73. package/templates/partials/chats/recent_room.tpl +16 -29
  74. package/templates/partials/chats/system-message.tpl +4 -4
  75. package/templates/partials/chats/user.tpl +1 -3
  76. package/templates/partials/groups/admin.tpl +82 -183
  77. package/templates/partials/groups/badge.tpl +1 -3
  78. package/templates/partials/groups/invited.tpl +33 -0
  79. package/templates/partials/groups/list.tpl +14 -21
  80. package/templates/partials/groups/memberlist.tpl +28 -24
  81. package/templates/partials/groups/pending.tpl +30 -0
  82. package/templates/partials/groups/sidebar-left.tpl +27 -0
  83. package/templates/partials/mobile-footer.tpl +70 -0
  84. package/templates/partials/notifications_list.tpl +19 -27
  85. package/templates/partials/paginator.tpl +22 -24
  86. package/templates/partials/post_bar.tpl +23 -18
  87. package/templates/partials/posts_list.tpl +0 -2
  88. package/templates/partials/posts_list_item.tpl +14 -29
  89. package/templates/partials/quick-search-results.tpl +36 -25
  90. package/templates/partials/search-results.tpl +4 -1
  91. package/templates/partials/sidebar/chats.tpl +53 -0
  92. package/templates/partials/sidebar/drafts.tpl +41 -0
  93. package/templates/partials/sidebar/logged-out-menu.tpl +38 -0
  94. package/templates/partials/sidebar/notifications.tpl +28 -0
  95. package/templates/partials/sidebar/search-mobile.tpl +29 -0
  96. package/templates/partials/sidebar/search.tpl +30 -0
  97. package/templates/partials/sidebar/user-menu.tpl +87 -0
  98. package/templates/partials/sidebar-left.tpl +40 -0
  99. package/templates/partials/sidebar-right.tpl +41 -0
  100. package/templates/partials/skin-switcher.tpl +35 -0
  101. package/templates/partials/tags_list.tpl +0 -2
  102. package/templates/partials/toast.tpl +6 -8
  103. package/templates/partials/topic/event.tpl +4 -20
  104. package/templates/partials/topic/navigator.tpl +20 -41
  105. package/templates/partials/topic/necro-post.tpl +5 -4
  106. package/templates/partials/topic/post-menu.tpl +23 -2
  107. package/templates/partials/topic/post-placeholder.tpl +15 -0
  108. package/templates/partials/topic/post.tpl +67 -64
  109. package/templates/partials/topic/quickreply.tpl +12 -14
  110. package/templates/partials/topic/reactions.tpl +0 -2
  111. package/templates/partials/topic/reply-button.tpl +16 -20
  112. package/templates/partials/topic/selection-tooltip.tpl +0 -2
  113. package/templates/partials/topic/sort.tpl +8 -6
  114. package/templates/partials/topic/stats.tpl +15 -14
  115. package/templates/partials/topic/tag.tpl +1 -3
  116. package/templates/partials/topic/tags.tpl +1 -5
  117. package/templates/partials/topic/tools.tpl +13 -0
  118. package/templates/partials/topic/watch.tpl +15 -13
  119. package/templates/partials/topic-filters.tpl +4 -5
  120. package/templates/partials/topic-list-bar.tpl +54 -0
  121. package/templates/partials/topic-terms.tpl +4 -5
  122. package/templates/partials/topics_list.tpl +109 -100
  123. package/templates/partials/users/item.tpl +7 -0
  124. package/templates/partials/users_list.tpl +11 -60
  125. package/templates/partials/users_list_menu.tpl +10 -18
  126. package/templates/popular.tpl +1 -18
  127. package/templates/recent.tpl +8 -24
  128. package/templates/register.tpl +74 -60
  129. package/templates/tag.tpl +3 -15
  130. package/templates/tags.tpl +3 -4
  131. package/templates/top.tpl +1 -18
  132. package/templates/topic.tpl +39 -43
  133. package/templates/unread.tpl +1 -22
  134. package/templates/users.tpl +17 -17
  135. package/templates/admin/plugins/persona.tpl +0 -29
  136. package/templates/partials/account/menu.tpl +0 -103
  137. package/templates/partials/header/user-menu.tpl +0 -87
  138. package/templates/partials/menu.tpl +0 -188
  139. package/templates/partials/thread_tools.tpl +0 -10
@@ -1,60 +1,11 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <ul id="users-container" class="users-container list-unstyled d-flex flex-wrap gap-2">
4
- {{{each users}}}
5
- <li class="users-box registered-user text-center pb-3" data-uid="{users.uid}" style="width: 102px;">
6
- <a href="{config.relative_path}/user/{users.userslug}">{buildAvatar(users, "64px", true)}</a>
7
-
8
- <div class="user-info">
9
- <div class="text-nowrap text-truncate">
10
- <span>
11
- <i component="user/status" class="fa fa-circle status {users.status}" title="[[global:{users.status}]]"></i>
12
- <a href="{config.relative_path}/user/{users.userslug}">{users.username}</a>
13
- </span>
14
- </div>
15
- <!-- IF section_online -->
16
- <div class="lastonline">
17
- <span class="timeago" title="{users.lastonlineISO}"></span>
18
- </div>
19
- <!-- ENDIF section_online -->
20
-
21
- <!-- IF section_joindate -->
22
- <div class="joindate">
23
- <span class="timeago" title="{users.joindateISO}"></span>
24
- </div>
25
- <!-- ENDIF section_joindate -->
26
-
27
- <!-- IF section_sort-reputation -->
28
- <div class="reputation">
29
- <i class="fa fa-star"></i>
30
- <span class="formatted-number">{users.reputation}</span>
31
- </div>
32
- <!-- ENDIF section_sort-reputation -->
33
-
34
- <!-- IF section_sort-posts -->
35
- <div class="post-count">
36
- <i class="fa fa-pencil"></i>
37
- <span class="formatted-number">{users.postcount}</span>
38
- </div>
39
- <!-- ENDIF section_sort-posts -->
40
-
41
- <!-- IF section_flagged -->
42
- <div class="flag-count">
43
- <i class="fa fa-flag"></i>
44
- <span><a class="formatted-number" href="{config.relative_path}/flags?targetUid={users.uid}">{users.flags}</a></span>
45
- </div>
46
- <!-- ENDIF section_flagged -->
47
- </div>
48
- </li>
49
- {{{end}}}
50
- <!-- IF anonymousUserCount -->
51
- <li class="users-box anon-user text-center pb-3" style="width: 102px;">
52
- <span class="avatar avatar-rounded text-bg-secondary" component="avatar/icon" style="--avatar-size: 64px;">G</span>
53
- <br/>
54
- <div class="user-info">
55
- <span id="online_anon_count">{anonymousUserCount}</span>
56
- <span>[[global:guests]]</span>
57
- </div>
58
- </li>
59
- <!-- ENDIF anonymousUserCount -->
60
- </ul>
1
+ <div id="users-container" class="users-container row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-2">
2
+ {{{ each users }}}
3
+ <a href="{config.relative_path}/user/{./userslug}" class="btn-ghost align-items-start">
4
+ {buildAvatar(@value, "48px", true)}
5
+ <div class="d-flex flex-1 flex-column">
6
+ <div class="fw-semibold">{./displayname}</div>
7
+ <div class="text-xs text-muted">@{./username}</div>
8
+ </div>
9
+ </a>
10
+ {{{ end }}}
11
+ </div>
@@ -1,23 +1,15 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
1
+ <div component="user/list/menu" class="text-sm d-flex align-items-center gap-2">
2
+ <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=online">[[global:online]]</a>
3
+
4
+ <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=sort-posts">[[users:top_posters]]</a>
2
5
 
3
- <ul class="nav nav-pills">
4
- <li class="nav-item">
5
- <a class="nav-link" href="{config.relative_path}/users?section=online">[[global:online]]</a>
6
- </li>
7
- <li class="nav-item">
8
- <a class="nav-link" href="{config.relative_path}/users?section=sort-posts">[[users:top_posters]]</a>
9
- </li>
10
6
  {{{ if !reputation:disabled }}}
11
- <li class="nav-item">
12
- <a class="nav-link" href="{config.relative_path}/users?section=sort-reputation">[[users:most_reputation]]</a>
13
- </li>
7
+ <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=sort-reputation">[[users:most_reputation]]</a>
14
8
  {{{ end }}}
9
+
15
10
  {{{ if isAdminOrGlobalMod }}}
16
- <li class="nav-item">
17
- <a class="nav-link" href="{config.relative_path}/users?section=flagged">[[users:most_flags]]</a>
18
- </li>
19
- <li class="nav-item">
20
- <a class="nav-link" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
21
- </li>
11
+ <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=flagged">[[users:most_flags]]</a>
12
+
13
+ <a class="btn-ghost fw-semibold" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
22
14
  {{{ end }}}
23
- </ul>
15
+ </div>
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div data-widget-area="header">
5
3
  {{{each widgets.header}}}
@@ -7,22 +5,7 @@
7
5
  {{{end}}}
8
6
  </div>
9
7
  <div class="popular">
10
- <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
- <div class="d-flex gap-1 align-items-stretch">
12
- {{{ if canPost }}}
13
- <!-- IMPORT partials/buttons/newTopic.tpl -->
14
- {{{ else }}}
15
- <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
- {{{ end }}}
17
- </div>
18
- <div class="d-flex gap-1 align-items-stretch">
19
- <!-- IMPORT partials/topic-terms.tpl -->
20
- <!-- IMPORT partials/topic-filters.tpl -->
21
- <!-- IMPORT partials/category-filter-right.tpl -->
22
- <!-- IMPORT partials/category/tools.tpl -->
23
- </div>
24
- </div>
25
-
8
+ <!-- IMPORT partials/topic-list-bar.tpl -->
26
9
  <div class="category">
27
10
  {{{ if !topics.length }}}
28
11
  <div class="alert alert-warning" id="category-no-topics">[[recent:no_popular_topics]]</div>
@@ -1,39 +1,23 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
2
+
4
3
  <div data-widget-area="header">
5
4
  {{{each widgets.header}}}
6
5
  {{widgets.header.html}}
7
6
  {{{end}}}
8
7
  </div>
8
+
9
9
  <div class="recent">
10
- <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
- <div class="d-flex gap-1 align-items-stretch">
12
- {{{ if canPost }}}
13
- <!-- IMPORT partials/buttons/newTopic.tpl -->
14
- {{{ else }}}
15
- <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
- {{{ end }}}
17
- <a href="{config.relative_path}/{selectedFilter.url}{querystring}" class="d-inline-block">
18
- <div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
19
- </a>
20
- </div>
21
- <div class="d-flex gap-1 align-items-stretch">
22
- <!-- IMPORT partials/topic-filters.tpl -->
23
- <!-- IMPORT partials/category-filter-right.tpl -->
24
- <!-- IMPORT partials/category/tools.tpl -->
25
- </div>
26
- </div>
10
+ <!-- IMPORT partials/topic-list-bar.tpl -->
27
11
 
28
12
  <div class="category">
29
- <!-- IF !topics.length -->
13
+ {{{ if !topics.length }}}
30
14
  <div class="alert alert-warning" id="category-no-topics">[[recent:no_recent_topics]]</div>
31
- <!-- ENDIF !topics.length -->
15
+ {{{ end }}}
32
16
 
33
17
  <!-- IMPORT partials/topics_list.tpl -->
34
18
 
35
- <!-- IF config.usePagination -->
36
- <!-- IMPORT partials/paginator.tpl -->
37
- <!-- ENDIF config.usePagination -->
19
+ {{{ if config.usePagination }}}
20
+ <!-- IMPORT partials/paginator.tpl -->
21
+ {{{ end }}}
38
22
  </div>
39
23
  </div>
@@ -1,80 +1,94 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
- <!-- IMPORT partials/breadcrumbs.tpl -->
4
1
  <div data-widget-area="header">
5
2
  {{{each widgets.header}}}
6
3
  {{widgets.header.html}}
7
4
  {{{end}}}
8
5
  </div>
9
6
  <div class="row register">
10
- <div class="row {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
- <div class="{register_window:spansize}">
12
- <div class="register-block">
13
- <div class="alert alert-danger{{{ if !error }}} hidden{{{ end }}}" id="register-error-notify" >
14
- <strong>[[error:registration-error]]</strong>
15
- <p>{error}</p>
16
- </div>
17
- <form component="register/local" class="form-horizontal" role="form" action="{config.relative_path}/register" method="post">
18
- <div class="row mb-3">
19
- <label for="username" class="col-lg-2 col-form-label">[[register:username]]</label>
20
- <div class="col-lg-10">
21
- <input class="form-control" type="text" placeholder="[[register:username_placeholder]]" name="username" id="username" autocorrect="off" autocapitalize="off" autocomplete="off" />
22
- <span class="register-feedback" id="username-notify"></span>
23
- <span class="form-text">[[register:help.username_restrictions, {minimumUsernameLength}, {maximumUsernameLength}]]</span>
24
- </div>
7
+ <div class="d-flex flex-column gap-2 {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
8
+ <h2 class="tracking-tight fw-semibold text-center">[[global:register]]</h2>
9
+ <div class="row justify-content-center gap-5">
10
+
11
+ <div class="col-12 col-md-3 px-md-0">
12
+ <div class="register-block">
13
+ <div class="alert alert-danger{{{ if !error }}} hidden{{{ end }}}" id="register-error-notify" >
14
+ <strong>[[error:registration-error]]</strong>
15
+ <p>{error}</p>
25
16
  </div>
26
- <div class="row mb-2">
27
- <label for="password" class="col-lg-2 col-form-label">[[register:password]]</label>
28
- <div class="col-lg-10">
29
- <input class="form-control" type="password" placeholder="[[register:password_placeholder]]" name="password" id="password" />
30
- <span class="register-feedback" id="password-notify"></span>
31
- <span class="form-text">[[register:help.minimum_password_length, {minimumPasswordLength}]]</span>
32
- <p id="caps-lock-warning" class="text-danger hidden">
33
- <i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
34
- </p>
17
+
18
+ <form component="register/local" class="d-flex flex-column gap-3" role="form" action="{config.relative_path}/register" method="post">
19
+ <div class="mb-2 d-flex flex-column gap-2">
20
+ <label for="username">[[register:username]]</label>
21
+ <div class="d-flex flex-column">
22
+ <input class="form-control" type="text" placeholder="[[register:username_placeholder]]" name="username" id="username" autocorrect="off" autocapitalize="off" autocomplete="off" />
23
+ <span class="register-feedback text-xs text-danger" id="username-notify"></span>
24
+ <span class="form-text text-xs">[[register:help.username_restrictions, {minimumUsernameLength}, {maximumUsernameLength}]]</span>
25
+ </div>
35
26
  </div>
36
- </div>
37
- <div class="row mb-2">
38
- <label for="password-confirm" class="col-lg-2 col-form-label">[[register:confirm_password]]</label>
39
- <div class="col-lg-10">
40
- <input class="form-control" type="password" placeholder="[[register:confirm_password_placeholder]]" name="password-confirm" id="password-confirm" />
41
- <span class="register-feedback" id="password-confirm-notify"></span>
27
+
28
+ <div class="mb-2 d-flex flex-column gap-2">
29
+ <label for="password">[[register:password]]</label>
30
+ <div class="d-flex flex-column">
31
+ <input class="form-control" type="password" placeholder="[[register:password_placeholder]]" name="password" id="password" />
32
+ <span class="register-feedback text-xs text-danger" id="password-notify"></span>
33
+ <span class="form-text text-xs">[[register:help.minimum_password_length, {minimumPasswordLength}]]</span>
34
+ <p id="caps-lock-warning" class="text-danger hidden">
35
+ <i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
36
+ </p>
37
+ </div>
42
38
  </div>
43
- </div>
44
39
 
45
- {{{each regFormEntry}}}
46
- <div class="row mb-2">
47
- <label for="register-{regFormEntry.styleName}" class="col-lg-2 col-form-label">{regFormEntry.label}</label>
48
- <div id="register-{regFormEntry.styleName}" class="col-lg-10">
49
- {{regFormEntry.html}}
40
+ <div class="mb-2 d-flex flex-column gap-2">
41
+ <label for="password-confirm">[[register:confirm_password]]</label>
42
+ <div>
43
+ <input class="form-control" type="password" placeholder="[[register:confirm_password_placeholder]]" name="password-confirm" id="password-confirm" />
44
+ <span class="register-feedback text-xs text-danger" id="password-confirm-notify"></span>
45
+ </div>
50
46
  </div>
51
- </div>
52
- {{{end}}}
53
47
 
54
- <div class="row">
55
- <div class="offset-lg-2 col-lg-10">
56
- <button class="btn btn-primary btn-lg" id="register" type="submit">[[register:register_now_button]]</button>
48
+ {{{ each regFormEntry }}}
49
+ <div class="mb-2 regFormEntry d-flex flex-column gap-2">
50
+ <label for="register-{regFormEntry.styleName}">{regFormEntry.label}</label>
51
+ <div id="register-{regFormEntry.styleName}">{{regFormEntry.html}}</div>
57
52
  </div>
58
- </div>
59
- <input id="token" type="hidden" name="token" value="" />
60
- <input id="noscript" type="hidden" name="noscript" value="true" />
61
- <input type="hidden" name="_csrf" value="{config.csrf_token}" />
62
- </form>
53
+ {{{ end }}}
54
+
55
+ <button class="btn btn-primary" id="register" type="submit">[[register:register_now_button]]</button>
56
+ <hr/>
57
+
58
+ <span class="text-sm">[[register:already-have-account]]</span>
59
+ <a class="btn btn-outline-light text-body" href="{config.relative_path}/login">[[global:login]]</a>
60
+
61
+ <input id="token" type="hidden" name="token" value="" />
62
+ <input id="noscript" type="hidden" name="noscript" value="true" />
63
+ <input type="hidden" name="_csrf" value="{config.csrf_token}" />
64
+ </form>
65
+ </div>
63
66
  </div>
64
- </div>
65
67
 
66
- {{{ if alternate_logins }}}
67
- <div class="col-md-6">
68
- <div class="alt-register-block">
69
- <h4>[[register:alternative_registration]]</h4>
70
- <ul class="alt-logins">
71
- {{{each authentication}}}
72
- <li class="{authentication.name}"><a rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{authentication.url}"><i class="fa {authentication.icon} fa-3x"></i></i></a></li>
73
- {{{end}}}
74
- </ul>
68
+ {{{ if alternate_logins }}}
69
+ <div class="col-12 col-md-3 px-md-0">
70
+ <div class="alt-register-block d-flex flex-column gap-2">
71
+ <label>[[register:alternative_registration]]</label>
72
+ <ul class="alt-logins list-unstyled">
73
+ {{{ each authentication }}}
74
+ <li class="{./name} mb-2">
75
+ <a class="btn btn-outline-light d-flex align-items-center" rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{./url}">
76
+ {{{ if ./icons.svg }}}
77
+ {./icons.svg}
78
+ {{{ else }}}
79
+ <i class="{./icons.normal}" style="color:{./color};"></i>
80
+ {{{ end }}}
81
+ {{{ if ./labels.register }}}
82
+ <div class="flex-1 text-body text-sm">{./labels.register}</div>
83
+ {{{ end }}}
84
+ </a>
85
+ </li>
86
+ {{{ end }}}
87
+ </ul>
88
+ </div>
75
89
  </div>
90
+ {{{ end }}}
76
91
  </div>
77
- {{{ end }}}
78
92
  </div>
79
93
  <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
80
94
  {{{each widgets.sidebar}}}
package/templates/tag.tpl CHANGED
@@ -1,25 +1,13 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
2
+
4
3
  <div data-widget-area="header">
5
4
  {{{each widgets.header}}}
6
5
  {{widgets.header.html}}
7
6
  {{{end}}}
8
7
  </div>
8
+
9
9
  <div class="tag">
10
- <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
- <div class="d-flex gap-1 align-items-stretch">
12
- {{{ if loggedIn }}}
13
- <!-- IMPORT partials/buttons/newTopic.tpl -->
14
- {{{ else }}}
15
- <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
- {{{ end }}}
17
- </div>
18
- <div class="d-flex gap-1 align-items-stretch">
19
- <!-- IMPORT partials/category-filter-right.tpl -->
20
- <!-- IMPORT partials/category/tools.tpl -->
21
- </div>
22
- </div>
10
+ <!-- IMPORT partials/topic-list-bar.tpl -->
23
11
 
24
12
  <div class="category">
25
13
  {{{ if !topics.length }}}
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div data-widget-area="header">
5
3
  {{{each widgets.header}}}
@@ -7,13 +5,14 @@
7
5
  {{{end}}}
8
6
  </div>
9
7
  <div class="tags">
8
+ <h2 class="fw-semibold">[[pages:tags]]</h2>
10
9
  {{{ if displayTagSearch }}}
11
10
  {{{ if tags.length }}}
12
11
  <div class="row justify-content-end mb-3">
13
12
  <div class="col-lg-3">
14
13
  <div class="input-group">
15
- <input type="text" class="form-control" placeholder="[[global:search]]" id="tag-search">
16
- <button class="btn btn-primary" type="button">
14
+ <input type="text" class="form-control form-control-sm" placeholder="[[global:search]]" id="tag-search">
15
+ <button class="btn btn-primary btn-sm" type="button">
17
16
  <i class="fa fa-search"></i>
18
17
  </button>
19
18
  </div>
package/templates/top.tpl CHANGED
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div data-widget-area="header">
5
3
  {{{each widgets.header}}}
@@ -7,22 +5,7 @@
7
5
  {{{end}}}
8
6
  </div>
9
7
  <div class="top">
10
- <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
- <div class="d-flex gap-1 align-items-stretch">
12
- {{{ if canPost }}}
13
- <!-- IMPORT partials/buttons/newTopic.tpl -->
14
- {{{ else }}}
15
- <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
- {{{ end }}}
17
- </div>
18
- <div class="d-flex gap-1 align-items-stretch">
19
- <!-- IMPORT partials/topic-terms.tpl -->
20
- <!-- IMPORT partials/topic-filters.tpl -->
21
- <!-- IMPORT partials/category-filter-right.tpl -->
22
- <!-- IMPORT partials/category/tools.tpl -->
23
- </div>
24
- </div>
25
-
8
+ <!-- IMPORT partials/topic-list-bar.tpl -->
26
9
  <div class="category">
27
10
  {{{ if !topics.length }}}
28
11
  <div class="alert alert-warning" id="category-no-topics">[[top:no_top_topics]]</div>
@@ -1,50 +1,48 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
1
+ {{{ if widgets.header.length }}}
3
2
  <div data-widget-area="header">
4
3
  {{{each widgets.header}}}
5
4
  {{widgets.header.html}}
6
5
  {{{end}}}
7
6
  </div>
8
- <div class="row">
9
- <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
10
- <div class="topic-header sticky-top">
11
- <h1 component="post/header" class="" itemprop="name">
12
- <span class="topic-title">
13
- <span component="topic/labels">
14
- <i component="topic/scheduled" class="fa fa-clock-o {{{ if !scheduled }}}hidden{{{ end }}}" title="[[topic:scheduled]]"></i>
15
- <i component="topic/pinned" class="fa fa-thumb-tack {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}" title="{{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {pinExpiryISO}]]{{{ end }}}"></i>
16
- <i component="topic/locked" class="fa fa-lock {{{ if !locked }}}hidden{{{ end }}}" title="[[topic:locked]]"></i>
17
- <i class="fa fa-arrow-circle-right {{{ if !oldCid }}}hidden{{{ end }}}" title="{{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}"></i>
18
- {{{each icons}}}<span class="align-middle">{@value}</span>{{{end}}}
19
- </span>
20
- <span component="topic/title">{title}</span>
21
- </span>
22
- </h1>
7
+ {{{ end }}}
23
8
 
24
- <div class="topic-info clearfix">
25
- <div class="category-item d-inline-block">
26
- {buildCategoryIcon(category, "24px", "rounded-circle")}
27
- <a href="{config.relative_path}/category/{category.slug}">{category.name}</a>
28
- </div>
9
+ <!-- IMPORT partials/breadcrumbs.tpl -->
29
10
 
30
- <div class="tags tag-list d-inline-block hidden-xs">
31
- <!-- IMPORT partials/topic/tags.tpl -->
32
- </div>
33
- <div class="d-inline-block hidden-xs">
34
- <!-- IMPORT partials/topic/stats.tpl -->
35
- </div>
36
- {{{ if !feeds:disableRSS }}}
37
- {{{ if rssFeedUrl }}}<a class="hidden-xs" target="_blank" href="{rssFeedUrl}"><i class="fa fa-rss-square"></i></a>{{{ end }}}
38
- {{{ end }}}
39
- {{{ if browsingUsers }}}
40
- <div class="d-inline-block hidden-xs">
41
- <!-- IMPORT partials/topic/browsing-users.tpl -->
42
- </div>
43
- {{{ end }}}
11
+ <h2 component="post/header" class="fs-2 mb-1 {{{ if config.centerHeaderElements }}}text-center{{{ end }}}" itemprop="name">
12
+ <span class="topic-title" component="topic/title">{title}</span>
13
+ </h2>
14
+
15
+ <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
16
+ <span component="topic/labels" class="d-flex gap-2">
17
+ <span component="topic/scheduled" class="badge badge border border-gray-300 text-primary {{{ if !scheduled }}}hidden{{{ end }}}">
18
+ <i class="fa fa-clock-o"></i>
19
+ [[topic:scheduled]]
20
+ </span>
21
+ <span component="topic/pinned" class="badge badge border border-gray-300 text-primary {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
22
+ <i class="fa fa-thumb-tack"></i>
23
+ {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {pinExpiryISO}]]{{{ end }}}
24
+ </span>
25
+ <span component="topic/locked" class="badge badge border border-gray-300 text-primary {{{ if !locked }}}hidden{{{ end }}}">
26
+ <i class="fa fa-lock"></i>
27
+ [[topic:locked]]
28
+ </span>
29
+ <span class="badge badge border border-gray-300 text-primary {{{ if !oldCid }}}hidden{{{ end }}}">
30
+ <i class="fa fa-arrow-circle-right"></i>
31
+ {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
32
+ </span>
33
+ {{{each icons}}}<span class="align-middle">{@value}</span>{{{end}}}
34
+ </span>
35
+ <a class="lh-1" href="{config.relative_path}/category/{category.slug}">{function.buildCategoryLabel, category, "border"}</a>
36
+ <div class="lh-1 tags tag-list d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
37
+ <div class="d-flex hidden-xs gap-2">
38
+ <!-- IMPORT partials/topic/stats.tpl -->
39
+ </div>
40
+ </div>
41
+
42
+ <div class="row">
43
+ <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
44
+ <!-- IMPORT partials/post_bar.tpl -->
44
45
 
45
- <!-- IMPORT partials/post_bar.tpl -->
46
- </div>
47
- </div>
48
46
  {{{ if merger }}}
49
47
  <!-- IMPORT partials/topic/merged-message.tpl -->
50
48
  {{{ end }}}
@@ -53,9 +51,9 @@
53
51
  <!-- IMPORT partials/topic/deleted-message.tpl -->
54
52
  {{{ end }}}
55
53
 
56
- <ul component="topic" class="posts timeline" data-tid="{tid}" data-cid="{cid}">
54
+ <ul component="topic" class="posts timeline mt-sm-4 p-0 py-3" data-tid="{tid}" data-cid="{cid}">
57
55
  {{{each posts}}}
58
- <li component="post" class="{{{ if posts.deleted }}}deleted{{{ end }}} {{{ if posts.selfPost }}}self-post{{{ end }}} {{{ if posts.topicOwnerPost }}}topic-owner-post{{{ end }}}" <!-- IMPORT partials/data/topic.tpl -->>
56
+ <li component="post" class="pt-4 {{{ if posts.deleted }}}deleted{{{ end }}} {{{ if posts.selfPost }}}self-post{{{ end }}} {{{ if posts.topicOwnerPost }}}topic-owner-post{{{ end }}}" <!-- IMPORT partials/data/topic.tpl -->>
59
57
  <a component="post/anchor" data-index="{posts.index}" id="{posts.index}"></a>
60
58
 
61
59
  <meta itemprop="datePublished" content="{posts.timestampISO}">
@@ -85,8 +83,6 @@
85
83
  {{{ if config.usePagination }}}
86
84
  <!-- IMPORT partials/paginator.tpl -->
87
85
  {{{ end }}}
88
-
89
- <!-- IMPORT partials/topic/navigator.tpl -->
90
86
  </div>
91
87
  <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
92
88
  {{{each widgets.sidebar}}}
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div data-widget-area="header">
5
3
  {{{each widgets.header}}}
@@ -7,26 +5,7 @@
7
5
  {{{end}}}
8
6
  </div>
9
7
  <div class="unread">
10
- <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
- <div class="d-flex gap-1 align-items-stretch">
12
- <!-- IMPORT partials/buttons/newTopic.tpl -->
13
- <a href="{config.relative_path}/{selectedFilter.url}{querystring}" class="d-inline-block">
14
- <div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
15
- </a>
16
- </div>
17
-
18
- <div class="d-flex gap-1 align-items-stretch">
19
- <!-- IMPORT partials/topic-filters.tpl -->
20
- <!-- IMPORT partials/category-filter-right.tpl -->
21
-
22
- <div class="markread btn-group {{{ if !topics.length }}}hidden{{{ end }}}">
23
- <!-- IMPORT partials/category-selector-right.tpl -->
24
- </div>
25
-
26
- <!-- IMPORT partials/category/tools.tpl -->
27
- </div>
28
- </div>
29
-
8
+ <!-- IMPORT partials/topic-list-bar.tpl -->
30
9
  <div class="category">
31
10
  <div id="category-no-topics" class="alert alert-warning {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no_unread_topics]]</div>
32
11
 
@@ -1,5 +1,3 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
4
2
  <div data-widget-area="header">
5
3
  {{{each widgets.header}}}
@@ -7,28 +5,30 @@
7
5
  {{{end}}}
8
6
  </div>
9
7
  <div class="users">
10
- <div class="row mb-3">
8
+ <h2 class="fw-semibold">[[global:users]]</h2>
9
+ <div class="row justify-content-between">
11
10
  <div class="col-lg-6">
12
11
  <!-- IMPORT partials/users_list_menu.tpl -->
13
12
  </div>
14
- <div class="col-3 text-end">
15
- <!-- IF showInviteButton -->
16
- <button component="user/invite" class="btn btn-success"><i class="fa fa-users"></i> [[users:invite]]</button>
17
- <!-- ENDIF showInviteButton -->
18
- </div>
19
- <!-- IF displayUserSearch -->
20
- <div class="col-lg-3 col-9">
21
- <div class="search">
22
- <div class="input-group">
23
- <input class="form-control" id="search-user" type="text" placeholder="[[global:search]]"/>
24
- <button class="btn btn-primary" type="button">
25
- <i component="user/search/icon" class="fa fa-search"></i>
26
- </button>
13
+ <div class="col-lg-6 text-end">
14
+ <div class="d-flex justify-content-end gap-2">
15
+ {{{ if showInviteButton }}}
16
+ <button component="user/invite" class="btn btn-success btn-sm"><i class="fa fa-users"></i> [[users:invite]]</button>
17
+ {{{ end }}}
18
+ {{{ if displayUserSearch }}}
19
+ <div class="search">
20
+ <div class="input-group">
21
+ <input class="form-control form-control-sm" id="search-user" type="text" placeholder="[[global:search]]"/>
22
+ <button class="btn btn-primary btn-sm" type="button">
23
+ <i component="user/search/icon" class="fa fa-search"></i>
24
+ </button>
25
+ </div>
27
26
  </div>
27
+ {{{ end }}}
28
28
  </div>
29
29
  </div>
30
- <!-- ENDIF displayUserSearch -->
31
30
  </div>
31
+ <hr/>
32
32
 
33
33
  <!-- IMPORT partials/users_list.tpl -->
34
34