Merge branch 'v12.x'
commit
ba39ceabe0
@ -1,4 +1,10 @@
|
|||||||
{
|
{
|
||||||
"mobile-menu-side": "Switch which side each mobile menu is on",
|
"settings.title": "Theme settings",
|
||||||
"post-quick-reply": "Post quick reply"
|
"settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)",
|
||||||
|
"settings.mobile-menu-side": "Switch which side each mobile menu is on",
|
||||||
|
"settings.autoHidingNavbar": "Automatically hide the navbar on scroll",
|
||||||
|
"settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)",
|
||||||
|
"settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)",
|
||||||
|
"settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)",
|
||||||
|
"settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)"
|
||||||
}
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const accountHelpers = require.main.require('./src/controllers/accounts/helpers');
|
||||||
|
const helpers = require.main.require('./src/controllers/helpers');
|
||||||
|
|
||||||
|
const Controllers = module.exports;
|
||||||
|
|
||||||
|
Controllers.renderAdminPage = (req, res) => {
|
||||||
|
res.render('admin/plugins/persona', {});
|
||||||
|
};
|
||||||
|
|
||||||
|
Controllers.renderThemeSettings = async (req, res, next) => {
|
||||||
|
const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query);
|
||||||
|
if (!userData) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
|
userData.title = '[[persona:settings.title]]';
|
||||||
|
userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username, url: `/user/${userData.userslug}` }, { text: '[[persona:settings.title]]' }]);
|
||||||
|
|
||||||
|
res.render('account/theme', userData);
|
||||||
|
};
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "nodebb/public"
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
define('forum/account/theme', ['forum/account/header', 'storage', 'settings', 'alerts'], function (header, Storage, settings, alerts) {
|
||||||
|
const Theme = {};
|
||||||
|
|
||||||
|
Theme.init = () => {
|
||||||
|
header.init();
|
||||||
|
Theme.setupForm();
|
||||||
|
};
|
||||||
|
|
||||||
|
Theme.setupForm = () => {
|
||||||
|
const saveEl = document.getElementById('save');
|
||||||
|
const formEl = document.getElementById('theme-settings');
|
||||||
|
const [sidebarSwapped, autohideNavbarEnvs] = [
|
||||||
|
!!Storage.getItem('persona:menus:legacy-layout'),
|
||||||
|
Storage.getItem('persona:navbar:autohide'),
|
||||||
|
];
|
||||||
|
|
||||||
|
document.getElementById('persona:menus:legacy-layout').checked = sidebarSwapped;
|
||||||
|
try {
|
||||||
|
const parsed = JSON.parse(autohideNavbarEnvs) || ['xs', 'sm'];
|
||||||
|
parsed.forEach((env) => {
|
||||||
|
const optionEl = document.getElementById('persona:navbar:autohide').querySelector(`option[value="${env}"]`);
|
||||||
|
optionEl.selected = true;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saveEl) {
|
||||||
|
saveEl.addEventListener('click', () => {
|
||||||
|
const themeSettings = settings.helper.serializeForm($(formEl));
|
||||||
|
Object.keys(themeSettings).forEach((key) => {
|
||||||
|
if (key === 'persona:menus:legacy-layout') {
|
||||||
|
if (themeSettings[key] === 'on') {
|
||||||
|
Storage.setItem('persona:menus:legacy-layout', 'true');
|
||||||
|
} else {
|
||||||
|
Storage.removeItem('persona:menus:legacy-layout');
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Storage.setItem(key, themeSettings[key]);
|
||||||
|
});
|
||||||
|
|
||||||
|
alerts.success('[[success:settings-saved]]');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Theme;
|
||||||
|
});
|
@ -0,0 +1 @@
|
|||||||
|
<!-- IMPORT account/posts.tpl -->
|
@ -1,30 +0,0 @@
|
|||||||
<div class="account">
|
|
||||||
<!-- IMPORT partials/account/header.tpl -->
|
|
||||||
|
|
||||||
<form class="form-horizontal edit-form">
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label" for="inputNewEmail">[[user:email]]</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input class="form-control" type="text" id="inputNewEmail" placeholder="[[user:email]]" value="{email}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- disables autocomplete on FF --><input type="password" style="display:none">
|
|
||||||
|
|
||||||
<!-- IF isSelf -->
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label" for="inputCurrentPassword">[[user:current_password]]</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input autocomplete="off" class="form-control" type="password" id="inputCurrentPassword" placeholder="[[user:current_password]]" value=""<!-- IF !hasPassword --> disabled<!-- ENDIF !hasPassword -->>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- ENDIF isSelf -->
|
|
||||||
|
|
||||||
<input type="hidden" name="uid" id="inputUID" value="{uid}" />
|
|
||||||
|
|
||||||
<br/>
|
|
||||||
<div class="form-actions">
|
|
||||||
<button id="submitBtn" class="btn btn-primary btn-block"><i class="hide fa fa-spinner fa-spin"></i> [[user:change_email]]</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
@ -0,0 +1,27 @@
|
|||||||
|
<div class="account">
|
||||||
|
<!-- IMPORT partials/account/header.tpl -->
|
||||||
|
|
||||||
|
<p>[[persona:settings.intro]]</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<form id="theme-settings" role="form">
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="persona:menus:legacy-layout" name="persona:menus:legacy-layout"> <strong>[[persona:settings.mobile-menu-side]]</strong>
|
||||||
|
</label>
|
||||||
|
</div><br />
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="persona:navbar:autohide">[[persona:settings.autoHidingNavbar]]</label>
|
||||||
|
<select multiple class="form-control" name="persona:navbar:autohide" id="persona:navbar:autohide">
|
||||||
|
<option value="xs">[[persona:settings.autoHidingNavbar-xs]]</option>
|
||||||
|
<option value="sm">[[persona:settings.autoHidingNavbar-sm]]</option>
|
||||||
|
<option value="md">[[persona:settings.autoHidingNavbar-md]]</option>
|
||||||
|
<option value="lg">[[persona:settings.autoHidingNavbar-lg]]</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button id="save" type="button" class="btn btn-primary">[[global:save_changes]]</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
@ -1,3 +1,3 @@
|
|||||||
<div id="taskbar" class="taskbar navbar-fixed-bottom">
|
<div id="taskbar" class="taskbar navbar-fixed-bottom">
|
||||||
<div class="navbar-inner"><ul class="nav navbar-nav pull-right"></ul></div>
|
<div class="navbar-inner"><ul class="nav navbar-nav"></ul></div>
|
||||||
</div>
|
</div>
|
@ -1,11 +1,41 @@
|
|||||||
<!-- IF config.loggedIn -->
|
{{{ if config.loggedIn }}}
|
||||||
|
<ul class="nav nav-pills">
|
||||||
|
<li>
|
||||||
|
<a href="#notifications" data-toggle="tab"><span class="counter unread-count" component="notifications/icon" data-content="{unreadCount.notification}"></span> <i class="fa fa-fw fa-bell"></i></a>
|
||||||
|
</li>
|
||||||
|
{{{ if !config.disableChat }}}
|
||||||
|
<li>
|
||||||
|
<a href="#chats" data-toggle="tab"><i class="counter unread-count" component="chat/icon" data-content="{unreadCount.chat}"></i> <i class="fa fa-fw fa-comment"></i></a>
|
||||||
|
</li>
|
||||||
|
{{{ end }}}
|
||||||
|
<li class="active">
|
||||||
|
<a href="#profile" data-toggle="tab">
|
||||||
|
{buildAvatar(user, "sm", true, "user-icon")}
|
||||||
|
<i component="user/status" class="fa fa-fw fa-circle status {user.status}"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane fade active in" id="profile">
|
||||||
|
<section class="menu-section" data-section="profile">
|
||||||
|
<ul class="menu-section-list" component="header/usercontrol"></ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane fade" id="notifications">
|
||||||
|
<section class="menu-section" data-section="notifications">
|
||||||
|
<ul class="menu-section-list notification-list-mobile" component="notifications/list"></ul>
|
||||||
|
<p class="menu-section-list"><a href="{relative_path}/notifications">[[notifications:see_all]]</a></p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
{{{ if !config.disableChat }}}
|
||||||
|
<div class="tab-pane fade" id="chats">
|
||||||
<section class="menu-section" data-section="chats">
|
<section class="menu-section" data-section="chats">
|
||||||
<h3 class="menu-section-title">
|
|
||||||
[[global:header.chats]]
|
|
||||||
<i class="counter unread-count" component="chat/icon" data-content="{unreadCount.chat}"></i>
|
|
||||||
</h3>
|
|
||||||
<ul class="menu-section-list chat-list" component="chat/list">
|
<ul class="menu-section-list chat-list" component="chat/list">
|
||||||
<a class="navigation-link" href="{relative_path}/user/{user.userslug}/chats">[[modules:chat.see_all]]</a>
|
<a class="navigation-link" href="{relative_path}/user/{user.userslug}/chats">[[modules:chat.see_all]]</a>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
<!-- ENDIF config.loggedIn -->
|
</div>
|
||||||
|
{{{ end }}}
|
||||||
|
</div>
|
||||||
|
{{{ end }}}
|
@ -0,0 +1,24 @@
|
|||||||
|
<div class="dropdown pull-right">
|
||||||
|
<button class="close" data-toggle="dropdown" component="chat/controlsToggle"><i class="fa fa-gear"></i></button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right pull-right" component="chat/controls">
|
||||||
|
<li class="dropdown-header">[[modules:chat.options]]</li>
|
||||||
|
<li>
|
||||||
|
<a href="#" data-action="members"><i class="fa fa-fw fa-cog"></i> [[modules:chat.manage-room]]</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#" data-action="rename"><i class="fa fa-fw fa-edit"></i> [[modules:chat.rename-room]]</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#" data-action="leave"><i class="fa fa-fw fa-sign-out"></i> [[modules:chat.leave]]</a>
|
||||||
|
</li>
|
||||||
|
<!-- IF users.length -->
|
||||||
|
<li role="separator" class="divider"></li>
|
||||||
|
<li class="dropdown-header">[[modules:chat.in-room]]</li>
|
||||||
|
{{{each users}}}
|
||||||
|
<li>
|
||||||
|
<a href="{config.relative_path}/uid/{../uid}">{buildAvatar(users, "sm", true)} {../username}</a>
|
||||||
|
</li>
|
||||||
|
{{{end}}}
|
||||||
|
<!-- END -->
|
||||||
|
</ul>
|
||||||
|
</div>
|
@ -0,0 +1,50 @@
|
|||||||
|
<div id="results" class="search-results col-md-12" data-search-query="{search_query}">
|
||||||
|
<!-- IF matchCount -->
|
||||||
|
<div class="alert alert-info">[[search:results_matching, {matchCount}, {search_query}, {time}]] </div>
|
||||||
|
<!-- ELSE -->
|
||||||
|
<!-- IF search_query -->
|
||||||
|
<div class="alert alert-warning">[[search:no-matches]]</div>
|
||||||
|
<!-- ENDIF search_query -->
|
||||||
|
<!-- ENDIF matchCount -->
|
||||||
|
|
||||||
|
{{{each posts}}}
|
||||||
|
<div class="topic-row panel panel-default clearfix">
|
||||||
|
<div class="panel-body">
|
||||||
|
<a href="{config.relative_path}/user/{posts.user.userslug}">{buildAvatar(posts.user, "sm", true)}</a>
|
||||||
|
<span class="search-result-text search-result-title"><a href="{config.relative_path}/post/{posts.pid}">{posts.topic.title}</a></span>
|
||||||
|
<br/>
|
||||||
|
<!-- IF showAsPosts -->
|
||||||
|
<div class="search-result-text">
|
||||||
|
{posts.content}
|
||||||
|
<p class="fade-out"></p>
|
||||||
|
</div>
|
||||||
|
<!-- ENDIF showAsPosts -->
|
||||||
|
|
||||||
|
<small class="post-info pull-right">
|
||||||
|
<a href="{config.relative_path}/category/{posts.category.slug}"><span class="fa-stack" style="{function.generateCategoryBackground, posts.category}"><i style="color:{posts.category.color};" class="fa {posts.category.icon} fa-stack-1x"></i></span> {posts.category.name}</a> •
|
||||||
|
<span class="timeago" title="{posts.timestampISO}"></span>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{{end}}}
|
||||||
|
|
||||||
|
<!-- IF users.length -->
|
||||||
|
<ul id="users-container" class="users-container">
|
||||||
|
<!-- IMPORT partials/users_list.tpl -->
|
||||||
|
</ul>
|
||||||
|
<!-- ENDIF users.length -->
|
||||||
|
|
||||||
|
<!-- IF tags.length -->
|
||||||
|
<!-- IMPORT partials/tags_list.tpl -->
|
||||||
|
<!-- ENDIF tags.length -->
|
||||||
|
|
||||||
|
{{{ if categories.length }}}
|
||||||
|
<ul class="categories">
|
||||||
|
{{{each categories}}}
|
||||||
|
<!-- IMPORT partials/categories/item.tpl -->
|
||||||
|
{{{end}}}
|
||||||
|
</ul>
|
||||||
|
{{{ end }}}
|
||||||
|
|
||||||
|
<!-- IMPORT partials/paginator.tpl -->
|
||||||
|
</div>
|
@ -1,27 +1,4 @@
|
|||||||
<div class="menu-profile">
|
|
||||||
<!-- IF user.uid -->
|
|
||||||
{buildAvatar(user, "lg", true, "user-icon")}
|
|
||||||
<i component="user/status" class="fa fa-fw fa-circle status {user.status}"></i>
|
|
||||||
<!-- ENDIF user.uid -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<section class="menu-section" data-section="navigation">
|
<section class="menu-section" data-section="navigation">
|
||||||
<h3 class="menu-section-title">[[global:header.navigation]]</h3>
|
|
||||||
<ul class="menu-section-list"></ul>
|
<ul class="menu-section-list"></ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- IF config.loggedIn -->
|
|
||||||
<section class="menu-section" data-section="profile">
|
|
||||||
<h3 class="menu-section-title">[[global:header.profile]]</h3>
|
|
||||||
<ul class="menu-section-list" component="header/usercontrol"></ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="menu-section" data-section="notifications">
|
|
||||||
<h3 class="menu-section-title">
|
|
||||||
[[global:header.notifications]]
|
|
||||||
<span class="counter unread-count" component="notifications/icon" data-content="{unreadCount.notification}"></span>
|
|
||||||
</h3>
|
|
||||||
<ul class="menu-section-list notification-list-mobile" component="notifications/list"></ul>
|
|
||||||
<p class="menu-section-list"><a href="{relative_path}/notifications">[[notifications:see_all]]</a></p>
|
|
||||||
</section>
|
|
||||||
<!-- ENDIF config.loggedIn -->
|
|
@ -1,5 +1,5 @@
|
|||||||
{{{each tags}}}
|
{{{each tags}}}
|
||||||
<h3 class="pull-left tag-container">
|
<h3 class="pull-left tag-container">
|
||||||
<a href="{config.relative_path}/tags/{tags.valueEscaped}" data-value="{tags.valueEscaped}"><span class="tag-item" data-tag="{tags.valueEscaped}" style="<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color --><!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->">{tags.valueEscaped}</span><span class="tag-topic-count human-readable-number" title="{tags.score}">{tags.score}</span></a>
|
<a href="{config.relative_path}/tags/{tags.valueEncoded}" data-value="{tags.valueEscaped}"><span class="tag-item tag-class-{tags.class}" data-tag="{tags.valueEscaped}">{tags.valueEscaped}</span><span class="tag-topic-count human-readable-number" title="{tags.score}">{tags.score}</span></a>
|
||||||
</h3>
|
</h3>
|
||||||
{{{end}}}
|
{{{end}}}
|
@ -1,13 +1 @@
|
|||||||
<div component="topic/browsing-users" class="inline-block hidden-xs">
|
<!-- This partial intentionally left blank; overwritten by nodebb-plugin-browsing-users -->
|
||||||
{{{each browsingUsers}}}
|
|
||||||
<div class="pull-left" data-uid="{browsingUsers.uid}">
|
|
||||||
<a href="<!-- IF browsingUsers.userslug -->{config.relative_path}/user/{browsingUsers.userslug}<!-- ELSE -->#<!-- ENDIF browsingUsers.userslug -->">
|
|
||||||
<!-- IF browsingUsers.picture -->
|
|
||||||
<img class="avatar avatar-sm avatar-rounded" component="user/picture" src="{browsingUsers.picture}" align="left" itemprop="image" title="{browsingUsers.username}"/>
|
|
||||||
<!-- ELSE -->
|
|
||||||
<div class="avatar avatar-sm avatar-rounded" component="user/picture" title="{browsingUsers.username}" style="background-color: {browsingUsers.icon:bgColor};">{browsingUsers.icon:text}</div>
|
|
||||||
<!-- ENDIF browsingUsers.picture -->
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{{{end}}}
|
|
||||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||||||
<li component="topic/event" class="timeline-event" data-topic-event-id="{id}">
|
|
||||||
<div class="timeline-badge">
|
|
||||||
<i class="fa {{{ if icon }}}{icon}{{{ else }}}fa-circle{{{ end }}}"></i>
|
|
||||||
</div>
|
|
||||||
<span class="timeline-text">
|
|
||||||
{{{ if ../href }}}
|
|
||||||
<a href="{config.relative_path}{../href}">{../text}</a>
|
|
||||||
{{{ else }}}
|
|
||||||
{text}
|
|
||||||
{{{ end }}}
|
|
||||||
</span>
|
|
||||||
|
|
||||||
{{{ if user }}}
|
|
||||||
{{{ if !./user.system }}}<span><a href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(user, "xs", true)} {./user.username}</a></span> {{{ end }}}
|
|
||||||
{{{ if ./user.system }}}<span class="timeline-text">[[global:system-user]]</span> {{{ end }}}
|
|
||||||
{{{ else }}}
|
|
||||||
<span class="timeline-text">[[global:unknown-user]]</span>
|
|
||||||
{{{ end }}}
|
|
||||||
|
|
||||||
<span class="timeago timeline-text" title="{timestampISO}"></span>
|
|
||||||
|
|
||||||
{{{ if isAdminOrMod}}}
|
|
||||||
<span component="topic/event/delete" data-topic-event-id="{id}" class="timeline-text pointer" title="[[topic:delete-event]]"><i class="fa fa-trash"></i></span>
|
|
||||||
{{{ end }}}
|
|
||||||
</li>
|
|
@ -1,4 +1,4 @@
|
|||||||
<span component="post/tools" class="dropdown moderator-tools bottom-sheet <!-- IF !posts.display_post_menu -->hidden<!-- ENDIF !posts.display_post_menu -->">
|
<span component="post/tools" class="dropdown moderator-tools bottom-sheet <!-- IF !posts.display_post_menu -->hidden<!-- ENDIF !posts.display_post_menu -->">
|
||||||
<a href="#" data-toggle="dropdown" data-ajaxify="false"><i class="fa fa-fw fa-ellipsis-v"></i></a>
|
<a href="#" data-toggle="dropdown" data-ajaxify="false"><i class="fa fa-fw fa-ellipsis-v"></i></a>
|
||||||
<ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
|
<ul class="dropdown-menu dropdown-menu-right hidden" role="menu"></ul>
|
||||||
</span>
|
</span>
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
<!-- This partial intentionally left blank; overwritten by nodebb-plugin-reactions -->
|
@ -0,0 +1,3 @@
|
|||||||
|
<div component="selection/tooltip" class="selection-tooltip-container">
|
||||||
|
<button component="selection/tooltip/quote" class="btn btn-sm btn-primary quote-tooltip-btn">[[topic:quote]]</button>
|
||||||
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
{{{each tags}}}
|
{{{each tags}}}
|
||||||
<a href="{config.relative_path}/tags/{tags.value}">
|
<a href="{config.relative_path}/tags/{tags.valueEncoded}">
|
||||||
<span class="tag tag-item tag-{tags.valueEscaped}" data-tag="{tags.value}" style="<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color --><!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->">{tags.valueEscaped}</span>
|
<span class="tag tag-item tag-class-{tags.class}" data-tag="{tags.value}">{tags.valueEscaped}</span>
|
||||||
</a>
|
</a>
|
||||||
{{{end}}}
|
{{{end}}}
|
@ -1,6 +1,14 @@
|
|||||||
|
{{{ if !error }}}
|
||||||
<div class="alert alert-success">
|
<div class="alert alert-success">
|
||||||
<strong>[[global:alert.success]]</strong>
|
<strong>[[global:alert.success]]</strong>
|
||||||
<p>[[email:unsub.success, {payload.template}]]</p>
|
<p>[[email:unsub.success, {payload.template}]]</p>
|
||||||
|
{{{ else }}}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<strong>[[email:unsub.failure.title]]</strong>
|
||||||
|
<p>[[email:unsub.failure.message, {error}, {config.relative_path}/me/settings]]</p>
|
||||||
|
{{{ end }}}
|
||||||
|
<hr />
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="{config.relative_path}/">[[notifications:back_to_home, {config.siteTitle}]]</a>
|
<a href="{config.relative_path}/">[[notifications:back_to_home, {config.siteTitle}]]</a>
|
||||||
</p>
|
</p>
|
||||||
|
Loading…
Reference in New Issue