nodebb-theme-harmony 2.0.0 → 2.0.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.
Files changed (145) hide show
  1. package/.eslintrc +3 -3
  2. package/README.md +22 -22
  3. package/lib/controllers.js +29 -29
  4. package/library.js +183 -183
  5. package/package.json +48 -48
  6. package/plugin.json +24 -24
  7. package/public/.eslintrc +3 -3
  8. package/public/admin.js +15 -15
  9. package/public/harmony.js +287 -287
  10. package/public/settings.js +31 -31
  11. package/renovate.json +6 -6
  12. package/scss/account.scss +27 -27
  13. package/scss/category.scss +3 -3
  14. package/scss/chats.scss +11 -11
  15. package/scss/common.scss +122 -122
  16. package/scss/fonts.scss +19 -19
  17. package/scss/groups.scss +22 -22
  18. package/scss/harmony.scss +24 -24
  19. package/scss/header.scss +15 -15
  20. package/scss/mixins.scss +183 -183
  21. package/scss/modals.scss +6 -6
  22. package/scss/modules/breadcrumbs.scss +15 -15
  23. package/scss/modules/cover.scss +102 -102
  24. package/scss/modules/filters.scss +7 -7
  25. package/scss/modules/nprogress.scss +80 -80
  26. package/scss/modules/paginator.scss +23 -23
  27. package/scss/modules/tags.scss +5 -5
  28. package/scss/modules/topic-navigator.scss +52 -52
  29. package/scss/modules/topics-list.scss +40 -40
  30. package/scss/modules/user-menu.scss +10 -10
  31. package/scss/overrides.scss +65 -65
  32. package/scss/sidebar.scss +188 -188
  33. package/scss/skins.scss +58 -58
  34. package/scss/status.scss +24 -24
  35. package/scss/topic.scss +130 -130
  36. package/templates/account/blocks.tpl +51 -51
  37. package/templates/account/categories.tpl +63 -63
  38. package/templates/account/consent.tpl +73 -73
  39. package/templates/account/edit/password.tpl +34 -34
  40. package/templates/account/edit/username.tpl +29 -29
  41. package/templates/account/edit.tpl +137 -137
  42. package/templates/account/followers.tpl +14 -14
  43. package/templates/account/following.tpl +15 -15
  44. package/templates/account/groups.tpl +15 -15
  45. package/templates/account/info.tpl +270 -270
  46. package/templates/account/posts.tpl +35 -35
  47. package/templates/account/profile.tpl +92 -92
  48. package/templates/account/sessions.tpl +8 -8
  49. package/templates/account/settings.tpl +236 -236
  50. package/templates/account/shares.tpl +19 -19
  51. package/templates/account/tags.tpl +12 -12
  52. package/templates/account/theme.tpl +63 -63
  53. package/templates/account/topics.tpl +44 -44
  54. package/templates/account/uploads.tpl +37 -37
  55. package/templates/admin/plugins/harmony.tpl +57 -57
  56. package/templates/categories.tpl +29 -29
  57. package/templates/category.tpl +72 -72
  58. package/templates/footer.tpl +17 -17
  59. package/templates/groups/details.tpl +86 -86
  60. package/templates/groups/list.tpl +58 -58
  61. package/templates/groups/members.tpl +9 -9
  62. package/templates/header.tpl +45 -45
  63. package/templates/notifications.tpl +32 -32
  64. package/templates/partials/account/admin-menu.tpl +36 -36
  65. package/templates/partials/account/category-item.tpl +22 -22
  66. package/templates/partials/account/footer.tpl +2 -2
  67. package/templates/partials/account/header.tpl +98 -98
  68. package/templates/partials/account/session-list.tpl +18 -18
  69. package/templates/partials/account/sidebar-left.tpl +116 -116
  70. package/templates/partials/breadcrumbs-json-ld.tpl +15 -15
  71. package/templates/partials/breadcrumbs.tpl +12 -12
  72. package/templates/partials/buttons/newTopic.tpl +22 -22
  73. package/templates/partials/categories/item.tpl +56 -56
  74. package/templates/partials/categories/lastpost.tpl +24 -24
  75. package/templates/partials/categories/link.tpl +4 -4
  76. package/templates/partials/category/subcategory.tpl +18 -18
  77. package/templates/partials/category/tags.tpl +3 -3
  78. package/templates/partials/cookie-consent.tpl +6 -6
  79. package/templates/partials/groups/admin.tpl +95 -95
  80. package/templates/partials/groups/invited.tpl +32 -32
  81. package/templates/partials/groups/list.tpl +15 -15
  82. package/templates/partials/groups/memberlist.tpl +46 -46
  83. package/templates/partials/groups/pending.tpl +29 -29
  84. package/templates/partials/groups/sidebar-left.tpl +27 -27
  85. package/templates/partials/header/brand.tpl +27 -27
  86. package/templates/partials/mobile-footer.tpl +95 -95
  87. package/templates/partials/notifications_list.tpl +44 -44
  88. package/templates/partials/paginator.tpl +46 -46
  89. package/templates/partials/post_bar.tpl +27 -27
  90. package/templates/partials/posts_list.tpl +7 -7
  91. package/templates/partials/posts_list_item.tpl +19 -19
  92. package/templates/partials/quick-search-results.tpl +46 -46
  93. package/templates/partials/search-filters.tpl +183 -183
  94. package/templates/partials/search-results.tpl +54 -54
  95. package/templates/partials/sidebar/chats.tpl +45 -45
  96. package/templates/partials/sidebar/drafts.tpl +63 -63
  97. package/templates/partials/sidebar/logged-in-menu.tpl +22 -22
  98. package/templates/partials/sidebar/logged-out-menu.tpl +44 -44
  99. package/templates/partials/sidebar/notifications.tpl +49 -49
  100. package/templates/partials/sidebar/search-mobile.tpl +28 -28
  101. package/templates/partials/sidebar/search.tpl +30 -30
  102. package/templates/partials/sidebar/user-menu.tpl +103 -103
  103. package/templates/partials/sidebar-left.tpl +39 -39
  104. package/templates/partials/sidebar-right.tpl +16 -16
  105. package/templates/partials/skin-switcher.tpl +50 -50
  106. package/templates/partials/tags_list.tpl +7 -7
  107. package/templates/partials/toast.tpl +19 -19
  108. package/templates/partials/topic/event.tpl +12 -12
  109. package/templates/partials/topic/navigation-post.tpl +9 -9
  110. package/templates/partials/topic/navigator-mobile.tpl +61 -61
  111. package/templates/partials/topic/navigator.tpl +26 -26
  112. package/templates/partials/topic/necro-post.tpl +5 -5
  113. package/templates/partials/topic/post-menu-list.tpl +156 -156
  114. package/templates/partials/topic/post-menu.tpl +4 -4
  115. package/templates/partials/topic/post-placeholder.tpl +14 -14
  116. package/templates/partials/topic/post.tpl +146 -146
  117. package/templates/partials/topic/quickreply.tpl +28 -28
  118. package/templates/partials/topic/reply-button.tpl +26 -26
  119. package/templates/partials/topic/selection-tooltip.tpl +2 -2
  120. package/templates/partials/topic/sort.tpl +27 -27
  121. package/templates/partials/topic/stats.tpl +14 -14
  122. package/templates/partials/topic/thumbs.tpl +4 -4
  123. package/templates/partials/topic/tools.tpl +8 -8
  124. package/templates/partials/topic/topic-menu-list.tpl +73 -73
  125. package/templates/partials/topic/watch.tpl +59 -59
  126. package/templates/partials/topic-filters.tpl +15 -15
  127. package/templates/partials/topic-list-bar.tpl +54 -54
  128. package/templates/partials/topic-terms.tpl +15 -15
  129. package/templates/partials/topics_list.tpl +131 -131
  130. package/templates/partials/users/item.tpl +39 -39
  131. package/templates/partials/users_list.tpl +4 -4
  132. package/templates/partials/users_list_menu.tpl +14 -14
  133. package/templates/popular.tpl +34 -34
  134. package/templates/post-queue.tpl +211 -211
  135. package/templates/recent.tpl +42 -42
  136. package/templates/search.tpl +46 -46
  137. package/templates/tag.tpl +34 -34
  138. package/templates/tags.tpl +49 -49
  139. package/templates/top.tpl +34 -34
  140. package/templates/topic.tpl +123 -123
  141. package/templates/unread.tpl +31 -31
  142. package/templates/users.tpl +39 -39
  143. package/templates/world.tpl +66 -66
  144. package/theme.json +6 -6
  145. package/package-lock.json +0 -2338
