nodebb-theme-harmony 1.0.0-beta.4 → 1.0.0-beta.40

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 (108) hide show
  1. package/languages/en-GB/harmony.json +5 -1
  2. package/library.js +21 -7
  3. package/package.json +1 -1
  4. package/public/harmony.js +107 -9
  5. package/public/settings.js +1 -0
  6. package/scss/common.scss +46 -4
  7. package/scss/harmony.scss +2 -0
  8. package/scss/mixins.scss +7 -3
  9. package/scss/modals.scss +6 -1
  10. package/scss/modules/bottom-sheet.scss +1 -1
  11. package/scss/modules/composer.scss +0 -4
  12. package/scss/modules/cover.scss +1 -11
  13. package/scss/modules/paginator.scss +24 -0
  14. package/scss/overrides.scss +3 -1
  15. package/scss/search.scss +8 -0
  16. package/scss/sidebar.scss +7 -4
  17. package/scss/topic.scss +22 -12
  18. package/templates/account/blocks.tpl +35 -41
  19. package/templates/account/categories.tpl +23 -30
  20. package/templates/account/consent.tpl +66 -10
  21. package/templates/account/edit/password.tpl +25 -30
  22. package/templates/account/edit/username.tpl +21 -26
  23. package/templates/account/edit.tpl +105 -116
  24. package/templates/account/followers.tpl +12 -19
  25. package/templates/account/following.tpl +12 -18
  26. package/templates/account/groups.tpl +12 -17
  27. package/templates/account/info.tpl +178 -206
  28. package/templates/account/posts.tpl +31 -36
  29. package/templates/account/profile.tpl +66 -73
  30. package/templates/account/sessions.tpl +8 -30
  31. package/templates/account/settings.tpl +193 -198
  32. package/templates/account/theme.tpl +34 -25
  33. package/templates/account/topics.tpl +33 -38
  34. package/templates/account/uploads.tpl +33 -40
  35. package/templates/categories.tpl +1 -1
  36. package/templates/category.tpl +12 -13
  37. package/templates/flags/detail.tpl +24 -25
  38. package/templates/flags/list.tpl +11 -11
  39. package/templates/footer.tpl +2 -2
  40. package/templates/groups/details.tpl +20 -17
  41. package/templates/groups/members.tpl +0 -2
  42. package/templates/partials/account/footer.tpl +3 -0
  43. package/templates/partials/account/header.tpl +78 -81
  44. package/templates/partials/account/session-list.tpl +18 -0
  45. package/templates/partials/breadcrumbs.tpl +6 -6
  46. package/templates/partials/categories/item.tpl +19 -18
  47. package/templates/partials/categories/lastpost.tpl +2 -2
  48. package/templates/partials/{category-filter-content.tpl → category/filter-dropdown-content.tpl} +8 -6
  49. package/templates/partials/{category-selector-content.tpl → category/selector-dropdown-content.tpl} +3 -3
  50. package/templates/partials/category/subcategory.tpl +1 -1
  51. package/templates/partials/category/tags.tpl +0 -2
  52. package/templates/partials/category/watch.tpl +28 -4
  53. package/templates/partials/chats/message-window.tpl +1 -0
  54. package/templates/partials/chats/message.tpl +4 -6
  55. package/templates/partials/cookie-consent.tpl +5 -5
  56. package/templates/partials/flags/filters.tpl +1 -1
  57. package/templates/partials/groups/admin.tpl +4 -4
  58. package/templates/partials/groups/badge.tpl +1 -1
  59. package/templates/partials/groups/memberlist.tpl +1 -1
  60. package/templates/partials/groups/sidebar-left.tpl +1 -1
  61. package/templates/partials/header/brand.tpl +1 -1
  62. package/templates/partials/mobile-footer.tpl +69 -61
  63. package/templates/partials/paginator.tpl +9 -9
  64. package/templates/partials/post_bar.tpl +6 -5
  65. package/templates/partials/posts_list_item.tpl +5 -5
  66. package/templates/partials/quick-search-results.tpl +1 -1
  67. package/templates/partials/search-filters.tpl +184 -0
  68. package/templates/partials/search-results.tpl +28 -32
  69. package/templates/partials/sidebar/chats.tpl +2 -2
  70. package/templates/partials/sidebar/drafts.tpl +42 -34
  71. package/templates/partials/sidebar/logged-in-menu.tpl +5 -5
  72. package/templates/partials/sidebar/notifications.tpl +3 -3
  73. package/templates/partials/sidebar/search.tpl +1 -1
  74. package/templates/partials/sidebar/user-menu.tpl +1 -1
  75. package/templates/partials/sidebar-left.tpl +13 -10
  76. package/templates/partials/sidebar-right.tpl +1 -1
  77. package/templates/partials/skin-switcher.tpl +2 -2
  78. package/templates/partials/tags_list.tpl +6 -4
  79. package/templates/partials/topic/browsing-users.tpl +0 -2
  80. package/templates/partials/topic/event.tpl +1 -1
  81. package/templates/partials/topic/navigation-post.tpl +5 -9
  82. package/templates/partials/topic/navigator-mobile.tpl +48 -0
  83. package/templates/partials/topic/post-editor.tpl +0 -2
  84. package/templates/partials/topic/post-menu-list.tpl +35 -37
  85. package/templates/partials/topic/post.tpl +27 -10
  86. package/templates/partials/topic/quickreply.tpl +6 -6
  87. package/templates/partials/topic/reply-button.tpl +1 -1
  88. package/templates/partials/topic/topic-menu-list.tpl +16 -18
  89. package/templates/partials/topic/watch.tpl +28 -4
  90. package/templates/partials/topic-list-bar.tpl +7 -7
  91. package/templates/partials/topics_list.tpl +41 -41
  92. package/templates/partials/users/filter-dropdown-content.tpl +20 -0
  93. package/templates/popular.tpl +1 -1
  94. package/templates/post-queue.tpl +112 -0
  95. package/templates/recent.tpl +1 -1
  96. package/templates/search.tpl +39 -177
  97. package/templates/tags.tpl +1 -1
  98. package/templates/top.tpl +1 -1
  99. package/templates/topic.tpl +4 -4
  100. package/templates/unread.tpl +1 -1
  101. package/templates/users.tpl +1 -1
  102. package/templates/modules/usercard.tpl +0 -39
  103. package/templates/partials/acceptTos.tpl +0 -11
  104. package/templates/partials/category-filter-right.tpl +0 -5
  105. package/templates/partials/category-filter.tpl +0 -3
  106. package/templates/partials/category-selector-right.tpl +0 -5
  107. package/templates/partials/category-selector.tpl +0 -3
  108. package/templates/partials/slideout-menu.tpl +0 -6
@@ -1,5 +1,5 @@
1
1
  {{{ if config.loggedIn }}}
2
- <div class="btn-group topic-watch-dropdown bottom-sheet" component="topic/watch">
2
+ <div class="btn-group bottom-sheet" component="topic/watch">
3
3
  <button class="btn-ghost-sm d-flex gap-2 align-items-baseline dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="topic/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="fa fa-fw fa-bell-o link-primary"></i>
@@ -17,11 +17,35 @@
17
17
  </span>
18
18
  </button>
19
19
  <ul class="dropdown-menu">
20
- <li><a class="dropdown-item" href="#" component="topic/following"><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]<p class="help-text text-muted"><small>[[topic:watching.description]]</small></p></a></li>
20
+ <li>
21
+ <a class="dropdown-item d-flex" href="#" component="topic/following">
22
+ <span><i component="topic/following/check" class="fa fa-fw {{{ if isFollowing }}}fa-check{{{ end }}}"></i></span>
23
+ <div class="d-flex flex-column">
24
+ <span><i class="fa fa-fw fa-bell-o"></i> [[topic:watching]]</span>
25
+ <p class="help-text text-muted"><small>[[topic:watching.description]]</small></p>
26
+ </div>
27
+ </a>
28
+ </li>
21
29
 
22
- <li><a class="dropdown-item" href="#" component="topic/not-following"><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]<p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p></a></li>
30
+ <li>
31
+ <a class="dropdown-item d-flex" href="#" component="topic/not-following">
32
+ <span><i component="topic/not-following/check" class="fa fa-fw {{{ if isNotFollowing }}}fa-check{{{ end }}}"></i></span>
33
+ <div class="d-flex flex-column">
34
+ <span><i class="fa fa-fw fa-bell-slash-o"></i> [[topic:not-watching]]</span>
35
+ <p class="help-text text-muted"><small>[[topic:not-watching.description]]</small></p>
36
+ </div>
37
+ </a>
38
+ </li>
23
39
 
24
- <li><a class="dropdown-item" href="#" component="topic/ignoring"><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]<p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p></a></li>
40
+ <li>
41
+ <a class="dropdown-item d-flex" href="#" component="topic/ignoring">
42
+ <span><i component="topic/ignoring/check" class="fa fa-fw {{{ if isIgnoring }}}fa-check{{{ end }}}"></i></span>
43
+ <div class="d-flex flex-column">
44
+ <span><i class="fa fa-fw fa-eye-slash"></i> [[topic:ignoring]]</span>
45
+ <p class="help-text text-muted"><small>[[topic:ignoring.description]]</small></p>
46
+ </div>
47
+ </a>
48
+ </li>
25
49
  </ul>
26
50
  </div>
27
51
  {{{ end }}}
