Polish five pane transfer defaults
This commit is contained in:
parent
4f0493b5c2
commit
c7f6750d6c
2 changed files with 53 additions and 12 deletions
|
|
@ -859,6 +859,8 @@ func transferModeBySlug(slug string) transferMode {
|
||||||
|
|
||||||
func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMode, accounts []Account, archives []string) {
|
func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMode, accounts []Account, archives []string) {
|
||||||
user := CurrentUser(r)
|
user := CurrentUser(r)
|
||||||
|
leftSelected := defaultTransferValue(mode.LeftKind, accounts, archives)
|
||||||
|
rightSelected := defaultTransferValue(mode.RightKind, accounts, archives)
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
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">
|
||||||
|
|
@ -889,16 +891,17 @@ func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMod
|
||||||
<main class="transfer-workbench">
|
<main class="transfer-workbench">
|
||||||
<aside class="pane pane-tree" id="left-folders">%s</aside>
|
<aside class="pane pane-tree" id="left-folders">%s</aside>
|
||||||
<section class="pane pane-list" id="left-list">%s</section>
|
<section class="pane pane-list" id="left-list">%s</section>
|
||||||
<section class="pane pane-read" id="transfer-preview"><div class="pane-head mode-head"><span class="mode-label">Vorschau</span></div><div class="read-body"><div class="ef-empty">Nachricht links oder rechts waehlen.</div></div></section>
|
<section class="pane pane-read" id="transfer-preview">%s</section>
|
||||||
<section class="pane pane-list" id="right-list">%s</section>
|
<section class="pane pane-list" id="right-list">%s</section>
|
||||||
<aside class="pane pane-tree" id="right-folders">%s</aside>
|
<aside class="pane pane-tree" id="right-folders">%s</aside>
|
||||||
</main>
|
</main>
|
||||||
<footer class="statusbar"><span id="mig-status" hx-get="/migrate/status" hx-trigger="load,every 3s" hx-swap="innerHTML">bereit</span></footer></body></html>`,
|
<footer class="statusbar"><span id="mig-status" hx-get="/migrate/status" hx-trigger="load,every 3s" hx-swap="innerHTML">bereit</span></footer></body></html>`,
|
||||||
html.EscapeString(mode.Title), renderRibbonEmailBoxMenu(""), renderRibbonTransferMenu(mode.Slug), renderRibbonActions(false, user), transferMenuItems(mode.Slug),
|
html.EscapeString(mode.Title), renderRibbonEmailBoxMenu(""), renderRibbonTransferMenu(mode.Slug), renderRibbonActions(false, user), transferMenuItems(mode.Slug),
|
||||||
renderTransferFolderPane("left", mode.LeftKind, accounts, archives, ""),
|
renderTransferFolderPane("left", mode.LeftKind, accounts, archives, leftSelected),
|
||||||
renderInitialTransferList("left", mode.LeftKind, accounts, archives, ""),
|
renderInitialTransferList("left", mode.LeftKind, accounts, archives, leftSelected),
|
||||||
renderInitialTransferList("right", mode.RightKind, accounts, archives, ""),
|
renderInitialTransferPreview(mode.LeftKind, leftSelected, mode.RightKind, rightSelected),
|
||||||
renderTransferFolderPane("right", mode.RightKind, accounts, archives, ""))
|
renderInitialTransferList("right", mode.RightKind, accounts, archives, rightSelected),
|
||||||
|
renderTransferFolderPane("right", mode.RightKind, accounts, archives, rightSelected))
|
||||||
}
|
}
|
||||||
|
|
||||||
func transferSideHandler(w http.ResponseWriter, r *http.Request) {
|
func transferSideHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
@ -918,7 +921,7 @@ func transferSideHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
fmt.Fprint(w, renderTransferFolderPane(side, kind, accounts, archives, value))
|
fmt.Fprint(w, renderTransferFolderPane(side, kind, accounts, archives, value))
|
||||||
fmt.Fprintf(w, `<div id="%s-list" hx-swap-oob="innerHTML">%s</div>`, side, renderInitialTransferList(side, kind, accounts, archives, value))
|
fmt.Fprintf(w, `<div id="%s-list" hx-swap-oob="innerHTML">%s</div>`, side, renderInitialTransferList(side, kind, accounts, archives, value))
|
||||||
fmt.Fprint(w, `<div id="transfer-preview" hx-swap-oob="innerHTML"><div class="pane-head mode-head"><span class="mode-label">Vorschau</span></div><div class="read-body"><div class="ef-empty">Nachricht links oder rechts waehlen.</div></div></div>`)
|
fmt.Fprintf(w, `<div id="transfer-preview" hx-swap-oob="innerHTML">%s</div>`, renderInitialTransferPreview(kind, value, "", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
func transferMessagesHandler(w http.ResponseWriter, r *http.Request) {
|
func transferMessagesHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
@ -951,6 +954,14 @@ func transferSide(value string) string {
|
||||||
return "left"
|
return "left"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func defaultTransferValue(kind string, accounts []Account, archives []string) string {
|
||||||
|
options := transferEntityOptions(kind, accounts, archives)
|
||||||
|
if len(options) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return options[0].Value
|
||||||
|
}
|
||||||
|
|
||||||
func renderTransferFolderPane(side, kind string, accounts []Account, archives []string, selected string) string {
|
func renderTransferFolderPane(side, kind string, accounts []Account, archives []string, selected string) string {
|
||||||
options := transferEntityOptions(kind, accounts, archives)
|
options := transferEntityOptions(kind, accounts, archives)
|
||||||
if selected == "" && len(options) > 0 {
|
if selected == "" && len(options) > 0 {
|
||||||
|
|
@ -1093,11 +1104,33 @@ func renderInitialTransferList(side, kind string, accounts []Account, archives [
|
||||||
}
|
}
|
||||||
folder, err := firstTransferFolder(kind, selected)
|
folder, err := firstTransferFolder(kind, selected)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Sprintf(`<div class="pane-head">Nachrichten</div><div class="ef-empty">%s</div>`, html.EscapeString(err.Error()))
|
return fmt.Sprintf(`<div class="pane-head">Nachrichten</div><div class="ef-empty">%s</div>`, html.EscapeString(transferEmptyReason(kind, err)))
|
||||||
}
|
}
|
||||||
return renderTransferMessageList(side, kind, selected, folder)
|
return renderTransferMessageList(side, kind, selected, folder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func renderInitialTransferPreview(leftKind, leftValue, rightKind, rightValue string) string {
|
||||||
|
if leftValue != "" {
|
||||||
|
if folder, err := firstTransferFolder(leftKind, leftValue); err == nil {
|
||||||
|
return renderTransferPreview(leftKind, leftValue, folder, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if rightValue != "" {
|
||||||
|
if folder, err := firstTransferFolder(rightKind, rightValue); err == nil {
|
||||||
|
return renderTransferPreview(rightKind, rightValue, folder, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return `<div class="pane-head mode-head"><span class="mode-label">Vorschau</span></div><div class="read-body"><div class="ef-empty">Nachricht links oder rechts waehlen.</div></div>`
|
||||||
|
}
|
||||||
|
|
||||||
|
func transferEmptyReason(kind string, err error) string {
|
||||||
|
msg := err.Error()
|
||||||
|
if kind == "archive" && strings.Contains(msg, "Keine Ordner") {
|
||||||
|
return "Diese Archiv-MBox ist noch leer."
|
||||||
|
}
|
||||||
|
return msg
|
||||||
|
}
|
||||||
|
|
||||||
func firstTransferFolder(kind, value string) (string, error) {
|
func firstTransferFolder(kind, value string) (string, error) {
|
||||||
switch kind {
|
switch kind {
|
||||||
case "archive":
|
case "archive":
|
||||||
|
|
@ -1151,8 +1184,12 @@ func renderTransferMessageList(side, kind, value, folder string) string {
|
||||||
if from == "" {
|
if from == "" {
|
||||||
from = "(ohne Absender)"
|
from = "(ohne Absender)"
|
||||||
}
|
}
|
||||||
fmt.Fprintf(&b, `<a class="msg-row" href="#" hx-get="/transfer/message?side=%s&kind=%s&value=%s&folder=%s&index=%d" hx-target="#transfer-preview" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
active := ""
|
||||||
side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), entry.Index, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date))
|
if entry.Index == 0 {
|
||||||
|
active = " active"
|
||||||
|
}
|
||||||
|
fmt.Fprintf(&b, `<a class="msg-row%s" href="#" hx-get="/transfer/message?side=%s&kind=%s&value=%s&folder=%s&index=%d" hx-target="#transfer-preview" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
||||||
|
active, side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), entry.Index, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date))
|
||||||
}
|
}
|
||||||
if len(entries) == 0 {
|
if len(entries) == 0 {
|
||||||
b.WriteString(`<div class="ef-empty">Keine Nachrichten.</div>`)
|
b.WriteString(`<div class="ef-empty">Keine Nachrichten.</div>`)
|
||||||
|
|
@ -1199,8 +1236,12 @@ func renderTransferRawMessages(b *strings.Builder, side, kind, value, folder str
|
||||||
}
|
}
|
||||||
date = decodeHeader(msg.Header.Get("Date"))
|
date = decodeHeader(msg.Header.Get("Date"))
|
||||||
}
|
}
|
||||||
fmt.Fprintf(b, `<a class="msg-row" href="#" hx-get="/transfer/message?side=%s&kind=%s&value=%s&folder=%s&index=%d" hx-target="#transfer-preview" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
active := ""
|
||||||
side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), i, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(date))
|
if i == 0 {
|
||||||
|
active = " active"
|
||||||
|
}
|
||||||
|
fmt.Fprintf(b, `<a class="msg-row%s" href="#" hx-get="/transfer/message?side=%s&kind=%s&value=%s&folder=%s&index=%d" hx-target="#transfer-preview" hx-swap="innerHTML"><span class="msg-from">%s</span><span class="msg-subject">%s</span><span class="msg-date">%s</span></a>`,
|
||||||
|
active, side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), i, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(date))
|
||||||
}
|
}
|
||||||
if len(messages) == 0 {
|
if len(messages) == 0 {
|
||||||
b.WriteString(`<div class="ef-empty">Keine Nachrichten.</div>`)
|
b.WriteString(`<div class="ef-empty">Keine Nachrichten.</div>`)
|
||||||
|
|
|
||||||
2
frontend-js/dist/style.css
vendored
2
frontend-js/dist/style.css
vendored
|
|
@ -492,7 +492,7 @@ a.tree-node { display: block; color: inherit; text-decoration: none; }
|
||||||
.transfer-workbench {
|
.transfer-workbench {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 250px minmax(260px, 1fr) minmax(360px, 1.2fr) minmax(260px, 1fr) 250px;
|
grid-template-columns: 310px minmax(300px, 1fr) minmax(420px, 1.15fr) minmax(300px, 1fr) 310px;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
}
|
}
|
||||||
.transfer-workbench .pane:last-child {
|
.transfer-workbench .pane:last-child {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue