nodebb-theme-harmony 0.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 (135) hide show
  1. package/.eslintrc +3 -0
  2. package/README.md +8 -0
  3. package/lib/controllers.js +7 -0
  4. package/library.js +51 -0
  5. package/package.json +45 -0
  6. package/plugin.json +11 -0
  7. package/public/.eslintrc +3 -0
  8. package/public/admin.js +15 -0
  9. package/renovate.json +6 -0
  10. package/scss/harmony.scss +3 -0
  11. package/scss/overrides.scss +1 -0
  12. package/templates/account/best.tpl +3 -0
  13. package/templates/account/blocks.tpl +35 -0
  14. package/templates/account/bookmarks.tpl +3 -0
  15. package/templates/account/categories.tpl +30 -0
  16. package/templates/account/consent.tpl +71 -0
  17. package/templates/account/controversial.tpl +3 -0
  18. package/templates/account/downvoted.tpl +3 -0
  19. package/templates/account/edit/password.tpl +32 -0
  20. package/templates/account/edit/username.tpl +28 -0
  21. package/templates/account/edit.tpl +137 -0
  22. package/templates/account/followers.tpl +19 -0
  23. package/templates/account/following.tpl +19 -0
  24. package/templates/account/groups.tpl +19 -0
  25. package/templates/account/ignored.tpl +3 -0
  26. package/templates/account/info.tpl +228 -0
  27. package/templates/account/posts.tpl +21 -0
  28. package/templates/account/profile.tpl +168 -0
  29. package/templates/account/sessions.tpl +34 -0
  30. package/templates/account/settings.tpl +231 -0
  31. package/templates/account/theme.tpl +29 -0
  32. package/templates/account/topics.tpl +32 -0
  33. package/templates/account/uploads.tpl +45 -0
  34. package/templates/account/upvoted.tpl +3 -0
  35. package/templates/account/watched.tpl +3 -0
  36. package/templates/admin/plugins/persona.tpl +29 -0
  37. package/templates/categories.tpl +33 -0
  38. package/templates/category.tpl +65 -0
  39. package/templates/chat.tpl +41 -0
  40. package/templates/chats.tpl +21 -0
  41. package/templates/flags/detail.tpl +211 -0
  42. package/templates/flags/list.tpl +73 -0
  43. package/templates/footer.tpl +16 -0
  44. package/templates/groups/details.tpl +79 -0
  45. package/templates/groups/list.tpl +50 -0
  46. package/templates/groups/members.tpl +8 -0
  47. package/templates/header.tpl +49 -0
  48. package/templates/login.tpl +98 -0
  49. package/templates/modules/taskbar.tpl +5 -0
  50. package/templates/modules/usercard.tpl +39 -0
  51. package/templates/notifications.tpl +68 -0
  52. package/templates/partials/acceptTos.tpl +11 -0
  53. package/templates/partials/account/category-item.tpl +25 -0
  54. package/templates/partials/account/header.tpl +48 -0
  55. package/templates/partials/account/menu.tpl +103 -0
  56. package/templates/partials/breadcrumbs.tpl +20 -0
  57. package/templates/partials/buttons/newTopic.tpl +24 -0
  58. package/templates/partials/categories/item.tpl +62 -0
  59. package/templates/partials/categories/lastpost.tpl +28 -0
  60. package/templates/partials/categories/link.tpl +13 -0
  61. package/templates/partials/category/sort.tpl +17 -0
  62. package/templates/partials/category/subcategory.tpl +20 -0
  63. package/templates/partials/category/tags.tpl +5 -0
  64. package/templates/partials/category/tools.tpl +83 -0
  65. package/templates/partials/category/watch.tpl +23 -0
  66. package/templates/partials/category-filter-content.tpl +31 -0
  67. package/templates/partials/category-filter-right.tpl +5 -0
  68. package/templates/partials/category-filter.tpl +5 -0
  69. package/templates/partials/category-selector-content.tpl +35 -0
  70. package/templates/partials/category-selector-right.tpl +5 -0
  71. package/templates/partials/category-selector.tpl +5 -0
  72. package/templates/partials/chats/dropdown.tpl +40 -0
  73. package/templates/partials/chats/message-window.tpl +36 -0
  74. package/templates/partials/chats/message.tpl +36 -0
  75. package/templates/partials/chats/messages.tpl +9 -0
  76. package/templates/partials/chats/options.tpl +26 -0
  77. package/templates/partials/chats/recent_room.tpl +33 -0
  78. package/templates/partials/chats/system-message.tpl +5 -0
  79. package/templates/partials/chats/user.tpl +3 -0
  80. package/templates/partials/chats-menu.tpl +43 -0
  81. package/templates/partials/cookie-consent.tpl +6 -0
  82. package/templates/partials/flags/filters.tpl +99 -0
  83. package/templates/partials/groups/admin.tpl +197 -0
  84. package/templates/partials/groups/badge.tpl +3 -0
  85. package/templates/partials/groups/list.tpl +23 -0
  86. package/templates/partials/groups/memberlist.tpl +43 -0
  87. package/templates/partials/header/user-menu.tpl +87 -0
  88. package/templates/partials/menu.tpl +188 -0
  89. package/templates/partials/notifications_list.tpl +32 -0
  90. package/templates/partials/paginator.tpl +47 -0
  91. package/templates/partials/post_bar.tpl +22 -0
  92. package/templates/partials/posts_list.tpl +10 -0
  93. package/templates/partials/posts_list_item.tpl +34 -0
  94. package/templates/partials/quick-search-results.tpl +36 -0
  95. package/templates/partials/search-results.tpl +57 -0
  96. package/templates/partials/slideout-menu.tpl +6 -0
  97. package/templates/partials/tags_list.tpl +7 -0
  98. package/templates/partials/thread_tools.tpl +10 -0
  99. package/templates/partials/toast.tpl +16 -0
  100. package/templates/partials/topic/browsing-users.tpl +3 -0
  101. package/templates/partials/topic/event.tpl +28 -0
  102. package/templates/partials/topic/navigation-post.tpl +14 -0
  103. package/templates/partials/topic/navigator.tpl +41 -0
  104. package/templates/partials/topic/necro-post.tpl +5 -0
  105. package/templates/partials/topic/post-editor.tpl +3 -0
  106. package/templates/partials/topic/post-menu-list.tpl +134 -0
  107. package/templates/partials/topic/post-menu.tpl +6 -0
  108. package/templates/partials/topic/post.tpl +116 -0
  109. package/templates/partials/topic/quickreply.tpl +30 -0
  110. package/templates/partials/topic/reactions.tpl +3 -0
  111. package/templates/partials/topic/reply-button.tpl +29 -0
  112. package/templates/partials/topic/selection-tooltip.tpl +5 -0
  113. package/templates/partials/topic/sort.tpl +11 -0
  114. package/templates/partials/topic/stats.tpl +14 -0
  115. package/templates/partials/topic/tag.tpl +3 -0
  116. package/templates/partials/topic/tags.tpl +5 -0
  117. package/templates/partials/topic/topic-menu-list.tpl +34 -0
  118. package/templates/partials/topic/watch.tpl +24 -0
  119. package/templates/partials/topic-filters.tpl +14 -0
  120. package/templates/partials/topic-terms.tpl +14 -0
  121. package/templates/partials/topics_list.tpl +118 -0
  122. package/templates/partials/users_list.tpl +60 -0
  123. package/templates/partials/users_list_menu.tpl +23 -0
  124. package/templates/popular.tpl +37 -0
  125. package/templates/recent.tpl +39 -0
  126. package/templates/register.tpl +89 -0
  127. package/templates/search.tpl +185 -0
  128. package/templates/tag.tpl +35 -0
  129. package/templates/tags.tpl +34 -0
  130. package/templates/top.tpl +37 -0
  131. package/templates/topic.tpl +108 -0
  132. package/templates/unread.tpl +39 -0
  133. package/templates/users.tpl +36 -0
  134. package/theme.json +7 -0
  135. package/theme.scss +1 -0
