nodebb-theme-persona 13.3.31 → 13.3.33

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 +2 -2
  2. package/README.md +20 -20
  3. package/lib/controllers.js +24 -24
  4. package/library.js +97 -97
  5. package/package.json +52 -52
  6. package/plugin.json +20 -20
  7. package/public/.eslintrc +2 -2
  8. package/public/admin.js +15 -15
  9. package/public/modules/autohidingnavbar.js +220 -220
  10. package/public/modules/mobile-menu.js +190 -190
  11. package/public/modules/taskbar.js +65 -65
  12. package/public/persona.js +257 -257
  13. package/public/settings.js +53 -53
  14. package/scss/account.scss +336 -336
  15. package/scss/categories.scss +205 -205
  16. package/scss/category.scss +161 -161
  17. package/scss/chats.scss +14 -14
  18. package/scss/flags.scss +42 -42
  19. package/scss/footer.scss +16 -16
  20. package/scss/groups.scss +166 -166
  21. package/scss/header.scss +229 -361
  22. package/scss/keyframes.scss +152 -152
  23. package/scss/mixins.scss +129 -129
  24. package/scss/mobile.scss +222 -331
  25. package/scss/modules/composer.scss +20 -20
  26. package/scss/modules/cookie-consent.scss +12 -12
  27. package/scss/modules/fab.scss +32 -32
  28. package/scss/modules/morph.scss +268 -268
  29. package/scss/modules/necro-post.scss +8 -8
  30. package/scss/modules/nprogress.scss +80 -80
  31. package/scss/modules/taskbar.scss +160 -160
  32. package/scss/modules/user-menu.scss +7 -7
  33. package/scss/modules/usercard.scss +64 -64
  34. package/scss/noscript.scss +80 -80
  35. package/scss/overrides.scss +39 -39
  36. package/scss/persona.scss +34 -34
  37. package/scss/posts_list.scss +127 -127
  38. package/scss/search.scss +48 -48
  39. package/scss/style.scss +256 -270
  40. package/scss/tags.scss +10 -10
  41. package/scss/topic.scss +571 -571
  42. package/scss/topics_list.scss +16 -16
  43. package/scss/variables.scss +6 -6
  44. package/templates/account/blocks.tpl +46 -46
  45. package/templates/account/categories.tpl +28 -28
  46. package/templates/account/consent.tpl +68 -68
  47. package/templates/account/edit/password.tpl +29 -29
  48. package/templates/account/edit/username.tpl +25 -25
  49. package/templates/account/edit.tpl +136 -136
  50. package/templates/account/followers.tpl +17 -17
  51. package/templates/account/following.tpl +17 -17
  52. package/templates/account/groups.tpl +16 -16
  53. package/templates/account/info.tpl +291 -291
  54. package/templates/account/posts.tpl +18 -18
  55. package/templates/account/profile.tpl +166 -166
  56. package/templates/account/sessions.tpl +31 -31
  57. package/templates/account/settings.tpl +251 -251
  58. package/templates/account/tags.tpl +9 -9
  59. package/templates/account/theme.tpl +25 -25
  60. package/templates/account/topics.tpl +29 -29
  61. package/templates/account/uploads.tpl +42 -42
  62. package/templates/admin/plugins/persona.tpl +24 -24
  63. package/templates/categories.tpl +31 -31
  64. package/templates/category.tpl +63 -63
  65. package/templates/flags/detail.tpl +208 -208
  66. package/templates/flags/list.tpl +71 -71
  67. package/templates/footer.tpl +11 -11
  68. package/templates/groups/details.tpl +77 -77
  69. package/templates/groups/list.tpl +48 -48
  70. package/templates/groups/members.tpl +5 -5
  71. package/templates/header.tpl +47 -47
  72. package/templates/modules/taskbar.tpl +2 -2
  73. package/templates/modules/usercard.tpl +36 -36
  74. package/templates/notifications.tpl +66 -66
  75. package/templates/partials/account/category-item.tpl +23 -23
  76. package/templates/partials/account/header.tpl +47 -47
  77. package/templates/partials/account/menu.tpl +108 -108
  78. package/templates/partials/breadcrumbs.tpl +18 -18
  79. package/templates/partials/buttons/newTopic.tpl +22 -22
  80. package/templates/partials/categories/item.tpl +60 -60
  81. package/templates/partials/categories/lastpost.tpl +26 -26
  82. package/templates/partials/category/filter-dropdown-content.tpl +31 -31
  83. package/templates/partials/category/selector-dropdown-content.tpl +32 -32
  84. package/templates/partials/category/sort.tpl +14 -14
  85. package/templates/partials/category/subcategory.tpl +17 -17
  86. package/templates/partials/category/tags.tpl +3 -3
  87. package/templates/partials/category/tools.tpl +86 -86
  88. package/templates/partials/category/watch.tpl +55 -55
  89. package/templates/partials/chats-menu.tpl +41 -40
  90. package/templates/partials/cookie-consent.tpl +4 -4
  91. package/templates/partials/flags/filters.tpl +173 -173
  92. package/templates/partials/groups/admin.tpl +200 -200
  93. package/templates/partials/groups/filter-dropdown-content.tpl +24 -24
  94. package/templates/partials/groups/list.tpl +20 -20
  95. package/templates/partials/groups/memberlist.tpl +42 -42
  96. package/templates/partials/header/chats.tpl +18 -18
  97. package/templates/partials/header/notifications.tpl +49 -19
  98. package/templates/partials/header/search.tpl +24 -24
  99. package/templates/partials/header/user-menu.tpl +96 -96
  100. package/templates/partials/menu.tpl +128 -128
  101. package/templates/partials/notifications_list.tpl +44 -30
  102. package/templates/partials/paginator.tpl +44 -44
  103. package/templates/partials/post_bar.tpl +20 -20
  104. package/templates/partials/posts_list.tpl +7 -7
  105. package/templates/partials/posts_list_item.tpl +31 -31
  106. package/templates/partials/quick-search-results.tpl +33 -33
  107. package/templates/partials/search-filters.tpl +183 -183
  108. package/templates/partials/search-results.tpl +54 -54
  109. package/templates/partials/slideout-menu.tpl +4 -4
  110. package/templates/partials/tags/filter-dropdown-content.tpl +33 -33
  111. package/templates/partials/tags/watch.tpl +35 -35
  112. package/templates/partials/tags_list.tpl +4 -4
  113. package/templates/partials/toast.tpl +19 -19
  114. package/templates/partials/topic/event.tpl +12 -12
  115. package/templates/partials/topic/navigation-post.tpl +11 -11
  116. package/templates/partials/topic/navigator.tpl +39 -39
  117. package/templates/partials/topic/necro-post.tpl +2 -2
  118. package/templates/partials/topic/post-menu-list.tpl +132 -132
  119. package/templates/partials/topic/post-menu.tpl +4 -4
  120. package/templates/partials/topic/post.tpl +128 -128
  121. package/templates/partials/topic/quickreply.tpl +28 -28
  122. package/templates/partials/topic/reply-button.tpl +26 -26
  123. package/templates/partials/topic/selection-tooltip.tpl +2 -2
  124. package/templates/partials/topic/sort.tpl +9 -9
  125. package/templates/partials/topic/stats.tpl +11 -11
  126. package/templates/partials/topic/tags.tpl +2 -2
  127. package/templates/partials/topic/tools.tpl +7 -7
  128. package/templates/partials/topic/topic-menu-list.tpl +74 -74
  129. package/templates/partials/topic/watch.tpl +47 -47
  130. package/templates/partials/topic-filters.tpl +11 -11
  131. package/templates/partials/topic-terms.tpl +11 -11
  132. package/templates/partials/topics_list.tpl +117 -117
  133. package/templates/partials/users/filter-dropdown-content.tpl +20 -20
  134. package/templates/partials/users/item.tpl +43 -43
  135. package/templates/partials/users_list.tpl +14 -14
  136. package/templates/partials/users_list_menu.tpl +20 -20
  137. package/templates/popular.tpl +35 -35
  138. package/templates/recent.tpl +37 -37
  139. package/templates/search.tpl +47 -47
  140. package/templates/tag.tpl +34 -34
  141. package/templates/tags.tpl +32 -32
  142. package/templates/top.tpl +35 -35
  143. package/templates/topic.tpl +129 -129
  144. package/templates/unread.tpl +37 -37
  145. package/templates/users.tpl +34 -34
