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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user