@@ -0,0 +1,43 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="d-flex mb-3">
4
+ <!-- IF group.isOwner -->
5
+ <div class="flex-shrink-0">
6
+ <button component="groups/members/add" type="button" class="btn btn-primary me-3" title="[[groups:details.add-member]]"><i class="fa fa-user-plus"></i></button>
7
+ </div>
8
+ <!-- ENDIF group.isOwner -->
9
+ <div class="flex-grow-1">
10
+ <div class="input-group">
11
+ <input class="form-control" type="text" component="groups/members/search" placeholder="[[global:search]]"/>
12
+ <span class="input-group-text search-button"><i class="fa fa-search"></i></span>
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+ <table component="groups/members" class="table table-striped table-hover" data-nextstart="{group.membersNextStart}">
18
+ <tbody>
19
+ {{{each group.members}}}
20
+ <tr data-uid="{group.members.uid}">
21
+ <td class="p-2">
22
+ <a href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
23
+ </td>
24
+ <td class="member-name p-2">
25
+ <a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
26
+ <i title="[[groups:owner]]" class="user-owner-icon fa fa-star align-text-top text-warning <!-- IF !group.members.isOwner -->invisible<!-- ENDIF !group.members.isOwner -->"></i>
27
+
28
+ <!-- IF group.isOwner -->
29
+ <div class="owner-controls btn-group float-end">
30
+ <a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
31
+ <i class="fa fa-star"></i>
32
+ </a>
33
+
34
+ <a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
35
+ <i class="fa fa-ban"></i>
36
+ </a>
37
+ </div>
38
+ <!-- ENDIF group.isOwner -->
39
+ </td>
40
+ </tr>
41
+ {{{end}}}
42
+ </tbody>
43
+ </table>
@@ -0,0 +1,87 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <li id="user_label" class="nav-item dropdown" title="[[global:header.profile]]">
4
+ <label for="user-control-list-check" class="" data-bs-toggle="dropdown" id="user_dropdown" role="button">
5
+ {buildAvatar(user, "32px", true)}
6
+ <span id="user-header-name" class="d-block d-sm-none">{user.username}</span>
7
+ </label>
8
+ <input type="checkbox" class="hidden" id="user-control-list-check" aria-hidden="true">
9
+ <ul id="user-control-list" component="header/usercontrol" class="dropdown-menu dropdown-menu-end" aria-labelledby="user_dropdown">
10
+ <li>
11
+ <a class="dropdown-item" component="header/profilelink" href="{relative_path}/user/{user.userslug}">
12
+ <i component="user/status" class="fa fa-fw fa-circle status {user.status}"></i> <span component="header/username">{user.username}</span>
13
+ </a>
14
+ </li>
15
+ <li role="presentation" class="dropdown-divider"></li>
16
+ <li><h6 class="dropdown-header">[[global:status]]</h6></li>
17
+ <li>
18
+ <a href="#" class="dropdown-item user-status" data-status="online">
19
+ <i class="fa fa-fw fa-circle status online"></i><span <!-- IF user.online -->class="bold"<!-- ENDIF user.online -->> [[global:online]]</span>
20
+ </a>
21
+ </li>
22
+ <li>
23
+ <a href="#" class="dropdown-item user-status" data-status="away">
24
+ <i class="fa fa-fw fa-circle status away"></i><span <!-- IF user.away -->class="bold"<!-- ENDIF user.away -->> [[global:away]]</span>
25
+ </a>
26
+ </li>
27
+ <li>
28
+ <a href="#" class="dropdown-item user-status" data-status="dnd">
29
+ <i class="fa fa-fw fa-circle status dnd"></i><span <!-- IF user.dnd -->class="bold"<!-- ENDIF user.dnd -->> [[global:dnd]]</span>
30
+ </a>
31
+ </li>
32
+ <li>
33
+ <a href="#" class="dropdown-item user-status" data-status="offline">
34
+ <i class="fa fa-fw fa-circle status offline"></i><span <!-- IF user.offline -->class="bold"<!-- ENDIF user.offline -->> [[global:invisible]]</span>
35
+ </a>
36
+ </li>
37
+ <li role="presentation" class="dropdown-divider"></li>
38
+ <li>
39
+ <a class="dropdown-item" component="header/profilelink/edit" href="{relative_path}/user/{user.userslug}/edit">
40
+ <i class="fa fa-fw fa-edit"></i> <span>[[user:edit-profile]]</span>
41
+ </a>
42
+ </li>
43
+ <li>
44
+ <a class="dropdown-item" component="header/profilelink/settings" href="{relative_path}/user/{user.userslug}/settings">
45
+ <i class="fa fa-fw fa-gear"></i> <span>[[user:settings]]</span>
46
+ </a>
47
+ </li>
48
+ {{{ if showModMenu }}}
49
+ <li role="presentation" class="dropdown-divider"></li>
50
+ <li><h6 class="dropdown-header">[[pages:moderator-tools]]</h6></li>
51
+ <li>
52
+ <a class="dropdown-item" href="{relative_path}/flags">
53
+ <i class="fa fa-fw fa-flag"></i> <span>[[pages:flagged-content]]</span>
54
+ </a>
55
+ </li>
56
+ <li>
57
+ <a class="dropdown-item" href="{relative_path}/post-queue">
58
+ <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
59
+ </a>
60
+ </li>
61
+ <li>
62
+ <a class="dropdown-item" href="{relative_path}/ip-blacklist">
63
+ <i class="fa fa-fw fa-ban"></i> <span>[[pages:ip-blacklist]]</span>
64
+ </a>
65
+ </li>
66
+ {{{ else }}}
67
+ {{{ if postQueueEnabled }}}
68
+ <li>
69
+ <a class="dropdown-item" href="{relative_path}/post-queue">
70
+ <i class="fa fa-fw fa-list-alt"></i> <span>[[pages:post-queue]]</span>
71
+ </a>
72
+ </li>
73
+ {{{ end }}}
74
+ {{{ end }}}
75
+
76
+ <li role="presentation" class="dropdown-divider"></li>
77
+ <li component="user/logout">
78
+ <form method="post" action="{relative_path}/logout">
79
+ <input type="hidden" name="_csrf" value="{config.csrf_token}">
80
+ <input type="hidden" name="noscript" value="true">
81
+ <button type="submit" class="dropdown-item">
82
+ <i class="fa fa-fw fa-sign-out"></i><span> [[global:logout]]</span>
83
+ </button>
84
+ </form>
85
+ </li>
86
+ </ul>
87
+ </li>
@@ -0,0 +1,188 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="d-flex align-items-center me-auto" style="min-width: 0px;">
4
+ <button type="button" class="navbar-toggler border-0" id="mobile-menu">
5
+ <i class="fa fa-lg fa-fw fa-bars unread-count" ></i>
6
+ <span component="unread/icon" class="notification-icon fa fa-fw fa-book unread-count" data-content="{unreadCount.mobileUnread}" data-unread-url="{unreadCount.unreadUrl}"></span>
7
+ </button>
8
+ <div class="d-inline-flex align-items-center" style="min-width: 0px;">
9
+ {{{ if brand:logo }}}
10
+ <a class="navbar-brand" href="{{{ if brand:logo:url }}}{brand:logo:url}{{{ else }}}{relative_path}/{{{ end }}}">
11
+ <img alt="{brand:logo:alt}" class="{brand:logo:display} forum-logo d-inline-block align-text-bottom" src="{brand:logo}?{config.cache-buster}" />
12
+ </a>
13
+ {{{ end }}}
14
+ {{{ if config.showSiteTitle }}}
15
+ <a class="navbar-brand text-truncate" href="{{{ if title:url }}}{title:url}{{{ else }}}{relative_path}/{{{ end }}}">
16
+ {config.siteTitle}
17
+ </a>
18
+ {{{ end }}}
19
+ </div>
20
+ </div>
21
+
22
+ {{{ if config.searchEnabled }}}
23
+ <div class="navbar-search visible-xs">
24
+ <form action="{config.relative_path}/search" method="GET">
25
+ <button type="button" class="btn btn-link"><i class="fa fa-lg fa-fw fa-search" title="[[global:header.search]]"></i></button>
26
+ <input autocomplete="off" type="text" class="form-control hidden" name="term" placeholder="[[global:search]]"/>
27
+ <button class="btn btn-primary hidden" type="submit"></button>
28
+ <input type="text" class="hidden" name="in" value="{config.searchDefaultInQuick}" />
29
+ </form>
30
+ <div class="quick-search-container hidden">
31
+ <div class="quick-search-results-container"></div>
32
+ </div>
33
+ </div>
34
+ {{{ end }}}
35
+
36
+ {{{ if config.loggedIn }}}
37
+ <button type="button" class="navbar-toggler border-0" id="mobile-chats">
38
+ <span component="notifications/icon" class="notification-icon fa fa-fw fa-bell-o unread-count" data-content="{unreadCount.notification}"></span>
39
+ <span component="chat/icon" class="notification-icon fa fa-fw fa-comments unread-count" data-content="{unreadCount.chat}"></span>
40
+ {buildAvatar(user, "32px", true)}
41
+ </button>
42
+ {{{ end }}}
43
+
44
+ <div component="navbar/title" class="visible-xs hidden">
45
+ <span></span>
46
+ </div>
47
+
48
+ <div id="nav-dropdown" class="collapse navbar-collapse d-none d-lg-block">
49
+ <ul id="main-nav" class="navbar-nav me-auto mb-2 mb-lg-0">
50
+ {{{each navigation}}}
51
+ <!-- IF function.displayMenuItem, @index -->
52
+ <li class="nav-item {navigation.class}{{{ if navigation.dropdown }}} dropdown{{{ end }}}" title="{navigation.title}">
53
+ <a class="nav-link navigation-link {{{ if navigation.dropdown }}}dropdown-toggle{{{ end }}}"
54
+ {{{ if navigation.dropdown }}} href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" {{{ else }}} href="{navigation.route}"{{{ end }}} {{{ if navigation.id }}}id="{navigation.id}"{{{ end }}}{{{ if navigation.targetBlank }}} target="_blank"{{{ end }}}>
55
+ {{{ if navigation.iconClass }}}
56
+ <i class="fa fa-fw {navigation.iconClass}" data-content="{navigation.content}"></i>
57
+ {{{ end }}}
58
+ {{{ if navigation.text }}}
59
+ <span class="{navigation.textClass}">{navigation.text}</span>
60
+ {{{ end }}}
61
+ {{{ if navigation.dropdown}}}
62
+ <i class="fa fa-caret-down"></i>
63
+ {{{ end }}}
64
+ </a>
65
+ {{{ if navigation.dropdown }}}
66
+ <ul class="dropdown-menu">
67
+ {navigation.dropdownContent}
68
+ </ul>
69
+ {{{ end }}}
70
+ </li>
71
+ <!-- ENDIF function.displayMenuItem -->
72
+ {{{end}}}
73
+ </ul>
74
+ <ul class="navbar-nav mb-2 mb-lg-0 hidden-xs">
75
+ <li class="nav-item">
76
+ <a href="#" id="reconnect" class="nav-link hide" title="[[global:reconnecting-message, {config.siteTitle}]]">
77
+ <i class="fa fa-check"></i>
78
+ </a>
79
+ </li>
80
+ </ul>
81
+ {{{ if config.searchEnabled }}}
82
+ <div class="navbar-nav mb-2 mb-lg-0 position-relative">
83
+ <form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
84
+ <div component="search/fields" class="hidden" id="search-fields">
85
+ <div class="input-group flex-nowrap">
86
+ <input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
87
+
88
+ <button href="#" class="btn btn-outline-secondary">
89
+ <i class="fa fa-gears fa-fw advanced-search-link"></i>
90
+ </button>
91
+ </div>
92
+
93
+ <div id="quick-search-container" class="quick-search-container dropdown-menu d-block mt-2 hidden">
94
+ <div class="form-check filter-category mb-2 ms-4">
95
+ <input class="form-check-input" type="checkbox" checked>
96
+ <label class="form-check-label name"></label>
97
+ </div>
98
+
99
+ <div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
100
+ <div class="quick-search-results-container"></div>
101
+ </div>
102
+ <button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
103
+ </div>
104
+
105
+ <li id="" class="nav-item"><a component="search/button" id="search-button" href="#" class="nav-link"><i class="fa fa-search fa-fw" title="Search"></i></a></li>
106
+ </form>
107
+
108
+ </div>
109
+ {{{ end }}}
110
+
111
+ {{{ if !maintenanceHeader }}}
112
+ {{{ if config.loggedIn }}}
113
+ <ul id="logged-in-menu" class="navbar-nav me-0 mb-2 mb-lg-0 align-items-center">
114
+ <li class="nav-item notifications dropdown d-none d-sm-block" component="notifications" title="[[global:header.notifications]]">
115
+ <a href="{relative_path}/notifications" class="nav-link" data-bs-toggle="dropdown" id="notif_dropdown" data-ajaxify="false" role="button">
116
+ <i component="notifications/icon" class="fa fa-fw {{{ if unreadCount.notification}}}fa-bell{{{ else }}}fa-bell-o{{{ end }}} unread-count" data-content="{unreadCount.notification}"></i>
117
+ </a>
118
+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="notif_dropdown">
119
+ <li>
120
+ <ul component="notifications/list" class="notification-list">
121
+ <li class="loading-text">
122
+ <a href="#"><i class="fa fa-refresh fa-spin"></i> [[global:notifications.loading]]</a>
123
+ </li>
124
+ </ul>
125
+ </li>
126
+ <li class="notif-dropdown-link">
127
+ <div class="btn-group d-flex justify-content-center">
128
+ <a role="button" href="#" class="btn btn-light mark-all-read"><i class="fa fa-check-double"></i> [[notifications:mark_all_read]]</a>
129
+ <a class="btn btn-light" href="{relative_path}/notifications"><i class="fa fa-list"></i> [[notifications:see_all]]</a>
130
+ </div>
131
+ </li>
132
+ </ul>
133
+ </li>
134
+
135
+ <!-- IF canChat -->
136
+ <li class="nav-item chats dropdown" title="[[global:header.chats]]">
137
+ <a class="nav-link" data-bs-toggle="dropdown" href="{relative_path}/user/{user.userslug}/chats" id="chat_dropdown" component="chat/dropdown" data-ajaxify="false" role="button">
138
+ <i component="chat/icon" class="fa fa-comment-o fa-fw unread-count" data-content="{unreadCount.chat}"></i> <span class="d-inline d-sm-none">[[global:header.chats]]</span>
139
+ </a>
140
+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="chat_dropdown">
141
+ <li>
142
+ <ul component="chat/list" class="chat-list chats-list">
143
+ <li class="loading-text">
144
+ <a href="#"><i class="fa fa-refresh fa-spin"></i> [[global:chats.loading]]</a>
145
+ </li>
146
+ </ul>
147
+ </li>
148
+ <li class="notif-dropdown-link">
149
+ <div class="btn-group d-flex justify-content-center">
150
+ <a class="btn btn-light mark-all-read" href="#" component="chats/mark-all-read"><i class="fa fa-check-double"></i> [[modules:chat.mark_all_read]]</a>
151
+ <a class="btn btn-light" href="{relative_path}/user/{user.userslug}/chats"><i class="fa fa-comments"></i> [[modules:chat.see_all]]</a>
152
+ </div>
153
+ </li>
154
+ </ul>
155
+ </li>
156
+ <!-- ENDIF canChat -->
157
+
158
+ <!-- IMPORT partials/header/user-menu.tpl -->
159
+ </ul>
160
+ {{{ else }}}
161
+ <ul id="logged-out-menu" class="navbar-nav me-0 mb-2 mb-lg-0 align-items-center">
162
+ {{{ if allowRegistration }}}
163
+ <li class="nav-item">
164
+ <a class="nav-link" href="{relative_path}/register">
165
+ <i class="fa fa-pencil fa-fw d-inline-block d-sm-none"></i>
166
+ <span>[[global:register]]</span>
167
+ </a>
168
+ </li>
169
+ {{{ end }}}
170
+ <li class="nav-item">
171
+ <a class="nav-link" href="{relative_path}/login">
172
+ <i class="fa fa-sign-in fa-fw d-inline-block d-sm-none"></i>
173
+ <span>[[global:login]]</span>
174
+ </a>
175
+ </li>
176
+ </ul>
177
+ {{{ end }}}
178
+ {{{ else }}}
179
+ <ul class="navbar-nav me-0 mb-2 mb-lg-0"></ul>
180
+ <li class="nav-item">
181
+ <a href="{relative_path}/login">
182
+ <i class="fa fa-sign-in fa-fw d-block d-sm-none"></i>
183
+ <span>[[global:login]]</span>
184
+ </a>
185
+ </li>
186
+ </ul>
187
+ {{{ end }}}
188
+ </div>
@@ -0,0 +1,32 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+
4
+ <!-- IF !notifications.length -->
5
+ <li class="no-notifs"><a href="#">[[notifications:no_notifs]]</a></li>
6
+ <!-- ENDIF !notifications.length -->
7
+
8
+ {{{each notifications}}}
9
+ <li class="{notifications.readClass}" data-nid="{notifications.nid}" data-path="{notifications.path}" <!-- IF notifications.pid --> data-pid="{notifications.pid}"<!-- ENDIF notifications.pid --><!-- IF notifications.tid --> data-tid="{notifications.tid}"<!-- ENDIF notifications.tid -->>
10
+ <!-- IF notifications.image -->
11
+ <!-- IF notifications.from -->
12
+ <a href="{config.relative_path}/user/{notifications.user.userslug}"><img class="float-start user-img avatar avatar-rounded" style="--avatar-size: 32px;" src="{notifications.image}" /></a>
13
+ <!-- ENDIF notifications.from -->
14
+ <!-- ELSE -->
15
+ <a href="{config.relative_path}/user/{notifications.user.userslug}"><div class="float-start avatar avatar-rounded" style="--avatar-size: 32px; background-color: {notifications.user.icon:bgColor};">{notifications.user.icon:text}</div></a>
16
+ <!-- ENDIF notifications.image -->
17
+
18
+ <a href="{notifications.path}" class="notification-chat-content deco-none">
19
+ <span class="text">{notifications.bodyShort}</span>
20
+ </a>
21
+
22
+ <div class="notification-chat-controls">
23
+ {{{ if ./nid }}}
24
+ <div class="mark-read" aria-label="Mark Read">
25
+ <i class="unread fa fa-circle"></i>
26
+ <i class="read fa fa-circle-o"></i>
27
+ </div>
28
+ {{{ end }}}
29
+ <span class="relTime">{notifications.timeago}</span>
30
+ </div>
31
+ </li>
32
+ {{{end}}}
@@ -0,0 +1,47 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div component="pagination" class="pagination-container<!-- IF !pagination.pages.length --> hidden<!-- ENDIF !pagination.pages.length -->">
4
+ <ul class="pagination hidden-xs justify-content-center">
5
+ <li class="page-item previous float-start<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
6
+ <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
7
+ </li>
8
+
9
+ {{{each pagination.pages}}}
10
+ <!-- IF pagination.pages.separator -->
11
+ <li component="pagination/select-page" class="page-item page select-page">
12
+ <a class="page-link" href="#"><i class="fa fa-ellipsis-h"></i></a>
13
+ </li>
14
+ <!-- ELSE -->
15
+ <li class="page-item page<!-- IF pagination.pages.active --> active<!-- ENDIF pagination.pages.active -->" >
16
+ <a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}">{pagination.pages.page}</a>
17
+ </li>
18
+ <!-- ENDIF pagination.pages.separator -->
19
+ {{{end}}}
20
+
21
+ <li class="page-item next float-end<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
22
+ <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
23
+ </li>
24
+ </ul>
25
+
26
+ <ul class="pagination hidden-sm hidden-md hidden-lg justify-content-center">
27
+ <li class="page-item first<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
28
+ <a class="page-link" href="?{pagination.first.qs}" data-page="1"><i class="fa fa-fast-backward"></i> </a>
29
+ </li>
30
+
31
+ <li class="page-item previous<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
32
+ <a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}"><i class="fa fa-chevron-left"></i> </a>
33
+ </li>
34
+
35
+ <li component="pagination/select-page" class="page-item page select-page">
36
+ <a class="page-link" href="#">{pagination.currentPage} / {pagination.pageCount}</a>
37
+ </li>
38
+
39
+ <li class="page-item next<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
40
+ <a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}"> <i class="fa fa-chevron-right"></i></a>
41
+ </li>
42
+
43
+ <li class="page-item last<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
44
+ <a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}"><i class="fa fa-fast-forward"></i> </a>
45
+ </li>
46
+ </ul>
47
+ </div>
@@ -0,0 +1,22 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="topic-main-buttons float-end d-inline-block">
4
+ <span class="loading-indicator btn float-start hidden" done="0">
5
+ <span class="hidden-xs">[[topic:loading_more_posts]]</span> <i class="fa fa-refresh fa-spin"></i>
6
+ </span>
7
+
8
+ <!-- IF loggedIn -->
9
+ <button component="topic/mark-unread" class="btn btn-sm btn-outline-secondary" title="[[topic:mark_unread]]">
10
+ <i class="fa fa-fw fa-inbox"></i><span class="visible-sm-inline visible-md-inline visible-lg-inline"></span>
11
+ </button>
12
+ <!-- ENDIF loggedIn -->
13
+
14
+ <!-- IMPORT partials/topic/watch.tpl -->
15
+
16
+ <!-- IMPORT partials/topic/sort.tpl -->
17
+
18
+ <div class="d-inline-block">
19
+ <!-- IMPORT partials/thread_tools.tpl -->
20
+ </div>
21
+ <!-- IMPORT partials/topic/reply-button.tpl -->
22
+ </div>
@@ -0,0 +1,10 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <ul component="posts" class="posts-list list-unstyled" data-nextstart="{nextStart}">
4
+ {{{each posts}}}
5
+ <!-- IMPORT partials/posts_list_item.tpl -->
6
+ {{{end}}}
7
+ </ul>
8
+ <div component="posts/loading" class="loading-indicator text-center hidden">
9
+ <i class="fa fa-refresh fa-spin"></i>
10
+ </div>
@@ -0,0 +1,34 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <li component="post" class="posts-list-item row<!-- IF ../deleted --> deleted<!-- ELSE --><!-- IF ../topic.deleted --> deleted<!-- ENDIF --><!-- ENDIF -->{{{ if ../topic.scheduled }}} scheduled{{{ end }}}" data-pid="{../pid}" data-uid="{../uid}">
4
+ <div class="col-lg-11 col-sm-10 col-9 post-body">
5
+ <a class="topic-title" href="{config.relative_path}/post/{../pid}">
6
+ <!-- IF !../isMainPost -->RE: <!-- ENDIF -->{../topic.title}
7
+ </a>
8
+
9
+ <div component="post/content" class="content">
10
+ {../content}
11
+ </div>
12
+
13
+ <small class="topic-category"><a href="{config.relative_path}/category/{../category.slug}">[[global:posted_in, {../category.name}]]</a></small>
14
+
15
+ {{{ if ../isMainPost }}}
16
+ {{{ if ../topic.tags.length }}}
17
+ <span class="tag-list">
18
+ {{{ each ../topic.tags }}}
19
+ <a href="{config.relative_path}/tags/{topic.tags.valueEncoded}"><span class="tag tag-item tag-class-{topic.tags.class}">{topic.tags.valueEscaped}</span></a>
20
+ {{{ end }}}
21
+ </span>
22
+ {{{ end }}}
23
+ {{{ end }}}
24
+
25
+ <div class="post-info">
26
+ <a href="{config.relative_path}/user/{../user.userslug}">{buildAvatar(../user, "28px", true, "user-img not-responsive")}</a>
27
+
28
+ <div class="post-author">
29
+ <a href="{config.relative_path}/user/{../user.userslug}">{../user.displayname}</a><br />
30
+ <span class="timeago" title="{../timestampISO}"></span>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </li>
@@ -0,0 +1,36 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <ul id="quick-search-results" class="quick-search-results list-unstyled mb-0 p-0 overflow-auto" style="max-width:400px; max-height: 500px;">
4
+ {{{each posts}}}
5
+ <li data-tid="{posts.topic.tid}" data-pid="{posts.pid}">
6
+ <a href="{config.relative_path}/post/{posts.pid}"
7
+ class="text-decoration-none text-reset clearfix d-block text-truncate px-3 py-1">
8
+ {buildAvatar(posts.user, "24px", true)}
9
+ <span class="quick-search-title fw-bold">{posts.topic.title}</span>
10
+ <br/>
11
+ <p class="snippet text-break text-wrap">
12
+ {posts.snippet}
13
+ </p>
14
+ <small class="post-info float-end">
15
+ <div class="category-item d-inline-block">
16
+ {buildCategoryIcon(./category, "24px", "rounded-circle")} {posts.category.name}
17
+ &bull; <span class="timeago" title="{posts.timestampISO}"></span>
18
+ </div>
19
+ </small>
20
+ </a>
21
+ </li>
22
+ <!-- IF !@last -->
23
+ <li role="separator" class="dropdown-divider"></li>
24
+ <!-- ENDIF -->
25
+ {{{end}}}
26
+ </ul>
27
+ <!-- IF multiplePages -->
28
+ <div class="text-center mt-2">
29
+ <a href="{url}">
30
+ [[search:see-more-results, {matchCount}]]
31
+ </a>
32
+ </div>
33
+ <!-- ENDIF multiplePages -->
34
+ {{{if !posts.length}}}
35
+ <div class="text-center no-results">[[search:no-matches]]</li>
36
+ {{{end}}}
@@ -0,0 +1,57 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div id="results" class="search-results col-md-12" data-search-query="{search_query}">
4
+ {{{ if matchCount }}}
5
+ <div class="alert alert-info">[[search:results_matching, {matchCount}, {search_query}, {time}]] </div>
6
+ {{{ else }}}
7
+ {{{ if search_query }}}
8
+ <div class="alert alert-warning">[[search:no-matches]]</div>
9
+ {{{ end }}}
10
+ {{{ end }}}
11
+
12
+ {{{each posts}}}
13
+ <div class="topic-row card clearfix mb-3">
14
+ <div class="card-body">
15
+ <div>
16
+ <a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "24px", true)}</a>
17
+ <span class="search-result-text search-result-title"><a href="{config.relative_path}/post/{posts.pid}">{./topic.title}</a></span>
18
+ </div>
19
+
20
+ {{{ if showAsPosts }}}
21
+ <div class="search-result-text">
22
+ {./content}
23
+ <p class="fade-out"></p>
24
+ </div>
25
+ {{{ end }}}
26
+
27
+ <small class="post-info float-end">
28
+ <a href="{config.relative_path}/category/{./category.slug}">
29
+ <div class="category-item d-inline-block">
30
+ {buildCategoryIcon(./category, "24px", "rounded-circle")}
31
+ {./category.name}
32
+ </div>
33
+ </a> &bull;
34
+ <span class="timeago" title="{./timestampISO}"></span>
35
+ </small>
36
+ </div>
37
+ </div>
38
+ {{{end}}}
39
+
40
+ {{{ if users.length }}}
41
+ <!-- IMPORT partials/users_list.tpl -->
42
+ {{{ end }}}
43
+
44
+ {{{ if tags.length }}}
45
+ <!-- IMPORT partials/tags_list.tpl -->
46
+ {{{ end }}}
47
+
48
+ {{{ if categories.length }}}
49
+ <ul class="categories">
50
+ {{{each categories}}}
51
+ <!-- IMPORT partials/categories/item.tpl -->
52
+ {{{end}}}
53
+ </ul>
54
+ {{{ end }}}
55
+
56
+ <!-- IMPORT partials/paginator.tpl -->
57
+ </div>
@@ -0,0 +1,6 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <section class="menu-section" data-section="navigation">
4
+ <ul class="menu-section-list text-bg-dark"></ul>
5
+ </section>
6
+
@@ -0,0 +1,7 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ {{{each tags}}}
4
+ <h5 class="float-start tag-container me-4 mb-4 fw-bold">
5
+ <a href="{config.relative_path}/tags/{tags.valueEncoded}" data-tag="{tags.valueEscaped}"><span class="tag-item text-muted text-uppercase text-nowrap tag-class-{tags.class} me-2" data-tag="{tags.valueEscaped}">{tags.valueEscaped}</span><span class="tag-topic-count text-primary text-nowrap human-readable-number" title="{tags.score}">{tags.score}</span></a>
6
+ </h5>
7
+ {{{end}}}
@@ -0,0 +1,10 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ {{{ if privileges.view_thread_tools }}}
4
+ <div title="[[topic:thread_tools.title]]" class="btn-group thread-tools bottom-sheet">
5
+ <button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
6
+ <i class="fa fa-fw fa-gear"></i>
7
+ </button>
8
+ <ul class="dropdown-menu dropdown-menu-end"></ul>
9
+ </div>
10
+ {{{ end }}}
@@ -0,0 +1,16 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type}" component="toaster/toast">
4
+ <button type="button" class="btn-close float-end" data-bs-dismiss="alert" aria-label="close"></button>
5
+ <!-- IF image -->
6
+ <img src="{image}">
7
+ <!-- ENDIF image -->
8
+
9
+ <!-- IF title -->
10
+ <strong>{title}</strong>
11
+ <!-- ENDIF title -->
12
+
13
+ <!-- IF message -->
14
+ <p>{message}</p>
15
+ <!-- ENDIF message -->
16
+ </div>
@@ -0,0 +1,3 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- This partial intentionally left blank; overwritten by nodebb-plugin-browsing-users -->
@@ -0,0 +1,28 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <li component="topic/event" class="timeline-event text-muted" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
4
+ <div class="timeline-badge">
5
+ <i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}}"></i>
6
+ </div>
7
+ <span class="timeline-text">
8
+ {{{ if ./href}}}
9
+ <a href="{config.relative_path}{./href}">{./text}</a>
10
+ {{{ else }}}
11
+ {./text}
12
+ {{{ end }}}
13
+ &nbsp;
14
+ </span>
15
+ {{{ if ./user }}}
16
+ {{{ if ./user.system }}}
17
+ <span class="timeline-text">[[global:system-user]]</span>&nbsp;
18
+ {{{ else }}}
19
+ <span><a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(./user, "16px", true)} &nbsp; {./user.username}</a></span>&nbsp;
20
+ {{{ end }}}
21
+ {{{ end }}}
22
+ <span class="timeago timeline-text" title="{./timestampISO}"></span>
23
+
24
+ {{{ if privileges.isAdminOrMod }}}
25
+ &nbsp;<span component="topic/event/delete" data-topic-event-id="{./id}" data-topic-event-type="{./type}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
26
+ {{{ end }}}
27
+ </li>
28
+