@@ -1,48 +1,48 @@
1
- <!-- IF config.loggedIn -->
2
- <div class="btn-group bottom-sheet" component="topic/watch"
3
- data-bs-toggle="tooltip"
4
- {{{if isFollowing}}}title="[[topic:watching]]"{{{end}}}
5
- {{{if isNotFollowing}}}title="[[topic:not-watching]]"{{{end}}}
6
- {{{if isIgnoring}}}title="[[topic:ignoring]]"{{{end}}}
7
- >
8
- <button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
9
- <span component="topic/following/menu" <!-- IF !isFollowing -->class="hidden"<!-- ENDIF !isFollowing -->><i class="fa fa-fw fa-bell-o"></i></span>
10
-
11
- <span component="topic/not-following/menu" <!-- IF !isNotFollowing -->class="hidden"<!-- ENDIF !isNotFollowing -->><i class="fa fa-fw fa-bell-slash-o"></i></span>
12
-
13
- <span component="topic/ignoring/menu" <!-- IF !isIgnoring -->class="hidden"<!-- ENDIF !isIgnoring -->><i class="fa fa-fw fa-eye-slash"></i></span>
14
-
15
- </button>
16
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
17
- <li>
18
- <a class="dropdown-item d-flex" href="#" component="topic/following" role="menuitem">
19
- <span><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
20
- <div class="d-flex flex-column">
21
- <span><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]</span>
22
- <p class="help-text text-muted"><small>[[topic:watching.description]]</small></p>
23
- </div>
24
- </a>
25
- </li>
26
-
27
- <li>
28
- <a class="dropdown-item d-flex" href="#" component="topic/not-following" role="menuitem">
29
- <span><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i></span>
30
- <div class="d-flex flex-column">
31
- <span><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]</span>
32
- <p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p>
33
- </div>
34
- </a>
35
- </li>
36
-
37
- <li>
38
- <a class="dropdown-item d-flex" href="#" component="topic/ignoring" role="menuitem">
39
- <span><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i></span>
40
- <div class="d-flex flex-column">
41
- <span><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]</span>
42
- <p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p>
43
- </div>
44
- </a>
45
- </li>
46
- </ul>
47
- </div>
1
+ <!-- IF config.loggedIn -->
2
+ <div class="btn-group bottom-sheet" component="topic/watch"
3
+ data-bs-toggle="tooltip"
4
+ {{{if isFollowing}}}title="[[topic:watching]]"{{{end}}}
5
+ {{{if isNotFollowing}}}title="[[topic:not-watching]]"{{{end}}}
6
+ {{{if isIgnoring}}}title="[[topic:ignoring]]"{{{end}}}
7
+ >
8
+ <button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
9
+ <span component="topic/following/menu" <!-- IF !isFollowing -->class="hidden"<!-- ENDIF !isFollowing -->><i class="fa fa-fw fa-bell-o"></i></span>
10
+
11
+ <span component="topic/not-following/menu" <!-- IF !isNotFollowing -->class="hidden"<!-- ENDIF !isNotFollowing -->><i class="fa fa-fw fa-bell-slash-o"></i></span>
12
+
13
+ <span component="topic/ignoring/menu" <!-- IF !isIgnoring -->class="hidden"<!-- ENDIF !isIgnoring -->><i class="fa fa-fw fa-eye-slash"></i></span>
14
+
15
+ </button>
16
+ <ul class="dropdown-menu dropdown-menu-end" role="menu">
17
+ <li>
18
+ <a class="dropdown-item d-flex" href="#" component="topic/following" role="menuitem">
19
+ <span><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
20
+ <div class="d-flex flex-column">
21
+ <span><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]</span>
22
+ <p class="help-text text-muted"><small>[[topic:watching.description]]</small></p>
23
+ </div>
24
+ </a>
25
+ </li>
26
+
27
+ <li>
28
+ <a class="dropdown-item d-flex" href="#" component="topic/not-following" role="menuitem">
29
+ <span><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i></span>
30
+ <div class="d-flex flex-column">
31
+ <span><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]</span>
32
+ <p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p>
33
+ </div>
34
+ </a>
35
+ </li>
36
+
37
+ <li>
38
+ <a class="dropdown-item d-flex" href="#" component="topic/ignoring" role="menuitem">
39
+ <span><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i></span>
40
+ <div class="d-flex flex-column">
41
+ <span><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]</span>
42
+ <p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p>
43
+ </div>
44
+ </a>
45
+ </li>
46
+ </ul>
47
+ </div>
48
48
  <!-- ENDIF config.loggedIn -->
@@ -1,12 +1,12 @@
1
- <div class="btn-group bottom-sheet{{{ if !filters.length }}} hidden{{{ end }}}">
2
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
- <span class="visible-sm-inline visible-md-inline visible-lg-inline">{selectedFilter.name}</span><span class="visible-xs-inline"><i class="fa fa-fw {selectedFilter.icon}"></i></span> <span class="caret"></span>
4
- </button>
5
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
6
- {{{each filters}}}
7
- <li role="presentation" class="category {{{if filters.selected}}}selected{{{end}}}">
8
- <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{filters.url}"><i class="fa fa-fw {{{ if filters.selected }}}fa-check{{{ end }}}"></i>{filters.name}</a>
9
- </li>
10
- {{{end}}}
11
- </ul>
1
+ <div class="btn-group bottom-sheet{{{ if !filters.length }}} hidden{{{ end }}}">
2
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
+ <span class="visible-sm-inline visible-md-inline visible-lg-inline">{selectedFilter.name}</span><span class="visible-xs-inline"><i class="fa fa-fw {selectedFilter.icon}"></i></span> <span class="caret"></span>
4
+ </button>
5
+ <ul class="dropdown-menu dropdown-menu-end" role="menu">
6
+ {{{each filters}}}
7
+ <li role="presentation" class="category {{{if filters.selected}}}selected{{{end}}}">
8
+ <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{filters.url}"><i class="fa fa-fw {{{ if filters.selected }}}fa-check{{{ end }}}"></i>{filters.name}</a>
9
+ </li>
10
+ {{{end}}}
11
+ </ul>
12
12
  </div>
