@smartbit4all/ng-client 7.2.1 → 7.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HTML-WIDGET.md +53 -1
- package/fesm2022/smartbit4all-ng-client.mjs +3 -0
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/package.json +1 -1
- package/smartbit4all-ng-client-7.2.2.tgz +0 -0
- package/types/smartbit4all-ng-client.d.ts +1 -0
- package/smartbit4all-ng-client-7.2.1.tgz +0 -0
package/HTML-WIDGET.md
CHANGED
|
@@ -140,6 +140,54 @@ távozását:
|
|
|
140
140
|
- A `backwards` kitöltés a belépésnél azért jó, mert a vége után a `:hover` és a többi szabály
|
|
141
141
|
ismét mozgathatja az elemet (a `both` vagy a `forwards` animációs értéke felülírná őket).
|
|
142
142
|
|
|
143
|
+
## A szerver-fázis
|
|
144
|
+
|
|
145
|
+
A szerver-helyőrző a platform template-dialektusa: `${alias:/útvonal#mező?stratégia}`, mellette a
|
|
146
|
+
`data-sb4-context` (iteráció) és a `data-sb4-if` (feltétel) attribútum. A builder a **nyitásáról**
|
|
147
|
+
ismeri fel — `${alias:/` —, a sima `${name}` neki és a motornak is közömbös szöveg. Literálként
|
|
148
|
+
`${`-nak írd.
|
|
149
|
+
|
|
150
|
+
Három út oldja fel, és **egyik sem fut magától**:
|
|
151
|
+
|
|
152
|
+
| Út | Mikor | Hiba esetén |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| `resolveTemplate(ctx, …)`, és az eredmény megy a `html(...)`-be | a build előtt | elnyel: logol, és a kulcsot vagy üres stringet ad vissza |
|
|
155
|
+
| `h.template(ctx, KEY)` | a widget felépítésekor, kulcsból (lásd *Stíluslap a template-kulcs mellől*) | dob |
|
|
156
|
+
| `h.resolveLater()` + `resolveHtml(ctx, layout)` | a **felépített layouton** | dob |
|
|
157
|
+
|
|
158
|
+
```java
|
|
159
|
+
SmartComponentLayoutDefinition layout = layoutBuilder(view)
|
|
160
|
+
.vForm(f -> f.html(h -> h.html(CARD_HTML).resolveLater()))
|
|
161
|
+
.build();
|
|
162
|
+
resolveHtml(objectApi.contextObject().set("contact", contact), layout); // PageApiImpl
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- A `resolveHtml` bejárja a layout `FORM` / `CONTAINER` fáját és a widgetek gyerek-widgetjeit, és
|
|
166
|
+
minden HTML widget `html`-jét feloldja **ugyanazzal a ctx-szel**. A `css`, a `root` és a `fields`
|
|
167
|
+
marad. A gridekhez nem nyúl — egy sor-layout maga is layout, arra külön hívható. Page-en kívül:
|
|
168
|
+
`ObjectLayouts.resolveHtml(layout, resolver, objectApi, ctx)`; listára is van változata.
|
|
169
|
+
- **Amiben nincs `${alias:/`, ahhoz hozzá sem ér** — az a html nem megy át a motoron, tehát nem is
|
|
170
|
+
normalizálódik. Ezért bármilyen layoutra ráhívható, és a második futás egy már feloldott
|
|
171
|
+
widgeten nem csinál semmit.
|
|
172
|
+
- **Helyben módosít.** Ha az adat változik, **építsd újra a layoutot, ne oldd fel újra**: a
|
|
173
|
+
view-ban tárolt, egyszer már feloldott layoutban nincs mit feloldani, az új ctx-szel hívott
|
|
174
|
+
második futás némán a régi értékeket hagyja. Aki a feloldatlan eredetit meg akarja tartani,
|
|
175
|
+
másolaton hívja.
|
|
176
|
+
- **Hangosan bukik** (`IllegalStateException`): ha van `${alias:/`, de nincs template-modul a
|
|
177
|
+
hostban; és ha a feloldás **után** is maradt — a motor az ismeretlen aliasú helyőrzőt ugyanis
|
|
178
|
+
szó nélkül benne hagyja. A motor másik két csendes esete megmarad: a hiányzó / `null` mező
|
|
179
|
+
helyére szóköz kerül, a mezőszintű feloldási hiba helyére a „Feldolgozási hiba" szöveg.
|
|
180
|
+
|
|
181
|
+
**A `build()` őre.** Az a `${alias:/`, amit a három út egyike sem oldott fel, régen szó nélkül
|
|
182
|
+
kiment a kliensre, és nyersen megjelent. Most a `HtmlWidgetBuilder.build()` `IllegalStateException`-t
|
|
183
|
+
dob rá, kivéve ha a widget `resolveLater()`-t mondott. Ez a `vf.html(String)`, az
|
|
184
|
+
`ObjectLayoutBuilder.html(...)` és a `GridBuilder.htmlColumn(...)` útjára is igaz.
|
|
185
|
+
|
|
186
|
+
**Üres ctx-szel semmi nem oldódik fel**: a `${…}` literál marad (és a `build()` elbukik rajta), a
|
|
187
|
+
`data-sb4-context` elemek eltűnnek. A grid-szintű sor-layoutnak és az oszlop-sablonnak nincs
|
|
188
|
+
szerver-oldali, soronkénti kontextusa — ott a sorból jövő érték `{{…}}`, a szerveren számolt érték
|
|
189
|
+
pedig a sor egy mezője legyen.
|
|
190
|
+
|
|
143
191
|
## A kliens-helyőrzők nyelvtana
|
|
144
192
|
|
|
145
193
|
Logika-mentes Mustache-részhalmaz. Ugyanezt a nyelvtant olvassa a Java-oldali
|
|
@@ -253,6 +301,7 @@ escape-pel), a pipe-ok balról jobbra láncolhatók, a kimenetük is escape-en m
|
|
|
253
301
|
| Hol | Mi történik |
|
|
254
302
|
|---|---|
|
|
255
303
|
| Java-builder (`build()`) | `IllegalArgumentException`: párosítatlan / keresztezett szekció, raw tag, érvénytelen path vagy `root`, a `root` fölé mutató `../`, ismeretlen pipe, rossz pipe-szintaxis, üres `data-sb4-toolbar` / `data-sb4-action` |
|
|
304
|
+
| Java-builder (`build()`), `resolveHtml` | `IllegalStateException`: feloldatlan szerver-helyőrző (`${alias:/`), lásd *A szerver-fázis* |
|
|
256
305
|
| kliens | nem dob: `console.error`, és a html **feloldatlanul** kerül ki — látható hiba, nem üres kártya |
|
|
257
306
|
|
|
258
307
|
Egyetlen szándékos különbség: az ismeretlen pipe-név a kliensen csak warn (az érték formázatlanul
|
|
@@ -264,7 +313,10 @@ Ha a html átmegy a szerver template-motorján (Jsoup), akkor:
|
|
|
264
313
|
|
|
265
314
|
- **egy gyökérelem kötelező** — a gyökér-szintű szöveg és szekció-tag eldobódik;
|
|
266
315
|
- táblázatban **explicit `<tbody>`** kell, különben a parser a `{{#rows}}` után szúr egyet;
|
|
267
|
-
- a whitespace-re (`:empty`, `white-space: pre
|
|
316
|
+
- a whitespace-re (`:empty`, `white-space: pre`, ` `) ne építs, a motor átírja;
|
|
317
|
+
- a szerverről behelyettesített **érték ne tartalmazzon `{{`-t**: a motor HTML-escape-eli, de a
|
|
318
|
+
`{{` átmegy rajta, és a kliens helyőrzőnek olvasná (a néző saját adatán oldaná fel);
|
|
319
|
+
- `?stratégia` után is állhat `{{…}}` — a stratégia a `{{`-on nem nyúl át.
|
|
268
320
|
|
|
269
321
|
## Toolbar-slot
|
|
270
322
|
|
|
@@ -11621,6 +11621,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
11621
11621
|
class SmartformComponent {
|
|
11622
11622
|
constructor() {
|
|
11623
11623
|
this.service = inject(SmartFormService);
|
|
11624
|
+
this.changeDetector = inject(ChangeDetectorRef);
|
|
11624
11625
|
this._destroy$ = new Subject();
|
|
11625
11626
|
this.originalWidgets = [];
|
|
11626
11627
|
this.sophisticatedValueChange = new Subject();
|
|
@@ -11746,6 +11747,8 @@ class SmartformComponent {
|
|
|
11746
11747
|
this.form = this.service.toFormGroup();
|
|
11747
11748
|
this.syncClientBindings();
|
|
11748
11749
|
this.service.widgetsChanged();
|
|
11750
|
+
// A form whose widgets were all hidden has no child to mark it for check.
|
|
11751
|
+
this.changeDetector.markForCheck();
|
|
11749
11752
|
}
|
|
11750
11753
|
ngOnDestroy() {
|
|
11751
11754
|
if (this.followsClient) {
|