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,228 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="account">
4
+ <!-- IMPORT partials/account/header.tpl -->
5
+
6
+ <!-- IF sessions.length -->
7
+ <div class="row mb-3">
8
+ <div class="col-12 col-md-12">
9
+ <h4>[[global:sessions]]</h4>
10
+ <ul class="list-group" component="user/sessions">
11
+ {{{each sessions}}}
12
+ <li class="list-group-item" data-uuid="{../uuid}">
13
+ <div class="float-end">
14
+ <!-- IF isSelfOrAdminOrGlobalModerator -->
15
+ <!-- IF !../current -->
16
+ <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
17
+ <!-- ENDIF !../current -->
18
+ <!-- ENDIF isSelfOrAdminOrGlobalModerator -->
19
+ {function.userAgentIcons}
20
+ <i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
21
+ </div>
22
+ {../browser} {../version} on {../platform}<br />
23
+ <small class="timeago text-muted" title="{../datetimeISO}"></small>
24
+ <ul>
25
+ <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
26
+ </ul>
27
+ </li>
28
+ {{{end}}}
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ <!-- ENDIF sessions.length -->
33
+
34
+ <div class="row">
35
+ <div class="col-sm-6">
36
+ <div class="card mb-3">
37
+ <h5 class="card-header">
38
+ [[global:recentips]]
39
+ </h5>
40
+ <div class="card-body">
41
+ <ul>
42
+ {{{each ips}}}
43
+ <li>{@value}</li>
44
+ {{{end}}}
45
+ </ul>
46
+ </div>
47
+ </div>
48
+
49
+ <div class="card mb-3">
50
+ <h5 class="card-header">
51
+ [[user:info.username-history]]
52
+ </h5>
53
+ <div class="card-body">
54
+ <ul class="list-group">
55
+ {{{each usernames}}}
56
+ <li class="list-group-item">
57
+ {../value}
58
+ <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
59
+ </li>
60
+ {{{end}}}
61
+ </ul>
62
+ </div>
63
+ </div>
64
+
65
+ <div class="card">
66
+ <h5 class="card-header">
67
+ [[user:info.email-history]]
68
+ </h5>
69
+ <div class="card-body">
70
+ <ul class="list-group">
71
+ {{{each emails}}}
72
+ <li class="list-group-item">
73
+ {../value}
74
+ <small class="float-end"><span class="timeago" title="{../timestampISO}"></span></small>
75
+ </li>
76
+ {{{end}}}
77
+ </ul>
78
+ </div>
79
+ </div>
80
+ </div>
81
+ <div class="col-sm-6">
82
+ <div class="card mb-3">
83
+ <h5 class="card-header">
84
+ [[user:info.latest-flags]]
85
+ </h5>
86
+ <div class="card-body">
87
+ <!-- IF history.flags.length -->
88
+ <ul class="recent-flags list-unstyled">
89
+ {{{each history.flags}}}
90
+ <li>
91
+ <p>
92
+ {{{ if history.flags.targetPurged }}}
93
+ <div>[[flags:target-purged]]</div>
94
+ {{{ else }}}
95
+ <a class="title" href="{config.relative_path}/post/{../pid}">{../title}</a><br />
96
+ {{{ end }}}
97
+ <span class="timestamp">[[flags:flagged-timeago-readable, {../timestampISO}, {../timestampReadable}]]</span>
98
+ </p>
99
+ </li>
100
+ {{{end}}}
101
+ </ul>
102
+ <!-- ELSE -->
103
+ <div class="alert alert-success">[[user:info.no-flags]]</div>
104
+ <!-- ENDIF history.flags.length -->
105
+ </div>
106
+ </div>
107
+
108
+ <div class="card mb-3">
109
+ <h5 class="card-header">
110
+ [[user:info.ban-history]]
111
+
112
+ <!-- IF !banned -->
113
+ <!-- IF !isSelf -->
114
+ <button class="btn btn-sm float-end btn-danger" component="account/ban">[[user:ban_account]]</button>
115
+ <!-- ENDIF !isSelf -->
116
+ <!-- ELSE -->
117
+ <!-- IF !isSelf -->
118
+ <button class="btn btn-sm float-end btn-success" component="account/unban">[[user:unban_account]]</button>
119
+ <!-- ENDIF !isSelf -->
120
+ <!-- ENDIF !banned -->
121
+ </h5>
122
+ <div class="card-body">
123
+ <!-- IF history.bans.length -->
124
+ <ul class="ban-history list-unstyled">
125
+ {{{each history.bans}}}
126
+ <li>
127
+ <p>
128
+ <a href="{config.relative_path}/user/{history.bans.user.userslug}">{buildAvatar(history.bans.user, "24px", true)}</a>
129
+ <strong>
130
+ <a href="<!-- IF history.bans.user.userslug -->{config.relative_path}/user/{history.bans.user.userslug}<!-- ELSE -->#<!-- ENDIF history.bans.user.userslug -->" itemprop="author" data-username="{history.bans.user.username}" data-uid="{history.bans.user.uid}">{history.bans.user.username}</a>
131
+ </strong>
132
+ <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
133
+ <!-- IF ../until -->
134
+ <span class="expiry">[[user:info.banned-until, {../untilReadable}]]</span><br />
135
+ <!-- ELSE -->
136
+ <span class="expiry">[[user:info.banned-permanently]]</span><br />
137
+ <!-- ENDIF ../until -->
138
+ <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
139
+ </p>
140
+ </li>
141
+ {{{end}}}
142
+ </ul>
143
+ <!-- ELSE -->
144
+ <div class="alert alert-success">[[user:info.no-ban-history]]</div>
145
+ <!-- ENDIF history.bans.length -->
146
+ </div>
147
+ </div>
148
+
149
+ <div class="card mb-3">
150
+ <h5 class="card-header">
151
+ [[user:info.mute-history]]
152
+
153
+ {{{ if !muted }}}
154
+ {{{ if !isSelf }}}
155
+ <button class="btn btn-sm float-end btn-danger" component="account/mute">[[user:mute_account]]</button>
156
+ {{{ end }}}
157
+ {{{ else }}}
158
+ {{{ if !isSelf }}}
159
+ <button class="btn btn-sm float-end btn-success" component="account/unmute">[[user:unmute_account]]</button>
160
+ {{{ end }}}
161
+ {{{ end }}}
162
+ </h5>
163
+ <div class="card-body">
164
+ {{{ if history.mutes.length }}}
165
+ <ul class="ban-history list-unstyled">
166
+ {{{ each history.mutes }}}
167
+ <li>
168
+ <p>
169
+ <a href="{config.relative_path}/user/{history.mutes.user.userslug}">{buildAvatar(history.mutes.user, "24px", true)}</a>
170
+ <strong>
171
+ <a href="<!-- IF history.mutes.user.userslug -->{config.relative_path}/user/{history.mutes.user.userslug}<!-- ELSE -->#<!-- ENDIF history.mutes.user.userslug -->" itemprop="author" data-username="{history.mutes.user.username}" data-uid="{history.mutes.user.uid}">{history.mutes.user.username}</a>
172
+ </strong>
173
+ <span class="timestamp timeago" title="{../timestampISO}"></span> &mdash; {../timestampReadable}<br />
174
+ {{{ if ../until }}}
175
+ <span class="expiry">[[user:info.muted-until, {../untilReadable}]]</span><br />
176
+ {{{ end }}}
177
+
178
+ <span class="reason"><strong>[[user:info.banned-reason-label]]</strong>: {../reason}</span>
179
+ </p>
180
+ </li>
181
+ {{{end}}}
182
+ </ul>
183
+ {{{ else }}}
184
+ <div class="alert alert-success">[[user:info.no-mute-history]]</div>
185
+ {{{ end }}}
186
+ </div>
187
+ </div>
188
+
189
+ <!-- IF isAdminOrGlobalModerator -->
190
+ <div class="card">
191
+ <h5 class="card-header">
192
+ [[user:info.moderation-note]]
193
+ </h5>
194
+ <div class="card-body">
195
+ <textarea component="account/moderation-note" class="form-control"></textarea>
196
+ <br/>
197
+ <button class="btn btn-sm float-end btn-success" component="account/save-moderation-note">[[user:info.moderation-note.add]]</button>
198
+ <br/>
199
+ <div component="account/moderation-note/list">
200
+ {{{each moderationNotes}}}
201
+ <hr/>
202
+
203
+ <div class="clearfix">
204
+ <div class="float-start">
205
+ <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->">{buildAvatar(moderationNotes.user, "24px", true)}</a>
206
+ <strong>
207
+ <a href="<!-- IF moderationNotes.user.userslug -->{config.relative_path}/user/{moderationNotes.user.userslug}<!-- ELSE -->#<!-- ENDIF moderationNotes.user.userslug -->" itemprop="author" data-username="{moderationNotes.user.username}" data-uid="{moderationNotes.user.uid}">{moderationNotes.user.username}</a>
208
+ </strong>
209
+
210
+ <div class="visible-xs-inline-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block">
211
+ <span class="timeago" title="{moderationNotes.timestampISO}"></span>
212
+ </div>
213
+ <br />
214
+
215
+ <div class="content">
216
+ {moderationNotes.note}
217
+ </div>
218
+ </div>
219
+ </div>
220
+ {{{end}}}
221
+ </div>
222
+ <!-- IMPORT partials/paginator.tpl -->
223
+ </div>
224
+ </div>
225
+ <!-- ENDIF isAdminOrGlobalModerator -->
226
+ </div>
227
+ </div>
228
+ </div>
@@ -0,0 +1,21 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="account">
4
+ <!-- IMPORT partials/account/header.tpl -->
5
+
6
+ <div class="row">
7
+ <h1>{title}</h1>
8
+
9
+ <!-- IF !posts.length -->
10
+ <div class="alert alert-warning text-center">{noItemsFoundKey}</div>
11
+ <!-- ENDIF !posts.length -->
12
+
13
+ <div class="col-12">
14
+ <!-- IMPORT partials/posts_list.tpl -->
15
+
16
+ <!-- IF config.usePagination -->
17
+ <!-- IMPORT partials/paginator.tpl -->
18
+ <!-- ENDIF config.usePagination -->
19
+ </div>
20
+ </div>
21
+ </div>
@@ -0,0 +1,168 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="account">
4
+ <!-- IMPORT partials/account/header.tpl -->
5
+
6
+ <div class="profile row">
7
+ <h1 class="fullname"><!-- IF fullname -->{fullname}<!-- ELSE -->{username}<!-- ENDIF fullname --></h1>
8
+ <h2 class="username"><!-- IF !banned -->@{username}<!-- ELSE -->[[user:banned]]<!-- ENDIF !banned --></h2>
9
+ <!-- IF isAdminOrGlobalModeratorOrModerator -->
10
+ <!-- IF banned -->
11
+ <div class="text-center">
12
+ <!-- IF banned_until -->
13
+ [[user:info.banned-until, {banned_until_readable}]]
14
+ <!-- ELSE -->
15
+ [[user:info.banned-permanently]]
16
+ <!-- ENDIF banned_until -->
17
+ </div>
18
+ <!-- ENDIF banned -->
19
+ <!-- ENDIF isAdminOrGlobalModeratorOrModerator -->
20
+
21
+ <!-- IF selectedGroup.length -->
22
+ <div class="text-center">
23
+ {{{each selectedGroup}}}
24
+ <!-- IF selectedGroup.slug -->
25
+ <!-- IMPORT partials/groups/badge.tpl -->
26
+ <!-- ENDIF selectedGroup.slug -->
27
+ {{{end}}}
28
+ </div>
29
+ <br/>
30
+ <!-- ENDIF selectedGroup.length -->
31
+
32
+ <!-- IF aboutme -->
33
+ <span component="aboutme" class="text-center aboutme">{aboutmeParsed}</span>
34
+ <!-- ENDIF aboutme -->
35
+
36
+ <div class="account-stats">
37
+ <!-- IF !reputation:disabled -->
38
+ <div class="stat">
39
+ <div class="human-readable-number" title="{reputation}">{reputation}</div>
40
+ <span class="stat-label">[[global:reputation]]</span>
41
+ </div>
42
+ <!-- ENDIF !reputation:disabled -->
43
+
44
+ <div class="stat">
45
+ <div class="human-readable-number" title="{profileviews}">{profileviews}</div>
46
+ <span class="stat-label">[[user:profile_views]]</span>
47
+ </div>
48
+
49
+ <div class="stat">
50
+ <div><a class="human-readable-number" title="{counts.posts}" href="{config.relative_path}/user/{userslug}/posts">{counts.posts}</a></div>
51
+ <span class="stat-label">[[global:posts]]</span>
52
+ </div>
53
+
54
+ <div class="stat">
55
+ <div><a class="human-readable-number" title="{counts.followers}" href="{config.relative_path}/user/{userslug}/followers">{counts.followers}</a></div>
56
+ <span class="stat-label">[[user:followers]]</span>
57
+ </div>
58
+
59
+ <div class="stat">
60
+ <div><a class="human-readable-number" title="{counts.following}" href="{config.relative_path}/user/{userslug}/following">{counts.following}</a></div>
61
+ <span class="stat-label">[[user:following]]</span>
62
+ </div>
63
+ </div>
64
+
65
+ <div class="text-center profile-meta">
66
+ <span>[[user:joined]]</span>
67
+ <strong class="timeago" title="{joindateISO}"></strong>
68
+
69
+ <span>[[user:lastonline]]</span>
70
+ <strong class="timeago" title="{lastonlineISO}"></strong><br />
71
+
72
+ <!-- IF email -->
73
+ <span>[[user:email]]</span>
74
+ <strong><i class="fa fa-eye-slash {emailClass}" title="[[user:email_hidden]]"></i> {email}</strong>
75
+ <!-- ENDIF email -->
76
+
77
+ <!-- IF websiteName -->
78
+ <span>[[user:website]]</span>
79
+ <strong><a href="{websiteLink}" rel="nofollow noopener noreferrer">{websiteName}</a></strong>
80
+ <!-- ENDIF websiteName -->
81
+
82
+ <!-- IF location -->
83
+ <span>[[user:location]]</span>
84
+ <strong>{location}</strong>
85
+ <!-- ENDIF location -->
86
+
87
+ <!-- IF age -->
88
+ <span>[[user:age]]</span>
89
+ <strong>{age}</strong>
90
+ <!-- ENDIF age -->
91
+ </div>
92
+ </div>
93
+
94
+
95
+ <hr />
96
+
97
+ <div class="row">
98
+ <div class="col-12 account-block hidden">
99
+ <div class="account-picture-block text-center">
100
+ <span>
101
+ <span class="account-username"> {username}</span>
102
+ </span>
103
+
104
+ <!-- IF !isSelf -->
105
+ <a component="account/unfollow" href="#" class="btn btn-outline-secondary{{{ if !isFollowing }}} hide{{{ end }}}">[[user:unfollow]]</a>
106
+ <a component="account/follow" href="#" class="btn btn-primary{{{ if isFollowing }}} hide{{{ end }}}">[[user:follow]]</a>
107
+ <!-- ENDIF !isSelf -->
108
+ </div>
109
+ </div>
110
+ </div>
111
+
112
+ <!-- IF groups.length -->
113
+ <div class="row">
114
+ <div class="col-12 hidden">
115
+ {{{each groups}}}
116
+ <a href="{config.relative_path}/groups/{groups.slug}"><span class="label group-label inline-block" style="background-color: {groups.labelColor};"><!-- IF groups.icon --><i class="fa {groups.icon}"></i> <!-- ENDIF groups.icon -->{groups.userTitle}</span></a>
117
+ {{{end}}}
118
+ </div>
119
+ </div>
120
+ <!-- ENDIF groups.length -->
121
+
122
+ <!-- IF ips.length -->
123
+ <div class="row">
124
+ <div class="col-12 hidden">
125
+ <div class="card">
126
+ <h5 class="card-header">
127
+ [[global:recentips]]
128
+ </h5>
129
+ <div class="card-body">
130
+ {{{each ips}}}
131
+ <div>{ips}</div>
132
+ {{{end}}}
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ <!-- ENDIF ips.length -->
138
+
139
+ <div class="row">
140
+ {{{ if bestPosts.length }}}
141
+ <div class="col-lg-12 col-12">
142
+ <h1>[[pages:account/best, {username}]]</h1>
143
+
144
+ <div class="col-12">
145
+ <ul component="posts" class="posts-list list-unstyled">
146
+ {{{each bestPosts}}}
147
+ <!-- IMPORT partials/posts_list_item.tpl -->
148
+ {{{end}}}
149
+ </ul>
150
+ </div>
151
+ </div>
152
+ {{{ end }}}
153
+ {{{ if latestPosts.length}}}
154
+ <div class="col-lg-12 col-12">
155
+ <h1>[[pages:account/latest-posts, {username}]]</h1>
156
+ <div class="col-12">
157
+ <ul component="posts" class="posts-list list-unstyled">
158
+ {{{each latestPosts}}}
159
+ <!-- IMPORT partials/posts_list_item.tpl -->
160
+ {{{end}}}
161
+ </ul>
162
+ </div>
163
+ </div>
164
+ {{{ end }}}
165
+ </div>
166
+
167
+ <div id="user-action-alert" class="alert alert-success hide"></div>
168
+ </div>
@@ -0,0 +1,34 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <div class="account">
4
+ <!-- IMPORT partials/account/header.tpl -->
5
+
6
+ <!-- IF sessions.length -->
7
+ <div class="row">
8
+ <div class="col-12 col-md-12">
9
+ <p class="lead">[[user:sessions.description]]</p>
10
+ <hr />
11
+ <ul class="list-group" component="user/sessions">
12
+ {{{each sessions}}}
13
+ <li class="list-group-item" data-uuid="{../uuid}">
14
+ <div class="float-end">
15
+ <!-- IF isSelfOrAdminOrGlobalModerator -->
16
+ <!-- IF !../current -->
17
+ <button class="btn btn-sm btn-outline-secondary" type="button" data-action="revokeSession">Revoke Session</button>
18
+ <!-- ENDIF !../current -->
19
+ <!-- ENDIF isSelfOrAdminOrGlobalModerator -->
20
+ {function.userAgentIcons}
21
+ <i class="fa fa-circle text-<!-- IF ../current -->success<!-- ELSE -->muted<!-- ENDIF ../current -->"></i>
22
+ </div>
23
+ {../browser} {../version} on {../platform}<br />
24
+ <small class="timeago text-muted" title="{../datetimeISO}"></small>
25
+ <ul>
26
+ <li><strong>[[global:ip_address]]</strong>: {../ip}</li>
27
+ </ul>
28
+ </li>
29
+ {{{end}}}
30
+ </ul>
31
+ </div>
32
+ </div>
33
+ <!-- ENDIF sessions.length -->
34
+ </div>