@@ -1,12 +1,12 @@
1
- <div class="btn-group bottom-sheet {{{ if !terms.length }}}hidden{{{ end }}}">
2
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
- {selectedTerm.name} <span class="caret"></span>
4
- </button>
5
- <ul class="dropdown-menu dropdown-menu-end" role="menu">
6
- {{{each terms}}}
7
- <li role="presentation" class="category">
8
- <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{terms.url}"><i class="fa fa-fw {{{ if terms.selected }}}fa-check{{{ end }}}"></i>{terms.name}</a>
9
- </li>
10
- {{{end}}}
11
- </ul>
1
+ <div class="btn-group bottom-sheet {{{ if !terms.length }}}hidden{{{ end }}}">
2
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
+ {selectedTerm.name} <span class="caret"></span>
4
+ </button>
5
+ <ul class="dropdown-menu dropdown-menu-end" role="menu">
6
+ {{{each terms}}}
7
+ <li role="presentation" class="category">
8
+ <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{terms.url}"><i class="fa fa-fw {{{ if terms.selected }}}fa-check{{{ end }}}"></i>{terms.name}</a>
9
+ </li>
10
+ {{{end}}}
11
+ </ul>
12
12
  </div>
@@ -1,117 +1,117 @@
1
- <ul component="category" class="topic-list" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
2
- {{{each topics}}}
3
- <li component="category/topic" class="row clearfix category-item {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
4
- <link itemprop="url" content="{config.relative_path}/topic/{../slug}" />
5
- <meta itemprop="name" content="{function.stripTags, ../title}" />
6
- <meta itemprop="itemListOrder" content="descending" />
7
- <meta itemprop="position" content="{increment(./index, "1")}" />
8
- <a id="{../index}" data-index="{../index}" component="topic/anchor"></a>
9
-
10
- <div class="col-md-6 col-sm-9 col-10 content">
11
- <div class="avatar float-start me-2">
12
- <!-- IF showSelect -->
13
- <div class="select" component="topic/select">
14
- {{{ if ./thumbs.length }}}
15
- <img src="{./thumbs.0.url}" class="user-img not-responsive" />
16
- {{{ else }}}
17
- {buildAvatar(../user, "48px", true, "not-responsive")}
18
- {{{ end }}}
19
- <i class="fa fa-check"></i>
20
- </div>
21
- <!-- ENDIF showSelect -->
22
-
23
- <!-- IF !showSelect -->
24
- <a href="<!-- IF topics.user.userslug -->{config.relative_path}/user/{topics.user.userslug}<!-- ELSE -->#<!-- ENDIF topics.user.userslug -->" class="float-start">
25
- {{{ if ./thumbs.length }}}
26
- <img src="{./thumbs.0.url}" class="user-img not-responsive" />
27
- {{{ else }}}
28
- {buildAvatar(../user, "48px", true, "not-responsive")}
29
- {{{ end }}}
30
- </a>
31
- <!-- ENDIF !showSelect -->
32
- </div>
33
-
34
- <h2 component="topic/header" class="title mb-1">
35
- <i component="topic/watched" class="fa fa-bell-o {{{ if !topics.followed }}}hidden{{{ end }}}" title="[[topic:watching]]"></i>
36
- <i component="topic/watched" class="fa fa-eye-slash {{{ if !topics.ignored }}}hidden{{{ end }}}" title="[[topic:ignoring]]"></i>
37
- <i component="topic/scheduled" class="fa fa-clock-o {{{ if !topics.scheduled }}}hidden{{{ end }}}" title="[[topic:scheduled]]"></i>
38
- <i component="topic/pinned" class="fa fa-thumb-tack {{{ if (topics.scheduled || !topics.pinned) }}}hidden{{{ end }}}" title="{{{ if !../pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {../pinExpiryISO}]]{{{ end }}}"></i>
39
- <i component="topic/locked" class="fa fa-lock {{{ if !topics.locked }}}hidden{{{ end }}}" title="[[topic:locked]]"></i>
40
- <i component="topic/moved" class="fa fa-arrow-circle-right {{{ if !topics.oldCid }}}hidden{{{ end }}}" title="[[topic:moved]]"></i>
41
- {{{each topics.icons}}}{@value}{{{end}}}
42
-
43
- {{{ if topics.noAnchor }}}
44
- <span>{./title}</span>
45
- {{{ else }}}
46
- <a href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}">{./title}</a>
47
- {{{ end }}}
48
- </h2>
49
- <div class="info">
50
- <!-- IF !template.category -->
51
- <div class="category-item d-inline-block">
52
- {buildCategoryIcon(./category, "24px", "rounded-circle")}
53
- <a class="text-muted" href="{config.relative_path}/category/{topics.category.slug}">{topics.category.name}</a>
54
- </div>
55
- &bull;
56
- <!-- ENDIF !template.category -->
57
-
58
-
59
- <span data-tid="{./tid}" component="topic/tags" class="tag-list hidden-xs {{{ if !./tags.length }}}hidden{{{ end}}}">
60
- {{{ each ./tags }}}
61
- <!-- IMPORT partials/topic/tag.tpl -->
62
- {{{ end }}}
63
- &bull;
64
- </span>
65
-
66
- <span class="hidden-xs"><span class="timeago text-muted" title="{./timestampISO}"></span> &bull; <a class="text-muted" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{./user.displayname}</a></span>
67
-
68
- <span class="visible-xs-inline timeago text-muted" title="{{{ if ./teaser.timestampISO }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></span>
69
- </div>
70
- </div>
71
-
72
- <div class="mobile-stat col-2 visible-xs text-end">
73
- <span>{humanReadableNumber(topics.postcount)}</span> <a href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"><i class="fa fa-arrow-circle-right"></i></a>
74
- </div>
75
-
76
- <div class="col-md-1 hidden-sm hidden-xs stats stats-votes">
77
- <!-- IF !reputation:disabled -->
78
- <span title="{topics.votes}">{humanReadableNumber(topics.votes)}</span><br />
79
- <small>[[global:votes]]</small>
80
- <!-- END -->
81
- </div>
82
-
83
- <div class="col-md-1 hidden-sm hidden-xs stats stats-postcount">
84
- <span title="{topics.postcount}">{humanReadableNumber(topics.postcount)}</span><br />
85
- <small>[[global:posts]]</small>
86
- </div>
87
-
88
- <div class="col-md-1 hidden-sm hidden-xs stats stats-viewcount">
89
- <span title="{topics.viewcount}">{humanReadableNumber(topics.viewcount)}</span><br />
90
- <small>[[global:views]]</small>
91
- </div>
92
-
93
- <div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
94
- <div class="lastpost background-link-container" style="border-color: {topics.category.bgColor}">
95
- <a class="background-link" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"></a>
96
- <!-- IF topics.unreplied -->
97
- <p>
98
- [[category:no-replies]]
99
- </p>
100
- <!-- ELSE -->
101
- <!-- IF topics.teaser.pid -->
102
- <p>
103
- <a href="{config.relative_path}/user/{topics.teaser.user.userslug}">{buildAvatar(topics.teaser.user, "24px", true, "not-responsive")}</a>
104
- <a class="permalink text-muted" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}">
105
- <span class="timeago" title="{topics.teaser.timestampISO}"></span>
106
- </a>
107
- </p>
108
- <div class="post-content">
109
- {topics.teaser.content}
110
- </div>
111
- <!-- ENDIF topics.teaser.pid -->
112
- <!-- ENDIF topics.unreplied -->
113
- </div>
114
- </div>
115
- </li>
116
- {{{end}}}
117
- </ul>
1
+ <ul component="category" class="topic-list" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
2
+ {{{each topics}}}
3
+ <li component="category/topic" class="row clearfix category-item {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
4
+ <link itemprop="url" content="{config.relative_path}/topic/{../slug}" />
5
+ <meta itemprop="name" content="{function.stripTags, ../title}" />
6
+ <meta itemprop="itemListOrder" content="descending" />
7
+ <meta itemprop="position" content="{increment(./index, "1")}" />
8
+ <a id="{../index}" data-index="{../index}" component="topic/anchor"></a>
9
+
10
+ <div class="col-md-6 col-sm-9 col-10 content">
11
+ <div class="avatar float-start me-2">
12
+ <!-- IF showSelect -->
13
+ <div class="select" component="topic/select">
14
+ {{{ if ./thumbs.length }}}
15
+ <img src="{./thumbs.0.url}" class="user-img not-responsive" />
16
+ {{{ else }}}
17
+ {buildAvatar(../user, "48px", true, "not-responsive")}
18
+ {{{ end }}}
19
+ <i class="fa fa-check"></i>
20
+ </div>
21
+ <!-- ENDIF showSelect -->
22
+
23
+ <!-- IF !showSelect -->
24
+ <a href="<!-- IF topics.user.userslug -->{config.relative_path}/user/{topics.user.userslug}<!-- ELSE -->#<!-- ENDIF topics.user.userslug -->" class="float-start">
25
+ {{{ if ./thumbs.length }}}
26
+ <img src="{./thumbs.0.url}" class="user-img not-responsive" />
27
+ {{{ else }}}
28
+ {buildAvatar(../user, "48px", true, "not-responsive")}
29
+ {{{ end }}}
30
+ </a>
31
+ <!-- ENDIF !showSelect -->
32
+ </div>
33
+
34
+ <h2 component="topic/header" class="title mb-1">
35
+ <i component="topic/watched" class="fa fa-bell-o {{{ if !topics.followed }}}hidden{{{ end }}}" title="[[topic:watching]]"></i>
36
+ <i component="topic/watched" class="fa fa-eye-slash {{{ if !topics.ignored }}}hidden{{{ end }}}" title="[[topic:ignoring]]"></i>
37
+ <i component="topic/scheduled" class="fa fa-clock-o {{{ if !topics.scheduled }}}hidden{{{ end }}}" title="[[topic:scheduled]]"></i>
38
+ <i component="topic/pinned" class="fa fa-thumb-tack {{{ if (topics.scheduled || !topics.pinned) }}}hidden{{{ end }}}" title="{{{ if !../pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {../pinExpiryISO}]]{{{ end }}}"></i>
39
+ <i component="topic/locked" class="fa fa-lock {{{ if !topics.locked }}}hidden{{{ end }}}" title="[[topic:locked]]"></i>
40
+ <i component="topic/moved" class="fa fa-arrow-circle-right {{{ if !topics.oldCid }}}hidden{{{ end }}}" title="[[topic:moved]]"></i>
41
+ {{{each topics.icons}}}{@value}{{{end}}}
42
+
43
+ {{{ if topics.noAnchor }}}
44
+ <span>{./title}</span>
45
+ {{{ else }}}
46
+ <a href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}">{./title}</a>
47
+ {{{ end }}}
48
+ </h2>
49
+ <div class="info">
50
+ <!-- IF !template.category -->
51
+ <div class="category-item d-inline-block">
52
+ {buildCategoryIcon(./category, "24px", "rounded-circle")}
53
+ <a class="text-muted" href="{config.relative_path}/category/{topics.category.slug}">{topics.category.name}</a>
54
+ </div>
55
+ &bull;
56
+ <!-- ENDIF !template.category -->
57
+
58
+
59
+ <span data-tid="{./tid}" component="topic/tags" class="tag-list hidden-xs {{{ if !./tags.length }}}hidden{{{ end}}}">
60
+ {{{ each ./tags }}}
61
+ <!-- IMPORT partials/topic/tag.tpl -->
62
+ {{{ end }}}
63
+ &bull;
64
+ </span>
65
+
66
+ <span class="hidden-xs"><span class="timeago text-muted" title="{./timestampISO}"></span> &bull; <a class="text-muted" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{./user.displayname}</a></span>
67
+
68
+ <span class="visible-xs-inline timeago text-muted" title="{{{ if ./teaser.timestampISO }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></span>
69
+ </div>
70
+ </div>
71
+
72
+ <div class="mobile-stat col-2 visible-xs text-end">
73
+ <span>{humanReadableNumber(topics.postcount)}</span> <a href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"><i class="fa fa-arrow-circle-right"></i></a>
74
+ </div>
75
+
76
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-votes">
77
+ <!-- IF !reputation:disabled -->
78
+ <span title="{topics.votes}">{humanReadableNumber(topics.votes)}</span><br />
79
+ <small>[[global:votes]]</small>
80
+ <!-- END -->
81
+ </div>
82
+
83
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-postcount">
84
+ <span title="{topics.postcount}">{humanReadableNumber(topics.postcount)}</span><br />
85
+ <small>[[global:posts]]</small>
86
+ </div>
87
+
88
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-viewcount">
89
+ <span title="{topics.viewcount}">{humanReadableNumber(topics.viewcount)}</span><br />
90
+ <small>[[global:views]]</small>
91
+ </div>
92
+
93
+ <div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
94
+ <div class="lastpost background-link-container" style="border-color: {topics.category.bgColor}">
95
+ <a class="background-link" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"></a>
96
+ <!-- IF topics.unreplied -->
97
+ <p>
98
+ [[category:no-replies]]
99
+ </p>
100
+ <!-- ELSE -->
101
+ <!-- IF topics.teaser.pid -->
102
+ <p>
103
+ <a href="{config.relative_path}/user/{topics.teaser.user.userslug}">{buildAvatar(topics.teaser.user, "24px", true, "not-responsive")}</a>
104
+ <a class="permalink text-muted" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}">
105
+ <span class="timeago" title="{topics.teaser.timestampISO}"></span>
106
+ </a>
107
+ </p>
108
+ <div class="post-content">
109
+ {topics.teaser.content}
110
+ </div>
111
+ <!-- ENDIF topics.teaser.pid -->
112
+ <!-- ENDIF topics.unreplied -->
113
+ </div>
114
+ </div>
115
+ </li>
116
+ {{{end}}}
117
+ </ul>
@@ -1,20 +1,20 @@
1
- <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
- {{{ if selectedUser }}}
3
- <span class="">{buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}</span>
4
- {{{ else }}}
5
- <span class="">[[users:all-users]]</span>
6
- {{{ end }}} <span class="caret"></span>
7
- </button>
8
- <ul class="dropdown-menu" role="menu">
9
- <li role="presentation" class="user {{{ if !selectedUser}}}selected{{{end}}}">
10
- <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{allUsersUrl}"><i class="fa fa-fw {{{ if !selectedUser }}}fa-check{{{ end }}}"></i>[[users:all-users]]</a>
11
- </li>
12
- {{{ each users }}}
13
- <li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
14
- <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{./url}">
15
- <i class="fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
16
- <div class="d-inline-flex gap-1 align-items-center">{buildAvatar(@value, "24px", true, "not-responsive")} {./username}</div>
17
- </a>
18
- </li>
19
- {{{end}}}
20
- </ul>
1
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
2
+ {{{ if selectedUser }}}
3
+ <span class="">{buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}</span>
4
+ {{{ else }}}
5
+ <span class="">[[users:all-users]]</span>
6
+ {{{ end }}} <span class="caret"></span>
7
+ </button>
8
+ <ul class="dropdown-menu" role="menu">
9
+ <li role="presentation" class="user {{{ if !selectedUser}}}selected{{{end}}}">
10
+ <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{allUsersUrl}"><i class="fa fa-fw {{{ if !selectedUser }}}fa-check{{{ end }}}"></i>[[users:all-users]]</a>
11
+ </li>
12
+ {{{ each users }}}
13
+ <li role="presentation" class="user {{{ if ./selected}}}selected{{{end}}}">
14
+ <a class="dropdown-item" role="menuitem" href="{config.relative_path}/{./url}">
15
+ <i class="fa fa-fw {{{ if ./selected }}}fa-check{{{ end }}}"></i>
16
+ <div class="d-inline-flex gap-1 align-items-center">{buildAvatar(@value, "24px", true, "not-responsive")} {./username}</div>
17
+ </a>
18
+ </li>
19
+ {{{end}}}
20
+ </ul>
@@ -1,44 +1,44 @@
1
- <li class="users-box registered-user text-center pb-3" data-uid="{users.uid}" style="width: 102px;">
2
- <a href="{config.relative_path}/user/{users.userslug}">{buildAvatar(users, "64px", true)}</a>
3
-
4
- <div class="user-info">
5
- <div class="text-nowrap text-truncate">
6
- <span>
7
- <i component="user/status" class="fa fa-circle status {users.status}" title="[[global:{users.status}]]"></i>
8
- <a href="{config.relative_path}/user/{users.userslug}">{users.username}</a>
9
- </span>
10
- </div>
11
- <!-- IF section_online -->
12
- <div class="lastonline">
13
- <span class="timeago" title="{users.lastonlineISO}"></span>
14
- </div>
15
- <!-- ENDIF section_online -->
16
-
17
- <!-- IF section_joindate -->
18
- <div class="joindate">
19
- <span class="timeago" title="{users.joindateISO}"></span>
20
- </div>
21
- <!-- ENDIF section_joindate -->
22
-
23
- <!-- IF section_sort-reputation -->
24
- <div class="reputation">
25
- <i class="fa fa-star"></i>
26
- <span>{formattedNumber(users.reputation)}</span>
27
- </div>
28
- <!-- ENDIF section_sort-reputation -->
29
-
30
- <!-- IF section_sort-posts -->
31
- <div class="post-count">
32
- <i class="fa fa-pencil"></i>
33
- <span>{formattedNumber(users.postcount)}</span>
34
- </div>
35
- <!-- ENDIF section_sort-posts -->
36
-
37
- <!-- IF section_flagged -->
38
- <div class="flag-count">
39
- <i class="fa fa-flag"></i>
40
- <span><a href="{config.relative_path}/flags?targetUid={users.uid}">{users.flags}</a></span>
41
- </div>
42
- <!-- ENDIF section_flagged -->
43
- </div>
1
+ <li class="users-box registered-user text-center pb-3" data-uid="{users.uid}" style="width: 102px;">
2
+ <a href="{config.relative_path}/user/{users.userslug}">{buildAvatar(users, "64px", true)}</a>
3
+
4
+ <div class="user-info">
5
+ <div class="text-nowrap text-truncate">
6
+ <span>
7
+ <i component="user/status" class="fa fa-circle status {users.status}" title="[[global:{users.status}]]"></i>
8
+ <a href="{config.relative_path}/user/{users.userslug}">{users.username}</a>
9
+ </span>
10
+ </div>
11
+ <!-- IF section_online -->
12
+ <div class="lastonline">
13
+ <span class="timeago" title="{users.lastonlineISO}"></span>
14
+ </div>
15
+ <!-- ENDIF section_online -->
16
+
17
+ <!-- IF section_joindate -->
18
+ <div class="joindate">
19
+ <span class="timeago" title="{users.joindateISO}"></span>
20
+ </div>
21
+ <!-- ENDIF section_joindate -->
22
+
23
+ <!-- IF section_sort-reputation -->
24
+ <div class="reputation">
25
+ <i class="fa fa-star"></i>
26
+ <span>{formattedNumber(users.reputation)}</span>
27
+ </div>
28
+ <!-- ENDIF section_sort-reputation -->
29
+
30
+ <!-- IF section_sort-posts -->
31
+ <div class="post-count">
32
+ <i class="fa fa-pencil"></i>
33
+ <span>{formattedNumber(users.postcount)}</span>
34
+ </div>
35
+ <!-- ENDIF section_sort-posts -->
36
+
37
+ <!-- IF section_flagged -->
38
+ <div class="flag-count">
39
+ <i class="fa fa-flag"></i>
40
+ <span><a href="{config.relative_path}/flags?targetUid={users.uid}">{users.flags}</a></span>
41
+ </div>
42
+ <!-- ENDIF section_flagged -->
43
+ </div>
44
44
  </li>
