Initial commit: ASPEKTER — визуальный конструктор email-рассылок
- z51-pug-builder: Svelte 5 SPA, визуальный редактор Pug-писем - email-gen: Node.js рендерер Pug→HTML через email-templates + Juice - email-gen-api: HTTP сервер рендеринга (порт 8787) - coin-scout: сервис подбора монет из фидов - Docker Compose для dev/prod - Nginx конфиг с SSL для app.aspekter.ru
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
<script>
|
||||
export let block;
|
||||
export let onChange;
|
||||
|
||||
const update = (patch) => onChange({ ...block.data, ...patch });
|
||||
let showAdv = false;
|
||||
</script>
|
||||
|
||||
<label>Левый баннер — ссылка
|
||||
<input type="text" value={block.data.leftHref ?? ""} on:input={(e) => update({ leftHref: e.target.value })} />
|
||||
</label>
|
||||
<label>Левый баннер — имя файла
|
||||
<input type="text" value={block.data.leftImageBaseName ?? ""} on:input={(e) => update({ leftImageBaseName: e.target.value })} />
|
||||
</label>
|
||||
|
||||
<label>Правый баннер — ссылка
|
||||
<input type="text" value={block.data.rightHref ?? ""} on:input={(e) => update({ rightHref: e.target.value })} />
|
||||
</label>
|
||||
<label>Правый баннер — имя файла
|
||||
<input type="text" value={block.data.rightImageBaseName ?? ""} on:input={(e) => update({ rightImageBaseName: e.target.value })} />
|
||||
</label>
|
||||
<div class="advanced-wrapper">
|
||||
<button class="btn-advanced-toggle" class:is-open={showAdv} type="button" on:click={() => (showAdv = !showAdv)}>
|
||||
Доп. настройки
|
||||
</button>
|
||||
{#if showAdv}
|
||||
<div class="advanced-panel">
|
||||
<label>Левый баннер — расширение
|
||||
<input type="text" value={block.data.leftImageExtension ?? ".png"} on:input={(e) => update({ leftImageExtension: e.target.value })} />
|
||||
</label>
|
||||
<label>Правый баннер — расширение
|
||||
<input type="text" value={block.data.rightImageExtension ?? ".png"} on:input={(e) => update({ rightImageExtension: e.target.value })} />
|
||||
</label>
|
||||
|
||||
<label>Ширина баннеров (px)
|
||||
<input
|
||||
type="number"
|
||||
value={block.data.width ?? 270}
|
||||
on:input={(e) => update({ width: parseInt(e.target.value, 10) || 0 })}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label>Отступ между баннерами (px)
|
||||
<input
|
||||
type="number"
|
||||
value={block.data.gap ?? 30}
|
||||
on:input={(e) => update({ gap: parseInt(e.target.value, 10) || 0 })}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
Отступ снизу (px)
|
||||
<input
|
||||
type="number"
|
||||
value={block.data.bottomSpacing ?? 40}
|
||||
on:input={(e) => update({ bottomSpacing: parseInt(e.target.value, 10) || 0 })}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label class="inline">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={block.data.removeBottomSpacing}
|
||||
on:change={(e) => update({ removeBottomSpacing: e.target.checked })}
|
||||
/>
|
||||
Убрать отступ после блока
|
||||
</label>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
Reference in New Issue
Block a user