Add row context menus, fix glyphicon copy corruption, combine CC email editing

- Fuchs/gulpfile.js: pass encoding:false to gulp.src() in the copy task —
  vinyl-fs otherwise UTF-8-decodes binary files by default, which was
  silently corrupting the glyphicons webfont (and any other binary asset
  copyconfig.json matches) on every `gulp copy`/`gulp all` run.
- Invoice/reminder editor: replace the row's flat action icons (edit/
  delete/insert/set-price) with a single context button opening a
  dropdown menu, reusing the existing $ocms.menu toolbar mechanism.
- Fix "-1" leaking into the Pos. column for Text/Title rows: $inv.rrw's
  `dta.position || dta.SortOrder` fallback treated the numbering's
  intentional empty string as unset and fell back to SortOrder (-1 for
  such rows); now only a genuinely uncomputed position falls back.
- Zusatzempfänger (CC) is now edited together with the main invoice
  email in one combined dialog ($inv.emailFrm/$inv.eEmail), wired into
  all three entry points (create, continue, storno) instead of a
  separate hover-revealed row with its own edit target.
- Add tooltips to every row/header edit control, including several that
  had none before (header field pencils, the request/section title
  edit button), phrased as object+verb ($rct.frmTT).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 19:38:03 +02:00
co-authored by Claude Sonnet 5
parent 071982caec
commit c182d4fd69
12 changed files with 447 additions and 131 deletions
+46 -18
View File
@@ -128,7 +128,7 @@ table.if td.num {
top: 0;
width: auto;
max-height: 1.5rem;
overflow: hidden;
overflow: visible; /* the .rowctx dropdown popout must escape this pill-shaped bar */
padding: 0.1rem;
}
.edit_frm .invoice_layout .axf > .ibtn {
@@ -138,6 +138,47 @@ table.if td.num {
display: inline-block;
position: relative;
}
.edit_frm .invoice_layout .axf {
/* Single row "Kontext-Button" opening a dropdown of edit actions (see $inv.rowCtxMenu).
Resets the generic full-bar <nav> styling (meant for #topbar/#sidebar) down to a
small inline trigger; the dropdown popout itself keeps the shared nav/dropdown-menu
look (background, shadow, open/close via $nuf) so it matches every other menu in the app. */
}
.edit_frm .invoice_layout .axf nav.rowctx {
position: relative;
display: inline-block;
width: 1.5rem;
height: 100%;
min-height: 0;
max-height: none;
background: transparent;
z-index: auto;
vertical-align: top;
}
.edit_frm .invoice_layout .axf nav.rowctx > ul {
height: 100%;
}
.edit_frm .invoice_layout .axf nav.rowctx > ul > li {
height: 100%;
float: none;
}
.edit_frm .invoice_layout .axf nav.rowctx > ul > li > a.ctxbtn {
padding: 0;
width: 1.5rem;
height: 100%;
text-align: center;
line-height: 1.3rem;
}
.edit_frm .invoice_layout .axf nav.rowctx > ul > li > a.ctxbtn > .caret {
display: none; /* single kebab trigger, no caret needed */
}
.edit_frm .invoice_layout .axf nav.rowctx > ul > li.dropdown > ul.dropdown-menu {
top: 100%;
left: auto;
right: 0;
font-size: 0.85rem;
white-space: nowrap;
}
.edit_frm .invoice_layout .sndfrm {
position: absolute;
font-size: 0.7rem;
@@ -165,11 +206,14 @@ table.if td.num {
min-width: 5rem;
height: 1rem;
display: block;
position: absolute;
}
.edit_frm .invoice_layout .emailfrm:hover div.axf {
display: block;
}
.edit_frm .invoice_layout {
/* Read-only display: edited together with the email above, via that row's pencil
(see $inv.emailFrm / $inv.eEmail) — no pencil/hover-reveal of its own. */
}
.edit_frm .invoice_layout .emailccfrm {
position: absolute;
font-size: 0.7rem;
@@ -177,26 +221,10 @@ table.if td.num {
left: 0.5rem;
width: auto;
height: auto;
cursor: pointer;
}
.edit_frm .invoice_layout .emailccfrm .content {
color: #000;
}
.edit_frm .invoice_layout .emailccfrm {
/* Unlike the other optional fields (plain "-" placeholder), this one names the action —
there is no default "Zusatzempfänger" from MFR, so an empty state must read as an
offer to add one, not as missing data. */
}
.edit_frm .invoice_layout .emailccfrm .content:empty::before {
content: "Zusatzempfänger hinzufügen";
min-width: 5rem;
height: 1rem;
display: block;
position: absolute;
}
.edit_frm .invoice_layout .emailccfrm:hover div.axf {
display: block;
}
.edit_frm .invoice_layout .admfrm {
position: absolute;
right: 3rem;