diff --git a/backend/00-router.go b/backend/00-router.go index 9dadc5d..eb094ec 100644 --- a/backend/00-router.go +++ b/backend/00-router.go @@ -859,6 +859,8 @@ func transferModeBySlug(slug string) transferMode { func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMode, accounts []Account, archives []string) { 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") fmt.Fprintf(w, ` @@ -889,16 +891,17 @@ func renderTransferPage(w http.ResponseWriter, r *http.Request, mode transferMod
%s
-
Vorschau
Nachricht links oder rechts waehlen.
+
%s
%s
`, html.EscapeString(mode.Title), renderRibbonEmailBoxMenu(""), renderRibbonTransferMenu(mode.Slug), renderRibbonActions(false, user), transferMenuItems(mode.Slug), - renderTransferFolderPane("left", mode.LeftKind, accounts, archives, ""), - renderInitialTransferList("left", mode.LeftKind, accounts, archives, ""), - renderInitialTransferList("right", mode.RightKind, accounts, archives, ""), - renderTransferFolderPane("right", mode.RightKind, accounts, archives, "")) + renderTransferFolderPane("left", mode.LeftKind, accounts, archives, leftSelected), + renderInitialTransferList("left", mode.LeftKind, accounts, archives, leftSelected), + renderInitialTransferPreview(mode.LeftKind, leftSelected, mode.RightKind, rightSelected), + renderInitialTransferList("right", mode.RightKind, accounts, archives, rightSelected), + renderTransferFolderPane("right", mode.RightKind, accounts, archives, rightSelected)) } 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") fmt.Fprint(w, renderTransferFolderPane(side, kind, accounts, archives, value)) fmt.Fprintf(w, `
%s
`, side, renderInitialTransferList(side, kind, accounts, archives, value)) - fmt.Fprint(w, `
Vorschau
Nachricht links oder rechts waehlen.
`) + fmt.Fprintf(w, `
%s
`, renderInitialTransferPreview(kind, value, "", "")) } func transferMessagesHandler(w http.ResponseWriter, r *http.Request) { @@ -951,6 +954,14 @@ func transferSide(value string) string { 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 { options := transferEntityOptions(kind, accounts, archives) if selected == "" && len(options) > 0 { @@ -1093,11 +1104,33 @@ func renderInitialTransferList(side, kind string, accounts []Account, archives [ } folder, err := firstTransferFolder(kind, selected) if err != nil { - return fmt.Sprintf(`
Nachrichten
%s
`, html.EscapeString(err.Error())) + return fmt.Sprintf(`
Nachrichten
%s
`, html.EscapeString(transferEmptyReason(kind, err))) } 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 `
Vorschau
Nachricht links oder rechts waehlen.
` +} + +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) { switch kind { case "archive": @@ -1151,8 +1184,12 @@ func renderTransferMessageList(side, kind, value, folder string) string { if from == "" { from = "(ohne Absender)" } - fmt.Fprintf(&b, `%s%s%s`, - side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), entry.Index, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(entry.Date)) + active := "" + if entry.Index == 0 { + active = " active" + } + fmt.Fprintf(&b, `%s%s%s`, + 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 { b.WriteString(`
Keine Nachrichten.
`) @@ -1199,8 +1236,12 @@ func renderTransferRawMessages(b *strings.Builder, side, kind, value, folder str } date = decodeHeader(msg.Header.Get("Date")) } - fmt.Fprintf(b, `%s%s%s`, - side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), i, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(date)) + active := "" + if i == 0 { + active = " active" + } + fmt.Fprintf(b, `%s%s%s`, + active, side, html.EscapeString(kind), urlEsc(value), urlEsc(folder), i, html.EscapeString(from), html.EscapeString(subject), html.EscapeString(date)) } if len(messages) == 0 { b.WriteString(`
Keine Nachrichten.
`) diff --git a/frontend-js/dist/style.css b/frontend-js/dist/style.css index 681f2d1..adb097a 100644 --- a/frontend-js/dist/style.css +++ b/frontend-js/dist/style.css @@ -492,7 +492,7 @@ a.tree-node { display: block; color: inherit; text-decoration: none; } .transfer-workbench { flex: 1 1 auto; 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; } .transfer-workbench .pane:last-child {