@@ -1,5 +1,5 @@
1
- <nav class="topic-list-header {{{ if config.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded">
2
- <div class="card card-header flex-row p-2 border rounded ff-secondary w-100">
1
+ <nav class="topic-list-header {{{ if config.theme.stickyToolbar }}} sticky-tools{{{ end }}} navbar navbar-expand p-0 border-0 rounded mb-3">
2
+ <div class="card card-header flex-row p-2 gap-1 border rounded ff-secondary w-100">
3
3
  <ul class="navbar-nav me-auto gap-2 align-items-center">
4
4
  {{{ if template.category }}}
5
5
  <!-- IMPORT partials/category/watch.tpl -->
@@ -10,15 +10,15 @@
10
10
  {{{ end }}}
11
11
  {{{ if (template.unread || (template.recent || (template.popular || template.top))) }}}
12
12
  <!-- IMPORT partials/topic-filters.tpl -->
13
- <!-- IMPORT partials/category-filter.tpl -->
13
+ <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
14
14
  {{{ end }}}
15
15
  {{{ if template.unread }}}
16
16
  <div class="markread btn-group {{{ if !topics.length }}}hidden{{{ end }}}">
17
- <!-- IMPORT partials/category-selector.tpl -->
17
+ <!-- IMPORT partials/category/selector-dropdown-left.tpl -->
18
18
  </div>
19
19
  {{{ end }}}
20
20
  {{{ if template.tag }}}
21
- <!-- IMPORT partials/category-filter.tpl -->
21
+ <!-- IMPORT partials/category/filter-dropdown-left.tpl -->
22
22
  {{{ end }}}
23
23
  <!-- IMPORT partials/category/tools.tpl -->
24
24
 
@@ -27,11 +27,11 @@
27
27
  {{{ end }}}
28
28
 
29
29
  <a href="{config.relative_path}{{{ if template.category }}}{url}{{{ else }}}/{selectedFilter.url}{querystring}{{{ end }}}" class="d-inline-block text-decoration-none">
30
- <div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
30
+ <div class="d-md-block alert alert-warning h-100 m-0 px-2 py-1 line-clamp-2 text-sm text-break hide" id="new-topics-alert">There is a new post. Click here to reload.</div>
31
31
  </a>
32
32
  </ul>
33
33
 
34
- <div class="d-flex gap-1 align-items-stretch">
34
+ <div class="d-flex gap-1 align-items-center">
35
35
  {{{ if template.category }}}
36
36
  {{{ if privileges.topics:create }}}
37
37
  <a href="{config.relative_path}/compose?cid={cid}" component="category/post" id="new_topic" class="btn btn-primary btn-sm text-nowrap" data-ajaxify="false" role="button">[[category:new_topic_button]]</a>
@@ -1,4 +1,4 @@
1
- <ul component="category" class="list-unstyled topic-list pt-4 overflow-auto position-relative" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
1
+ <ul component="category" class="list-unstyled topic-list overflow-auto position-relative" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
2
2
 
3
3
  {{{ each topics }}}
4
4
  <li component="category/topic" class="category-item position-relative {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
@@ -14,9 +14,9 @@
14
14
  <div class="avatar">
15
15
  <a href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}" class="text-decoration-none">
16
16
  {{{ if ./thumbs.length }}}
17
- <img src="{./thumbs.0.url}" class="not-responsive" />
17
+ <img class="topic-thumb rounded-1" width="80" height="auto" src="{./thumbs.0.url}" class="not-responsive" />
18
18
  {{{ else }}}
19
- {buildAvatar(./user, "40px", true, "not-responsive")}
19
+ {buildAvatar(./user, "40px", true, "avatar-tooltip not-responsive")}
20
20
  {{{ end }}}
21
21
  </a>
22
22
  </div>
@@ -69,52 +69,52 @@
69
69
  </div>
70
70
  </div>
71
71
  </div>
72
-
73
- <div class="col-md-2 d-none d-lg-flex stats text-muted gap-2 px-0">
74
- {{{ if !reputation:disabled }}}
75
- <div class="stats-votes flex-1">
76
- <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
77
- <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./votes}" data-toFixed="0">{./votes}</span>
78
- <span class="text-lowercase text-xs">[[global:votes]]</span>
72
+ <div class="row col-md-5 col-sm-3 d-none d-md-flex align-self-stretch align-self-lg-start">
73
+ <div class="col-md-5 d-none d-lg-flex stats text-muted gap-2 px-0">
74
+ {{{ if !reputation:disabled }}}
75
+ <div class="stats-votes flex-1">
76
+ <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
77
+ <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./votes}" data-toFixed="0">{./votes}</span>
78
+ <span class="text-lowercase text-xs">[[global:votes]]</span>
79
+ </div>
79
80
  </div>
80
- </div>
81
- {{{ end }}}
82
- <div class="stats-postcount flex-1">
83
- <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
84
- <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./postcount}" data-toFixed="0">{./postcount}</span>
85
- <span class="text-lowercase text-xs">[[global:posts]]</span>
81
+ {{{ end }}}
82
+ <div class="stats-postcount flex-1">
83
+ <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
84
+ <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./postcount}" data-toFixed="0">{./postcount}</span>
85
+ <span class="text-lowercase text-xs">[[global:posts]]</span>
86
+ </div>
86
87
  </div>
87
- </div>
88
- <div class="stats-viewcount flex-1">
89
- <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
90
- <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./viewcount}" data-toFixed="0">{./viewcount}</span>
91
- <span class="text-lowercase text-xs">[[global:views]]</span>
88
+ <div class="stats-viewcount flex-1">
89
+ <div class="align-items-center card card-header px-0 py-2 border-0 rounded-1">
90
+ <span class="human-readable-number fs-5 fw-semibold ff-secondary lh-1" title="{./viewcount}" data-toFixed="0">{./viewcount}</span>
91
+ <span class="text-lowercase text-xs">[[global:views]]</span>
92
+ </div>
92
93
  </div>
93
94
  </div>
94
- </div>
95
95
 
96
- <div class="col-md-3 col-sm-3 teaser d-none d-md-block overflow-hidden" component="topic/teaser">
97
- <div class="lastpost background-link-container border-start border-2 h-100" style="border-color: {./category.bgColor}!important;">
98
- <a class="background-link" href="{config.relative_path}/topic/{./slug}/{./teaser.index}"></a>
99
- {{{ if ./unreplied }}}
100
- <p class="ps-3 text-xs lh-1">
101
- [[category:no_replies]]
102
- </p>
103
- {{{ else }}}
104
- {{{ if ./teaser.pid }}}
105
- <p class="ps-3 mb-0 lh-1">
106
- <a href="{config.relative_path}/user/{./teaser.user.userslug}" class="text-decoration-none">{buildAvatar(./teaser.user, "18px", true, "not-responsive")}</a>
107
- <a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}">
108
- </a>
109
- </p>
110
- <div class="post-content overflow-hidden text-xs line-clamp-2 ps-3">
111
- {./teaser.content}
96
+ <div class="col-md-7 col-sm-3 teaser d-none d-md-block overflow-hidden" component="topic/teaser">
97
+ <div class="lastpost background-link-container border-start border-2 h-100" style="border-color: {./category.bgColor}!important;">
98
+ <a class="background-link" href="{config.relative_path}/topic/{./slug}/{./teaser.index}"></a>
99
+ {{{ if ./unreplied }}}
100
+ <p class="ps-3 text-xs lh-1">
101
+ [[category:no_replies]]
102
+ </p>
103
+ {{{ else }}}
104
+ {{{ if ./teaser.pid }}}
105
+ <p class="ps-3 mb-0 lh-1">
106
+ <a href="{config.relative_path}/user/{./teaser.user.userslug}" class="text-decoration-none">{buildAvatar(./teaser.user, "18px", true, "avatar-tooltip not-responsive")}</a>
107
+ <a class="permalink text-muted timeago text-xs" href="{config.relative_path}/topic/{./slug}/{./teaser.index}" title="{./teaser.timestampISO}">
108
+ </a>
109
+ </p>
110
+ <div class="post-content overflow-hidden text-xs line-clamp-2 ps-3">
111
+ {./teaser.content}
112
+ </div>
113
+ {{{ end }}}
114
+ {{{ end }}}
112
115
  </div>
113
- {{{ end }}}
114
- {{{ end }}}
115
116
  </div>
116
117
  </div>
117
-
118
118
  {{{ if showSelect }}}
119
119
  <div class="position-absolute top-0 end-0 w-auto p-0">
120
120
  <i component="topic/select" class="fa fa-square-o fs-5 text-muted pointer"></i>
@@ -0,0 +1,20 @@
1
+ <button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown">
2
+ {{{ if selectedUser }}}
3
+ <span class="fw-semibold">{buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}</span>
4
+ {{{ else }}}
5
+ <span class="fw-semibold">[[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="menu-item" 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="menu-item" 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>
@@ -7,7 +7,7 @@
7
7
  <!-- IMPORT partials/topic-list-bar.tpl -->
8
8
  <div class="category">
9
9
  {{{ if !topics.length }}}
10
- <div class="alert alert-warning" id="category-no-topics">[[recent:no_popular_topics]]</div>
10
+ <div class="alert alert-info mt-3" id="category-no-topics">[[recent:no_popular_topics]]</div>
11
11
  {{{ end }}}
12
12
 
13
13
  <!-- IMPORT partials/topics_list.tpl -->
@@ -0,0 +1,112 @@
1
+ <div class="btn-toolbar justify-content-end">
2
+ {{{ if (!singlePost && posts.length) }}}
3
+ <div class="me-2">
4
+ <!-- IMPORT partials/category/filter-dropdown-right.tpl -->
5
+ </div>
6
+ <div class="btn-group bottom-sheet" component="post-queue/bulk-actions">
7
+ <button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown" autocomplete="off" aria-haspopup="true" aria-expanded="false">
8
+ <i class="fa fa-clone"></i><span class="fw-semibold"> [[post-queue:bulk-actions]]</span>
9
+ </button>
10
+ <ul class="dropdown-menu dropdown-menu-end">
11
+ {{{ if canAccept }}}
12
+ <li><a class="dropdown-item" href="#" data-action="accept-all">[[post-queue:accept-all]]</a></li>
13
+ <li><a class="dropdown-item" href="#" data-action="accept-selected">[[post-queue:accept-selected]]</a></li>
14
+ <li class="dropdown-divider"></li>
15
+ <li><a class="dropdown-item" href="#" data-action="reject-all">[[post-queue:reject-all]]</a></li>
16
+ <li><a class="dropdown-item" href="#" data-action="reject-selected">[[post-queue:reject-selected]]</a></li>
17
+ {{{ else }}}
18
+ <li><a class="dropdown-item" href="#" data-action="reject-all">[[post-queue:remove-all]]</a></li>
19
+ <li><a class="dropdown-item" href="#" data-action="reject-selected">[[post-queue:remove-selected]]</a></li>
20
+ {{{ end }}}
21
+ </ul>
22
+ </div>
23
+ {{{ end }}}
24
+ </div>
25
+ <hr/>
26
+ <div class="row">
27
+ <div class="col-12">
28
+ <div class="post-queue preventSlideout posts-list">
29
+ {{{ if !posts.length }}}
30
+ {{{ if isAdmin }}}
31
+ <div class="card card-body">
32
+ <p>
33
+ [[post-queue:description, {config.relative_path}/admin/settings/post#post-queue]]
34
+ </p>
35
+ </div>
36
+ {{{ end }}}
37
+ {{{ end }}}
38
+
39
+ {{{ each posts }}}
40
+ <div class="card mb-3" data-id="{posts.id}">
41
+ <div class="card-header">
42
+ {{{ if !singlePost }}}
43
+ <input type="checkbox" class="form-check-input" autocomplete="off" />
44
+ {{{ end }}}
45
+ <strong>{{{ if posts.data.tid }}}[[post-queue:reply]]{{{ else }}}[[post-queue:topic]]{{{ end }}}</strong>
46
+ <span class="timeago float-end" title={posts.data.timestampISO}></span>
47
+ </div>
48
+ <div class="card-body">
49
+ <div class="row">
50
+ <div class="col-lg-2 col-12">
51
+ <strong>[[post-queue:user]]</strong>
52
+ <div>
53
+ {{{ if posts.user.userslug}}}
54
+ <a href="{config.relative_path}/uid/{posts.user.uid}">{buildAvatar(posts.user, "24px", true, "not-responsive")} {posts.user.username}</a>
55
+ {{{ else }}}
56
+ {posts.user.username}
57
+ {{{ end }}}
58
+ </div>
59
+ </div>
60
+ <div class="col-lg-3 col-12">
61
+ <strong>[[post-queue:category]]{{{ if posts.data.cid}}} <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:category-editable]]"></i>{{{ end }}}</strong>
62
+ <div class="topic-category" {{{if posts.data.cid}}}data-editable="editable"{{{end}}}">
63
+ <a href="{config.relative_path}/category/{posts.category.slug}">
64
+ <div class="category-item d-inline-block">
65
+ {buildCategoryIcon(./category, "24px", "rounded-circle")}
66
+ {posts.category.name}
67
+ </div>
68
+ </a>
69
+ </div>
70
+ </div>
71
+ <div class="col-lg-7 col-12">
72
+ <strong>{{{ if posts.data.tid }}}[[post-queue:topic]]{{{ else }}}[[post-queue:title]] <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:title-editable]]"></i>{{{ end }}}</strong>
73
+ <div class="topic-title text-break">
74
+ {{{ if posts.data.tid }}}
75
+ <a href="{config.relative_path}/topic/{posts.data.tid}">{posts.topic.title}</a>
76
+ {{{ end }}}
77
+ <span class="title-text">{posts.data.title}</span>
78
+ </div>
79
+ {{{if !posts.data.tid}}}
80
+ <div class="topic-title-editable hidden">
81
+ <input class="form-control" type="text" value="{posts.data.title}"/>
82
+ </div>
83
+ {{{end}}}
84
+ </div>
85
+ </div>
86
+ <hr/>
87
+ <div>
88
+ <strong>[[post-queue:content]] <i class="fa fa-fw fa-edit" data-bs-toggle="tooltip" title="[[post-queue:content-editable]]"></i></strong>
89
+ <div class="post-content text-break">{posts.data.content}</div>
90
+ <div class="post-content-editable hidden">
91
+ <textarea class="form-control w-100" style="height:300px;">{posts.data.rawContent}</textarea>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ <div class="card-footer text-end">
96
+ <div>
97
+ {{{ if canAccept }}}
98
+ <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:reject]]</button>
99
+ <button class="btn btn-info btn-sm" data-action="notify"><i class="fa fa-fw fa-bell-o"></i> [[post-queue:notify]]</button>
100
+ <button class="btn btn-success btn-sm" data-action="accept"><i class="fa fa-fw fa-check"></i> [[post-queue:accept]] </button>
101
+ {{{ else }}}
102
+ <button class="btn btn-danger btn-sm" data-action="reject"><i class="fa fa-fw fa-times"></i> [[post-queue:remove]]</button>
103
+ {{{ end }}}
104
+ </div>
105
+ </div>
106
+ </div>
107
+ {{{ end }}}
108
+ </div>
109
+
110
+ <!-- IMPORT partials/paginator.tpl -->
111
+ </div>
112
+ </div>
@@ -9,7 +9,7 @@
9
9
 
10
10
  <div class="category">
11
11
  {{{ if !topics.length }}}
12
- <div class="alert alert-warning" id="category-no-topics">[[recent:no_recent_topics]]</div>
12
+ <div class="alert alert-info mt-3" id="category-no-topics">[[recent:no_recent_topics]]</div>
13
13
  {{{ end }}}
14
14
 
15
15
  <!-- IMPORT partials/topics_list.tpl -->
@@ -1,183 +1,45 @@
1
- <!-- THIS FILE IS STILL PERSONA -->
2
-
3
1
  <div class="search">
4
- <div class="row">
5
- <div class="{{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
6
- <form id="advanced-search" class="mb-3">
7
- <div class="mb-3">
8
- <div class="row">
9
- <div class="col-md-5">
10
- <label class="form-label">[[global:search]]</label>
11
- <input type="text" class="form-control" id="search-input" placeholder="[[global:search]]">
12
- </div>
13
- <div class="col-md-3">
14
- <label class="form-label">[[search:in]]</label>
15
- <select id="search-in" class="form-select">
16
- <option value="titlesposts">[[search:titles-posts]]</option>
17
- <option value="titles">[[search:titles]]</option>
18
- <option value="posts">[[global:posts]]</option>
19
- <option value="categories">[[global:header.categories]]</option>
20
- {{{if privileges.search:users}}}
21
- <option value="users">[[global:users]]</option>
22
- {{{end}}}
23
- {{{if privileges.search:tags}}}
24
- <option value="tags">[[tags:tags]]</option>
25
- {{{end}}}
26
- </select>
27
- </div>
28
- <div class="col-md-2">
29
- <label class="form-label">[[search:match-words]]</label>
30
- <select id="match-words-filter" class="form-select">
31
- <option value="all">[[search:all]]</option>
32
- <option value="any">[[search:any]]</option>
33
- </select>
34
- </div>
35
- <div class="col-md-2">
36
- <label class="form-label">&nbsp;</label>
37
- <button type="submit" class="btn btn-primary form-control">[[global:search]]</button>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <div class="card">
43
- <h5 class="card-header pointer" data-bs-toggle="collapse" data-bs-target=".search-options">
44
- <i class="fa fa-sort"></i> [[search:advanced-search]]
45
- </h5>
46
- <div class="collapse search-options {{{ if expandSearch }}}show{{{ end }}}">
47
- <div class="card-body">
48
- <div class="mb-2 post-search-item">
49
- <div class="row">
50
- <div class="col-md-6">
51
- <label class="form-label">[[search:in-categories]]</label>
52
- <select multiple class="form-select" id="posted-in-categories" size="{allCategoriesCount}">
53
- {{{each allCategories}}}
54
- <option value="{allCategories.value}">{allCategories.text}</option>
55
- {{{end}}}
56
- </select>
57
- <div class="form-check">
58
- <input id="search-children" class="form-check-input" type="checkbox"/>
59
- <label class="form-check-label" for="search-children">[[search:search-child-categories]]</label>
60
- </div>
61
- </div>
62
- <div class="col-md-6">
63
- <div class="mb-2 post-search-item">
64
- <div class="row">
65
- <div class="col-md-6">
66
- <label class="form-label">[[search:posted-by]]</label>
67
- <div>
68
- <input type="text" class="form-control" id="posted-by-user">
69
- </div>
70
- </div>
71
- <div class="col-md-6">
72
- <label class="form-label">[[search:has-tags]]</label>
73
- <div>
74
- <input type="text" class="form-control" id="has-tags">
75
- </div>
76
- </div>
77
- </div>
78
- </div>
79
-
80
- <div class="mb-2 post-search-item">
81
- <label class="form-label">[[search:reply-count]]</label>
82
- <div class="row">
83
- <div class="col-md-6">
84
- <select id="reply-count-filter" class="form-select">
85
- <option value="atleast">[[search:at-least]]</option>
86
- <option value="atmost">[[search:at-most]]</option>
87
- </select>
88
- </div>
89
- <div class="col-md-6">
90
- <input type="text" class="form-control" id="reply-count">
91
- </div>
92
- </div>
93
- </div>
94
-
95
- <div class="mb-2 post-search-item">
96
- <label class="form-label">[[search:post-time]]</label>
97
- <div class="row">
98
- <div class="col-md-6">
99
- <select id="post-time-filter" class="form-select">
100
- <option value="newer">[[search:newer-than]]</option>
101
- <option value="older">[[search:older-than]]</option>
102
- </select>
103
- </div>
104
- <div class="col-md-6">
105
- <select id="post-time-range" class="form-select">
106
- <option value="">[[search:any-date]]</option>
107
- <option value="86400">[[search:yesterday]]</option>
108
- <option value="604800">[[search:one-week]]</option>
109
- <option value="1209600">[[search:two-weeks]]</option>
110
- <option value="2592000">[[search:one-month]]</option>
111
- <option value="7776000">[[search:three-months]]</option>
112
- <option value="15552000">[[search:six-months]]</option>
113
- <option value="31104000">[[search:one-year]]</option>
114
- </select>
115
- </div>
116
- </div>
117
- </div>
118
-
119
- <div class="mb-2 post-search-item">
120
- <label class="form-label">[[search:sort-by]]</label>
121
- <div class="row">
122
- <div class="col-md-6">
123
- <select id="post-sort-by" class="form-select">
124
- <option value="relevance">[[search:relevance]]</option>
125
- <option value="timestamp">[[search:post-time]]</option>
126
- <option value="votes">[[search:votes]]</option>
127
- <option value="topic.lastposttime">[[search:last-reply-time]]</option>
128
- <option value="topic.title">[[search:topic-title]]</option>
129
- <option value="topic.postcount">[[search:number-of-replies]]</option>
130
- <option value="topic.viewcount">[[search:number-of-views]]</option>
131
- <option value="topic.votes">[[search:topic-votes]]</option>
132
- <option value="topic.timestamp">[[search:topic-start-date]]</option>
133
- <option value="user.username">[[search:username]]</option>
134
- <option value="category.name">[[search:category]]</option>
135
- </select>
136
- </div>
137
- <div class="col-md-6">
138
- <select id="post-sort-direction" class="form-select">
139
- <option value="desc">[[search:descending]]</option>
140
- <option value="asc">[[search:ascending]]</option>
141
- </select>
142
- </div>
143
- </div>
144
- </div>
145
-
146
- <div class="mb-2 post-search-item">
147
- <label class="form-label">[[search:show-results-as]]</label>
148
- <div class="radio">
149
- <label>
150
- <input type="radio" name="options" id="show-as-posts" checked>
151
- [[global:posts]]
152
- </label>
153
- </div>
154
- <div class="radio">
155
- <label>
156
- <input type="radio" name="options" id="show-as-topics">
157
- [[global:topics]]
158
- </label>
159
- </div>
160
- </div>
161
- </div>
162
- </div>
163
- </div>
164
-
165
- <div class="btn-group">
166
- <button type="submit" class="btn btn-primary">[[global:search]]</button>
167
- <a class="btn btn-outline-secondary" id="save-preferences" href="#">[[search:save-preferences]]</a>
168
- <a class="btn btn-outline-secondary" id="clear-preferences" href="#">[[search:clear-preferences]]</a>
169
- </div>
170
- </div>
171
- </div>
172
- </div>
2
+ <div id="advanced-search" class="d-flex flex-column flex-md-row">
3
+ <!-- sidebar -->
4
+ <div class="flex-0 pe-2 border-end-md text-sm mb-3" style="flex-basis: 240px!important;">
5
+ <form action="{config.relative_path}/search" method="get" class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-3 pe-md-3" style="top: 1rem; z-index: 1;">
6
+ <h2 class="fw-semibold tracking-tight mb-0">[[global:search]]</h2>
7
+
8
+ <input id="search-input" name="term" type="text" class="form-control fw-semibold py-2 ps-2 pe-3" id="search-input" placeholder="[[search:type-to-search]]">
9
+
10
+ <select id="search-in" name="in" class="form-select text-sm py-2 ps-2 pe-3">
11
+ <option value="titlesposts">[[search:in-titles-posts]]</option>
12
+ <option value="titles">[[search:in-titles]]</option>
13
+ <option value="posts">[[search:in-posts]]</option>
14
+ <option value="categories">[[search:in-categories]]</option>
15
+ {{{if privileges.search:users}}}
16
+ <option value="users">[[search:in-users]]</option>
17
+ {{{end}}}
18
+ {{{if privileges.search:tags}}}
19
+ <option value="tags">[[search:in-tags]]</option>
20
+ {{{end}}}
21
+ </select>
22
+
23
+ <select id="match-words-filter" name="matchWords" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
24
+ <option value="all">[[search:match-all-words]]</option>
25
+ <option value="any">[[search:match-any-word]]</option>
26
+ </select>
27
+
28
+ <select id="show-results-as" name="showAs" class="post-search-item form-select text-sm py-2 ps-2 pe-3">
29
+ <option value="posts" selected>[[search:show-results-as-posts]]</option>
30
+ <option value="topics">[[search:show-results-as-topics]]</option>
31
+ </select>
32
+
33
+ <button type="submit" class="btn btn-primary fw-semibold form-control py-2 px-3">[[global:search]]</button>
173
34
  </form>
