Add secondary mail action bar
This commit is contained in:
parent
cc3f796ca3
commit
9a4aade072
3 changed files with 120 additions and 16 deletions
|
|
@ -73,8 +73,8 @@ func renderStartPage(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Mail-Graveyard</title>
|
<title>Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -121,9 +121,9 @@ func renderShell(w http.ResponseWriter, r *http.Request, active, readingPane str
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Mail-Graveyard</title>
|
<title>Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -697,9 +697,9 @@ func renderAccountsPage(w http.ResponseWriter, r *http.Request, accounts []Accou
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Konten-Verwaltung - Mail-Graveyard</title>
|
<title>Konten-Verwaltung - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -743,9 +743,9 @@ func renderArchivesPage(w http.ResponseWriter, r *http.Request, archives []strin
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Archiv-mbox Verwaltung - Mail-Graveyard</title>
|
<title>Archiv-mbox Verwaltung - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -791,9 +791,9 @@ func renderUsersPage(w http.ResponseWriter, r *http.Request, users []AppUser, ed
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Benutzerverwaltung - Mail-Graveyard</title>
|
<title>Benutzerverwaltung - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -865,9 +865,9 @@ func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMod
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>%s - Mail-Graveyard</title>
|
<title>%s - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -1317,9 +1317,9 @@ func renderSourceEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Quell-Postfach - Mail-Graveyard</title>
|
<title>Quell-Postfach - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
@ -1361,9 +1361,9 @@ func renderTargetEmailBoxPage(w http.ResponseWriter, r *http.Request, accounts [
|
||||||
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
fmt.Fprintf(w, `<!doctype html><html lang="de"><head><meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
<title>Ziel-Postfach - Mail-Graveyard</title>
|
<title>Ziel-Postfach - Mail-Graveyard</title>
|
||||||
<link rel="stylesheet" href="/static/style.css?v=20260713-7">
|
<link rel="stylesheet" href="/static/style.css?v=20260713-8">
|
||||||
<script src="/static/htmx.min.js"></script>
|
<script src="/static/htmx.min.js"></script>
|
||||||
<script src="/static/app.js?v=20260713-7" defer></script></head>
|
<script src="/static/app.js?v=20260713-8" defer></script></head>
|
||||||
<body class="ol2013">
|
<body class="ol2013">
|
||||||
<header class="ribbon">
|
<header class="ribbon">
|
||||||
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
<button class="app-menu-button" type="button" aria-label="Mail-Graveyard-Menue" aria-expanded="false" data-backstage-toggle><span class="mail-logo" aria-hidden="true"></span></button>
|
||||||
|
|
|
||||||
33
frontend-js/dist/app.js
vendored
33
frontend-js/dist/app.js
vendored
|
|
@ -1,3 +1,36 @@
|
||||||
|
(function () {
|
||||||
|
function ensureActionBar() {
|
||||||
|
const ribbon = document.querySelector(".ribbon");
|
||||||
|
if (!ribbon || document.querySelector(".mail-actionbar")) return;
|
||||||
|
|
||||||
|
const bar = document.createElement("div");
|
||||||
|
bar.className = "mail-actionbar";
|
||||||
|
bar.innerHTML = `
|
||||||
|
<label class="action-search" aria-label="Suchen">
|
||||||
|
<span aria-hidden="true">⌕</span>
|
||||||
|
<input type="search" placeholder="Suchen">
|
||||||
|
</label>
|
||||||
|
<button class="action-btn primary" type="button"><span aria-hidden="true">✉</span> Neu</button>
|
||||||
|
<button class="action-btn" type="button" data-action-refresh><span aria-hidden="true">↻</span> Aktualisieren</button>
|
||||||
|
<span class="action-separator"></span>
|
||||||
|
<button class="action-btn" type="button"><span aria-hidden="true">↩</span> Antworten</button>
|
||||||
|
<button class="action-btn" type="button"><span aria-hidden="true">↪</span> Weiterleiten</button>
|
||||||
|
<span class="action-separator"></span>
|
||||||
|
<button class="action-btn muted" type="button"><span aria-hidden="true">⚑</span> Markieren</button>
|
||||||
|
<button class="action-btn muted" type="button"><span aria-hidden="true">▣</span> Archivieren</button>
|
||||||
|
<button class="action-btn muted" type="button"><span aria-hidden="true">⏲</span> Zurueckstellen</button>
|
||||||
|
<button class="action-btn muted" type="button"><span aria-hidden="true">⚡</span> Schnelle Aktionen</button>
|
||||||
|
<button class="action-btn muted" type="button"><span aria-hidden="true">⌫</span> Loeschen</button>
|
||||||
|
`;
|
||||||
|
ribbon.insertAdjacentElement("afterend", bar);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", ensureActionBar);
|
||||||
|
document.addEventListener("click", (event) => {
|
||||||
|
if (event.target.closest("[data-action-refresh]")) window.location.reload();
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
const handleWidth = 6;
|
const handleWidth = 6;
|
||||||
|
|
||||||
|
|
|
||||||
71
frontend-js/dist/style.css
vendored
71
frontend-js/dist/style.css
vendored
|
|
@ -167,6 +167,77 @@ body.ol2013 {
|
||||||
border-left-color: var(--ol-blue);
|
border-left-color: var(--ol-blue);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
.mail-actionbar {
|
||||||
|
height: 38px;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
background: #2f343a;
|
||||||
|
color: #f3f5f7;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 0 10px;
|
||||||
|
border-bottom: 1px solid #20242a;
|
||||||
|
box-shadow: inset 0 -1px 0 rgba(255, 255, 255, .04);
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.action-search {
|
||||||
|
width: min(340px, 26vw);
|
||||||
|
min-width: 210px;
|
||||||
|
height: 30px;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 0 10px;
|
||||||
|
color: #b8c0ca;
|
||||||
|
background: #3b4148;
|
||||||
|
border: 1px solid #5b626b;
|
||||||
|
}
|
||||||
|
.action-search input {
|
||||||
|
min-width: 0;
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
color: #fff;
|
||||||
|
background: transparent;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
.action-search input::placeholder { color: #c2c8d0; }
|
||||||
|
.action-btn {
|
||||||
|
height: 30px;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 0 10px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
color: #f6f8fb;
|
||||||
|
background: transparent;
|
||||||
|
font: inherit;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.action-btn:hover {
|
||||||
|
background: #454b53;
|
||||||
|
border-color: #5b626b;
|
||||||
|
}
|
||||||
|
.action-btn.primary {
|
||||||
|
background: #f28c22;
|
||||||
|
border-color: #f28c22;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.action-btn.primary:hover {
|
||||||
|
background: #ff9d34;
|
||||||
|
border-color: #ff9d34;
|
||||||
|
}
|
||||||
|
.action-btn.muted { color: #aeb6c0; }
|
||||||
|
.action-separator {
|
||||||
|
width: 1px;
|
||||||
|
height: 26px;
|
||||||
|
background: #555c65;
|
||||||
|
margin: 0 4px;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
.mail-logo {
|
.mail-logo {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 17px;
|
width: 17px;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue