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.
- package/.eslintrc +3 -0
- package/README.md +8 -0
- package/lib/controllers.js +7 -0
- package/library.js +51 -0
- package/package.json +45 -0
- package/plugin.json +11 -0
- package/public/.eslintrc +3 -0
- package/public/admin.js +15 -0
- package/renovate.json +6 -0
- package/scss/harmony.scss +3 -0
- package/scss/overrides.scss +1 -0
- package/templates/account/best.tpl +3 -0
- package/templates/account/blocks.tpl +35 -0
- package/templates/account/bookmarks.tpl +3 -0
- package/templates/account/categories.tpl +30 -0
- package/templates/account/consent.tpl +71 -0
- package/templates/account/controversial.tpl +3 -0
- package/templates/account/downvoted.tpl +3 -0
- package/templates/account/edit/password.tpl +32 -0
- package/templates/account/edit/username.tpl +28 -0
- package/templates/account/edit.tpl +137 -0
- package/templates/account/followers.tpl +19 -0
- package/templates/account/following.tpl +19 -0
- package/templates/account/groups.tpl +19 -0
- package/templates/account/ignored.tpl +3 -0
- package/templates/account/info.tpl +228 -0
- package/templates/account/posts.tpl +21 -0
- package/templates/account/profile.tpl +168 -0
- package/templates/account/sessions.tpl +34 -0
- package/templates/account/settings.tpl +231 -0
- package/templates/account/theme.tpl +29 -0
- package/templates/account/topics.tpl +32 -0
- package/templates/account/uploads.tpl +45 -0
- package/templates/account/upvoted.tpl +3 -0
- package/templates/account/watched.tpl +3 -0
- package/templates/admin/plugins/persona.tpl +29 -0
- package/templates/categories.tpl +33 -0
- package/templates/category.tpl +65 -0
- package/templates/chat.tpl +41 -0
- package/templates/chats.tpl +21 -0
- package/templates/flags/detail.tpl +211 -0
- package/templates/flags/list.tpl +73 -0
- package/templates/footer.tpl +16 -0
- package/templates/groups/details.tpl +79 -0
- package/templates/groups/list.tpl +50 -0
- package/templates/groups/members.tpl +8 -0
- package/templates/header.tpl +49 -0
- package/templates/login.tpl +98 -0
- package/templates/modules/taskbar.tpl +5 -0
- package/templates/modules/usercard.tpl +39 -0
- package/templates/notifications.tpl +68 -0
- package/templates/partials/acceptTos.tpl +11 -0
- package/templates/partials/account/category-item.tpl +25 -0
- package/templates/partials/account/header.tpl +48 -0
- package/templates/partials/account/menu.tpl +103 -0
- package/templates/partials/breadcrumbs.tpl +20 -0
- package/templates/partials/buttons/newTopic.tpl +24 -0
- package/templates/partials/categories/item.tpl +62 -0
- package/templates/partials/categories/lastpost.tpl +28 -0
- package/templates/partials/categories/link.tpl +13 -0
- package/templates/partials/category/sort.tpl +17 -0
- package/templates/partials/category/subcategory.tpl +20 -0
- package/templates/partials/category/tags.tpl +5 -0
- package/templates/partials/category/tools.tpl +83 -0
- package/templates/partials/category/watch.tpl +23 -0
- package/templates/partials/category-filter-content.tpl +31 -0
- package/templates/partials/category-filter-right.tpl +5 -0
- package/templates/partials/category-filter.tpl +5 -0
- package/templates/partials/category-selector-content.tpl +35 -0
- package/templates/partials/category-selector-right.tpl +5 -0
- package/templates/partials/category-selector.tpl +5 -0
- package/templates/partials/chats/dropdown.tpl +40 -0
- package/templates/partials/chats/message-window.tpl +36 -0
- package/templates/partials/chats/message.tpl +36 -0
- package/templates/partials/chats/messages.tpl +9 -0
- package/templates/partials/chats/options.tpl +26 -0
- package/templates/partials/chats/recent_room.tpl +33 -0
- package/templates/partials/chats/system-message.tpl +5 -0
- package/templates/partials/chats/user.tpl +3 -0
- package/templates/partials/chats-menu.tpl +43 -0
- package/templates/partials/cookie-consent.tpl +6 -0
- package/templates/partials/flags/filters.tpl +99 -0
- package/templates/partials/groups/admin.tpl +197 -0
- package/templates/partials/groups/badge.tpl +3 -0
- package/templates/partials/groups/list.tpl +23 -0
- package/templates/partials/groups/memberlist.tpl +43 -0
- package/templates/partials/header/user-menu.tpl +87 -0
- package/templates/partials/menu.tpl +188 -0
- package/templates/partials/notifications_list.tpl +32 -0
- package/templates/partials/paginator.tpl +47 -0
- package/templates/partials/post_bar.tpl +22 -0
- package/templates/partials/posts_list.tpl +10 -0
- package/templates/partials/posts_list_item.tpl +34 -0
- package/templates/partials/quick-search-results.tpl +36 -0
- package/templates/partials/search-results.tpl +57 -0
- package/templates/partials/slideout-menu.tpl +6 -0
- package/templates/partials/tags_list.tpl +7 -0
- package/templates/partials/thread_tools.tpl +10 -0
- package/templates/partials/toast.tpl +16 -0
- package/templates/partials/topic/browsing-users.tpl +3 -0
- package/templates/partials/topic/event.tpl +28 -0
- package/templates/partials/topic/navigation-post.tpl +14 -0
- package/templates/partials/topic/navigator.tpl +41 -0
- package/templates/partials/topic/necro-post.tpl +5 -0
- package/templates/partials/topic/post-editor.tpl +3 -0
- package/templates/partials/topic/post-menu-list.tpl +134 -0
- package/templates/partials/topic/post-menu.tpl +6 -0
- package/templates/partials/topic/post.tpl +116 -0
- package/templates/partials/topic/quickreply.tpl +30 -0
- package/templates/partials/topic/reactions.tpl +3 -0
- package/templates/partials/topic/reply-button.tpl +29 -0
- package/templates/partials/topic/selection-tooltip.tpl +5 -0
- package/templates/partials/topic/sort.tpl +11 -0
- package/templates/partials/topic/stats.tpl +14 -0
- package/templates/partials/topic/tag.tpl +3 -0
- package/templates/partials/topic/tags.tpl +5 -0
- package/templates/partials/topic/topic-menu-list.tpl +34 -0
- package/templates/partials/topic/watch.tpl +24 -0
- package/templates/partials/topic-filters.tpl +14 -0
- package/templates/partials/topic-terms.tpl +14 -0
- package/templates/partials/topics_list.tpl +118 -0
- package/templates/partials/users_list.tpl +60 -0
- package/templates/partials/users_list_menu.tpl +23 -0
- package/templates/popular.tpl +37 -0
- package/templates/recent.tpl +39 -0
- package/templates/register.tpl +89 -0
- package/templates/search.tpl +185 -0
- package/templates/tag.tpl +35 -0
- package/templates/tags.tpl +34 -0
- package/templates/top.tpl +37 -0
- package/templates/topic.tpl +108 -0
- package/templates/unread.tpl +39 -0
- package/templates/users.tpl +36 -0
- package/theme.json +7 -0
- package/theme.scss +1 -0
package/.eslintrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Harmony theme for NodeBB
|
|
2
|
+
====================
|
|
3
|
+
|
|
4
|
+
The Harmony theme is the default theme for NodeBB for versions spanning v3.0.0 onwards.
|
|
5
|
+
|
|
6
|
+
## Issues
|
|
7
|
+
|
|
8
|
+
Issues are tracked in [the main project issue tracker](https://github.com/NodeBB/NodeBB/issues?q=is%3Aopen+is%3Aissue+label%3Athemes).
|
package/library.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const controllers = require('./lib/controllers');
|
|
4
|
+
|
|
5
|
+
const library = module.exports;
|
|
6
|
+
|
|
7
|
+
library.init = async function (params) {
|
|
8
|
+
const { router } = params;
|
|
9
|
+
const routeHelpers = require.main.require('./src/routes/helpers');
|
|
10
|
+
|
|
11
|
+
routeHelpers.setupAdminPageRoute(router, '/admin/plugins/harmony', [], controllers.renderAdminPage);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
library.addAdminNavigation = async function (header) {
|
|
15
|
+
header.plugins.push({
|
|
16
|
+
route: '/plugins/harmony',
|
|
17
|
+
icon: 'fa-paint-brush',
|
|
18
|
+
name: 'Harmony Theme',
|
|
19
|
+
});
|
|
20
|
+
return header;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
library.defineWidgetAreas = async function (areas) {
|
|
24
|
+
// const locations = ['header', 'sidebar', 'footer'];
|
|
25
|
+
// const templates = [
|
|
26
|
+
// 'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
|
|
27
|
+
// 'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl',
|
|
28
|
+
// 'login.tpl', 'register.tpl',
|
|
29
|
+
// ];
|
|
30
|
+
// function capitalizeFirst(str) {
|
|
31
|
+
// return str.charAt(0).toUpperCase() + str.slice(1);
|
|
32
|
+
// }
|
|
33
|
+
// templates.forEach((template) => {
|
|
34
|
+
// locations.forEach((location) => {
|
|
35
|
+
// areas.push({
|
|
36
|
+
// name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`,
|
|
37
|
+
// template: template,
|
|
38
|
+
// location: location,
|
|
39
|
+
// });
|
|
40
|
+
// });
|
|
41
|
+
// });
|
|
42
|
+
|
|
43
|
+
// areas = areas.concat([
|
|
44
|
+
// {
|
|
45
|
+
// name: 'Account Header',
|
|
46
|
+
// template: 'account/profile.tpl',
|
|
47
|
+
// location: 'header',
|
|
48
|
+
// },
|
|
49
|
+
// ]);
|
|
50
|
+
return areas;
|
|
51
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nodebb-theme-harmony",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"nbbpm": {
|
|
5
|
+
"compatibility": "^3.0.0"
|
|
6
|
+
},
|
|
7
|
+
"description": "Harmony theme for NodeBB",
|
|
8
|
+
"main": "library.js",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/NodeBB/nodebb-theme-harmony"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"lint": "eslint ."
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"nodebb",
|
|
18
|
+
"theme",
|
|
19
|
+
"forum",
|
|
20
|
+
"bootstrap",
|
|
21
|
+
"responsive"
|
|
22
|
+
],
|
|
23
|
+
"contributors": [
|
|
24
|
+
{
|
|
25
|
+
"name": "Julian Lam",
|
|
26
|
+
"email": "julian@nodebb.org",
|
|
27
|
+
"url": "https://github.com/julianlam"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "Barış Soner Uşaklı",
|
|
31
|
+
"email": "baris@nodebb.org",
|
|
32
|
+
"url": "https://github.com/barisusakli"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/NodeBB/nodebb-theme-harmony/issues"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"eslint": "^8.0.0",
|
|
42
|
+
"eslint-config-nodebb": "^0.2.0",
|
|
43
|
+
"eslint-plugin-import": "^2.24.2"
|
|
44
|
+
}
|
|
45
|
+
}
|
package/plugin.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nodebb-theme-harmony",
|
|
3
|
+
"hooks": [
|
|
4
|
+
{ "hook": "static:app.load", "method": "init" },
|
|
5
|
+
{ "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
|
|
6
|
+
{ "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" }
|
|
7
|
+
],
|
|
8
|
+
"modules": {
|
|
9
|
+
"../admin/plugins/harmony.js": "public/admin.js"
|
|
10
|
+
}
|
|
11
|
+
}
|
package/public/.eslintrc
ADDED
package/public/admin.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
define('admin/plugins/harmony', ['settings'], function (Settings) {
|
|
4
|
+
var ACP = {};
|
|
5
|
+
|
|
6
|
+
ACP.init = function () {
|
|
7
|
+
Settings.load('harmony', $('.harmony-settings'));
|
|
8
|
+
|
|
9
|
+
$('#save').on('click', function () {
|
|
10
|
+
Settings.save('harmony', $('.harmony-settings'));
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return ACP;
|
|
15
|
+
});
|
package/renovate.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// only overrides to bs5 variables here
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
<h1>[[pages:account/blocks, {username}]]</h1>
|
|
6
|
+
<div class="row justify-content-end mb-2">
|
|
7
|
+
<div class="col-3">
|
|
8
|
+
<div class="dropdown">
|
|
9
|
+
<input class="form-control" type="text" id="user-search" placeholder="[[users:enter_username]]" data-bs-toggle="dropdown" autocomplete="off"/>
|
|
10
|
+
|
|
11
|
+
<ul class="dropdown-menu block-edit list-unstyled">
|
|
12
|
+
<li><a href="#" class="dropdown-item">[[admin/menu:search.start-typing]]</a></li>
|
|
13
|
+
{{{ each edit }}}
|
|
14
|
+
<li class="">
|
|
15
|
+
<div class="dropdown-item d-flex flex-nowrap gap-2 justify-content-between">
|
|
16
|
+
<div class="text-truncate">
|
|
17
|
+
<a href="{config.relative_path}/uid/{../uid}">{buildAvatar(edit, "24px", true)} {../username}</a>
|
|
18
|
+
</div>
|
|
19
|
+
<button class="btn btn-sm btn-primary text-nowrap" data-uid="{../uid}" data-action="toggle">[[user:block_toggle]]</button>
|
|
20
|
+
</div>
|
|
21
|
+
</li>
|
|
22
|
+
{{{ end }}}
|
|
23
|
+
</ul>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class="users row">
|
|
29
|
+
<div class="col-12">
|
|
30
|
+
<!-- IMPORT partials/users_list.tpl -->
|
|
31
|
+
<div class="alert alert-warning text-center"<!-- IF users.length --> style="display: none;"<!-- END -->>[[user:has_no_blocks]]</div>
|
|
32
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
<div class="col-lg-12 mb-2">
|
|
9
|
+
<div class="btn-group bottom-sheet" component="category/watch/all">
|
|
10
|
+
<button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
11
|
+
<span>[[user:change_all]]</span>
|
|
12
|
+
<span class="caret"></span>
|
|
13
|
+
</button>
|
|
14
|
+
<ul class="dropdown-menu">
|
|
15
|
+
<li><a class="dropdown-item" href="#" component="category/watching" data-state="watching"><i class="fa fa-fw fa-inbox"></i> [[category:watching]]<p class="help-text"><small>[[category:watching.description]]</small></p></a></li>
|
|
16
|
+
<li><a class="dropdown-item" href="#" component="category/notwatching" data-state="notwatching"><i class="fa fa-fw fa-clock-o"></i> [[category:not-watching]]<p class="help-text"><small>[[category:not-watching.description]]</small></p></a></li>
|
|
17
|
+
<li><a class="dropdown-item" href="#" component="category/ignoring" data-state="ignoring"><i class="fa fa-fw fa-eye-slash"></i> [[category:ignoring]]<p class="help-text"><small>[[category:ignoring.description]]</small></p></a></li>
|
|
18
|
+
</ul>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="col-lg-12">
|
|
22
|
+
<ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
|
|
23
|
+
{{{each categories}}}
|
|
24
|
+
<!-- IMPORT partials/account/category-item.tpl -->
|
|
25
|
+
{{{end}}}
|
|
26
|
+
</ul>
|
|
27
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
<h2>[[user:consent.title]]</h2>
|
|
6
|
+
<p class="lead">[[user:consent.lead]]</p>
|
|
7
|
+
<p>[[user:consent.intro]]</p>
|
|
8
|
+
|
|
9
|
+
<hr />
|
|
10
|
+
|
|
11
|
+
<div class="row">
|
|
12
|
+
<div class="col-sm-6">
|
|
13
|
+
<!-- IF gdpr_consent -->
|
|
14
|
+
<div class="alert alert-success">
|
|
15
|
+
<i class="fa fa-check float-end fa-3x"></i>
|
|
16
|
+
[[user:consent.received]]
|
|
17
|
+
</div>
|
|
18
|
+
<!-- ELSE -->
|
|
19
|
+
<div class="alert alert-warning">
|
|
20
|
+
[[user:consent.not_received]]
|
|
21
|
+
<br /><br />
|
|
22
|
+
<div class="text-center">
|
|
23
|
+
<button class="btn btn-warning" data-action="consent">[[user:consent.give]]</button>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<!-- END -->
|
|
27
|
+
<div class="card">
|
|
28
|
+
<div class="card-body">
|
|
29
|
+
<p>[[user:consent.email_intro]]</p>
|
|
30
|
+
<!-- IF digest.enabled -->
|
|
31
|
+
<p>[[user:consent.digest_frequency, {digest.frequency}]]</p>
|
|
32
|
+
<!-- ELSE -->
|
|
33
|
+
[[user:consent.digest_off]]
|
|
34
|
+
<!-- END -->
|
|
35
|
+
|
|
36
|
+
<div class="text-center">
|
|
37
|
+
<a class="btn btn-outline-secondary" href="./settings">
|
|
38
|
+
<i class="fa fa-cog"></i>
|
|
39
|
+
[[pages:account/settings]]
|
|
40
|
+
</a>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="col-sm-6">
|
|
46
|
+
<div class="card">
|
|
47
|
+
<div class="card-body">
|
|
48
|
+
<p><strong>[[user:consent.right_of_access]]</strong></p>
|
|
49
|
+
<p>[[user:consent.right_of_access_description]]</p>
|
|
50
|
+
<p><strong>[[user:consent.right_to_rectification]]</strong></p>
|
|
51
|
+
<p>[[user:consent.right_to_rectification_description]]</p>
|
|
52
|
+
<p><strong>[[user:consent.right_to_erasure]]</strong></p>
|
|
53
|
+
<p>[[user:consent.right_to_erasure_description]]</p>
|
|
54
|
+
<p><strong>[[user:consent.right_to_data_portability]]</strong></p>
|
|
55
|
+
<p>[[user:consent.right_to_data_portability_description]]</p>
|
|
56
|
+
|
|
57
|
+
<div class="btn-group-vertical d-grid">
|
|
58
|
+
<a data-action="export-profile" class="btn btn-outline-secondary">
|
|
59
|
+
<i class="fa fa-download"></i> [[user:consent.export_profile]]
|
|
60
|
+
</a>
|
|
61
|
+
<a data-action="export-posts" class="btn btn-outline-secondary">
|
|
62
|
+
<i class="fa fa-download"></i> [[user:consent.export_posts]]
|
|
63
|
+
</a>
|
|
64
|
+
<a data-action="export-uploads" class="btn btn-outline-secondary">
|
|
65
|
+
<i class="fa fa-download"></i> [[user:consent.export_uploads]]
|
|
66
|
+
</a>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
|
|
6
|
+
<form class="edit-form">
|
|
7
|
+
<!-- disables autocomplete on FF --><input type="password" style="display:none">
|
|
8
|
+
|
|
9
|
+
<!-- IF isSelf -->
|
|
10
|
+
<div class="mb-2">
|
|
11
|
+
<label class="form-label fw-bold" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
12
|
+
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""<!-- IF !hasPassword --> disabled<!-- ENDIF !hasPassword -->>
|
|
13
|
+
</div>
|
|
14
|
+
<!-- ENDIF isSelf -->
|
|
15
|
+
|
|
16
|
+
<div class="mb-2">
|
|
17
|
+
<label class="form-label fw-bold" for="inputNewPassword">[[user:new_password]]</label>
|
|
18
|
+
<input class="form-control" type="password" id="inputNewPassword" placeholder="[[user:password]]" value="">
|
|
19
|
+
<span class="form-feedback" id="password-notify"></span>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="mb-2">
|
|
23
|
+
<label class="form-label fw-bold" for="inputNewPasswordAgain">[[user:confirm_password]]</label>
|
|
24
|
+
<input class="form-control" type="password" id="inputNewPasswordAgain" placeholder="[[user:confirm_password]]" value="">
|
|
25
|
+
<span class="form-feedback" id="password-confirm-notify"></span>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class="form-actions">
|
|
29
|
+
<button id="changePasswordBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change_password]]</button>
|
|
30
|
+
</div>
|
|
31
|
+
</form>
|
|
32
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
|
|
6
|
+
<form class="form-horizontal edit-form">
|
|
7
|
+
<div class="mb-2">
|
|
8
|
+
<label class="form-label fw-bold" for="inputNewUsername">[[user:username]]</label>
|
|
9
|
+
<input class="form-control" type="text" id="inputNewUsername" placeholder="[[user:username]]" value="{username}">
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<!-- disables autocomplete on FF --><input type="password" style="display:none">
|
|
13
|
+
|
|
14
|
+
<!-- IF isSelf -->
|
|
15
|
+
<div class="mb-2">
|
|
16
|
+
<label class="form-label fw-bold" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
17
|
+
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""<!-- IF !hasPassword --> disabled<!-- ENDIF !hasPassword -->>
|
|
18
|
+
</div>
|
|
19
|
+
<!-- ENDIF isSelf -->
|
|
20
|
+
|
|
21
|
+
<input type="hidden" name="uid" id="inputUID" value="{uid}" />
|
|
22
|
+
|
|
23
|
+
<br/>
|
|
24
|
+
<div class="form-actions">
|
|
25
|
+
<button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change_username]]</button>
|
|
26
|
+
</div>
|
|
27
|
+
</form>
|
|
28
|
+
</div>
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
<!-- IF sso.length --><div><!-- ENDIF sso.length -->
|
|
6
|
+
<div class="row">
|
|
7
|
+
<div class="col-md-3 col-sm-4">
|
|
8
|
+
<div class="account-picture-block text-center">
|
|
9
|
+
<div class="row mb-3">
|
|
10
|
+
<div class="col-12 hidden-xs">
|
|
11
|
+
<!-- IF picture -->
|
|
12
|
+
<img id="user-current-picture" class="avatar avatar-rounded" style="--avatar-size: 128px;" src="{picture}" />
|
|
13
|
+
<!-- ELSE -->
|
|
14
|
+
<div class="avatar avatar-rounded" style="background-color: {icon:bgColor}; --avatar-size: 128px;">{icon:text}</div>
|
|
15
|
+
<!-- ENDIF picture -->
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<ul class="list-group mb-3">
|
|
19
|
+
<!-- IF allowProfilePicture -->
|
|
20
|
+
<a id="changePictureBtn" href="#" class="list-group-item">[[user:change_picture]]</a>
|
|
21
|
+
<!-- ENDIF allowProfilePicture -->
|
|
22
|
+
<!-- IF !username:disableEdit -->
|
|
23
|
+
<a href="{config.relative_path}/user/{userslug}/edit/username" class="list-group-item">[[user:change_username]]</a>
|
|
24
|
+
<!-- ENDIF !username:disableEdit -->
|
|
25
|
+
<!-- IF !email:disableEdit -->
|
|
26
|
+
<a href="{config.relative_path}/user/{userslug}/edit/email" class="list-group-item">[[user:change_email]]</a>
|
|
27
|
+
<!-- ENDIF !email:disableEdit -->
|
|
28
|
+
<!-- IF canChangePassword -->
|
|
29
|
+
<a href="{config.relative_path}/user/{userslug}/edit/password" class="list-group-item">[[user:change_password]]</a>
|
|
30
|
+
<!-- ENDIF canChangePassword -->
|
|
31
|
+
{{{each editButtons}}}
|
|
32
|
+
<a href="{config.relative_path}{editButtons.link}" class="list-group-item">{editButtons.text}</a>
|
|
33
|
+
{{{end}}}
|
|
34
|
+
</ul>
|
|
35
|
+
|
|
36
|
+
<!-- IF config.requireEmailConfirmation -->
|
|
37
|
+
<!-- IF email -->
|
|
38
|
+
<!-- IF isSelf -->
|
|
39
|
+
<a id="confirm-email" href="#" class="btn btn-warning <!-- IF email:confirmed -->hide<!-- ENDIF email:confirmed -->">[[user:confirm_email]]</a><br/><br/>
|
|
40
|
+
<!-- ENDIF isSelf -->
|
|
41
|
+
<!-- ENDIF email -->
|
|
42
|
+
<!-- ENDIF config.requireEmailConfirmation -->
|
|
43
|
+
|
|
44
|
+
<!-- IF allowAccountDelete -->
|
|
45
|
+
<!-- IF isSelf -->
|
|
46
|
+
<a id="deleteAccountBtn" href="#" class="btn btn-danger">[[user:delete_account]]</a><br/><br/>
|
|
47
|
+
<!-- ENDIF isSelf -->
|
|
48
|
+
<!-- ENDIF allowAccountDelete -->
|
|
49
|
+
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="<!-- IF !sso.length -->col-md-9 col-sm-8<!-- ELSE -->col-md-5 col-sm-4<!-- ENDIF !sso.length -->">
|
|
54
|
+
<form role="form" component="profile/edit/form">
|
|
55
|
+
<div class="mb-2">
|
|
56
|
+
<label class="form-label fw-bold" for="fullname">[[user:fullname]]</label>
|
|
57
|
+
<input class="form-control" type="text" id="fullname" name="fullname" placeholder="[[user:fullname]]" value="{fullname}">
|
|
58
|
+
</div>
|
|
59
|
+
<!-- IF allowWebsite -->
|
|
60
|
+
<div class="mb-2">
|
|
61
|
+
<label class="form-label fw-bold" for="website">[[user:website]]</label>
|
|
62
|
+
<input class="form-control" type="text" id="website" name="website" placeholder="http://..." value="{website}">
|
|
63
|
+
</div>
|
|
64
|
+
<!-- ENDIF allowWebsite -->
|
|
65
|
+
|
|
66
|
+
<div class="mb-2">
|
|
67
|
+
<label class="form-label fw-bold" for="location">[[user:location]]</label>
|
|
68
|
+
<input class="form-control" type="text" id="location" name="location" placeholder="[[user:location]]" value="{location}">
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="mb-2">
|
|
72
|
+
<label class="form-label fw-bold" for="birthday">[[user:birthday]]</label>
|
|
73
|
+
<input class="form-control" type="date" id="birthday" name="birthday" value="{birthday}" placeholder="mm/dd/yyyy">
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="mb-2">
|
|
77
|
+
<label class="form-label fw-bold" for="groupTitle">[[user:grouptitle]]</label>
|
|
78
|
+
|
|
79
|
+
<select class="form-select" id="groupTitle" name="groupTitle" <!-- IF allowMultipleBadges --> size="{groupSelectSize}" multiple<!-- ENDIF allowMultipleBadges -->>
|
|
80
|
+
<option value="">[[user:no-group-title]]</option>
|
|
81
|
+
{{{each groups}}}
|
|
82
|
+
<!-- IF groups.userTitleEnabled -->
|
|
83
|
+
<option value="{groups.displayName}" <!-- IF groups.selected -->selected<!-- ENDIF groups.selected -->>{groups.userTitle}</option>
|
|
84
|
+
<!-- ENDIF groups.userTitleEnabled -->
|
|
85
|
+
{{{end}}}
|
|
86
|
+
</select>
|
|
87
|
+
<!-- IF allowMultipleBadges -->
|
|
88
|
+
<span>[[user:group-order-help]]</span>
|
|
89
|
+
<i role="button" component="group/order/up" class="fa fa-chevron-up"></i> <i role="button" component="group/order/down" class="fa fa-chevron-down"></i>
|
|
90
|
+
<!-- ENDIF -->
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<!-- IF allowAboutMe -->
|
|
94
|
+
<div class="mb-2">
|
|
95
|
+
<label class="form-label fw-bold" for="aboutme">[[user:aboutme]]</label> <small><label id="aboutMeCharCountLeft"></label></small>
|
|
96
|
+
<textarea class="form-control" id="aboutme" name="aboutme" rows="5">{aboutme}</textarea>
|
|
97
|
+
</div>
|
|
98
|
+
<!-- ENDIF allowAboutMe -->
|
|
99
|
+
|
|
100
|
+
<!-- IF allowSignature -->
|
|
101
|
+
<!-- IF !disableSignatures -->
|
|
102
|
+
<div class="mb-2">
|
|
103
|
+
<label class="form-label fw-bold" for="signature">[[user:signature]]</label> <small><label id="signatureCharCountLeft"></label></small>
|
|
104
|
+
<textarea class="form-control" id="signature" name="signature" rows="5">{signature}</textarea>
|
|
105
|
+
</div>
|
|
106
|
+
<!-- ENDIF !disableSignatures -->
|
|
107
|
+
<!-- ENDIF allowSignature -->
|
|
108
|
+
|
|
109
|
+
<a id="submitBtn" href="#" class="btn btn-primary">[[global:save_changes]]</a>
|
|
110
|
+
</form>
|
|
111
|
+
|
|
112
|
+
<hr class="visible-xs visible-sm"/>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<!-- IF sso.length -->
|
|
116
|
+
<div class="col-md-4 col-sm-4">
|
|
117
|
+
<label>[[user:sso.title]]</label>
|
|
118
|
+
<div class="list-group">
|
|
119
|
+
{{{each sso}}}
|
|
120
|
+
<div class="list-group-item">
|
|
121
|
+
<!-- IF ../deauthUrl -->
|
|
122
|
+
<a data-component="{../component}" class="btn btn-outline-secondary btn-sm float-end" href="{../deauthUrl}">[[user:sso.dissociate]]</a>
|
|
123
|
+
<!-- END -->
|
|
124
|
+
<a data-component="{../component}" href="{../url}" target="<!-- IF ../associated -->_blank<!-- ELSE -->_top<!-- ENDIF ../associated -->">
|
|
125
|
+
<!-- IF ../icon --><i class="fa {../icon}"></i><!-- ENDIF ../icon -->
|
|
126
|
+
<!-- IF ../associated -->[[user:sso.associated]]<!-- ELSE -->[[user:sso.not-associated]]<!-- ENDIF ../associated -->
|
|
127
|
+
{../name}
|
|
128
|
+
</a>
|
|
129
|
+
</div>
|
|
130
|
+
{{{end}}}
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
<!-- ENDIF sso.length -->
|
|
134
|
+
</div>
|
|
135
|
+
<!-- IF sso.length --></div><!-- ENDIF sso.length -->
|
|
136
|
+
</div>
|
|
137
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
|
|
6
|
+
<div class="users row">
|
|
7
|
+
<div class="col-12">
|
|
8
|
+
<h1>[[pages:{template.name}, {username}]]</h1>
|
|
9
|
+
|
|
10
|
+
<!-- IMPORT partials/users_list.tpl -->
|
|
11
|
+
|
|
12
|
+
<!-- IF !users.length -->
|
|
13
|
+
<div class="alert alert-warning text-center">[[user:has_no_follower]]</div>
|
|
14
|
+
<!-- ENDIF !users.length -->
|
|
15
|
+
|
|
16
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
|
|
6
|
+
<div class="users row">
|
|
7
|
+
<div class="col-12">
|
|
8
|
+
<h1>[[pages:{template.name}, {username}]]</h1>
|
|
9
|
+
|
|
10
|
+
<!-- IMPORT partials/users_list.tpl -->
|
|
11
|
+
|
|
12
|
+
<!-- IF !users.length -->
|
|
13
|
+
<div class="alert alert-warning text-center">[[user:follows_no_one]]</div>
|
|
14
|
+
<!-- ENDIF !users.length -->
|
|
15
|
+
|
|
16
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
+
|
|
3
|
+
<div class="account">
|
|
4
|
+
<!-- IMPORT partials/account/header.tpl -->
|
|
5
|
+
|
|
6
|
+
<div class="row">
|
|
7
|
+
<h1>[[pages:{template.name}, {username}]]</h1>
|
|
8
|
+
|
|
9
|
+
<div class="col-12 groups list">
|
|
10
|
+
<div component="groups/container" id="groups-list" class="row">
|
|
11
|
+
<!-- IF !groups.length -->
|
|
12
|
+
<div class="alert alert-warning text-center">[[groups:no_groups_found]]</div>
|
|
13
|
+
<!-- ELSE -->
|
|
14
|
+
<!-- IMPORT partials/groups/list.tpl -->
|
|
15
|
+
<!-- ENDIF !groups.length -->
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|