174
-
175
- <!-- IMPORT partials/search-results.tpl -->
176
35
  </div>
177
- <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
178
- {{{each widgets.sidebar}}}
179
- {{widgets.sidebar.html}}
180
- {{{end}}}
36
+
37
+ <!-- filters and search results -->
38
+ <div class="flex-1 ps-md-2 ps-lg-5" style="min-width:0;">
39
+ <div class="d-flex flex-column gap-3">
40
+ <!-- IMPORT partials/search-filters.tpl -->
41
+ <!-- IMPORT partials/search-results.tpl -->
42
+ </div>
181
43
  </div>
182
44
  </div>
183
45
  </div>
@@ -23,7 +23,7 @@
23
23
  </div>
24
24
  {{{ end }}}
25
25
  {{{ end }}}
26
-
26
+ <hr/>
27
27
  {{{ if !tags.length }}}
28
28
  <div class="alert alert-warning">[[tags:no_tags]]</div>
29
29
  {{{ end }}}
package/templates/top.tpl CHANGED
@@ -7,7 +7,7 @@
7
7
  <!-- IMPORT partials/topic-list-bar.tpl -->
8
8
  <div class="category">
9
9
  {{{ if !topics.length }}}
10
- <div class="alert alert-warning" id="category-no-topics">[[top:no_top_topics]]</div>
10
+ <div class="alert alert-info mt-3" id="category-no-topics">[[top:no_top_topics]]</div>
11
11
  {{{ end }}}
12
12
 
13
13
  <!-- IMPORT partials/topics_list.tpl -->
@@ -6,11 +6,11 @@
6
6
  </div>
7
7
  {{{ end }}}
8
8
 
9
- <h2 component="post/header" class="fs-2 mb-0 text-break {{{ if config.centerHeaderElements }}}text-center{{{ end }}}" itemprop="name">
9
+ <h2 component="post/header" class="fs-2 mb-0 text-break {{{ if config.theme.centerHeaderElements }}}text-center{{{ end }}}" itemprop="name">
10
10
  <span class="topic-title" component="topic/title">{title}</span>
11
11
  </h2>
12
12
 
13
- <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.centerHeaderElements }}}justify-content-center{{{ end }}}">
13
+ <div class="topic-info d-flex gap-2 align-items-center flex-wrap {{{ if config.theme.centerHeaderElements }}}justify-content-center{{{ end }}}">
14
14
  <span component="topic/labels" class="d-flex gap-2">
15
15
  <span component="topic/scheduled" class="badge badge border border-gray-300 text-primary {{{ if !scheduled }}}hidden{{{ end }}}">
16
16
  <i class="fa fa-clock-o"></i>
@@ -28,7 +28,7 @@
28
28
  <i class="fa fa-arrow-circle-right"></i>
29
29
  {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}}
30
30
  </span>
31
- {{{each icons}}}<span class="align-middle">{@value}</span>{{{end}}}
31
+ {{{each icons}}}<span>{@value}</span>{{{end}}}
32
32
  </span>
33
33
  <a class="lh-1" href="{config.relative_path}/category/{category.slug}">{function.buildCategoryLabel, category, "border"}</a>
34
34
  <div class="lh-1 tags tag-list d-flex hidden-xs gap-2"><!-- IMPORT partials/topic/tags.tpl --></div>
@@ -74,7 +74,7 @@
74
74
  </div>
75
75
  {{{ end }}}
76
76
 
77
- {{{ if config.enableQuickReply }}}
77
+ {{{ if config.theme.enableQuickReply }}}
78
78
  <!-- IMPORT partials/topic/quickreply.tpl -->
79
79
  {{{ end }}}
80
80