feat: vsetky sablony cenoviek z novych SVG (zakladne, appkaci, vernostna karta)
- 22 sablon: Super cena / Super vyhodne / Zakladna v 3 farbach so SK aj bez,
Appkaci (SK / bez), Vernostna karta (so zlavou / bez); orezane na viditelny
obsah, rovnaka mierka (sirka = viewBox x 130 / 80,1)
- nove premenne {zlava_app}, {jednotkova_cena_app}, {cena_bez_karty},
{zlava_bez_karty}, {jednotkova_cena_s_kartou}, {jednotkova_cena_bez_karty};
zvisle natiahnutie textu (scaleY), viac nazvov pisma, napis zlava len pri zlave
- Vernostna karta je predvolena cenovka sekcie Vernostne zlavy
- produkty pri nacitani dostanu aktualnu verziu svojej sablony
- import: zlava pre appkacov a s vernostnou kartou z poznamky, jednotkova cena
pre appkacov prepocitana, sirka cenovky podla sablony
- okraj stitkov predajni podla mierky cenovky
- postup prevodu v scripts/badges
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
50af94f954
commit
af35334688
13 files changed
+300
-107
No files matched your search
+11
-4
@@ -92,7 +92,12 @@ function badgeData(p: CardProduct, variant: CardVariant): BadgeProductData {
|
||||
unitPrice: p.cardUnitPrice || p.unitPrice || '',
|
||||
cardPriceMain: p.cardPriceMain,
|
||||
cardPriceSub: p.cardPriceSub,
|
||||
cardDiscount: p.cardDiscount
|
||||
cardDiscount: p.cardDiscount,
|
||||
cardUnitPrice: p.cardUnitPrice,
|
||||
noCardPriceMain: p.noCardPriceMain,
|
||||
noCardPriceSub: p.noCardPriceSub,
|
||||
noCardDiscount: p.noCardDiscount,
|
||||
noCardUnitPrice: p.noCardUnitPrice
|
||||
};
|
||||
}
|
||||
return p;
|
||||
@@ -190,9 +195,11 @@ function renderDualSticker(p: CardProduct): string {
|
||||
// Štítky predajní (Potraviny / Supermarket / Tempo) pod sebou; výška podľa veľkosti cenovky
|
||||
// Biely okraj okolo nich ako skupiny: pod štítkami je biela vrstva z rovnakých štítkov, každý o hrúbku okraja
|
||||
// väčší a so zaoblenými rohmi – kde sa štítky dotýkajú, biela splynie, takže linka ide okolo celej skupiny
|
||||
// a vonkajšie rohy sú zaoblené (polovica hrúbky linky okolo pozadia cenovky: 2,25 px pri cenovke širokej 130 px).
|
||||
// a vonkajšie rohy sú zaoblené (polovica hrúbky bielej linky okolo pozadia cenovky, podľa mierky cenovky).
|
||||
function renderStores(p: CardProduct, mode: RenderMode, tagHeight: number, badgeWidth: number): string {
|
||||
const t = Math.round(((2.25 * badgeWidth) / 130) * 10) / 10;
|
||||
// mierka cenovky (px na jednotku SVG): biela linka pozadia má 2,78 jednotky, okraj štítkov polovicu
|
||||
const vbW = Number(p.badgeCustomTemplate?.svgRaw?.match(/viewBox=["'][^"']*?[\d.\-]+\s+[\d.\-]+\s+([\d.]+)/)?.[1]) || 80.1;
|
||||
const t = Math.round(((1.39 * badgeWidth) / vbW) * 10) / 10;
|
||||
const tags = [
|
||||
p.stores?.potraviny ? ['#e2001a', 'stit_potraviny.png', 'Potraviny'] : null,
|
||||
p.stores?.supermarket ? ['#f9890e', 'stit_supermarket.png', 'Supermarket'] : null,
|
||||
@@ -221,7 +228,7 @@ export function cardVisualKey(p: CardProduct, ctx: CardContext): string {
|
||||
p.customBadgePngUrl, badgeWidthFor(p, ctx.variant),
|
||||
t ? [t.svgRaw, t.layersConfig, t.width] : null,
|
||||
p.priceMain, p.priceSub, p.discountText, p.badgeText, p.unitPrice,
|
||||
p.cardPriceMain, p.cardPriceSub, p.cardDiscount, p.cardUnitPrice, p.appPriceMain, p.appPriceSub,
|
||||
p.cardPriceMain, p.cardPriceSub, p.cardDiscount, p.cardUnitPrice, p.appPriceMain, p.appPriceSub, p.appDiscount, p.appUnitPrice,
|
||||
p.noCardPriceMain, p.noCardPriceSub, p.noCardDiscount, p.noCardUnitPrice,
|
||||
p.stores, p.storesOffsetX ?? DEFAULT_STORES_OFFSET_X, p.storesOffsetY ?? DEFAULT_STORES_OFFSET_Y, p.storesSize ?? DEFAULT_STORES_SIZE,
|
||||
p.labels || [], p.extraPhotos || [], photoStack(p)
|
||||
|
||||
Reference in new issue
Block a user