@@ -1,15 +1,15 @@
1
- <ul id="users-container" class="users-container list-unstyled d-flex flex-wrap gap-2">
2
- {{{each users}}}
3
- <!-- IMPORT partials/users/item.tpl -->
4
- {{{end}}}
5
- <!-- IF anonymousUserCount -->
6
- <li class="users-box anon-user text-center pb-3" style="width: 102px;">
7
- <span class="avatar avatar-rounded text-bg-secondary" component="avatar/icon" style="--avatar-size: 64px;">G</span>
8
- <br/>
9
- <div class="user-info">
10
- <span id="online_anon_count">{anonymousUserCount}</span>
11
- <span>[[global:guests]]</span>
12
- </div>
13
- </li>
14
- <!-- ENDIF anonymousUserCount -->
1
+ <ul id="users-container" class="users-container list-unstyled d-flex flex-wrap gap-2">
2
+ {{{each users}}}
3
+ <!-- IMPORT partials/users/item.tpl -->
4
+ {{{end}}}
5
+ <!-- IF anonymousUserCount -->
6
+ <li class="users-box anon-user text-center pb-3" style="width: 102px;">
7
+ <span class="avatar avatar-rounded text-bg-secondary" component="avatar/icon" style="--avatar-size: 64px;">G</span>
8
+ <br/>
9
+ <div class="user-info">
10
+ <span id="online_anon_count">{anonymousUserCount}</span>
11
+ <span>[[global:guests]]</span>
12
+ </div>
13
+ </li>
14
+ <!-- ENDIF anonymousUserCount -->
15
15
  </ul>
