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,118 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <ul component="category" class="topic-list" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}" data-set="{set}">
4
+ {{{each topics}}}
5
+ <li component="category/topic" class="row clearfix category-item {function.generateTopicClass}" <!-- IMPORT partials/data/category.tpl -->>
6
+ <link itemprop="url" content="{config.relative_path}/topic/{../slug}" />
7
+ <meta itemprop="name" content="{function.stripTags, ../title}" />
8
+ <meta itemprop="itemListOrder" content="descending" />
9
+ <meta itemprop="position" content="{../index}" />
10
+ <a id="{../index}" data-index="{../index}" component="topic/anchor"></a>
11
+
12
+ <div class="col-md-6 col-sm-9 col-10 content">
13
+ <div class="avatar float-start me-2">
14
+ <!-- IF showSelect -->
15
+ <div class="select" component="topic/select">
16
+ {{{ if ./thumbs.length }}}
17
+ <img src="{./thumbs.0.url}" class="user-img not-responsive" />
18
+ {{{ else }}}
19
+ {buildAvatar(../user, "48px", true, "not-responsive")}
20
+ {{{ end }}}
21
+ <i class="fa fa-check"></i>
22
+ </div>
23
+ <!-- ENDIF showSelect -->
24
+
25
+ <!-- IF !showSelect -->
26
+ <a href="<!-- IF topics.user.userslug -->{config.relative_path}/user/{topics.user.userslug}<!-- ELSE -->#<!-- ENDIF topics.user.userslug -->" class="float-start">
27
+ {{{ if ./thumbs.length }}}
28
+ <img src="{./thumbs.0.url}" class="user-img not-responsive" />
29
+ {{{ else }}}
30
+ {buildAvatar(../user, "48px", true, "not-responsive")}
31
+ {{{ end }}}
32
+ </a>
33
+ <!-- ENDIF !showSelect -->
34
+ </div>
35
+
36
+ <h2 component="topic/header" class="title mb-1">
37
+ <i component="topic/scheduled" class="fa fa-clock-o {{{ if !topics.scheduled }}}hide{{{ end }}}" title="[[topic:scheduled]]"></i>
38
+ <i component="topic/pinned" class="fa fa-thumb-tack {{{ if (topics.scheduled || !topics.pinned) }}}hide{{{ end }}}" title="{{{ if !../pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {../pinExpiryISO}]]{{{ end }}}"></i>
39
+ <i component="topic/locked" class="fa fa-lock {{{ if !topics.locked }}}hide{{{ end }}}" title="[[topic:locked]]"></i>
40
+ <i component="topic/moved" class="fa fa-arrow-circle-right {{{ if !topics.oldCid }}}hide{{{ end }}}" title="[[topic:moved]]"></i>
41
+ {{{each topics.icons}}}{@value}{{{end}}}
42
+
43
+ {{{ if topics.noAnchor }}}
44
+ <span>{./title}</span>
45
+ {{{ else }}}
46
+ <a href="{config.relative_path}/topic/{./slug}{{{ if ./bookmark }}}/{./bookmark}{{{ end }}}">{./title}</a>
47
+ {{{ end }}}
48
+ </h2>
49
+ <div class="info">
50
+ <!-- IF !template.category -->
51
+ <div class="category-item d-inline-block">
52
+ {buildCategoryIcon(./category, "24px", "rounded-circle")}
53
+ <a class="text-muted" href="{config.relative_path}/category/{topics.category.slug}">{topics.category.name}</a>
54
+ </div>
55
+ &bull;
56
+ <!-- ENDIF !template.category -->
57
+
58
+ {{{ if topics.tags.length }}}
59
+ <span class="tag-list hidden-xs">
60
+ {{{ each ./tags }}}
61
+ <!-- IMPORT partials/topic/tag.tpl -->
62
+ {{{ end }}}
63
+ &bull;
64
+ </span>
65
+ {{{ end }}}
66
+
67
+ <span class="hidden-xs"><span class="timeago text-muted" title="{./timestampISO}"></span> &bull; <a class="text-muted" href="{{{ if ./user.userslug }}}{config.relative_path}/user/{./user.userslug}{{{ else }}}#{{{ end }}}">{./user.displayname}</a></span>
68
+
69
+ <span class="visible-xs-inline timeago text-muted" title="{{{ if ./teaser.timestampISO }}}{./teaser.timestampISO}{{{ else }}}{./timestampISO}{{{ end }}}"></span>
70
+ </div>
71
+ </div>
72
+
73
+ <div class="mobile-stat col-2 visible-xs text-end">
74
+ <span class="human-readable-number">{topics.postcount}</span> <a href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"><i class="fa fa-arrow-circle-right"></i></a>
75
+ </div>
76
+
77
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-votes">
78
+ <!-- IF !reputation:disabled -->
79
+ <span class="human-readable-number" title="{topics.votes}">{topics.votes}</span><br />
80
+ <small>[[global:votes]]</small>
81
+ <!-- END -->
82
+ </div>
83
+
84
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-postcount">
85
+ <span class="human-readable-number" title="{topics.postcount}">{topics.postcount}</span><br />
86
+ <small>[[global:posts]]</small>
87
+ </div>
88
+
89
+ <div class="col-md-1 hidden-sm hidden-xs stats stats-viewcount">
90
+ <span class="human-readable-number" title="{topics.viewcount}">{topics.viewcount}</span><br />
91
+ <small>[[global:views]]</small>
92
+ </div>
93
+
94
+ <div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
95
+ <div class="lastpost background-link-container" style="border-color: {topics.category.bgColor}">
96
+ <a class="background-link" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}"></a>
97
+ <!-- IF topics.unreplied -->
98
+ <p>
99
+ [[category:no_replies]]
100
+ </p>
101
+ <!-- ELSE -->
102
+ <!-- IF topics.teaser.pid -->
103
+ <p>
104
+ <a href="{config.relative_path}/user/{topics.teaser.user.userslug}">{buildAvatar(topics.teaser.user, "24px", true, "not-responsive")}</a>
105
+ <a class="permalink text-muted" href="{config.relative_path}/topic/{topics.slug}/{topics.teaser.index}">
106
+ <span class="timeago" title="{topics.teaser.timestampISO}"></span>
107
+ </a>
108
+ </p>
109
+ <div class="post-content">
110
+ {topics.teaser.content}
111
+ </div>
112
+ <!-- ENDIF topics.teaser.pid -->
113
+ <!-- ENDIF topics.unreplied -->
114
+ </div>
115
+ </div>
116
+ </li>
117
+ {{{end}}}
118
+ </ul>
@@ -0,0 +1,60 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <ul id="users-container" class="users-container list-unstyled d-flex flex-wrap gap-2">
4
+ {{{each users}}}
5
+ <li class="users-box registered-user text-center pb-3" data-uid="{users.uid}" style="width: 102px;">
6
+ <a href="{config.relative_path}/user/{users.userslug}">{buildAvatar(users, "64px", true)}</a>
7
+
8
+ <div class="user-info">
9
+ <div class="text-nowrap text-truncate">
10
+ <span>
11
+ <i component="user/status" class="fa fa-circle status {users.status}" title="[[global:{users.status}]]"></i>
12
+ <a href="{config.relative_path}/user/{users.userslug}">{users.username}</a>
13
+ </span>
14
+ </div>
15
+ <!-- IF section_online -->
16
+ <div class="lastonline">
17
+ <span class="timeago" title="{users.lastonlineISO}"></span>
18
+ </div>
19
+ <!-- ENDIF section_online -->
20
+
21
+ <!-- IF section_joindate -->
22
+ <div class="joindate">
23
+ <span class="timeago" title="{users.joindateISO}"></span>
24
+ </div>
25
+ <!-- ENDIF section_joindate -->
26
+
27
+ <!-- IF section_sort-reputation -->
28
+ <div class="reputation">
29
+ <i class="fa fa-star"></i>
30
+ <span class="formatted-number">{users.reputation}</span>
31
+ </div>
32
+ <!-- ENDIF section_sort-reputation -->
33
+
34
+ <!-- IF section_sort-posts -->
35
+ <div class="post-count">
36
+ <i class="fa fa-pencil"></i>
37
+ <span class="formatted-number">{users.postcount}</span>
38
+ </div>
39
+ <!-- ENDIF section_sort-posts -->
40
+
41
+ <!-- IF section_flagged -->
42
+ <div class="flag-count">
43
+ <i class="fa fa-flag"></i>
44
+ <span><a class="formatted-number" href="{config.relative_path}/flags?targetUid={users.uid}">{users.flags}</a></span>
45
+ </div>
46
+ <!-- ENDIF section_flagged -->
47
+ </div>
48
+ </li>
49
+ {{{end}}}
50
+ <!-- IF anonymousUserCount -->
51
+ <li class="users-box anon-user text-center pb-3" style="width: 102px;">
52
+ <span class="avatar avatar-rounded text-bg-secondary" component="avatar/icon" style="--avatar-size: 64px;">G</span>
53
+ <br/>
54
+ <div class="user-info">
55
+ <span id="online_anon_count">{anonymousUserCount}</span>
56
+ <span>[[global:guests]]</span>
57
+ </div>
58
+ </li>
59
+ <!-- ENDIF anonymousUserCount -->
60
+ </ul>
@@ -0,0 +1,23 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <ul class="nav nav-pills">
4
+ <li class="nav-item">
5
+ <a class="nav-link" href="{config.relative_path}/users?section=online">[[global:online]]</a>
6
+ </li>
7
+ <li class="nav-item">
8
+ <a class="nav-link" href="{config.relative_path}/users?section=sort-posts">[[users:top_posters]]</a>
9
+ </li>
10
+ {{{ if !reputation:disabled }}}
11
+ <li class="nav-item">
12
+ <a class="nav-link" href="{config.relative_path}/users?section=sort-reputation">[[users:most_reputation]]</a>
13
+ </li>
14
+ {{{ end }}}
15
+ {{{ if isAdminOrGlobalMod }}}
16
+ <li class="nav-item">
17
+ <a class="nav-link" href="{config.relative_path}/users?section=flagged">[[users:most_flags]]</a>
18
+ </li>
19
+ <li class="nav-item">
20
+ <a class="nav-link" href="{config.relative_path}/users?section=banned">[[user:banned]]</a>
21
+ </li>
22
+ {{{ end }}}
23
+ </ul>
@@ -0,0 +1,37 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="popular">
10
+ <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
+ <div class="d-flex gap-1 align-items-stretch">
12
+ {{{ if canPost }}}
13
+ <!-- IMPORT partials/buttons/newTopic.tpl -->
14
+ {{{ else }}}
15
+ <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
+ {{{ end }}}
17
+ </div>
18
+ <div class="d-flex gap-1 align-items-stretch">
19
+ <!-- IMPORT partials/topic-terms.tpl -->
20
+ <!-- IMPORT partials/topic-filters.tpl -->
21
+ <!-- IMPORT partials/category-filter-right.tpl -->
22
+ <!-- IMPORT partials/category/tools.tpl -->
23
+ </div>
24
+ </div>
25
+
26
+ <div class="category">
27
+ {{{ if !topics.length }}}
28
+ <div class="alert alert-warning" id="category-no-topics">[[recent:no_popular_topics]]</div>
29
+ {{{ end }}}
30
+
31
+ <!-- IMPORT partials/topics_list.tpl -->
32
+
33
+ {{{ if config.usePagination }}}
34
+ <!-- IMPORT partials/paginator.tpl -->
35
+ {{{ end }}}
36
+ </div>
37
+ </div>
@@ -0,0 +1,39 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="recent">
10
+ <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
+ <div class="d-flex gap-1 align-items-stretch">
12
+ {{{ if canPost }}}
13
+ <!-- IMPORT partials/buttons/newTopic.tpl -->
14
+ {{{ else }}}
15
+ <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
+ {{{ end }}}
17
+ <a href="{config.relative_path}/{selectedFilter.url}{querystring}" class="d-inline-block">
18
+ <div class="alert alert-warning h-100 m-0 px-2 py-1 d-flex align-items-center hide" id="new-topics-alert"></div>
19
+ </a>
20
+ </div>
21
+ <div class="d-flex gap-1 align-items-stretch">
22
+ <!-- IMPORT partials/topic-filters.tpl -->
23
+ <!-- IMPORT partials/category-filter-right.tpl -->
24
+ <!-- IMPORT partials/category/tools.tpl -->
25
+ </div>
26
+ </div>
27
+
28
+ <div class="category">
29
+ <!-- IF !topics.length -->
30
+ <div class="alert alert-warning" id="category-no-topics">[[recent:no_recent_topics]]</div>
31
+ <!-- ENDIF !topics.length -->
32
+
33
+ <!-- IMPORT partials/topics_list.tpl -->
34
+
35
+ <!-- IF config.usePagination -->
36
+ <!-- IMPORT partials/paginator.tpl -->
37
+ <!-- ENDIF config.usePagination -->
38
+ </div>
39
+ </div>
@@ -0,0 +1,89 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="row register">
10
+ <div class="row {{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
11
+ <div class="{register_window:spansize}">
12
+ <div class="register-block">
13
+ <div class="alert alert-danger{{{ if !error }}} hidden{{{ end }}}" id="register-error-notify" >
14
+ <strong>[[error:registration-error]]</strong>
15
+ <p>{error}</p>
16
+ </div>
17
+ <form component="register/local" class="form-horizontal" role="form" action="{config.relative_path}/register" method="post">
18
+ <div class="row mb-3">
19
+ <label for="username" class="col-lg-2 col-form-label">[[register:username]]</label>
20
+ <div class="col-lg-10">
21
+ <input class="form-control" type="text" placeholder="[[register:username_placeholder]]" name="username" id="username" autocorrect="off" autocapitalize="off" autocomplete="off" />
22
+ <span class="register-feedback" id="username-notify"></span>
23
+ <span class="form-text">[[register:help.username_restrictions, {minimumUsernameLength}, {maximumUsernameLength}]]</span>
24
+ </div>
25
+ </div>
26
+ <div class="row mb-2">
27
+ <label for="password" class="col-lg-2 col-form-label">[[register:password]]</label>
28
+ <div class="col-lg-10">
29
+ <input class="form-control" type="password" placeholder="[[register:password_placeholder]]" name="password" id="password" />
30
+ <span class="register-feedback" id="password-notify"></span>
31
+ <span class="form-text">[[register:help.minimum_password_length, {minimumPasswordLength}]]</span>
32
+ <p id="caps-lock-warning" class="text-danger hidden">
33
+ <i class="fa fa-exclamation-triangle"></i> [[login:caps-lock-enabled]]
34
+ </p>
35
+ </div>
36
+ </div>
37
+ <div class="row mb-2">
38
+ <label for="password-confirm" class="col-lg-2 col-form-label">[[register:confirm_password]]</label>
39
+ <div class="col-lg-10">
40
+ <input class="form-control" type="password" placeholder="[[register:confirm_password_placeholder]]" name="password-confirm" id="password-confirm" />
41
+ <span class="register-feedback" id="password-confirm-notify"></span>
42
+ </div>
43
+ </div>
44
+
45
+ {{{each regFormEntry}}}
46
+ <div class="row mb-2">
47
+ <label for="register-{regFormEntry.styleName}" class="col-lg-2 col-form-label">{regFormEntry.label}</label>
48
+ <div id="register-{regFormEntry.styleName}" class="col-lg-10">
49
+ {{regFormEntry.html}}
50
+ </div>
51
+ </div>
52
+ {{{end}}}
53
+
54
+ <div class="row">
55
+ <div class="offset-lg-2 col-lg-10">
56
+ <button class="btn btn-primary btn-lg" id="register" type="submit">[[register:register_now_button]]</button>
57
+ </div>
58
+ </div>
59
+ <input id="token" type="hidden" name="token" value="" />
60
+ <input id="noscript" type="hidden" name="noscript" value="true" />
61
+ <input type="hidden" name="_csrf" value="{config.csrf_token}" />
62
+ </form>
63
+ </div>
64
+ </div>
65
+
66
+ {{{ if alternate_logins }}}
67
+ <div class="col-md-6">
68
+ <div class="alt-register-block">
69
+ <h4>[[register:alternative_registration]]</h4>
70
+ <ul class="alt-logins">
71
+ {{{each authentication}}}
72
+ <li class="{authentication.name}"><a rel="nofollow noopener noreferrer" target="_top" href="{config.relative_path}{authentication.url}"><i class="fa {authentication.icon} fa-3x"></i></i></a></li>
73
+ {{{end}}}
74
+ </ul>
75
+ </div>
76
+ </div>
77
+ {{{ end }}}
78
+ </div>
79
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
80
+ {{{each widgets.sidebar}}}
81
+ {{widgets.sidebar.html}}
82
+ {{{end}}}
83
+ </div>
84
+ </div>
85
+ <div data-widget-area="footer">
86
+ {{{each widgets.footer}}}
87
+ {{widgets.footer.html}}
88
+ {{{end}}}
89
+ </div>
@@ -0,0 +1,185 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+
5
+ <div class="search">
6
+ <div class="row">
7
+ <div class="{{{ if widgets.sidebar.length }}}col-lg-9 col-sm-12{{{ else }}}col-lg-12{{{ end }}}">
8
+ <form id="advanced-search" class="mb-3">
9
+ <div class="mb-3">
10
+ <div class="row">
11
+ <div class="col-md-5">
12
+ <label class="form-label">[[global:search]]</label>
13
+ <input type="text" class="form-control" id="search-input" placeholder="[[global:search]]">
14
+ </div>
15
+ <div class="col-md-3">
16
+ <label class="form-label">[[search:in]]</label>
17
+ <select id="search-in" class="form-select">
18
+ <option value="titlesposts">[[search:titles-posts]]</option>
19
+ <option value="titles">[[search:titles]]</option>
20
+ <option value="posts">[[global:posts]]</option>
21
+ <option value="categories">[[global:header.categories]]</option>
22
+ {{{if privileges.search:users}}}
23
+ <option value="users">[[global:users]]</option>
24
+ {{{end}}}
25
+ {{{if privileges.search:tags}}}
26
+ <option value="tags">[[tags:tags]]</option>
27
+ {{{end}}}
28
+ </select>
29
+ </div>
30
+ <div class="col-md-2">
31
+ <label class="form-label">[[search:match-words]]</label>
32
+ <select id="match-words-filter" class="form-select">
33
+ <option value="all">[[search:all]]</option>
34
+ <option value="any">[[search:any]]</option>
35
+ </select>
36
+ </div>
37
+ <div class="col-md-2">
38
+ <label class="form-label">&nbsp;</label>
39
+ <button type="submit" class="btn btn-primary form-control">[[global:search]]</button>
40
+ </div>
41
+ </div>
42
+ </div>
43
+
44
+ <div class="card">
45
+ <h5 class="card-header pointer" data-bs-toggle="collapse" data-bs-target=".search-options">
46
+ <i class="fa fa-sort"></i> [[search:advanced-search]]
47
+ </h5>
48
+ <div class="collapse search-options {{{ if expandSearch }}}show{{{ end }}}">
49
+ <div class="card-body">
50
+ <div class="mb-2 post-search-item">
51
+ <div class="row">
52
+ <div class="col-md-6">
53
+ <label class="form-label">[[search:in-categories]]</label>
54
+ <select multiple class="form-select" id="posted-in-categories" size="{allCategoriesCount}">
55
+ {{{each allCategories}}}
56
+ <option value="{allCategories.value}">{allCategories.text}</option>
57
+ {{{end}}}
58
+ </select>
59
+ <div class="form-check">
60
+ <input id="search-children" class="form-check-input" type="checkbox"/>
61
+ <label class="form-check-label" for="search-children">[[search:search-child-categories]]</label>
62
+ </div>
63
+ </div>
64
+ <div class="col-md-6">
65
+ <div class="mb-2 post-search-item">
66
+ <div class="row">
67
+ <div class="col-md-6">
68
+ <label class="form-label">[[search:posted-by]]</label>
69
+ <div>
70
+ <input type="text" class="form-control" id="posted-by-user">
71
+ </div>
72
+ </div>
73
+ <div class="col-md-6">
74
+ <label class="form-label">[[search:has-tags]]</label>
75
+ <div>
76
+ <input type="text" class="form-control" id="has-tags">
77
+ </div>
78
+ </div>
79
+ </div>
80
+ </div>
81
+
82
+ <div class="mb-2 post-search-item">
83
+ <label class="form-label">[[search:reply-count]]</label>
84
+ <div class="row">
85
+ <div class="col-md-6">
86
+ <select id="reply-count-filter" class="form-select">
87
+ <option value="atleast">[[search:at-least]]</option>
88
+ <option value="atmost">[[search:at-most]]</option>
89
+ </select>
90
+ </div>
91
+ <div class="col-md-6">
92
+ <input type="text" class="form-control" id="reply-count">
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <div class="mb-2 post-search-item">
98
+ <label class="form-label">[[search:post-time]]</label>
99
+ <div class="row">
100
+ <div class="col-md-6">
101
+ <select id="post-time-filter" class="form-select">
102
+ <option value="newer">[[search:newer-than]]</option>
103
+ <option value="older">[[search:older-than]]</option>
104
+ </select>
105
+ </div>
106
+ <div class="col-md-6">
107
+ <select id="post-time-range" class="form-select">
108
+ <option value="">[[search:any-date]]</option>
109
+ <option value="86400">[[search:yesterday]]</option>
110
+ <option value="604800">[[search:one-week]]</option>
111
+ <option value="1209600">[[search:two-weeks]]</option>
112
+ <option value="2592000">[[search:one-month]]</option>
113
+ <option value="7776000">[[search:three-months]]</option>
114
+ <option value="15552000">[[search:six-months]]</option>
115
+ <option value="31104000">[[search:one-year]]</option>
116
+ </select>
117
+ </div>
118
+ </div>
119
+ </div>
120
+
121
+ <div class="mb-2 post-search-item">
122
+ <label class="form-label">[[search:sort-by]]</label>
123
+ <div class="row">
124
+ <div class="col-md-6">
125
+ <select id="post-sort-by" class="form-select">
126
+ <option value="relevance">[[search:relevance]]</option>
127
+ <option value="timestamp">[[search:post-time]]</option>
128
+ <option value="votes">[[search:votes]]</option>
129
+ <option value="topic.lastposttime">[[search:last-reply-time]]</option>
130
+ <option value="topic.title">[[search:topic-title]]</option>
131
+ <option value="topic.postcount">[[search:number-of-replies]]</option>
132
+ <option value="topic.viewcount">[[search:number-of-views]]</option>
133
+ <option value="topic.votes">[[search:topic-votes]]</option>
134
+ <option value="topic.timestamp">[[search:topic-start-date]]</option>
135
+ <option value="user.username">[[search:username]]</option>
136
+ <option value="category.name">[[search:category]]</option>
137
+ </select>
138
+ </div>
139
+ <div class="col-md-6">
140
+ <select id="post-sort-direction" class="form-select">
141
+ <option value="desc">[[search:descending]]</option>
142
+ <option value="asc">[[search:ascending]]</option>
143
+ </select>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+ <div class="mb-2 post-search-item">
149
+ <label class="form-label">[[search:show-results-as]]</label>
150
+ <div class="radio">
151
+ <label>
152
+ <input type="radio" name="options" id="show-as-posts" checked>
153
+ [[global:posts]]
154
+ </label>
155
+ </div>
156
+ <div class="radio">
157
+ <label>
158
+ <input type="radio" name="options" id="show-as-topics">
159
+ [[global:topics]]
160
+ </label>
161
+ </div>
162
+ </div>
163
+ </div>
164
+ </div>
165
+ </div>
166
+
167
+ <div class="btn-group">
168
+ <button type="submit" class="btn btn-primary">[[global:search]]</button>
169
+ <a class="btn btn-outline-secondary" id="save-preferences" href="#">[[search:save-preferences]]</a>
170
+ <a class="btn btn-outline-secondary" id="clear-preferences" href="#">[[search:clear-preferences]]</a>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </form>
176
+
177
+ <!-- IMPORT partials/search-results.tpl -->
178
+ </div>
179
+ <div data-widget-area="sidebar" class="col-lg-3 col-sm-12 {{{ if !widgets.sidebar.length }}}hidden{{{ end }}}">
180
+ {{{each widgets.sidebar}}}
181
+ {{widgets.sidebar.html}}
182
+ {{{end}}}
183
+ </div>
184
+ </div>
185
+ </div>
@@ -0,0 +1,35 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="tag">
10
+ <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
+ <div class="d-flex gap-1 align-items-stretch">
12
+ {{{ if loggedIn }}}
13
+ <!-- IMPORT partials/buttons/newTopic.tpl -->
14
+ {{{ else }}}
15
+ <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
+ {{{ end }}}
17
+ </div>
18
+ <div class="d-flex gap-1 align-items-stretch">
19
+ <!-- IMPORT partials/category-filter-right.tpl -->
20
+ <!-- IMPORT partials/category/tools.tpl -->
21
+ </div>
22
+ </div>
23
+
24
+ <div class="category">
25
+ {{{ if !topics.length }}}
26
+ <div class="alert alert-warning">[[tags:no_tag_topics]]</div>
27
+ {{{ end }}}
28
+
29
+ <!-- IMPORT partials/topics_list.tpl -->
30
+ <button id="load-more-btn" class="btn btn-primary hide">[[unread:load_more]]</button>
31
+ {{{ if config.usePagination }}}
32
+ <!-- IMPORT partials/paginator.tpl -->
33
+ {{{ end }}}
34
+ </div>
35
+ </div>
@@ -0,0 +1,34 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="tags">
10
+ {{{ if displayTagSearch }}}
11
+ {{{ if tags.length }}}
12
+ <div class="row justify-content-end mb-3">
13
+ <div class="col-lg-3">
14
+ <div class="input-group">
15
+ <input type="text" class="form-control" placeholder="[[global:search]]" id="tag-search">
16
+ <button class="btn btn-primary" type="button">
17
+ <i class="fa fa-search"></i>
18
+ </button>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ {{{ end }}}
23
+ {{{ end }}}
24
+
25
+ {{{ if !tags.length }}}
26
+ <div class="alert alert-warning">[[tags:no_tags]]</div>
27
+ {{{ end }}}
28
+
29
+ <div class="category row">
30
+ <div class="col-md-12 clearfix tag-list" data-nextstart="{nextStart}">
31
+ <!-- IMPORT partials/tags_list.tpl -->
32
+ </div>
33
+ </div>
34
+ </div>
@@ -0,0 +1,37 @@
1
+ <!-- THIS FILE IS STILL PERSONA -->
2
+
3
+ <!-- IMPORT partials/breadcrumbs.tpl -->
4
+ <div data-widget-area="header">
5
+ {{{each widgets.header}}}
6
+ {{widgets.header.html}}
7
+ {{{end}}}
8
+ </div>
9
+ <div class="top">
10
+ <div class="topic-list-header sticky-top btn-toolbar justify-content-between py-2 mb-2 gap-1">
11
+ <div class="d-flex gap-1 align-items-stretch">
12
+ {{{ if canPost }}}
13
+ <!-- IMPORT partials/buttons/newTopic.tpl -->
14
+ {{{ else }}}
15
+ <a component="category/post/guest" href="{config.relative_path}/login" class="btn btn-primary">[[category:guest-login-post]]</a>
16
+ {{{ end }}}
17
+ </div>
18
+ <div class="d-flex gap-1 align-items-stretch">
19
+ <!-- IMPORT partials/topic-terms.tpl -->
20
+ <!-- IMPORT partials/topic-filters.tpl -->
21
+ <!-- IMPORT partials/category-filter-right.tpl -->
22
+ <!-- IMPORT partials/category/tools.tpl -->
23
+ </div>
24
+ </div>
25
+
26
+ <div class="category">
27
+ {{{ if !topics.length }}}
28
+ <div class="alert alert-warning" id="category-no-topics">[[top:no_top_topics]]</div>
29
+ {{{ end }}}
30
+
31
+ <!-- IMPORT partials/topics_list.tpl -->
32
+
33
+ {{{ if config.usePagination }}}
34
+ <!-- IMPORT partials/paginator.tpl -->
35
+ {{{ end }}}
36
+ </div>
37
+ </div>