updated webclient setttings
This commit is contained in:
@@ -4,36 +4,24 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Signatures - Webmail</title>
|
||||
<title>Settings - Webmail</title>
|
||||
<link href="/webmail/static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/webmail/static/vendor/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="/webmail/static/vendor/quill/quill.snow.css" rel="stylesheet">
|
||||
<style>
|
||||
body { background-color: #1a1a1a; color: #e0e0e0; }
|
||||
.card { background-color: #2d2d2d; border: 1px solid #404040; }
|
||||
.sig-preview { background-color: #fff; color: #000; border-radius: 6px; padding: .75rem; max-height: 140px; overflow: hidden; }
|
||||
#sigEditor { height: 180px; background-color: #fff; color: #000; }
|
||||
.ql-toolbar.ql-snow { background-color: #333; border-color: #404040; border-top-left-radius: .375rem; border-top-right-radius: .375rem; }
|
||||
.ql-container.ql-snow { border-color: #404040; border-bottom-left-radius: .375rem; border-bottom-right-radius: .375rem; }
|
||||
.ql-snow .ql-stroke { stroke: #c8c8c8; }
|
||||
.ql-snow .ql-fill, .ql-snow .ql-stroke.ql-fill { fill: #c8c8c8; }
|
||||
.ql-snow .ql-picker { color: #c8c8c8; }
|
||||
.ql-snow .ql-picker-options { background-color: #2d2d2d; border-color: #404040; }
|
||||
.ql-snow .ql-picker-item { color: #c8c8c8; }
|
||||
.table-dark { --bs-table-bg: #2d2d2d; --bs-table-border-color: #404040; }
|
||||
</style>
|
||||
{{template "webmail_settings_style" .}}
|
||||
</head>
|
||||
<body>
|
||||
{{template "csrf_script" .}}
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-4">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-brand mb-0 h1"><i class="bi bi-inbox-fill me-2"></i>Webmail <small class="text-muted">{{.mailbox.Email}}</small></span>
|
||||
<div class="navbar-nav flex-row gap-2 ms-auto">
|
||||
<a href="/webmail/mail/INBOX" class="btn btn-outline-light btn-sm"><i class="bi bi-envelope me-1"></i>Mail</a>
|
||||
<button type="button" onclick="openCompose('/webmail/mail/compose')" class="btn btn-outline-light btn-sm"><i class="bi bi-pencil-square me-1"></i>Compose</button>
|
||||
<a href="/webmail/rules" class="btn btn-outline-light btn-sm"><i class="bi bi-funnel me-1"></i>Rules</a>
|
||||
<a href="/webmail/certs" class="btn btn-outline-light btn-sm"><i class="bi bi-shield-lock me-1"></i>Certs</a>
|
||||
<a href="/webmail/signatures" class="btn btn-light btn-sm"><i class="bi bi-pen me-1"></i>Signatures</a>
|
||||
<a href="/webmail/account" class="btn btn-outline-light btn-sm"><i class="bi bi-gear me-1"></i>Account</a>
|
||||
<form method="post" action="/webmail/logout" class="d-inline">
|
||||
<button type="submit" class="btn btn-outline-light btn-sm"><i class="bi bi-box-arrow-right me-1"></i>Sign out</button>
|
||||
</form>
|
||||
@@ -55,31 +43,39 @@
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
<div class="container pb-5">
|
||||
<h2 class="mb-4"><i class="bi bi-pen me-2"></i>Signatures</h2>
|
||||
<div id="settingsPanelRoot">
|
||||
<div class="settings-card" id="settingsPanel">
|
||||
<div class="settings-card-header">
|
||||
<h5 class="mb-0"><i class="bi bi-sliders me-2"></i>Settings</h5>
|
||||
<button type="button" class="btn-close btn-close-white" onclick="closeSettings()" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="settings-card-body">
|
||||
{{template "webmail_settings_nav" .}}
|
||||
<div class="settings-body">
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h6 class="mb-0">Your signatures</h6>
|
||||
<button type="button" class="btn btn-primary btn-sm" id="sigAddBtn"><i class="bi bi-plus-lg me-1"></i>Add signature</button>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header"><h5 class="mb-0">Your signatures</h5></div>
|
||||
{{if .signatures}}
|
||||
{{range .signatures}}
|
||||
<div class="card mb-3 sig-card" data-sig-id="{{.ID}}" data-sig-name="{{.Name}}">
|
||||
<div class="card-body">
|
||||
{{if .signatures}}
|
||||
{{range .signatures}}
|
||||
<div class="border rounded p-2 mb-3" style="border-color: #404040 !important;">
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<div>
|
||||
<strong>{{.Name}}</strong>
|
||||
{{if .IsDefaultNew}}<span class="badge bg-primary ms-1">Default: New</span>{{end}}
|
||||
{{if .IsDefaultReply}}<span class="badge bg-info text-dark ms-1">Default: Reply/Forward</span>{{end}}
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm">
|
||||
<a href="/webmail/signatures?edit={{.ID}}" class="btn btn-outline-secondary" title="Edit"><i class="bi bi-pencil"></i></a>
|
||||
<form method="post" action="/webmail/signatures/{{.ID}}/delete" class="d-inline" onsubmit="return confirm('Delete signature "{{.Name}}"?');">
|
||||
<button type="submit" class="btn btn-outline-danger" title="Delete"><i class="bi bi-trash"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<div>
|
||||
<strong>{{.Name}}</strong>
|
||||
{{if .IsDefaultNew}}<span class="badge bg-primary ms-1">Default: New</span>{{end}}
|
||||
{{if .IsDefaultReply}}<span class="badge bg-info text-dark ms-1">Default: Reply</span>{{end}}
|
||||
</div>
|
||||
<div class="sig-preview mb-2">{{.ContentHTML | safe}}</div>
|
||||
<div class="btn-group btn-group-sm">
|
||||
<button type="button" class="btn btn-outline-secondary sig-edit-btn" title="Edit"><i class="bi bi-pencil"></i></button>
|
||||
<form method="post" action="/webmail/signatures/{{.ID}}/delete" class="d-inline" onsubmit="return confirm('Delete signature "{{.Name}}"?');">
|
||||
<button type="submit" class="btn btn-outline-danger" title="Delete"><i class="bi bi-trash"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sig-preview mb-2">{{.ContentHTML | safe}}</div>
|
||||
<div class="d-flex flex-wrap gap-1 align-items-center">
|
||||
<div class="btn-group btn-group-sm">
|
||||
<form method="post" action="/webmail/signatures/{{if .IsDefaultNew}}0{{else}}{{.ID}}{{end}}/default?which=new" class="d-inline">
|
||||
<button type="submit" class="btn {{if .IsDefaultNew}}btn-primary{{else}}btn-outline-secondary{{end}}">{{if .IsDefaultNew}}✓ Default for new{{else}}Use for new{{end}}</button>
|
||||
@@ -88,37 +84,77 @@
|
||||
<button type="submit" class="btn {{if .IsDefaultReply}}btn-info text-dark{{else}}btn-outline-secondary{{end}}">{{if .IsDefaultReply}}✓ Default for reply/forward{{else}}Use for reply/forward{{end}}</button>
|
||||
</form>
|
||||
</div>
|
||||
{{$sigID := .ID}}
|
||||
{{range $.alias_defaults}}
|
||||
{{if eq .SignatureID $sigID}}
|
||||
<span class="badge bg-secondary d-inline-flex align-items-center gap-1">
|
||||
{{if .ForReply}}Reply{{else}}New{{end}} for {{.ForEmail}}
|
||||
<form method="post" action="/webmail/signatures/alias-default/remove" class="d-inline">
|
||||
<input type="hidden" name="for_email" value="{{.ForEmail}}">
|
||||
{{if .ForReply}}<input type="hidden" name="for_reply" value="1">{{end}}
|
||||
<button type="submit" class="btn btn-link btn-sm p-0 text-white" style="text-decoration:none;" title="Remove"><i class="bi bi-x"></i></button>
|
||||
</form>
|
||||
</span>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="sig-content-data" style="display:none;">{{.ContentHTML | safe}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}
|
||||
<p class="text-muted mb-0">No signatures yet — add one to have it available in compose.</p>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="sigModal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<form method="POST" action="/webmail/signatures/save" id="sigForm">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="sigModalTitle">New signature</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="id" id="sigFormId" value="">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Name</label>
|
||||
<input type="text" class="form-control" name="name" id="sigFormName" placeholder="e.g. Work, Personal" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Content</label>
|
||||
<div id="sigEditor"></div>
|
||||
<textarea name="content_html" style="display: none;"></textarea>
|
||||
<div class="form-text">Plain text works fine too — just don't use the formatting toolbar. A blank signature is also valid (e.g. to temporarily disable one without deleting it).</div>
|
||||
</div>
|
||||
{{if .send_as_options}}
|
||||
<div class="border rounded p-2" style="border-color: #404040 !important;">
|
||||
<label class="form-label mb-1">Also set as default for a specific alias</label>
|
||||
<div class="d-flex gap-2 align-items-center flex-wrap">
|
||||
<select class="form-select form-select-sm" name="default_for_email" style="width: auto;">
|
||||
<option value="">— choose an alias —</option>
|
||||
{{range .send_as_options}}<option value="{{.}}">{{.}}</option>{{end}}
|
||||
</select>
|
||||
<div class="form-check mb-0">
|
||||
<input class="form-check-input" type="checkbox" name="default_new" value="1" id="sigDefaultNewAlias">
|
||||
<label class="form-check-label" for="sigDefaultNewAlias">New messages</label>
|
||||
</div>
|
||||
<div class="form-check mb-0">
|
||||
<input class="form-check-input" type="checkbox" name="default_reply" value="1" id="sigDefaultReplyAlias">
|
||||
<label class="form-check-label" for="sigDefaultReplyAlias">Replies/forwards</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}
|
||||
<p class="text-muted mb-0">No signatures yet — add one to have it available in compose.</p>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 mb-4">
|
||||
<div class="card">
|
||||
<div class="card-header"><h5 class="mb-0">{{if .editing}}Edit signature{{else}}New signature{{end}}</h5></div>
|
||||
<div class="card-body">
|
||||
<form method="POST" action="/webmail/signatures/save" id="sigForm">
|
||||
<input type="hidden" name="id" value="{{if .editing}}{{.editing.ID}}{{end}}">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Name</label>
|
||||
<input type="text" class="form-control" name="name" value="{{if .editing}}{{.editing.Name}}{{end}}" placeholder="e.g. Work, Personal" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Content</label>
|
||||
<div id="sigEditor"></div>
|
||||
<textarea name="content_html" style="display: none;"></textarea>
|
||||
<div id="sig_html_seed" style="display: none;">{{if .editing}}{{.editing.ContentHTML}}{{end}}</div>
|
||||
<div class="form-text">Plain text works fine too — just don't use the formatting toolbar. A blank signature is also valid (e.g. to temporarily disable one without deleting it).</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary"><i class="bi bi-check-lg me-1"></i>Save</button>
|
||||
{{if .editing}}<a href="/webmail/signatures" class="btn btn-outline-secondary">Cancel</a>{{end}}
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<button type="submit" class="btn btn-primary"><i class="bi bi-check-lg me-1"></i>Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,23 +163,7 @@
|
||||
|
||||
<script src="/webmail/static/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/webmail/static/vendor/quill/quill.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.querySelectorAll('.toast').forEach(function(el) { new bootstrap.Toast(el, {delay: 5000}).show(); });
|
||||
});
|
||||
|
||||
var sigQuill = new Quill('#sigEditor', {
|
||||
theme: 'snow',
|
||||
modules: { toolbar: [['bold', 'italic', 'underline'], [{ color: [] }], ['link', 'image'], ['clean']] },
|
||||
});
|
||||
(function() {
|
||||
const seed = document.getElementById('sig_html_seed');
|
||||
if (seed && seed.innerHTML.trim()) sigQuill.root.innerHTML = seed.innerHTML;
|
||||
})();
|
||||
document.getElementById('sigForm').addEventListener('submit', function() {
|
||||
document.querySelector('[name="content_html"]').value = sigQuill.root.innerHTML;
|
||||
});
|
||||
</script>
|
||||
{{template "webmail_settings_script" .}}
|
||||
</body>
|
||||
</html>
|
||||
{{end}}
|
||||
|
||||
Reference in New Issue
Block a user