@@ -1,21 +1,21 @@
1
- <ul component="user/list/menu" class="nav nav-pills">
2
- <li class="nav-item">
3
- <a class="nav-link" href="{config.relative_path}/users?section=online">[[global:online]]</a>
4
- </li>
5
- <li class="nav-item">
6
- <a class="nav-link" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
7
- </li>
8
- {{{ if !reputation:disabled }}}
9
- <li class="nav-item">
10
- <a class="nav-link" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
11
- </li>
12
- {{{ end }}}
13
- {{{ if isAdminOrGlobalMod }}}
14
- <li class="nav-item">
15
- <a class="nav-link" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
16
- </li>
17
- <li class="nav-item">
18
- <a class="nav-link" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
19
- </li>
20
- {{{ end }}}
1
+ <ul component="user/list/menu" class="nav nav-pills">
2
+ <li class="nav-item">
3
+ <a class="nav-link" href="{config.relative_path}/users?section=online">[[global:online]]</a>
4
+ </li>
5
+ <li class="nav-item">
6
+ <a class="nav-link" href="{config.relative_path}/users?section=sort-posts">[[users:top-posters]]</a>
7
+ </li>
8
+ {{{ if !reputation:disabled }}}
9
+ <li class="nav-item">
10
+ <a class="nav-link" href="{config.relative_path}/users?section=sort-reputation">[[users:most-reputation]]</a>
11
+ </li>
12
+ {{{ end }}}
13
+ {{{ if isAdminOrGlobalMod }}}
14
+ <li class="nav-item">
15
+ <a class="nav-link" href="{config.relative_path}/users?section=flagged">[[users:most-flags]]</a>
16
+ </li>
17
+ <li class="nav-item">
18
+ <a class="nav-link" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
19
+ </li>
20
+ {{{ end }}}
21
21
  </ul>