nodebb-theme-harmony 0.0.9 → 0.0.11
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/languages/en-GB/harmony.json +5 -1
- package/lib/controllers.js +15 -0
- package/library.js +63 -6
- package/package.json +1 -1
- package/plugin.json +5 -1
- package/public/settings.js +28 -0
- package/scss/account.scss +0 -3
- package/scss/common.scss +6 -0
- package/scss/modules/bottom-sheet.scss +1 -1
- package/scss/modules/topic-navigator.scss +0 -6
- package/scss/sidebar.scss +18 -16
- package/templates/account/blocks.tpl +2 -2
- package/templates/account/categories.tpl +27 -21
- package/templates/account/consent.tpl +10 -64
- package/templates/account/edit/password.tpl +29 -24
- package/templates/account/edit/username.tpl +25 -20
- package/templates/account/edit.tpl +110 -115
- package/templates/account/followers.tpl +2 -3
- package/templates/account/following.tpl +2 -3
- package/templates/account/groups.tpl +2 -3
- package/templates/account/info.tpl +206 -204
- package/templates/account/posts.tpl +4 -4
- package/templates/account/profile.tpl +9 -9
- package/templates/account/sessions.tpl +3 -6
- package/templates/account/settings.tpl +193 -206
- package/templates/account/theme.tpl +25 -21
- package/templates/account/topics.tpl +17 -16
- package/templates/account/uploads.tpl +4 -8
- package/templates/admin/plugins/harmony.tpl +4 -0
- package/templates/groups/details.tpl +3 -20
- package/templates/groups/list.tpl +10 -9
- package/templates/header.tpl +3 -21
- package/templates/login.tpl +1 -1
- package/templates/notifications.tpl +4 -4
- package/templates/partials/account/header.tpl +58 -47
- package/templates/partials/account/sidebar-left.tpl +19 -12
- package/templates/partials/buttons/newTopic.tpl +1 -3
- package/templates/partials/categories/item.tpl +1 -8
- package/templates/partials/category/sort.tpl +3 -3
- package/templates/partials/category/subcategory.tpl +1 -1
- package/templates/partials/category/tools.tpl +3 -3
- package/templates/partials/category/watch.tpl +7 -7
- package/templates/partials/category-filter-content.tpl +4 -4
- package/templates/partials/category-selector-content.tpl +10 -9
- package/templates/partials/chats/message-window.tpl +9 -7
- package/templates/partials/groups/admin.tpl +3 -5
- package/templates/partials/groups/sidebar-left.tpl +1 -1
- package/templates/partials/header/brand.tpl +19 -0
- package/templates/partials/notifications_list.tpl +5 -5
- package/templates/partials/post_bar.tpl +5 -5
- package/templates/partials/sidebar/logged-in-menu.tpl +23 -0
- package/templates/partials/sidebar/user-menu.tpl +1 -1
- package/templates/partials/sidebar-left.tpl +1 -1
- package/templates/partials/sidebar-right.tpl +1 -23
- package/templates/partials/tags_list.tpl +3 -2
- package/templates/partials/topic/navigator.tpl +2 -2
- package/templates/partials/topic/post-menu.tpl +2 -4
- package/templates/partials/topic/post.tpl +13 -13
- package/templates/partials/topic/reply-button.tpl +3 -3
- package/templates/partials/topic/sort.tpl +3 -3
- package/templates/partials/topic/tools.tpl +3 -3
- package/templates/partials/topic/watch.tpl +17 -16
- package/templates/partials/topic-filters.tpl +3 -3
- package/templates/partials/topic-list-bar.tpl +8 -12
- package/templates/partials/topic-terms.tpl +3 -3
- package/templates/partials/topics_list.tpl +4 -4
- package/templates/partials/users/item.tpl +27 -25
- package/templates/partials/users_list_menu.tpl +1 -1
- package/templates/search.tpl +0 -2
- package/templates/tags.tpl +12 -8
- package/templates/topic.tpl +1 -3
- package/templates/users.tpl +4 -5
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skins": "Skins",
|
|
3
3
|
"collapse": "Collapse",
|
|
4
|
-
"login-register-to-search": "Login or register to search."
|
|
4
|
+
"login-register-to-search": "Login or register to search.",
|
|
5
|
+
"settings.title": "Theme settings",
|
|
6
|
+
"settings.enableQuickReply": "Enable quick reply",
|
|
7
|
+
"settings.centerHeaderElements": "Center header elements",
|
|
8
|
+
"settings.stickyToolbar": "Sticky toolbar"
|
|
5
9
|
}
|
package/lib/controllers.js
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
const Controllers = module.exports;
|
|
4
4
|
|
|
5
|
+
const accountHelpers = require.main.require('./src/controllers/accounts/helpers');
|
|
6
|
+
const helpers = require.main.require('./src/controllers/helpers');
|
|
7
|
+
|
|
5
8
|
Controllers.renderAdminPage = (req, res) => {
|
|
6
9
|
res.render('admin/plugins/harmony', {});
|
|
7
10
|
};
|
|
11
|
+
|
|
12
|
+
Controllers.renderThemeSettings = async (req, res, next) => {
|
|
13
|
+
const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
|
|
14
|
+
if (!userData) {
|
|
15
|
+
return next();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
userData.title = '[[harmony:settings.title]]';
|
|
19
|
+
userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[harmony:settings.title]]' }]);
|
|
20
|
+
|
|
21
|
+
res.render('account/theme', userData);
|
|
22
|
+
};
|
package/library.js
CHANGED
|
@@ -8,11 +8,24 @@ const controllers = require('./lib/controllers');
|
|
|
8
8
|
|
|
9
9
|
const library = module.exports;
|
|
10
10
|
|
|
11
|
+
const defaults = {
|
|
12
|
+
enableQuickReply: 'on',
|
|
13
|
+
centerHeaderElements: 'off',
|
|
14
|
+
stickyToolbar: 'on',
|
|
15
|
+
};
|
|
16
|
+
|
|
11
17
|
library.init = async function (params) {
|
|
12
|
-
const { router } = params;
|
|
18
|
+
const { router, middleware } = params;
|
|
13
19
|
const routeHelpers = require.main.require('./src/routes/helpers');
|
|
14
20
|
|
|
15
21
|
routeHelpers.setupAdminPageRoute(router, '/admin/plugins/harmony', [], controllers.renderAdminPage);
|
|
22
|
+
|
|
23
|
+
routeHelpers.setupPageRoute(router, '/user/:userslug/theme', [
|
|
24
|
+
middleware.exposeUid,
|
|
25
|
+
middleware.ensureLoggedIn,
|
|
26
|
+
middleware.canViewUsers,
|
|
27
|
+
middleware.checkAccountPermissions,
|
|
28
|
+
], controllers.renderThemeSettings);
|
|
16
29
|
};
|
|
17
30
|
|
|
18
31
|
library.addAdminNavigation = async function (header) {
|
|
@@ -24,6 +37,24 @@ library.addAdminNavigation = async function (header) {
|
|
|
24
37
|
return header;
|
|
25
38
|
};
|
|
26
39
|
|
|
40
|
+
library.addProfileItem = async (data) => {
|
|
41
|
+
data.links.push({
|
|
42
|
+
id: 'theme',
|
|
43
|
+
route: 'theme',
|
|
44
|
+
icon: 'fa-paint-brush',
|
|
45
|
+
name: '[[harmony:settings.title]]',
|
|
46
|
+
visibility: {
|
|
47
|
+
self: true,
|
|
48
|
+
other: false,
|
|
49
|
+
moderator: false,
|
|
50
|
+
globalMod: false,
|
|
51
|
+
admin: false,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return data;
|
|
56
|
+
};
|
|
57
|
+
|
|
27
58
|
library.defineWidgetAreas = async function (areas) {
|
|
28
59
|
const locations = ['header', 'sidebar', 'footer'];
|
|
29
60
|
const templates = [
|
|
@@ -55,18 +86,44 @@ library.defineWidgetAreas = async function (areas) {
|
|
|
55
86
|
return areas;
|
|
56
87
|
};
|
|
57
88
|
|
|
89
|
+
async function loadThemeConfig(uid) {
|
|
90
|
+
const [themeConfig, userConfig] = await Promise.all([
|
|
91
|
+
meta.settings.get('harmony'),
|
|
92
|
+
user.getSettings(uid),
|
|
93
|
+
]);
|
|
94
|
+
return { ...defaults, ...themeConfig, ...userConfig };
|
|
95
|
+
}
|
|
96
|
+
|
|
58
97
|
library.getThemeConfig = async function (config) {
|
|
59
|
-
const
|
|
60
|
-
config.enableQuickReply = enableQuickReply === 'on';
|
|
61
|
-
config.centerHeaderElements = centerHeaderElements === 'on';
|
|
98
|
+
const themeConfig = await loadThemeConfig(config.uid);
|
|
99
|
+
config.enableQuickReply = themeConfig.enableQuickReply === 'on';
|
|
100
|
+
config.centerHeaderElements = themeConfig.centerHeaderElements === 'on';
|
|
101
|
+
config.stickyToolbar = themeConfig.stickyToolbar === 'on';
|
|
62
102
|
return config;
|
|
63
103
|
};
|
|
64
104
|
|
|
105
|
+
library.getAdminSettings = async function (hookData) {
|
|
106
|
+
if (hookData.plugin === 'harmony') {
|
|
107
|
+
hookData.values = {
|
|
108
|
+
...defaults,
|
|
109
|
+
...hookData.values,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return hookData;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
library.saveUserSettings = async function (hookData) {
|
|
116
|
+
Object.keys(defaults).forEach((key) => {
|
|
117
|
+
hookData.settings[key] = hookData.data[key] || undefined;
|
|
118
|
+
});
|
|
119
|
+
return hookData;
|
|
120
|
+
};
|
|
121
|
+
|
|
65
122
|
library.addUserToTopic = async function (hookData) {
|
|
66
|
-
const { enableQuickReply } = await
|
|
123
|
+
const { enableQuickReply } = await loadThemeConfig(hookData.req.uid);
|
|
67
124
|
if (enableQuickReply === 'on') {
|
|
68
125
|
if (hookData.req.user) {
|
|
69
|
-
const userData = await user.getUserData(hookData.req.
|
|
126
|
+
const userData = await user.getUserData(hookData.req.uid);
|
|
70
127
|
hookData.templateData.loggedInUser = userData;
|
|
71
128
|
} else {
|
|
72
129
|
hookData.templateData.loggedInUser = {
|
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
{ "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
|
|
6
6
|
{ "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" },
|
|
7
7
|
{ "hook": "filter:config.get", "method": "getThemeConfig" },
|
|
8
|
+
{ "hook": "filter:settings.get", "method": "getAdminSettings"},
|
|
9
|
+
{ "hook": "filter:user.saveSettings", "method": "saveUserSettings" },
|
|
10
|
+
{ "hook": "filter:user.profileMenu", "method": "addProfileItem" },
|
|
8
11
|
{ "hook": "filter:topic.build", "method": "addUserToTopic" },
|
|
9
12
|
{ "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" },
|
|
10
13
|
{ "hook": "filter:middleware.render", "method": "removeFinalBreadcrumb" }
|
|
@@ -13,7 +16,8 @@
|
|
|
13
16
|
"public/harmony.js"
|
|
14
17
|
],
|
|
15
18
|
"modules": {
|
|
16
|
-
"../admin/plugins/harmony.js": "public/admin.js"
|
|
19
|
+
"../admin/plugins/harmony.js": "public/admin.js",
|
|
20
|
+
"../client/account/theme.js": "public/settings.js"
|
|
17
21
|
},
|
|
18
22
|
"staticDirs": {
|
|
19
23
|
"inter": "node_modules/@fontsource/inter/files",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
define('forum/account/theme', ['forum/account/header', 'api', 'settings', 'alerts'], function (header, api, settings, alerts) {
|
|
4
|
+
const Theme = {};
|
|
5
|
+
|
|
6
|
+
Theme.init = () => {
|
|
7
|
+
header.init();
|
|
8
|
+
Theme.setupForm();
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
Theme.setupForm = () => {
|
|
12
|
+
const saveEl = document.getElementById('save');
|
|
13
|
+
if (saveEl) {
|
|
14
|
+
const formEl = document.getElementById('theme-settings');
|
|
15
|
+
saveEl.addEventListener('click', async () => {
|
|
16
|
+
const themeSettings = settings.helper.serializeForm($(formEl));
|
|
17
|
+
await api.put(`/users/${app.user.uid}/settings`, {
|
|
18
|
+
settings: {
|
|
19
|
+
...themeSettings,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
alerts.success('[[success:settings-saved]]');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return Theme;
|
|
28
|
+
});
|
package/scss/account.scss
CHANGED
package/scss/common.scss
CHANGED
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.meta {
|
|
19
|
-
display: none;
|
|
20
19
|
top: -8px;
|
|
21
20
|
left: calc($spacer + 8px);
|
|
22
21
|
font-size: 13px;
|
|
@@ -38,7 +37,6 @@
|
|
|
38
37
|
transition: $transition-base;
|
|
39
38
|
|
|
40
39
|
.meta {
|
|
41
|
-
display: none;
|
|
42
40
|
left: calc($spacer + 8px);
|
|
43
41
|
font-size: 13px;
|
|
44
42
|
}
|
|
@@ -54,8 +52,4 @@
|
|
|
54
52
|
[component="topic/navigator"].d-sm-flex.mt-auto + .mt-auto {
|
|
55
53
|
margin-top: 0 !important;
|
|
56
54
|
}
|
|
57
|
-
|
|
58
|
-
.handle .meta, .unread .meta {
|
|
59
|
-
display: block;
|
|
60
|
-
}
|
|
61
55
|
}
|
package/scss/sidebar.scss
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.skin-noskin {
|
|
2
2
|
// only using colors when there is no bootswatch skin applied
|
|
3
|
-
.sidebar, .bottombar {
|
|
3
|
+
nav.sidebar, .bottombar {
|
|
4
4
|
color: $secondary !important;
|
|
5
5
|
background-color: $light !important;
|
|
6
6
|
}
|
|
@@ -15,22 +15,24 @@
|
|
|
15
15
|
.sidebar {
|
|
16
16
|
$hover-color: mix($light, $dark, 90);
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
@include media-breakpoint-up(lg) {
|
|
19
|
+
&.open {
|
|
20
|
+
min-width: 200px;
|
|
21
|
+
max-width: 200px;
|
|
22
|
+
width: 200px;
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
.sidebar-toggle {
|
|
25
|
+
.fa-angles-right { display: none; }
|
|
26
|
+
.fa-angles-left { display: inline-block; }
|
|
27
|
+
}
|
|
28
|
+
.visible-open { display: initial; }
|
|
29
|
+
.visible-closed { display: none; }
|
|
30
|
+
hr.visible-open { display: block; }
|
|
31
|
+
.truncate-open {
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
text-overflow: ellipsis;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
}
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
.visible-open { display: none; }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div class="account">
|
|
2
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
3
|
-
<div class="
|
|
3
|
+
<div class="d-flex flex-column flex-md-row">
|
|
4
4
|
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
5
|
-
<div class="
|
|
5
|
+
<div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
|
|
6
6
|
<div class="d-flex justify-content-between mb-3">
|
|
7
7
|
<h3 class="fw-semibold fs-5">[[pages:account/blocks, {username}]]</h3>
|
|
8
8
|
<div class="justify-content-end">
|
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
<div class="account">
|
|
2
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
3
3
|
|
|
4
|
-
<div class="row">
|
|
5
|
-
|
|
6
|
-
<div class="
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
<div class="d-flex flex-column flex-md-row">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
6
|
+
<div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
|
|
7
|
+
<h3 class="fw-semibold fs-5">{title}</h3>
|
|
8
|
+
|
|
9
|
+
<div class="row">
|
|
10
|
+
<div class="col-lg-12 mb-2">
|
|
11
|
+
<div class="btn-group bottom-sheet" component="category/watch/all">
|
|
12
|
+
<button class="btn btn-outline-secondary dropdown-toggle" data-bs-toggle="dropdown" type="button">
|
|
13
|
+
<span>[[user:change_all]]</span>
|
|
14
|
+
<span class="caret"></span>
|
|
15
|
+
</button>
|
|
16
|
+
<ul class="dropdown-menu">
|
|
17
|
+
<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>
|
|
18
|
+
<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>
|
|
19
|
+
<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>
|
|
20
|
+
</ul>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="col-lg-12">
|
|
24
|
+
<ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
|
|
25
|
+
{{{each categories}}}
|
|
26
|
+
<!-- IMPORT partials/account/category-item.tpl -->
|
|
27
|
+
{{{end}}}
|
|
28
|
+
</ul>
|
|
29
|
+
<!-- IMPORT partials/paginator.tpl -->
|
|
30
|
+
</div>
|
|
17
31
|
</div>
|
|
18
32
|
</div>
|
|
19
|
-
<div class="col-lg-12">
|
|
20
|
-
<ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
|
|
21
|
-
{{{each categories}}}
|
|
22
|
-
<!-- IMPORT partials/account/category-item.tpl -->
|
|
23
|
-
{{{end}}}
|
|
24
|
-
</ul>
|
|
25
|
-
<!-- IMPORT partials/paginator.tpl -->
|
|
26
|
-
</div>
|
|
27
33
|
</div>
|
|
28
34
|
</div>
|
|
@@ -1,71 +1,17 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="account">
|
|
4
2
|
<!-- 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
3
|
|
|
9
|
-
<
|
|
4
|
+
<div class="d-flex flex-column flex-md-row">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
6
|
+
<div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
|
|
7
|
+
<h3 class="fw-semibold fs-5">[[user:consent.title]]</h3>
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
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 -->
|
|
9
|
+
<p class="lead">[[user:consent.lead]]</p>
|
|
10
|
+
<p>[[user:consent.intro]]</p>
|
|
35
11
|
|
|
36
|
-
|
|
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>
|
|
12
|
+
<hr />
|
|
56
13
|
|
|
57
|
-
|
|
58
|
-
|
|
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>
|
|
14
|
+
<div class="row">
|
|
15
|
+
</div>
|
|
70
16
|
</div>
|
|
71
|
-
</div>
|
|
17
|
+
</div>
|
|
@@ -1,32 +1,37 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="account">
|
|
4
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
5
3
|
|
|
6
|
-
<
|
|
7
|
-
<!--
|
|
4
|
+
<div class="d-flex flex-column flex-md-row">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
6
|
+
<div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
|
|
7
|
+
<h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change_password]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
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 -->
|
|
9
|
+
<form class="edit-form">
|
|
10
|
+
<!-- disables autocomplete on FF --><input type="password" style="display:none">
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
{{{ if isSelf }}}
|
|
13
|
+
<div class="mb-2">
|
|
14
|
+
<label class="form-label fw-semibold text-xm" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
15
|
+
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""<!-- IF !hasPassword --> disabled<!-- ENDIF !hasPassword -->>
|
|
16
|
+
</div>
|
|
17
|
+
{{{ end }}}
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
<div class="mb-2">
|
|
20
|
+
<label class="form-label fw-semibold text-xm" for="inputNewPassword">[[user:new_password]]</label>
|
|
21
|
+
<input class="form-control" type="password" id="inputNewPassword" placeholder="[[user:password]]" value="">
|
|
22
|
+
<span class="form-feedback" id="password-notify"></span>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="mb-2">
|
|
26
|
+
<label class="form-label fw-semibold text-xm" for="inputNewPasswordAgain">[[user:confirm_password]]</label>
|
|
27
|
+
<input class="form-control" type="password" id="inputNewPasswordAgain" placeholder="[[user:confirm_password]]" value="">
|
|
28
|
+
<span class="form-feedback" id="password-confirm-notify"></span>
|
|
29
|
+
</div>
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
<div class="form-actions">
|
|
32
|
+
<button id="changePasswordBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change_password]]</button>
|
|
33
|
+
</div>
|
|
34
|
+
</form>
|
|
30
35
|
</div>
|
|
31
|
-
</
|
|
32
|
-
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
@@ -1,28 +1,33 @@
|
|
|
1
|
-
<!-- THIS FILE IS STILL PERSONA -->
|
|
2
|
-
|
|
3
1
|
<div class="account">
|
|
4
2
|
<!-- IMPORT partials/account/header.tpl -->
|
|
5
3
|
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
-
</div>
|
|
4
|
+
<div class="d-flex flex-column flex-md-row">
|
|
5
|
+
<!-- IMPORT partials/account/sidebar-left.tpl -->
|
|
6
|
+
<div class="flex-1 ps-md-2 ps-lg-5" style="min-width: 0;">
|
|
7
|
+
<h3 class="fw-semibold fs-5">{{{ if isSelf }}}[[user:change_username]]{{{ else }}}[[pages:{template.name}, {username}]]{{{ end }}}</h3>
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
<form class="form-horizontal edit-form">
|
|
10
|
+
<div class="mb-2">
|
|
11
|
+
<label class="form-label fw-semibold text-sm" for="inputNewUsername">[[user:username]]</label>
|
|
12
|
+
<input class="form-control" type="text" id="inputNewUsername" placeholder="[[user:username]]" value="{username}">
|
|
13
|
+
</div>
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
<!-- disables autocomplete on FF --><input type="password" style="display:none">
|
|
16
|
+
|
|
17
|
+
{{{ if isSelf }}}
|
|
18
|
+
<div class="mb-2">
|
|
19
|
+
<label class="form-label fw-semibold text-sm" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
20
|
+
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""{{{ if !hasPassword }}} disabled{{{ end }}}>
|
|
21
|
+
</div>
|
|
22
|
+
{{{ end }}}
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
<input type="hidden" name="uid" id="inputUID" value="{uid}" />
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
<br/>
|
|
27
|
+
<div class="form-actions">
|
|
28
|
+
<button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change_username]]</button>
|
|
29
|
+
</div>
|
|
30
|
+
</form>
|
|
26
31
|
</div>
|
|
27
|
-
</
|
|
28
|
-
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|