nodebb-theme-persona 14.0.13 → 14.0.14
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.
- package/.eslintrc +2 -2
- package/README.md +20 -20
- package/lib/controllers.js +24 -24
- package/package.json +1 -1
- package/plugin.json +20 -20
- package/public/.eslintrc +2 -2
- package/public/admin.js +15 -15
- package/public/modules/autohidingnavbar.js +220 -220
- package/public/modules/taskbar.js +65 -65
- package/public/settings.js +53 -53
- package/scss/footer.scss +16 -16
- package/scss/keyframes.scss +152 -152
- package/scss/modules/composer.scss +20 -20
- package/scss/modules/cookie-consent.scss +12 -12
- package/scss/modules/fab.scss +32 -32
- package/scss/modules/morph.scss +268 -268
- package/scss/modules/necro-post.scss +8 -8
- package/scss/modules/nprogress.scss +80 -80
- package/scss/modules/taskbar.scss +160 -160
- package/scss/modules/user-menu.scss +7 -7
- package/scss/modules/usercard.scss +64 -64
- package/scss/noscript.scss +80 -80
- package/scss/overrides.scss +39 -39
- package/scss/posts_list.scss +127 -127
- package/scss/tags.scss +10 -10
- package/scss/topics_list.scss +16 -16
- package/scss/variables.scss +6 -6
- package/templates/account/info.tpl +291 -291
- package/templates/account/sessions.tpl +31 -31
- package/templates/account/theme.tpl +25 -25
- package/templates/admin/plugins/persona.tpl +24 -24
- package/templates/footer.tpl +11 -11
- package/templates/groups/members.tpl +5 -5
- package/templates/modules/taskbar.tpl +2 -2
- package/templates/modules/usercard.tpl +36 -36
- package/templates/partials/breadcrumbs.tpl +18 -18
- package/templates/partials/categories/link.tpl +10 -10
- package/templates/partials/category/tags.tpl +3 -3
- package/templates/partials/cookie-consent.tpl +4 -4
- package/templates/partials/groups/memberlist.tpl +42 -42
- package/templates/partials/header/search.tpl +24 -24
- package/templates/partials/paginator.tpl +44 -44
- package/templates/partials/posts_list.tpl +7 -7
- package/templates/partials/toast.tpl +19 -19
- package/templates/partials/topic/event.tpl +12 -12
- package/templates/partials/topic/navigation-post.tpl +11 -11
- package/templates/partials/topic/necro-post.tpl +2 -2
- package/templates/partials/topic/post.tpl +3 -3
- package/templates/partials/topic/reply-button.tpl +26 -26
- package/templates/partials/topic/selection-tooltip.tpl +2 -2
- package/templates/partials/users_list.tpl +14 -14
- package/templates/search.tpl +47 -47
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
<!-- IMPORT partials/account/header.tpl -->
|
|
2
|
-
|
|
3
|
-
<p>[[themes/persona:settings.intro]]</p>
|
|
4
|
-
|
|
5
|
-
<hr />
|
|
6
|
-
|
|
7
|
-
<form id="theme-settings" role="form">
|
|
8
|
-
<div class="form-check mb-3">
|
|
9
|
-
<input class="form-check-input" type="checkbox" id="persona:menus:legacy-layout" name="persona:menus:legacy-layout">
|
|
10
|
-
<label class="form-check-label" for="persona:menus:legacy-layout">[[themes/persona:settings.mobile-menu-side]]</label>
|
|
11
|
-
</div>
|
|
12
|
-
|
|
13
|
-
<div class="mb-3">
|
|
14
|
-
<label for="persona:navbar:autohide">[[themes/persona:settings.autoHidingNavbar]]</label>
|
|
15
|
-
<select multiple class="form-control" name="persona:navbar:autohide" id="persona:navbar:autohide">
|
|
16
|
-
<option value="xs">[[themes/persona:settings.autoHidingNavbar-xs]]</option>
|
|
17
|
-
<option value="sm">[[themes/persona:settings.autoHidingNavbar-sm]]</option>
|
|
18
|
-
<option value="md">[[themes/persona:settings.autoHidingNavbar-md]]</option>
|
|
19
|
-
<option value="lg">[[themes/persona:settings.autoHidingNavbar-lg]]</option>
|
|
20
|
-
</select>
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<button id="save" type="button" class="btn btn-primary">[[global:save-changes]]</button>
|
|
24
|
-
</form>
|
|
25
|
-
|
|
1
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
2
|
+
|
|
3
|
+
<p>[[themes/persona:settings.intro]]</p>
|
|
4
|
+
|
|
5
|
+
<hr />
|
|
6
|
+
|
|
7
|
+
<form id="theme-settings" role="form">
|
|
8
|
+
<div class="form-check mb-3">
|
|
9
|
+
<input class="form-check-input" type="checkbox" id="persona:menus:legacy-layout" name="persona:menus:legacy-layout">
|
|
10
|
+
<label class="form-check-label" for="persona:menus:legacy-layout">[[themes/persona:settings.mobile-menu-side]]</label>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="mb-3">
|
|
14
|
+
<label for="persona:navbar:autohide">[[themes/persona:settings.autoHidingNavbar]]</label>
|
|
15
|
+
<select multiple class="form-control" name="persona:navbar:autohide" id="persona:navbar:autohide">
|
|
16
|
+
<option value="xs">[[themes/persona:settings.autoHidingNavbar-xs]]</option>
|
|
17
|
+
<option value="sm">[[themes/persona:settings.autoHidingNavbar-sm]]</option>
|
|
18
|
+
<option value="md">[[themes/persona:settings.autoHidingNavbar-md]]</option>
|
|
19
|
+
<option value="lg">[[themes/persona:settings.autoHidingNavbar-lg]]</option>
|
|
20
|
+
</select>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<button id="save" type="button" class="btn btn-primary">[[global:save-changes]]</button>
|
|
24
|
+
</form>
|
|
25
|
+
|
|
26
26
|
<!-- IMPORT partials/account/footer.tpl -->
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<div class="acp-page-container">
|
|
2
|
-
<!-- IMPORT admin/partials/settings/header.tpl -->
|
|
3
|
-
|
|
4
|
-
<div class="row m-0">
|
|
5
|
-
<div id="spy-container" class="col-12 col-md-8 px-0 mb-4" tabindex="0">
|
|
6
|
-
<form role="form" class="persona-settings">
|
|
7
|
-
<div class="form-check">
|
|
8
|
-
<input class="form-check-input" type="checkbox" id="hideSubCategories" name="hideSubCategories">
|
|
9
|
-
<label class="form-check-label">Hide subcategories on categories view</label>
|
|
10
|
-
</div>
|
|
11
|
-
<div class="form-check">
|
|
12
|
-
<input class="form-check-input" type="checkbox" id="hideCategoryLastPost" name="hideCategoryLastPost">
|
|
13
|
-
<label class="form-check-label">Hide last post on categories view</label>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="form-check">
|
|
16
|
-
<input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply">
|
|
17
|
-
<label class="form-check-label">Enable quick reply</label>
|
|
18
|
-
</div>
|
|
19
|
-
</form>
|
|
20
|
-
</div>
|
|
21
|
-
|
|
22
|
-
<!-- IMPORT admin/partials/settings/toc.tpl -->
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
1
|
+
<div class="acp-page-container">
|
|
2
|
+
<!-- IMPORT admin/partials/settings/header.tpl -->
|
|
3
|
+
|
|
4
|
+
<div class="row m-0">
|
|
5
|
+
<div id="spy-container" class="col-12 col-md-8 px-0 mb-4" tabindex="0">
|
|
6
|
+
<form role="form" class="persona-settings">
|
|
7
|
+
<div class="form-check">
|
|
8
|
+
<input class="form-check-input" type="checkbox" id="hideSubCategories" name="hideSubCategories">
|
|
9
|
+
<label class="form-check-label">Hide subcategories on categories view</label>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="form-check">
|
|
12
|
+
<input class="form-check-input" type="checkbox" id="hideCategoryLastPost" name="hideCategoryLastPost">
|
|
13
|
+
<label class="form-check-label">Hide last post on categories view</label>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="form-check">
|
|
16
|
+
<input class="form-check-input" type="checkbox" id="enableQuickReply" name="enableQuickReply">
|
|
17
|
+
<label class="form-check-label">Enable quick reply</label>
|
|
18
|
+
</div>
|
|
19
|
+
</form>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- IMPORT admin/partials/settings/toc.tpl -->
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
package/templates/footer.tpl
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
</div><!-- /.container#content -->
|
|
2
|
-
</main>
|
|
3
|
-
{{{ if !isSpider }}}
|
|
4
|
-
<div component="toaster/tray" class="alert-window">
|
|
5
|
-
<!-- IMPORT partials/reconnect-alert.tpl -->
|
|
6
|
-
</div>
|
|
7
|
-
{{{ end }}}
|
|
8
|
-
<!-- IMPORT modules/taskbar.tpl -->
|
|
9
|
-
<!-- IMPORT partials/footer/js.tpl -->
|
|
10
|
-
</body>
|
|
11
|
-
</html>
|
|
1
|
+
</div><!-- /.container#content -->
|
|
2
|
+
</main>
|
|
3
|
+
{{{ if !isSpider }}}
|
|
4
|
+
<div component="toaster/tray" class="alert-window">
|
|
5
|
+
<!-- IMPORT partials/reconnect-alert.tpl -->
|
|
6
|
+
</div>
|
|
7
|
+
{{{ end }}}
|
|
8
|
+
<!-- IMPORT modules/taskbar.tpl -->
|
|
9
|
+
<!-- IMPORT partials/footer/js.tpl -->
|
|
10
|
+
</body>
|
|
11
|
+
</html>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
|
-
<div class="users">
|
|
3
|
-
<!-- IMPORT partials/users_list.tpl -->
|
|
4
|
-
|
|
5
|
-
<!-- IMPORT partials/paginator.tpl -->
|
|
1
|
+
<!-- IMPORT partials/breadcrumbs.tpl -->
|
|
2
|
+
<div class="users">
|
|
3
|
+
<!-- IMPORT partials/users_list.tpl -->
|
|
4
|
+
|
|
5
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
6
6
|
</div>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<div id="taskbar" component="taskbar" class="taskbar fixed-bottom">
|
|
2
|
-
<div class="navbar-inner"><ul class="nav navbar-nav"></ul></div>
|
|
1
|
+
<div id="taskbar" component="taskbar" class="taskbar fixed-bottom">
|
|
2
|
+
<div class="navbar-inner"><ul class="nav navbar-nav"></ul></div>
|
|
3
3
|
</div>
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
<div class="persona-usercard">
|
|
2
|
-
<a href="{config.relative_path}/user/{userslug}">
|
|
3
|
-
<!-- IF picture -->
|
|
4
|
-
<div class="usercard-picture" style="background-image:url({picture})"></div>
|
|
5
|
-
<!-- ELSE -->
|
|
6
|
-
<div class="usercard-picture" style="background-color: {icon:bgColor};">{icon:text}</div>
|
|
7
|
-
<!-- ENDIF picture -->
|
|
8
|
-
</a>
|
|
9
|
-
<div class="usercard-body">
|
|
10
|
-
<a href="{config.relative_path}/user/{userslug}">
|
|
11
|
-
<span class="usercard-name"><!-- IF fullname -->{fullname}<!-- ELSE -->{username}<!-- ENDIF fullname --></span><br />
|
|
12
|
-
<span class="usercard-username"><!-- IF !banned -->@{username}<!-- ELSE -->[[user:banned]]<!-- ENDIF !banned --></span>
|
|
13
|
-
<!-- IF !banned -->
|
|
14
|
-
<i component="user/status" class="fa fa-circle status {status}" title="[[global:{status}]]"></i>
|
|
15
|
-
<!-- ENDIF !banned -->
|
|
16
|
-
</a>
|
|
17
|
-
|
|
18
|
-
<div class="row usercard-info">
|
|
19
|
-
<div class="col-4">
|
|
20
|
-
<small>[[global:posts]]</small>
|
|
21
|
-
<span>{humanReadableNumber(postcount)}</span>
|
|
22
|
-
</div>
|
|
23
|
-
<div class="col-4">
|
|
24
|
-
<small>[[global:reputation]]</small>
|
|
25
|
-
<span>{humanReadableNumber(reputation)}</span>
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
|
-
<button class="btn-morph persona-fab <!-- IF banned --> hide<!-- ENDIF banned -->">
|
|
29
|
-
<span>
|
|
30
|
-
<span class="s1"></span>
|
|
31
|
-
<span class="s2"></span>
|
|
32
|
-
<span class="s3"></span>
|
|
33
|
-
</span>
|
|
34
|
-
</button>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
1
|
+
<div class="persona-usercard">
|
|
2
|
+
<a href="{config.relative_path}/user/{userslug}">
|
|
3
|
+
<!-- IF picture -->
|
|
4
|
+
<div class="usercard-picture" style="background-image:url({picture})"></div>
|
|
5
|
+
<!-- ELSE -->
|
|
6
|
+
<div class="usercard-picture" style="background-color: {icon:bgColor};">{icon:text}</div>
|
|
7
|
+
<!-- ENDIF picture -->
|
|
8
|
+
</a>
|
|
9
|
+
<div class="usercard-body">
|
|
10
|
+
<a href="{config.relative_path}/user/{userslug}">
|
|
11
|
+
<span class="usercard-name"><!-- IF fullname -->{fullname}<!-- ELSE -->{username}<!-- ENDIF fullname --></span><br />
|
|
12
|
+
<span class="usercard-username"><!-- IF !banned -->@{username}<!-- ELSE -->[[user:banned]]<!-- ENDIF !banned --></span>
|
|
13
|
+
<!-- IF !banned -->
|
|
14
|
+
<i component="user/status" class="fa fa-circle status {status}" title="[[global:{status}]]"></i>
|
|
15
|
+
<!-- ENDIF !banned -->
|
|
16
|
+
</a>
|
|
17
|
+
|
|
18
|
+
<div class="row usercard-info">
|
|
19
|
+
<div class="col-4">
|
|
20
|
+
<small>[[global:posts]]</small>
|
|
21
|
+
<span>{humanReadableNumber(postcount)}</span>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="col-4">
|
|
24
|
+
<small>[[global:reputation]]</small>
|
|
25
|
+
<span>{humanReadableNumber(reputation)}</span>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<button class="btn-morph persona-fab <!-- IF banned --> hide<!-- ENDIF banned -->">
|
|
29
|
+
<span>
|
|
30
|
+
<span class="s1"></span>
|
|
31
|
+
<span class="s2"></span>
|
|
32
|
+
<span class="s3"></span>
|
|
33
|
+
</span>
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
37
|
</div>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<!-- IF breadcrumbs.length -->
|
|
2
|
-
<ol class="breadcrumb" itemscope="itemscope" itemprop="breadcrumb" itemtype="http://schema.org/BreadcrumbList">
|
|
3
|
-
{{{each breadcrumbs}}}
|
|
4
|
-
<li<!-- IF @last --> component="breadcrumb/current"<!-- ENDIF @last --> itemscope="itemscope" itemprop="itemListElement" itemtype="http://schema.org/ListItem" class="breadcrumb-item <!-- IF @last -->active<!-- ENDIF @last -->">
|
|
5
|
-
<meta itemprop="position" content="{@index}" />
|
|
6
|
-
{{{ if ./url }}}<a href="{breadcrumbs.url}" itemprop="item">{{{ end }}}
|
|
7
|
-
<span itemprop="name">
|
|
8
|
-
{breadcrumbs.text}
|
|
9
|
-
<!-- IF @last -->
|
|
10
|
-
<!-- IF !feeds:disableRSS -->
|
|
11
|
-
<!-- IF rssFeedUrl --><a target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss-square"></i></a><!-- ENDIF rssFeedUrl --><!-- ENDIF !feeds:disableRSS -->
|
|
12
|
-
<!-- ENDIF @last -->
|
|
13
|
-
</span>
|
|
14
|
-
{{{ if ./url }}}</a>{{{ end }}}
|
|
15
|
-
</li>
|
|
16
|
-
{{{end}}}
|
|
17
|
-
</ol>
|
|
18
|
-
<!-- ENDIF breadcrumbs.length -->
|
|
1
|
+
<!-- IF breadcrumbs.length -->
|
|
2
|
+
<ol class="breadcrumb" itemscope="itemscope" itemprop="breadcrumb" itemtype="http://schema.org/BreadcrumbList">
|
|
3
|
+
{{{each breadcrumbs}}}
|
|
4
|
+
<li<!-- IF @last --> component="breadcrumb/current"<!-- ENDIF @last --> itemscope="itemscope" itemprop="itemListElement" itemtype="http://schema.org/ListItem" class="breadcrumb-item <!-- IF @last -->active<!-- ENDIF @last -->">
|
|
5
|
+
<meta itemprop="position" content="{@index}" />
|
|
6
|
+
{{{ if ./url }}}<a href="{breadcrumbs.url}" itemprop="item">{{{ end }}}
|
|
7
|
+
<span itemprop="name">
|
|
8
|
+
{breadcrumbs.text}
|
|
9
|
+
<!-- IF @last -->
|
|
10
|
+
<!-- IF !feeds:disableRSS -->
|
|
11
|
+
<!-- IF rssFeedUrl --><a target="_blank" href="{rssFeedUrl}" itemprop="item"><i class="fa fa-rss-square"></i></a><!-- ENDIF rssFeedUrl --><!-- ENDIF !feeds:disableRSS -->
|
|
12
|
+
<!-- ENDIF @last -->
|
|
13
|
+
</span>
|
|
14
|
+
{{{ if ./url }}}</a>{{{ end }}}
|
|
15
|
+
</li>
|
|
16
|
+
{{{end}}}
|
|
17
|
+
</ol>
|
|
18
|
+
<!-- ENDIF breadcrumbs.length -->
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<!-- IF ../isSection -->
|
|
2
|
-
{../name}
|
|
3
|
-
<!-- ELSE -->
|
|
4
|
-
<!-- IF ../link -->
|
|
5
|
-
<a href="{../link}" itemprop="url">
|
|
6
|
-
<!-- ELSE -->
|
|
7
|
-
<a href="{config.relative_path}/category/{../slug}" itemprop="url">
|
|
8
|
-
<!-- ENDIF ../link -->
|
|
9
|
-
{../name}
|
|
10
|
-
</a>
|
|
1
|
+
<!-- IF ../isSection -->
|
|
2
|
+
{../name}
|
|
3
|
+
<!-- ELSE -->
|
|
4
|
+
<!-- IF ../link -->
|
|
5
|
+
<a href="{../link}" itemprop="url">
|
|
6
|
+
<!-- ELSE -->
|
|
7
|
+
<a href="{config.relative_path}/category/{../slug}" itemprop="url">
|
|
8
|
+
<!-- ENDIF ../link -->
|
|
9
|
+
{../name}
|
|
10
|
+
</a>
|
|
11
11
|
<!-- ENDIF ../isSection -->
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
{{{ each tags }}}
|
|
2
|
-
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="tag tag-item fw-bold tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
3
|
-
{{{ end }}}
|
|
1
|
+
{{{ each tags }}}
|
|
2
|
+
<a href="{config.relative_path}/tags/{./valueEncoded}"><span class="tag tag-item fw-bold tag-class-{./class}" data-tag="{./value}">{./valueEscaped}</span></a>
|
|
3
|
+
{{{ end }}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="cookie-consent">
|
|
2
|
-
<button class="float-end btn btn-primary">{dismiss}</button>
|
|
3
|
-
{message} <a target="_blank" rel="noopener" href="{link_url}">{link}</a>
|
|
4
|
-
</div>
|
|
1
|
+
<div class="cookie-consent">
|
|
2
|
+
<button class="float-end btn btn-primary">{dismiss}</button>
|
|
3
|
+
{message} <a target="_blank" rel="noopener" href="{link_url}">{link}</a>
|
|
4
|
+
</div>
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
<div class="d-flex mb-3">
|
|
2
|
-
<!-- IF group.isOwner -->
|
|
3
|
-
<div class="flex-shrink-0">
|
|
4
|
-
<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>
|
|
5
|
-
</div>
|
|
6
|
-
<!-- ENDIF group.isOwner -->
|
|
7
|
-
<div class="flex-grow-1">
|
|
8
|
-
<div class="input-group">
|
|
9
|
-
<input class="form-control" type="text" component="groups/members/search" placeholder="[[global:search]]"/>
|
|
10
|
-
<span class="input-group-text search-button"><i class="fa fa-search"></i></span>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<div component="groups/members" data-nextstart="{group.membersNextStart}" style="max-height: 500px; overflow: auto;">
|
|
16
|
-
<table class="table table-striped table-hover">
|
|
17
|
-
<tbody>
|
|
18
|
-
{{{each group.members}}}
|
|
19
|
-
<tr data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
|
|
20
|
-
<td class="p-2">
|
|
21
|
-
<a href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
|
|
22
|
-
</td>
|
|
23
|
-
<td class="member-name w-100 p-2">
|
|
24
|
-
<a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
|
|
25
|
-
<i component="groups/owner/icon" 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>
|
|
26
|
-
|
|
27
|
-
<!-- IF group.isOwner -->
|
|
28
|
-
<div class="owner-controls btn-group float-end">
|
|
29
|
-
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
|
|
30
|
-
<i class="fa fa-star"></i>
|
|
31
|
-
</a>
|
|
32
|
-
|
|
33
|
-
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
|
|
34
|
-
<i class="fa fa-ban"></i>
|
|
35
|
-
</a>
|
|
36
|
-
</div>
|
|
37
|
-
<!-- ENDIF group.isOwner -->
|
|
38
|
-
</td>
|
|
39
|
-
</tr>
|
|
40
|
-
{{{end}}}
|
|
41
|
-
</tbody>
|
|
42
|
-
</table>
|
|
1
|
+
<div class="d-flex mb-3">
|
|
2
|
+
<!-- IF group.isOwner -->
|
|
3
|
+
<div class="flex-shrink-0">
|
|
4
|
+
<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>
|
|
5
|
+
</div>
|
|
6
|
+
<!-- ENDIF group.isOwner -->
|
|
7
|
+
<div class="flex-grow-1">
|
|
8
|
+
<div class="input-group">
|
|
9
|
+
<input class="form-control" type="text" component="groups/members/search" placeholder="[[global:search]]"/>
|
|
10
|
+
<span class="input-group-text search-button"><i class="fa fa-search"></i></span>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div component="groups/members" data-nextstart="{group.membersNextStart}" style="max-height: 500px; overflow: auto;">
|
|
16
|
+
<table class="table table-striped table-hover">
|
|
17
|
+
<tbody>
|
|
18
|
+
{{{each group.members}}}
|
|
19
|
+
<tr data-uid="{group.members.uid}" data-isowner="{{{ if group.members.isOwner }}}1{{{ else }}}0{{{ end }}}">
|
|
20
|
+
<td class="p-2">
|
|
21
|
+
<a href="{config.relative_path}/user/{group.members.userslug}">{buildAvatar(group.members, "24px", true)}</a>
|
|
22
|
+
</td>
|
|
23
|
+
<td class="member-name w-100 p-2">
|
|
24
|
+
<a class="align-text-top" href="{config.relative_path}/user/{group.members.userslug}">{group.members.username}</a>
|
|
25
|
+
<i component="groups/owner/icon" 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>
|
|
26
|
+
|
|
27
|
+
<!-- IF group.isOwner -->
|
|
28
|
+
<div class="owner-controls btn-group float-end">
|
|
29
|
+
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="toggleOwnership" title="[[groups:details.grant]]">
|
|
30
|
+
<i class="fa fa-star"></i>
|
|
31
|
+
</a>
|
|
32
|
+
|
|
33
|
+
<a class="btn btn-sm" href="#" data-ajaxify="false" data-action="kick" title="[[groups:details.kick]]">
|
|
34
|
+
<i class="fa fa-ban"></i>
|
|
35
|
+
</a>
|
|
36
|
+
</div>
|
|
37
|
+
<!-- ENDIF group.isOwner -->
|
|
38
|
+
</td>
|
|
39
|
+
</tr>
|
|
40
|
+
{{{end}}}
|
|
41
|
+
</tbody>
|
|
42
|
+
</table>
|
|
43
43
|
</div>
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
|
|
2
|
-
<div component="search/fields" class="hidden" id="search-fields">
|
|
3
|
-
<div class="input-group flex-nowrap">
|
|
4
|
-
<input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
|
|
5
|
-
|
|
6
|
-
<a href="{config.relative_path}/search" class="btn btn-outline-secondary" aria-label="[[search:type-to-search]]">
|
|
7
|
-
<i class="fa fa-gears fa-fw"></i>
|
|
8
|
-
</a>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<div id="quick-search-container" class="quick-search-container dropdown-menu d-block mt-2 hidden">
|
|
12
|
-
<div class="form-check filter-category mb-2 ms-4">
|
|
13
|
-
<input class="form-check-input" type="checkbox" checked>
|
|
14
|
-
<label class="form-check-label name"></label>
|
|
15
|
-
</div>
|
|
16
|
-
|
|
17
|
-
<div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
|
|
18
|
-
<div class="quick-search-results-container"></div>
|
|
19
|
-
</div>
|
|
20
|
-
<button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<div 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></div>
|
|
24
|
-
</form>
|
|
1
|
+
<form component="search/form" id="search-form" class="d-flex justify-content-end align-items-center" role="search" method="GET">
|
|
2
|
+
<div component="search/fields" class="hidden" id="search-fields">
|
|
3
|
+
<div class="input-group flex-nowrap">
|
|
4
|
+
<input autocomplete="off" type="text" class="form-control" placeholder="[[global:search]]" name="query" value="">
|
|
5
|
+
|
|
6
|
+
<a href="{config.relative_path}/search" class="btn btn-outline-secondary" aria-label="[[search:type-to-search]]">
|
|
7
|
+
<i class="fa fa-gears fa-fw"></i>
|
|
8
|
+
</a>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div id="quick-search-container" class="quick-search-container dropdown-menu d-block mt-2 hidden">
|
|
12
|
+
<div class="form-check filter-category mb-2 ms-4">
|
|
13
|
+
<input class="form-check-input" type="checkbox" checked>
|
|
14
|
+
<label class="form-check-label name"></label>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="text-center loading-indicator"><i class="fa fa-spinner fa-spin"></i></div>
|
|
18
|
+
<div class="quick-search-results-container"></div>
|
|
19
|
+
</div>
|
|
20
|
+
<button type="submit" class="btn btn-outline-secondary hide">[[global:search]]</button>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div 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></div>
|
|
24
|
+
</form>
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
<nav component="pagination" class="pagination-container<!-- IF !pagination.pages.length --> hidden<!-- ENDIF !pagination.pages.length -->" aria-label="[[global:pagination]]">
|
|
2
|
-
<ul class="pagination hidden-xs justify-content-center">
|
|
3
|
-
<li class="page-item previous float-start<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
4
|
-
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
|
|
5
|
-
</li>
|
|
6
|
-
|
|
7
|
-
{{{each pagination.pages}}}
|
|
8
|
-
<!-- IF pagination.pages.separator -->
|
|
9
|
-
<li component="pagination/select-page" class="page-item page select-page">
|
|
10
|
-
<a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]"><i class="fa fa-ellipsis-h"></i></a>
|
|
11
|
-
</li>
|
|
12
|
-
<!-- ELSE -->
|
|
13
|
-
<li class="page-item page<!-- IF pagination.pages.active --> active<!-- ENDIF pagination.pages.active -->" >
|
|
14
|
-
<a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}" aria-label="[[global:pagination.page-x, {./page}]]">{pagination.pages.page}</a>
|
|
15
|
-
</li>
|
|
16
|
-
<!-- ENDIF pagination.pages.separator -->
|
|
17
|
-
{{{end}}}
|
|
18
|
-
|
|
19
|
-
<li class="page-item next float-end<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
20
|
-
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
|
|
21
|
-
</li>
|
|
22
|
-
</ul>
|
|
23
|
-
|
|
24
|
-
<ul class="pagination hidden-sm hidden-md hidden-lg justify-content-center">
|
|
25
|
-
<li class="page-item first<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
26
|
-
<a class="page-link" href="?{pagination.first.qs}" data-page="1" aria-label="[[global:pagination.firstpage]]"><i class="fa fa-fast-backward"></i> </a>
|
|
27
|
-
</li>
|
|
28
|
-
|
|
29
|
-
<li class="page-item previous<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
30
|
-
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
|
|
31
|
-
</li>
|
|
32
|
-
|
|
33
|
-
<li component="pagination/select-page" class="page-item page select-page">
|
|
34
|
-
<a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
35
|
-
</li>
|
|
36
|
-
|
|
37
|
-
<li class="page-item next<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
38
|
-
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
|
|
39
|
-
</li>
|
|
40
|
-
|
|
41
|
-
<li class="page-item last<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
42
|
-
<a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}" aria-label="[[global:pagination.lastpage]]"><i class="fa fa-fast-forward"></i> </a>
|
|
43
|
-
</li>
|
|
44
|
-
</ul>
|
|
1
|
+
<nav component="pagination" class="pagination-container<!-- IF !pagination.pages.length --> hidden<!-- ENDIF !pagination.pages.length -->" aria-label="[[global:pagination]]">
|
|
2
|
+
<ul class="pagination hidden-xs justify-content-center">
|
|
3
|
+
<li class="page-item previous float-start<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
4
|
+
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
|
|
5
|
+
</li>
|
|
6
|
+
|
|
7
|
+
{{{each pagination.pages}}}
|
|
8
|
+
<!-- IF pagination.pages.separator -->
|
|
9
|
+
<li component="pagination/select-page" class="page-item page select-page">
|
|
10
|
+
<a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]"><i class="fa fa-ellipsis-h"></i></a>
|
|
11
|
+
</li>
|
|
12
|
+
<!-- ELSE -->
|
|
13
|
+
<li class="page-item page<!-- IF pagination.pages.active --> active<!-- ENDIF pagination.pages.active -->" >
|
|
14
|
+
<a class="page-link" href="?{pagination.pages.qs}" data-page="{pagination.pages.page}" aria-label="[[global:pagination.page-x, {./page}]]">{pagination.pages.page}</a>
|
|
15
|
+
</li>
|
|
16
|
+
<!-- ENDIF pagination.pages.separator -->
|
|
17
|
+
{{{end}}}
|
|
18
|
+
|
|
19
|
+
<li class="page-item next float-end<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
20
|
+
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
|
|
21
|
+
</li>
|
|
22
|
+
</ul>
|
|
23
|
+
|
|
24
|
+
<ul class="pagination hidden-sm hidden-md hidden-lg justify-content-center">
|
|
25
|
+
<li class="page-item first<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
26
|
+
<a class="page-link" href="?{pagination.first.qs}" data-page="1" aria-label="[[global:pagination.firstpage]]"><i class="fa fa-fast-backward"></i> </a>
|
|
27
|
+
</li>
|
|
28
|
+
|
|
29
|
+
<li class="page-item previous<!-- IF !pagination.prev.active --> disabled<!-- ENDIF !pagination.prev.active -->">
|
|
30
|
+
<a class="page-link" href="?{pagination.prev.qs}" data-page="{pagination.prev.page}" aria-label="[[global:pagination.previouspage]]"><i class="fa fa-chevron-left"></i> </a>
|
|
31
|
+
</li>
|
|
32
|
+
|
|
33
|
+
<li component="pagination/select-page" class="page-item page select-page">
|
|
34
|
+
<a class="page-link" href="#" aria-label="[[global:pagination.go-to-page]]">{pagination.currentPage} / {pagination.pageCount}</a>
|
|
35
|
+
</li>
|
|
36
|
+
|
|
37
|
+
<li class="page-item next<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
38
|
+
<a class="page-link" href="?{pagination.next.qs}" data-page="{pagination.next.page}" aria-label="[[global:pagination.nextpage]]"><i class="fa fa-chevron-right"></i></a>
|
|
39
|
+
</li>
|
|
40
|
+
|
|
41
|
+
<li class="page-item last<!-- IF !pagination.next.active --> disabled<!-- ENDIF !pagination.next.active -->">
|
|
42
|
+
<a class="page-link" href="?{pagination.last.qs}" data-page="{pagination.pageCount}" aria-label="[[global:pagination.lastpage]]"><i class="fa fa-fast-forward"></i> </a>
|
|
43
|
+
</li>
|
|
44
|
+
</ul>
|
|
45
45
|
</nav>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<ul component="posts" class="posts-list list-unstyled" data-nextstart="{nextStart}">
|
|
2
|
-
{{{each posts}}}
|
|
3
|
-
<!-- IMPORT partials/posts_list_item.tpl -->
|
|
4
|
-
{{{end}}}
|
|
5
|
-
</ul>
|
|
6
|
-
<div component="posts/loading" class="loading-indicator text-center hidden">
|
|
7
|
-
<i class="fa fa-refresh fa-spin"></i>
|
|
1
|
+
<ul component="posts" class="posts-list list-unstyled" data-nextstart="{nextStart}">
|
|
2
|
+
{{{each posts}}}
|
|
3
|
+
<!-- IMPORT partials/posts_list_item.tpl -->
|
|
4
|
+
{{{end}}}
|
|
5
|
+
</ul>
|
|
6
|
+
<div component="posts/loading" class="loading-indicator text-center hidden">
|
|
7
|
+
<i class="fa fa-refresh fa-spin"></i>
|
|
8
8
|
</div>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
<div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type} fade show" component="toaster/toast">
|
|
2
|
-
<div class="alert-progress position-absolute top-0 start-0 bottom-0 h-100 z-0" style=" opacity:0.1;"></div>
|
|
3
|
-
<div class="d-flex flex-wrap gap-2 position-relative">
|
|
4
|
-
{{{ if image }}}
|
|
5
|
-
<img src="{image}" height="80" style="width: auto;" />
|
|
6
|
-
{{{ end }}}
|
|
7
|
-
<div class="d-flex flex-column gap-2">
|
|
8
|
-
{{{ if title }}}
|
|
9
|
-
<strong>{title}</strong>
|
|
10
|
-
{{{ end }}}
|
|
11
|
-
|
|
12
|
-
{{{ if message }}}
|
|
13
|
-
<p class="m-0">{message}</p>
|
|
14
|
-
{{{ end }}}
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="close"></button>
|
|
19
|
-
</div>
|
|
1
|
+
<div id="{alert_id}" role="alert" class="alert alert-dismissible alert-{type} fade show" component="toaster/toast">
|
|
2
|
+
<div class="alert-progress position-absolute top-0 start-0 bottom-0 h-100 z-0" style=" opacity:0.1;"></div>
|
|
3
|
+
<div class="d-flex flex-wrap gap-2 position-relative">
|
|
4
|
+
{{{ if image }}}
|
|
5
|
+
<img src="{image}" height="80" style="width: auto;" />
|
|
6
|
+
{{{ end }}}
|
|
7
|
+
<div class="d-flex flex-column gap-2">
|
|
8
|
+
{{{ if title }}}
|
|
9
|
+
<strong>{title}</strong>
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
|
|
12
|
+
{{{ if message }}}
|
|
13
|
+
<p class="m-0">{message}</p>
|
|
14
|
+
{{{ end }}}
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="close"></button>
|
|
19
|
+
</div>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
<li component="topic/event" class="timeline-event text-muted" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
2
|
-
<div class="timeline-badge">
|
|
3
|
-
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}}"></i>
|
|
4
|
-
</div>
|
|
5
|
-
<span class="timeline-text">
|
|
6
|
-
{./text}
|
|
7
|
-
</span>
|
|
8
|
-
{{{ if (privileges.isAdminOrMod && ./id) }}}
|
|
9
|
-
<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>
|
|
10
|
-
{{{ end }}}
|
|
11
|
-
</li>
|
|
12
|
-
|
|
1
|
+
<li component="topic/event" class="timeline-event text-muted" data-topic-event-id="{./id}" data-topic-event-type="{./type}">
|
|
2
|
+
<div class="timeline-badge">
|
|
3
|
+
<i class="fa {{{ if ./icon }}}{./icon}{{{ else }}}fa-circle{{{ end }}}"></i>
|
|
4
|
+
</div>
|
|
5
|
+
<span class="timeline-text">
|
|
6
|
+
{./text}
|
|
7
|
+
</span>
|
|
8
|
+
{{{ if (privileges.isAdminOrMod && ./id) }}}
|
|
9
|
+
<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>
|
|
10
|
+
{{{ end }}}
|
|
11
|
+
</li>
|
|
12
|
+
|