package/templates/tag.tpl CHANGED
@@ -1,35 +1,35 @@
1
- {{{ if widgets.header.length }}}
2
- <div data-widget-area="header">
3
- {{{each widgets.header}}}
4
- {{widgets.header.html}}
5
- {{{end}}}
6
- </div>
7
- {{{ end }}}
8
- <div class="row">
9
- <div class="tag {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
10
- <!-- IMPORT partials/topic-list-bar.tpl -->
11
-
12
- <div class="category">
13
- {{{ if !topics.length }}}
14
- <div class="alert alert-warning">[[tags:no-tag-topics]]</div>
15
- {{{ end }}}
16
-
17
- <!-- IMPORT partials/topics_list.tpl -->
18
- <button id="load-more-btn" class="btn btn-primary hide">[[unread:load-more]]</button>
19
- {{{ if config.usePagination }}}
20
- <!-- IMPORT partials/paginator.tpl -->
21
- {{{ end }}}
22
- </div>
23
- </div>
24
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
25
- {{{ each widgets.sidebar }}}
26
- {{widgets.sidebar.html}}
27
- {{{ end }}}
28
- </div>
29
- </div>
30
-
31
- <div data-widget-area="footer">
32
- {{{each widgets.footer}}}
33
- {{widgets.footer.html}}
34
- {{{end}}}
1
+ {{{ if widgets.header.length }}}
2
+ <div data-widget-area="header">
3
+ {{{each widgets.header}}}
4
+ {{widgets.header.html}}
5
+ {{{end}}}
6
+ </div>
7
+ {{{ end }}}
8
+ <div class="row">
9
+ <div class="tag {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
10
+ <!-- IMPORT partials/topic-list-bar.tpl -->
11
+
12
+ <div class="category">
13
+ {{{ if !topics.length }}}
14
+ <div class="alert alert-warning">[[tags:no-tag-topics]]</div>
15
+ {{{ end }}}
16
+
17
+ <!-- IMPORT partials/topics_list.tpl -->
18
+ <button id="load-more-btn" class="btn btn-primary hide">[[unread:load-more]]</button>
19
+ {{{ if config.usePagination }}}
20
+ <!-- IMPORT partials/paginator.tpl -->
21
+ {{{ end }}}
22
+ </div>
23
+ </div>
24
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
25
+ {{{ each widgets.sidebar }}}
26
+ {{widgets.sidebar.html}}
27
+ {{{ end }}}
28
+ </div>
29
+ </div>
30
+
31
+ <div data-widget-area="footer">
32
+ {{{each widgets.footer}}}
33
+ {{widgets.footer.html}}
34
+ {{{end}}}
35
35
  </div>
@@ -1,50 +1,50 @@
1
- <div data-widget-area="header">
2
- {{{each widgets.header}}}
3
- {{widgets.header.html}}
4
- {{{end}}}
5
- </div>
6
-
7
- <div class="row">
8
- <div class="tags {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
9
- <h3 class="fw-semibold">[[pages:tags]]</h3>
10
- {{{ if displayTagSearch }}}
11
- {{{ if tags.length }}}
12
- <div class="row justify-content-end mb-3">
13
- <div class="col-lg-6">
14
- <div class="d-flex justify-content-end">
15
- <div>
16
- <div class="input-group">
17
- <input type="text" class="form-control form-control-sm" placeholder="[[global:search]]" id="tag-search">
18
- <button class="btn btn-primary btn-sm" type="button">
19
- <i class="fa fa-search"></i>
20
- </button>
21
- </div>
22
- </div>
23
- </div>
24
- </div>
25
- </div>
26
- {{{ end }}}
27
- {{{ end }}}
28
- <hr/>
29
- {{{ if !tags.length }}}
30
- <div class="alert alert-warning">[[tags:no-tags]]</div>
31
- {{{ end }}}
32
-
33
- <div class="category">
34
- <div class="tag-list row row-cols-2 row-cols-lg-4 row-cols-xl-5 gx-3 gy-2" data-nextstart="{nextStart}">
35
- <!-- IMPORT partials/tags_list.tpl -->
36
- </div>
37
- </div>
38
- </div>
39
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
40
- {{{ each widgets.sidebar }}}
41
- {{widgets.sidebar.html}}
42
- {{{ end }}}
43
- </div>
44
- </div>
45
-
46
- <div data-widget-area="footer">
47
- {{{each widgets.footer}}}
48
- {{widgets.footer.html}}
49
- {{{end}}}
1
+ <div data-widget-area="header">
2
+ {{{each widgets.header}}}
3
+ {{widgets.header.html}}
4
+ {{{end}}}
5
+ </div>
6
+
7
+ <div class="row">
8
+ <div class="tags {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
9
+ <h3 class="fw-semibold">[[pages:tags]]</h3>
10
+ {{{ if displayTagSearch }}}
11
+ {{{ if tags.length }}}
12
+ <div class="row justify-content-end mb-3">
13
+ <div class="col-lg-6">
14
+ <div class="d-flex justify-content-end">
15
+ <div>
16
+ <div class="input-group">
17
+ <input type="text" class="form-control form-control-sm" placeholder="[[global:search]]" id="tag-search">
18
+ <button class="btn btn-primary btn-sm" type="button">
19
+ <i class="fa fa-search"></i>
20
+ </button>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ {{{ end }}}
27
+ {{{ end }}}
28
+ <hr/>
29
+ {{{ if !tags.length }}}
30
+ <div class="alert alert-warning">[[tags:no-tags]]</div>
31
+ {{{ end }}}
32
+
33
+ <div class="category">
34
+ <div class="tag-list row row-cols-2 row-cols-lg-4 row-cols-xl-5 gx-3 gy-2" data-nextstart="{nextStart}">
35
+ <!-- IMPORT partials/tags_list.tpl -->
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
40
+ {{{ each widgets.sidebar }}}
41
+ {{widgets.sidebar.html}}
42
+ {{{ end }}}
43
+ </div>
44
+ </div>
45
+
46
+ <div data-widget-area="footer">
47
+ {{{each widgets.footer}}}
48
+ {{widgets.footer.html}}
49
+ {{{end}}}
50
50
  </div>
package/templates/top.tpl CHANGED
@@ -1,35 +1,35 @@
1
- {{{ if widgets.header.length }}}
2
- <div data-widget-area="header">
3
- {{{each widgets.header}}}
4
- {{widgets.header.html}}
5
- {{{end}}}
6
- </div>
7
- {{{ end }}}
8
-
9
- <div class="row">
10
- <div class="top {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
- <!-- IMPORT partials/topic-list-bar.tpl -->
12
- <div class="category">
13
- {{{ if !topics.length }}}
14
- <div class="alert alert-info" id="category-no-topics">[[top:no-top-topics]]</div>
15
- {{{ end }}}
16
-
17
- <!-- IMPORT partials/topics_list.tpl -->
18
-
19
- {{{ if config.usePagination }}}
20
- <!-- IMPORT partials/paginator.tpl -->
21
- {{{ end }}}
22
- </div>
23
- </div>
24
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
25
- {{{ each widgets.sidebar }}}
26
- {{widgets.sidebar.html}}
27
- {{{ end }}}
28
- </div>
29
- </div>
30
-
31
- <div data-widget-area="footer">
32
- {{{each widgets.footer}}}
33
- {{widgets.footer.html}}
34
- {{{end}}}
1
+ {{{ if widgets.header.length }}}
2
+ <div data-widget-area="header">
3
+ {{{each widgets.header}}}
4
+ {{widgets.header.html}}
5
+ {{{end}}}
6
+ </div>
7
+ {{{ end }}}
8
+
9
+ <div class="row">
10
+ <div class="top {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
+ <!-- IMPORT partials/topic-list-bar.tpl -->
12
+ <div class="category">
13
+ {{{ if !topics.length }}}
14
+ <div class="alert alert-info" id="category-no-topics">[[top:no-top-topics]]</div>
15
+ {{{ end }}}
16
+
17
+ <!-- IMPORT partials/topics_list.tpl -->
18
+
19
+ {{{ if config.usePagination }}}
20
+ <!-- IMPORT partials/paginator.tpl -->
21
+ {{{ end }}}
22
+ </div>
23
+ </div>
24
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
25
+ {{{ each widgets.sidebar }}}
26
+ {{widgets.sidebar.html}}
27
+ {{{ end }}}
28
+ </div>
29
+ </div>
30
+
31
+ <div data-widget-area="footer">
32
+ {{{each widgets.footer}}}
33
+ {{widgets.footer.html}}
34
+ {{{end}}}
35
35
  </div>
@@ -1,123 +1,123 @@
1
- <!-- IMPORT partials/breadcrumbs-json-ld.tpl -->
2
- {{{ if config.theme.enableBreadcrumbs }}}
3
- <!-- IMPORT partials/breadcrumbs.tpl -->
4
- {{{ end }}}
5
- {{{ if widgets.header.length }}}
6
- <div data-widget-area="header">
7
- {{{each widgets.header}}}
8
- {{widgets.header.html}}
9
- {{{end}}}
10
- </div>
11
- {{{ end }}}
12
-
13
- <div itemid="{url}" itemscope itemtype="https://schema.org/DiscussionForumPosting">
14
- <meta itemprop="headline" content="{escape(titleRaw)}">
15
- <meta itemprop="text" content="{escape(titleRaw)}">
16
- <meta itemprop="url" content="{url}">
17
- <meta itemprop="datePublished" content="{timestampISO}">
18
- <meta itemprop="dateModified" content="{lastposttimeISO}">
19
- <div itemprop="author" itemscope itemtype="https://schema.org/Person">
20
- <meta itemprop="name" content="{author.username}">
21
- {{{ if author.userslug }}}<meta itemprop="url" content="{config.relative_path}/user/{author.userslug}">{{{ end }}}
22
- </div>
23
-
24
- <div class="d-flex flex-column gap-3">
25
- <div class="d-flex flex-wrap">
26
- <div class="d-flex flex-column gap-3 flex-grow-1">
27
- <h1 component="post/header" class="tracking-tight fw-semibold fs-3 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
28
- <span class="topic-title" component="topic/title">{title}</span>
29
- </h1>
30
-
31
- <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
32
- <span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
33
- <span component="topic/scheduled" class="badge badge border border-gray-300 text-body {{{ if !scheduled }}}hidden{{{ end }}}">
34
- <i class="fa fa-clock-o"></i> [[topic:scheduled]]
35
- </span>
36
- <span component="topic/pinned" class="badge badge border border-gray-300 text-body {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
37
- <i class="fa fa-thumb-tack"></i> {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}
38
- </span>
39
- <span component="topic/locked" class="badge badge border border-gray-300 text-body {{{ if !locked }}}hidden{{{ end }}}">
40
- <i class="fa fa-lock"></i> [[topic:locked]]
41
- </span>
42
- <a component="topic/moved" href="{config.relative_path}/category/{oldCid}" class="badge badge border border-gray-300 text-body text-decoration-none {{{ if (!oldCid || (oldCid == "-1")) }}}hidden{{{ end }}}">
43
- <i class="fa fa-arrow-circle-right"></i> {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
44
- </a>
45
- {{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
46
- </span>
47
- {function.buildCategoryLabel, category, "a", "border"}
48
- <div data-tid="{./tid}" component="topic/tags" class="lh-1 tags tag-list d-flex flex-wrap hidden-xs hidden-empty gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
49
- <div class="d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/stats.tpl --></div>
50
- </div>
51
- </div>
52
- <div class="d-flex gap-2 align-items-center mt-2 hidden-empty" component="topic/thumb/list"><!-- IMPORT partials/topic/thumbs.tpl --></div>
53
- </div>
54
-
55
- <div class="row mb-4 mb-lg-0">
56
- <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
57
- <!-- IMPORT partials/post_bar.tpl -->
58
- {{{ if merger }}}
59
- <!-- IMPORT partials/topic/merged-message.tpl -->
60
- {{{ end }}}
61
- {{{ if forker }}}
62
- <!-- IMPORT partials/topic/forked-message.tpl -->
63
- {{{ end }}}
64
- {{{ if !scheduled }}}
65
- <!-- IMPORT partials/topic/deleted-message.tpl -->
66
- {{{ end }}}
67
-
68
- <div class="d-flex gap-0 gap-lg-5">
69
- <div class="posts-container" style="min-width: 0;">
70
- <ul component="topic" class="posts timeline list-unstyled mt-sm-2 p-0 py-3" style="min-width: 0;" data-tid="{tid}" data-cid="{cid}">
71
- {{{ each posts }}}
72
- <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 -->>
73
- <a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
74
- <meta itemprop="datePublished" content="{./timestampISO}">
75
- {{{ if ./editedISO }}}
76
- <meta itemprop="dateModified" content="{./editedISO}">
77
- {{{ end }}}
78
-
79
- <!-- IMPORT partials/topic/post.tpl -->
80
- </li>
81
- {{{ if (config.topicPostSort != "most_votes") }}}
82
- {{{ each ./events}}}<!-- IMPORT partials/topic/event.tpl -->{{{ end }}}
83
- {{{ end }}}
84
- {{{ end }}}
85
- </ul>
86
- {{{ if browsingUsers }}}
87
- <div class="visible-xs">
88
- <!-- IMPORT partials/topic/browsing-users.tpl -->
89
- <hr/>
90
- </div>
91
- {{{ end }}}
92
- {{{ if config.theme.enableQuickReply }}}
93
- <!-- IMPORT partials/topic/quickreply.tpl -->
94
- {{{ end }}}
95
- </div>
96
-
97
- <!-- IMPORT partials/topic/navigator.tpl -->
98
- </div>
99
-
100
- {{{ if config.usePagination }}}
101
- <!-- IMPORT partials/paginator.tpl -->
102
- {{{ end }}}
103
- </div>
104
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
105
- {{{each widgets.sidebar}}}
106
- {{widgets.sidebar.html}}
107
- {{{end}}}
108
- </div>
109
- </div>
110
- </div>
111
- </div>
112
-
113
- <div data-widget-area="footer">
114
- {{{each widgets.footer}}}
115
- {{widgets.footer.html}}
116
- {{{end}}}
117
- </div>
118
-
119
- {{{ if !config.usePagination }}}
120
- <noscript>
121
- <!-- IMPORT partials/paginator.tpl -->
122
- </noscript>
123
- {{{ end }}}
1
+ <!-- IMPORT partials/breadcrumbs-json-ld.tpl -->
2
+ {{{ if config.theme.enableBreadcrumbs }}}
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ {{{ end }}}
5
+ {{{ if widgets.header.length }}}
6
+ <div data-widget-area="header">
7
+ {{{each widgets.header}}}
8
+ {{widgets.header.html}}
9
+ {{{end}}}
10
+ </div>
11
+ {{{ end }}}
12
+
13
+ <div itemid="{url}" itemscope itemtype="https://schema.org/DiscussionForumPosting">
14
+ <meta itemprop="headline" content="{escape(titleRaw)}">
15
+ <meta itemprop="text" content="{escape(titleRaw)}">
16
+ <meta itemprop="url" content="{url}">
17
+ <meta itemprop="datePublished" content="{timestampISO}">
18
+ <meta itemprop="dateModified" content="{lastposttimeISO}">
19
+ <div itemprop="author" itemscope itemtype="https://schema.org/Person">
20
+ <meta itemprop="name" content="{author.username}">
21
+ {{{ if author.userslug }}}<meta itemprop="url" content="{config.relative_path}/user/{author.userslug}">{{{ end }}}
22
+ </div>
23
+
24
+ <div class="d-flex flex-column gap-3">
25
+ <div class="d-flex flex-wrap">
26
+ <div class="d-flex flex-column gap-3 flex-grow-1">
27
+ <h1 component="post/header" class="tracking-tight fw-semibold fs-3 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}">
28
+ <span class="topic-title" component="topic/title">{title}</span>
29
+ </h1>
30
+
31
+ <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
32
+ <span component="topic/labels" class="d-flex gap-2 {{{ if (!scheduled && (!pinned && (!locked && (!oldCid && !icons.length)))) }}}hidden{{{ end }}}">
33
+ <span component="topic/scheduled" class="badge badge border border-gray-300 text-body {{{ if !scheduled }}}hidden{{{ end }}}">
34
+ <i class="fa fa-clock-o"></i> [[topic:scheduled]]
35
+ </span>
36
+ <span component="topic/pinned" class="badge badge border border-gray-300 text-body {{{ if (scheduled || !pinned) }}}hidden{{{ end }}}">
37
+ <i class="fa fa-thumb-tack"></i> {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}}
38
+ </span>
39
+ <span component="topic/locked" class="badge badge border border-gray-300 text-body {{{ if !locked }}}hidden{{{ end }}}">
40
+ <i class="fa fa-lock"></i> [[topic:locked]]
41
+ </span>
42
+ <a component="topic/moved" href="{config.relative_path}/category/{oldCid}" class="badge badge border border-gray-300 text-body text-decoration-none {{{ if (!oldCid || (oldCid == "-1")) }}}hidden{{{ end }}}">
43
+ <i class="fa fa-arrow-circle-right"></i> {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
44
+ </a>
45
+ {{{each icons}}}<span class="lh-1">{@value}</span>{{{end}}}
46
+ </span>
47
+ {function.buildCategoryLabel, category, "a", "border"}
48
+ <div data-tid="{./tid}" component="topic/tags" class="lh-1 tags tag-list d-flex flex-wrap hidden-xs hidden-empty gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
49
+ <div class="d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/stats.tpl --></div>
50
+ </div>
51
+ </div>
52
+ <div class="d-flex gap-2 align-items-center mt-2 hidden-empty" component="topic/thumb/list"><!-- IMPORT partials/topic/thumbs.tpl --></div>
53
+ </div>
54
+
55
+ <div class="row mb-4 mb-lg-0">
56
+ <div class="topic {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
57
+ <!-- IMPORT partials/post_bar.tpl -->
58
+ {{{ if merger }}}
59
+ <!-- IMPORT partials/topic/merged-message.tpl -->
60
+ {{{ end }}}
61
+ {{{ if forker }}}
62
+ <!-- IMPORT partials/topic/forked-message.tpl -->
63
+ {{{ end }}}
64
+ {{{ if !scheduled }}}
65
+ <!-- IMPORT partials/topic/deleted-message.tpl -->
66
+ {{{ end }}}
67
+
68
+ <div class="d-flex gap-0 gap-lg-5">
69
+ <div class="posts-container" style="min-width: 0;">
70
+ <ul component="topic" class="posts timeline list-unstyled mt-sm-2 p-0 py-3" style="min-width: 0;" data-tid="{tid}" data-cid="{cid}">
71
+ {{{ each posts }}}
72
+ <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 -->>
73
+ <a component="post/anchor" data-index="{./index}" id="{increment(./index, "1")}"></a>
74
+ <meta itemprop="datePublished" content="{./timestampISO}">
75
+ {{{ if ./editedISO }}}
76
+ <meta itemprop="dateModified" content="{./editedISO}">
77
+ {{{ end }}}
78
+
79
+ <!-- IMPORT partials/topic/post.tpl -->
80
+ </li>
81
+ {{{ if (config.topicPostSort != "most_votes") }}}
82
+ {{{ each ./events}}}<!-- IMPORT partials/topic/event.tpl -->{{{ end }}}
83
+ {{{ end }}}
84
+ {{{ end }}}
85
+ </ul>
86
+ {{{ if browsingUsers }}}
87
+ <div class="visible-xs">
88
+ <!-- IMPORT partials/topic/browsing-users.tpl -->
89
+ <hr/>
90
+ </div>
91
+ {{{ end }}}
92
+ {{{ if config.theme.enableQuickReply }}}
93
+ <!-- IMPORT partials/topic/quickreply.tpl -->
94
+ {{{ end }}}
95
+ </div>
96
+
97
+ <!-- IMPORT partials/topic/navigator.tpl -->
98
+ </div>
99
+
100
+ {{{ if config.usePagination }}}
101
+ <!-- IMPORT partials/paginator.tpl -->
102
+ {{{ end }}}
103
+ </div>
104
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
105
+ {{{each widgets.sidebar}}}
106
+ {{widgets.sidebar.html}}
107
+ {{{end}}}
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>
112
+
113
+ <div data-widget-area="footer">
114
+ {{{each widgets.footer}}}
115
+ {{widgets.footer.html}}
116
+ {{{end}}}
117
+ </div>
118
+
119
+ {{{ if !config.usePagination }}}
120
+ <noscript>
121
+ <!-- IMPORT partials/paginator.tpl -->
122
+ </noscript>
123
+ {{{ end }}}
@@ -1,32 +1,32 @@
1
- {{{ if widgets.header.length }}}
2
- <div data-widget-area="header">
3
- {{{each widgets.header}}}
4
- {{widgets.header.html}}
5
- {{{end}}}
6
- </div>
7
- {{{ end }}}
8
- <div class="row">
9
- <div class="unread {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
10
- <!-- IMPORT partials/topic-list-bar.tpl -->
11
- <div class="category">
12
- <div id="category-no-topics" class="alert alert-info {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no-unread-topics]]</div>
13
-
14
- <!-- IMPORT partials/topics_list.tpl -->
15
- <button id="load-more-btn" class="btn btn-primary hide">[[unread:load-more]]</button>
16
- {{{ if config.usePagination }}}
17
- <!-- IMPORT partials/paginator.tpl -->
18
- {{{ end }}}
19
- </div>
20
- </div>
21
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
22
- {{{ each widgets.sidebar }}}
23
- {{widgets.sidebar.html}}
24
- {{{ end }}}
25
- </div>
26
- </div>
27
-
28
- <div data-widget-area="footer">
29
- {{{each widgets.footer}}}
30
- {{widgets.footer.html}}
31
- {{{end}}}
1
+ {{{ if widgets.header.length }}}
2
+ <div data-widget-area="header">
3
+ {{{each widgets.header}}}
4
+ {{widgets.header.html}}
5
+ {{{end}}}
6
+ </div>
7
+ {{{ end }}}
8
+ <div class="row">
9
+ <div class="unread {{{if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
10
+ <!-- IMPORT partials/topic-list-bar.tpl -->
11
+ <div class="category">
12
+ <div id="category-no-topics" class="alert alert-info {{{ if topics.length }}}hidden{{{ end }}}">[[unread:no-unread-topics]]</div>
13
+
14
+ <!-- IMPORT partials/topics_list.tpl -->
15
+ <button id="load-more-btn" class="btn btn-primary hide">[[unread:load-more]]</button>
16
+ {{{ if config.usePagination }}}
17
+ <!-- IMPORT partials/paginator.tpl -->
18
+ {{{ end }}}
19
+ </div>
20
+ </div>
21
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
22
+ {{{ each widgets.sidebar }}}
23
+ {{widgets.sidebar.html}}
24
+ {{{ end }}}
25
+ </div>
26
+ </div>
27
+
28
+ <div data-widget-area="footer">
29
+ {{{each widgets.footer}}}
30
+ {{widgets.footer.html}}
31
+ {{{end}}}
32
32
  </div>
@@ -1,39 +1,39 @@
1
- <div data-widget-area="header">
2
- {{{each widgets.header}}}
3
- {{widgets.header.html}}
4
- {{{end}}}
5
- </div>
6
- <div class="users">
7
- <h3 class="fw-semibold">[[global:users]]</h3>
8
- <div class="d-flex flex-wrap justify-content-between">
9
- <div class="mb-2 mb-md-0">
10
- <!-- IMPORT partials/users_list_menu.tpl -->
11
- </div>
12
- <div>
13
- <div class="d-flex justify-content-end gap-2">
14
- {{{ if showInviteButton }}}
15
- <button component="user/invite" class="btn btn-primary btn-sm text-nowrap"><i class="fa fa-user-plus"></i> [[users:invite]]</button>
16
- {{{ end }}}
17
- {{{ if displayUserSearch }}}
18
- <div class="search">
19
- <div class="input-group">
20
- <input class="form-control form-control-sm" id="search-user" type="text" placeholder="[[global:search]]" autocomplete="off" />
21
- <button class="btn btn-primary btn-sm" type="button" aria-label="[[global:search]]">
22
- <i component="user/search/icon" class="fa fa-search"></i>
23
- </button>
24
- </div>
25
- </div>
26
- {{{ end }}}
27
- </div>
28
- </div>
29
- </div>
30
- <hr/>
31
-
32
- <div id="users-container" class="users-container row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-4">
33
- {{{ each users }}}
34
- <!-- IMPORT partials/users/item.tpl -->
35
- {{{ end }}}
36
- </div>
37
-
38
- <!-- IMPORT partials/paginator.tpl -->
39
- </div>
1
+ <div data-widget-area="header">
2
+ {{{each widgets.header}}}
3
+ {{widgets.header.html}}
4
+ {{{end}}}
5
+ </div>
6
+ <div class="users">
7
+ <h3 class="fw-semibold">[[global:users]]</h3>
8
+ <div class="d-flex flex-wrap justify-content-between">
9
+ <div class="mb-2 mb-md-0">
10
+ <!-- IMPORT partials/users_list_menu.tpl -->
11
+ </div>
12
+ <div>
13
+ <div class="d-flex justify-content-end gap-2">
14
+ {{{ if showInviteButton }}}
15
+ <button component="user/invite" class="btn btn-primary btn-sm text-nowrap"><i class="fa fa-user-plus"></i> [[users:invite]]</button>
16
+ {{{ end }}}
17
+ {{{ if displayUserSearch }}}
18
+ <div class="search">
19
+ <div class="input-group">
20
+ <input class="form-control form-control-sm" id="search-user" type="text" placeholder="[[global:search]]" autocomplete="off" />
21
+ <button class="btn btn-primary btn-sm" type="button" aria-label="[[global:search]]">
22
+ <i component="user/search/icon" class="fa fa-search"></i>
23
+ </button>
24
+ </div>
25
+ </div>
26
+ {{{ end }}}
27
+ </div>
28
+ </div>
29
+ </div>
30
+ <hr/>
31
+
32
+ <div id="users-container" class="users-container row row-cols-2 row-cols-md-3 row-cols-lg-4 row-cols-xl-5 g-4">
33
+ {{{ each users }}}
34
+ <!-- IMPORT partials/users/item.tpl -->
35
+ {{{ end }}}
36
+ </div>
37
+
38
+ <!-- IMPORT partials/paginator.tpl -->
39
+ </div>