diff --git a/backend/08-viewer.go b/backend/08-viewer.go
index d064e69..3c7d4cc 100644
--- a/backend/08-viewer.go
+++ b/backend/08-viewer.go
@@ -210,8 +210,9 @@ func renderReadPane(w io.Writer, title, account, folder, targetAccount string, i
if subject == "" {
subject = "(ohne Betreff)"
}
- fmt.Fprintf(w, `
%s
`,
- html.EscapeString(title), urlEsc(sourceDisplayLabel(account)), urlEsc(folder), index, urlEsc(targetAccount), html.EscapeString(subject), html.EscapeString(from), html.EscapeString(date), html.EscapeString(body))
+ fmt.Fprint(w, renderSourcePaneHead(account, folder, targetAccount, index))
+ fmt.Fprintf(w, ``,
+ html.EscapeString(subject), html.EscapeString(from), html.EscapeString(date), html.EscapeString(body))
}
func renderTargetPane(account, folder, targetAccount string, index int, raw []byte, note string) string {
@@ -258,7 +259,7 @@ func renderTargetMatch(b *strings.Builder, match forwardedMatch) {
}
func renderInitialTargetPane() string {
- return `Quelle
`
+ return ``
}
func renderReadContent(w io.Writer, subject, from, date, body string) {
@@ -434,7 +435,8 @@ func messageIDHeader(raw []byte) string {
func renderTargetAccountSelect(account, folder, selected string, index int) string {
options := targetAccountOptions()
var b strings.Builder
- fmt.Fprintf(&b, ``,
- urlEsc(sourceDisplayLabel(account)), urlEsc(folder), index, urlEsc(selected))
+ b.WriteString(``)
if account != "" && folder != "" && index >= 0 {
fmt.Fprintf(&b, `Mail hier ablegen fuer manuellen Umzug
`,
html.EscapeString(sourceDisplayLabel(account)), html.EscapeString(folder), index)
@@ -460,6 +461,26 @@ func renderTargetAccountSelect(account, folder, selected string, index int) stri
return b.String()
}
+func renderSourcePaneHead(account, folder, targetAccount string, index int) string {
+ var b strings.Builder
+ fmt.Fprintf(&b, ``)
+ return b.String()
+}
+
func appendManualTargetCopy(account, folder, targetAccount string, raw []byte) (string, error) {
id := messageIDHeader(raw)
if id == "" {
@@ -659,6 +680,23 @@ func targetAccountOptions() []targetAccountOption {
return out
}
+func sourceAccountOptions() []targetAccountOption {
+ accounts := viewerAccounts()
+ out := make([]targetAccountOption, 0, len(accounts))
+ for _, a := range accounts {
+ value := a.DisplayLabel
+ if value == "" {
+ value = a.Name
+ }
+ label := a.SourceLabel
+ if label == "" {
+ label = value
+ }
+ out = append(out, targetAccountOption{Value: value, Label: label})
+ }
+ return out
+}
+
func targetMboxDirs(targetUser string) map[string]bool {
out := map[string]bool{}
if targetUser == "" || DB == nil {
diff --git a/frontend-js/dist/style.css b/frontend-js/dist/style.css
index ef75f72..828dab6 100644
--- a/frontend-js/dist/style.css
+++ b/frontend-js/dist/style.css
@@ -88,6 +88,22 @@ body.resizing { cursor: col-resize; user-select: none; }
align-items: center;
gap: 10px;
}
+.mode-head {
+ display: grid;
+ grid-template-columns: auto minmax(0, 1fr);
+ align-items: center;
+ gap: 10px;
+}
+.mode-switch {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ min-width: 0;
+}
+.mode-switch .btn.active {
+ background: var(--ol-blue);
+ color: #fff;
+}
.target-select-form { margin: 0; min-width: 0; }
.target-select {
width: 100%;