Update NODEDC admin content and modules
This commit is contained in:
parent
69e2b05fc2
commit
bc0da49506
|
|
@ -1214,12 +1214,19 @@ body[data-file-picker-active="true"] .editor {
|
|||
}
|
||||
|
||||
.collection-drag-handle {
|
||||
letter-spacing: -0.12em;
|
||||
cursor: grab;
|
||||
touch-action: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.collection-drag-handle svg {
|
||||
display: block;
|
||||
width: 0.75rem;
|
||||
height: 1.125rem;
|
||||
fill: currentColor;
|
||||
opacity: 0.78;
|
||||
}
|
||||
|
||||
.collection-drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ const STATIC_FALLBACK = {
|
|||
{
|
||||
enabled: true,
|
||||
title: "NODE.DC",
|
||||
href: "#hero",
|
||||
href: "javascript:void(0)",
|
||||
linkTarget: "",
|
||||
targetId: "app-data",
|
||||
iconSrc: "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg",
|
||||
|
|
@ -105,7 +105,7 @@ const STATIC_FALLBACK = {
|
|||
{
|
||||
enabled: true,
|
||||
title: "Корзина",
|
||||
href: "",
|
||||
href: "javascript:void(0)",
|
||||
linkTarget: "",
|
||||
targetId: "",
|
||||
iconSrc: "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif",
|
||||
|
|
@ -166,7 +166,7 @@ const STATIC_FALLBACK = {
|
|||
{
|
||||
enabled: true,
|
||||
title: "Новое приложение",
|
||||
href: "#hero",
|
||||
href: "javascript:void(0)",
|
||||
linkTarget: "",
|
||||
targetId: "",
|
||||
iconSrc: "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg",
|
||||
|
|
@ -207,7 +207,7 @@ const GROUP_COPY = {
|
|||
"Верхний информационный блок": "Верхняя пара: длинный текст и крупный заголовок над медиаслайдером.",
|
||||
"Нижний информационный блок": "Нижняя зеркальная пара: крупный заголовок и длинный текст под медиаслайдером.",
|
||||
"Тезисы первого экрана": "Четыре смысловых тезиса вокруг формы раннего доступа.",
|
||||
"Карточка доступа": "Логотипы, тексты и видимость центрального окна приложения.",
|
||||
"Карточка доступа": "Единый компонент окна заявки: редактируется здесь и повторяется в нижнем блоке запроса DEMO.",
|
||||
Форма: "Плейсхолдеры, кнопки, success/failure состояния формы.",
|
||||
"Юридический блок": "Политики, права и нижний текст формы.",
|
||||
"Видео-окно": "Окно демо-видео и подключенный медиа-файл.",
|
||||
|
|
@ -220,11 +220,16 @@ const GROUP_COPY = {
|
|||
Отправитель: "Профиль отправителя в FAQ: аватар, имя и подписи письма.",
|
||||
FAQ: "Вопросы и ответы mail-интерфейса. Каждый пункт можно добавить, удалить и переставить.",
|
||||
CTA: "Финальный призыв к действию: заголовок, пояснение, кнопка и ссылка.",
|
||||
Тарифы: "Верхняя часть тарифной таблицы: заголовки, планы, цены, кнопки и примечания.",
|
||||
"Центральный текст": "Отдельный центрированный текстовый блок: надзаголовок, крупная строка и три подписи.",
|
||||
Тарифы: "Окно тарифной таблицы: планы, цены, кнопки и примечания.",
|
||||
"Строки тарифов": "Повторяемые строки тарифной таблицы и значения по каждому плану.",
|
||||
"Медиа-галерея": "Окна с изображениями, подписи файлов и связанные иконки.",
|
||||
"Карточки скриншотов": "Скриншоты в виде окон и файлов: каждый элемент можно скрыть, переставить, дублировать или удалить.",
|
||||
"TXT-файлы": "Список файлов листа ожидания: название окна, подпись и текст внутри файла.",
|
||||
Футер: "Нижняя навигация, контактные ссылки, политики и брендовый блок.",
|
||||
Футер: "Брендовый блок, копирайт и базовые ассеты футера.",
|
||||
"Навигация футера": "Ссылки навигационной колонки футера. Каждый пункт можно скрыть, переставить, дублировать или удалить.",
|
||||
"Контактные ссылки": "Ссылки контактной колонки футера. Каждый пункт можно скрыть, переставить, дублировать или удалить.",
|
||||
Политики: "Нижняя строка политик и условия отображения.",
|
||||
Контент: "Остальные typed-поля выбранного блока.",
|
||||
};
|
||||
|
||||
|
|
@ -335,7 +340,7 @@ function inferFieldGroup(path) {
|
|||
if (path.startsWith("content.cards.")) return "Тезисы первого экрана";
|
||||
if (path.startsWith("content.app.") || path.startsWith("content.accessCard.")) return "Карточка доступа";
|
||||
if (path.startsWith("content.form.")) return "Форма";
|
||||
if (path === "content.legalHtml") return "Юридический блок";
|
||||
if (path === "content.legalHtml" || path.startsWith("content.legal.")) return "Юридический блок";
|
||||
if (path === "content.windowTitle" || path === "content.videoSrc") return "Видео-окно";
|
||||
if (path.startsWith("content.features.")) return "Пункты";
|
||||
if (path.startsWith("content.scroll.")) return "Скролл";
|
||||
|
|
@ -347,8 +352,11 @@ function inferFieldGroup(path) {
|
|||
if (path.startsWith("content.cta.")) return "CTA";
|
||||
if (path.startsWith("content.plans.") || path.startsWith("content.pricing.")) return "Тарифы";
|
||||
if (path.startsWith("content.pricingCells.")) return "Строки тарифов";
|
||||
if (path.startsWith("content.galleryItems.")) return "Медиа-галерея";
|
||||
if (path.startsWith("content.files.")) return "TXT-файлы";
|
||||
if (path === "content.galleryItems" || path.startsWith("content.galleryItems.")) return "Карточки скриншотов";
|
||||
if (path === "content.filesEnabled" || path.startsWith("content.files.")) return "TXT-файлы";
|
||||
if (path === "content.footer.policyEnabled" || path === "content.footer.policyHtml") return "Политики";
|
||||
if (path.startsWith("content.footer.navLinks.")) return "Навигация футера";
|
||||
if (path.startsWith("content.footer.contactLinks.")) return "Контактные ссылки";
|
||||
if (path.startsWith("content.footer.")) return "Футер";
|
||||
if (path.startsWith("content.heading.") || path === "content.introHtml") return "Заголовок";
|
||||
return "Контент";
|
||||
|
|
@ -359,7 +367,7 @@ function createDefaultDockItems(dock = {}, assets = {}) {
|
|||
{
|
||||
enabled: true,
|
||||
title: "NODE.DC",
|
||||
href: "#hero",
|
||||
href: "javascript:void(0)",
|
||||
linkTarget: "",
|
||||
targetId: dock.appTarget || "app-data",
|
||||
iconSrc: assets.appIconSrc || STATIC_FALLBACK.content.assets.appIconSrc,
|
||||
|
|
@ -371,7 +379,7 @@ function createDefaultDockItems(dock = {}, assets = {}) {
|
|||
{
|
||||
enabled: true,
|
||||
title: "Корзина",
|
||||
href: "",
|
||||
href: "javascript:void(0)",
|
||||
linkTarget: "",
|
||||
targetId: "",
|
||||
iconSrc: "./assets/webflow/images/69a9ae818a76c773dc3cf7bc_trash.avif",
|
||||
|
|
@ -575,6 +583,7 @@ function blockIcon(block) {
|
|||
const type = block.type || "";
|
||||
|
||||
if (id === "static-elements") return "SE";
|
||||
if (id.includes("gallery") || id.includes("screenshot")) return "SC";
|
||||
if (id.includes("hero")) return "H";
|
||||
if (id.includes("feature") || id.includes("video")) return "V";
|
||||
if (id.includes("component")) return "C";
|
||||
|
|
@ -1797,13 +1806,13 @@ function renderCollectionField({ block, editableField, grid }) {
|
|||
dragHandle.type = "button";
|
||||
dragHandle.title = "Перетащить элемент";
|
||||
dragHandle.setAttribute("aria-label", "Перетащить элемент");
|
||||
dragHandle.textContent = "⋮⋮";
|
||||
dragHandle.innerHTML =
|
||||
'<svg viewBox="0 0 12 18" aria-hidden="true" focusable="false"><circle cx="4" cy="4" r="1.25"></circle><circle cx="8" cy="4" r="1.25"></circle><circle cx="4" cy="9" r="1.25"></circle><circle cx="8" cy="9" r="1.25"></circle><circle cx="4" cy="14" r="1.25"></circle><circle cx="8" cy="14" r="1.25"></circle></svg>';
|
||||
dragHandle.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
});
|
||||
dragHandle.addEventListener("pointerdown", (event) => startCollectionPointerDrag(event, details, items, index, rerender));
|
||||
controls.append(dragHandle);
|
||||
|
||||
if (hasVisibilityToggle) {
|
||||
if (!Object.prototype.hasOwnProperty.call(item, "enabled")) item.enabled = true;
|
||||
|
|
@ -1865,6 +1874,7 @@ function renderCollectionField({ block, editableField, grid }) {
|
|||
});
|
||||
controls.append(button);
|
||||
});
|
||||
controls.append(dragHandle);
|
||||
|
||||
summary.append(summaryTitle, controls);
|
||||
body.className = "collection-item-body";
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
*{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}img{pointer-events:none}.text-scrollable{scrollbar-width:none;-ms-overflow-style:none}.text-scrollable::-webkit-scrollbar{display:none}.circle .x-icon{opacity:0}.circle:hover .x-icon{opacity:1}[data-css=fade-tb]{mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);-webkit-mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;-webkit-mask-repeat:no-repeat}.current .mail-item{background-color:#3d3d3dc9}[data-module=""]{outline:10px solid red}[data-module=btn]>div>div>div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=btn]:hover>div>div>div>div{transform:translateY(-1.3em)}[data-module=link]{transition:opacity .1s ease-in-out}[data-module=link] div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=link]:hover{opacity:.6!important}[data-module=link]:hover div>div{transform:translateY(-.65em)}[data-module=apple-icon]:focus [data-txt]{position:relative}[data-module=apple-icon]:focus [data-txt]:before{content:"";position:absolute;z-index:-1;background-color:#0059d0;border-radius:.3em;width:120%;height:120%;top:-10%;left:-10%}[data-module=notification-w]{--notification-height:98%}[data-module=notification-w]>div:nth-child(2){transform:translateY(calc(-1*var(--notification-height)));z-index:2}[data-module=notification-w]>div:nth-child(3){transform:translateY(calc(-2*var(--notification-height)));z-index:3}[data-module=notification-w]:hover{--notification-height:98%}[data-module=notification-w]:hover>div:nth-child(2){z-index:2;transform:translateY(0)}[data-module=notification-w]:hover>div:nth-child(3){z-index:3;transform:translateY(0)}[data-module=notification]{transition:transform .3s cubic-bezier(.22,1,.36,1)}
|
||||
.app-item.video[data-adaptive-video-window]{--nodedc-video-source-aspect:1.777778;--nodedc-video-height:620px;--nodedc-video-max-height:72svh;--nodedc-video-max-width:70vw;--nodedc-video-render-height:min(var(--nodedc-video-height),var(--nodedc-video-max-height));aspect-ratio:auto;width:min(var(--nodedc-video-max-width),calc(var(--nodedc-video-render-height)*var(--nodedc-video-source-aspect)));height:auto}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]{aspect-ratio:var(--nodedc-video-source-aspect);display:block;width:100%;height:auto;max-height:var(--nodedc-video-render-height)}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]>video.video{display:block;width:100%;height:100%;object-fit:cover}.video-screen [data-media-handle]{display:block;width:100%;height:100%}.video-screen [data-media-handle]>img,.video-screen [data-media-handle]>video{display:block;width:100%;height:100%;object-fit:cover}@media screen and (max-width:767px){.app-item.video[data-adaptive-video-window]{--nodedc-video-max-height:58svh;--nodedc-video-max-width:95vw}}
|
||||
.project-video-detail .project-video-detail-copy{position:relative;z-index:2}.project-video-detail .project-video-detail-copy-bottom{margin-top:2.5rem}.project-video-detail .project-video-detail-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-video-detail .project-video-detail-hgroup{flex-flow:row;gap:1.25rem}.project-video-detail .project-video-detail-hgroup.flip{flex-flow:row-reverse}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2.35rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:22ch}.project-video-detail .project-video-detail-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-video-detail .project-video-detail-copy{width:86%}.project-video-detail .project-video-detail-hgroup{gap:1rem}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}}
|
||||
.project-composition .project-composition-copy{position:relative;z-index:2}.project-composition .project-composition-copy-bottom{margin-top:2.5rem}.project-composition .project-composition-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-composition .project-composition-hgroup{flex-flow:row;gap:1.25rem}.project-composition .project-composition-hgroup.flip{flex-flow:row-reverse}.project-composition .project-composition-hgroup .main-h.h2{font-size:2.35rem}.project-composition .project-composition-hgroup .h-txt{max-width:22ch}.project-composition .project-composition-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-composition .project-composition-copy{width:86%}.project-composition .project-composition-hgroup{gap:1rem}.project-composition .project-composition-hgroup .main-h.h2{font-size:2rem}.project-composition .project-composition-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}}
|
||||
.pricing-table-section .pricing-table-shell{padding-top:12svh;padding-bottom:12svh}@media screen and (max-width:767px){.pricing-table-section .pricing-table-shell{padding-top:8svh;padding-bottom:8svh}}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
*{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}img{pointer-events:none}.text-scrollable{scrollbar-width:none;-ms-overflow-style:none}.text-scrollable::-webkit-scrollbar{display:none}.circle .x-icon{opacity:0}.circle:hover .x-icon{opacity:1}[data-css=fade-tb]{mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);-webkit-mask-image:linear-gradient(#0000 0%,#000 15% 85%,#0000 100%);mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;-webkit-mask-repeat:no-repeat}.current .mail-item{background-color:#3d3d3dc9}[data-module=""]{outline:10px solid red}[data-module=btn]>div>div>div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=btn]:hover>div>div>div>div{transform:translateY(-1.3em)}[data-module=link]{transition:opacity .1s ease-in-out}[data-module=link] div>div{text-shadow:0 1.3em #fff;transition:transform .3s ease-in-out}[data-module=link]:hover{opacity:.6!important}[data-module=link]:hover div>div{transform:translateY(-.65em)}[data-module=apple-icon]:focus [data-txt]{position:relative}[data-module=apple-icon]:focus [data-txt]:before{content:"";position:absolute;z-index:-1;background-color:#0059d0;border-radius:.3em;width:120%;height:120%;top:-10%;left:-10%}[data-module=notification-w]{--notification-height:98%}[data-module=notification-w]>div:nth-child(2){transform:translateY(calc(-1*var(--notification-height)));z-index:2}[data-module=notification-w]>div:nth-child(3){transform:translateY(calc(-2*var(--notification-height)));z-index:3}[data-module=notification-w]:hover{--notification-height:98%}[data-module=notification-w]:hover>div:nth-child(2){z-index:2;transform:translateY(0)}[data-module=notification-w]:hover>div:nth-child(3){z-index:3;transform:translateY(0)}[data-module=notification]{transition:transform .3s cubic-bezier(.22,1,.36,1)}[data-start=closed]{pointer-events:none;visibility:hidden}[data-module=app]:not([data-start=closed]){transform:scale(0)translateY(200%)}[data-module=folder-wrap]>*{transform:scale(0)}[data-module=list] a{opacity:0}[data-success],[data-failure]{display:none}[data-module=alpha]{opacity:0}
|
||||
.app-item.video[data-adaptive-video-window]{--nodedc-video-source-aspect:1.777778;--nodedc-video-height:620px;--nodedc-video-max-height:72svh;--nodedc-video-max-width:70vw;--nodedc-video-render-height:min(var(--nodedc-video-height),var(--nodedc-video-max-height));aspect-ratio:auto;width:min(var(--nodedc-video-max-width),calc(var(--nodedc-video-render-height)*var(--nodedc-video-source-aspect)));height:auto}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]{aspect-ratio:var(--nodedc-video-source-aspect);display:block;width:100%;height:auto;max-height:var(--nodedc-video-render-height)}.app-item.video[data-adaptive-video-window] .video-size[data-adaptive-video]>video.video{display:block;width:100%;height:100%;object-fit:cover}.video-screen [data-media-handle]{display:block;width:100%;height:100%}.video-screen [data-media-handle]>img,.video-screen [data-media-handle]>video{display:block;width:100%;height:100%;object-fit:cover}@media screen and (max-width:767px){.app-item.video[data-adaptive-video-window]{--nodedc-video-max-height:58svh;--nodedc-video-max-width:95vw}}
|
||||
.project-video-detail .project-video-detail-copy{position:relative;z-index:2}.project-video-detail .project-video-detail-copy-bottom{margin-top:2.5rem}.project-video-detail .project-video-detail-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-video-detail .project-video-detail-hgroup{flex-flow:row;gap:1.25rem}.project-video-detail .project-video-detail-hgroup.flip{flex-flow:row-reverse}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2.35rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:22ch}.project-video-detail .project-video-detail-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-video-detail .project-video-detail-copy{width:86%}.project-video-detail .project-video-detail-hgroup{gap:1rem}.project-video-detail .project-video-detail-hgroup .main-h.h1{font-size:2rem}.project-video-detail .project-video-detail-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}}
|
||||
.project-composition .project-composition-copy{position:relative;z-index:2}.project-composition .project-composition-copy-bottom{margin-top:2.5rem}.project-composition .project-composition-copy-bottom .main-h{margin-bottom:0}@media screen and (max-width:767px){.project-composition .project-composition-hgroup{flex-flow:row;gap:1.25rem}.project-composition .project-composition-hgroup.flip{flex-flow:row-reverse}.project-composition .project-composition-hgroup .main-h.h2{font-size:2.35rem}.project-composition .project-composition-hgroup .h-txt{max-width:22ch}.project-composition .project-composition-copy-bottom{margin-top:2rem}}@media screen and (max-width:479px){.project-composition .project-composition-copy{width:86%}.project-composition .project-composition-hgroup{gap:1rem}.project-composition .project-composition-hgroup .main-h.h2{font-size:2rem}.project-composition .project-composition-hgroup .h-txt{max-width:17ch;font-size:.86rem;line-height:1.28em}}
|
||||
.pricing-table-section .pricing-table-shell{padding-top:12svh;padding-bottom:12svh}@media screen and (max-width:767px){.pricing-table-section .pricing-table-shell{padding-top:8svh;padding-bottom:8svh}}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -10,6 +10,8 @@
|
|||
const DEFAULT_SCROLL_SPEED = 0.55;
|
||||
const ADAPTIVE_VIDEO_BOUND_FLAG = "__nodedcAdaptiveVideoBound";
|
||||
const MEDIA_HANDLE_BOUND_FLAG = "__nodedcMediaHandleBound";
|
||||
const DOCK_LINK_BOUND_FLAG = "__nodedcDockLinkBound";
|
||||
const ORDERED_SLIDER_BOUND_FLAG = "__nodedcOrderedSliderBound";
|
||||
const IMAGE_EXTENSIONS = new Set(["avif", "gif", "jpeg", "jpg", "png", "svg", "webp"]);
|
||||
const VIDEO_EXTENSIONS = new Set(["m4v", "mov", "mp4", "webm"]);
|
||||
|
||||
|
|
@ -226,11 +228,62 @@
|
|||
}
|
||||
|
||||
function bindInteractiveScroll() {
|
||||
bindGlobalSliderWheel();
|
||||
document.querySelectorAll('[data-module="slider"]').forEach(bindSliderWheel);
|
||||
document.querySelectorAll('[data-module="mail-list"]').forEach(bindMailListWheel);
|
||||
}
|
||||
|
||||
function bindOrderedSlider(surface) {
|
||||
if (!surface || surface[ORDERED_SLIDER_BOUND_FLAG]) return;
|
||||
|
||||
const slider = surface.__nodedcSlider;
|
||||
if (!slider) return;
|
||||
|
||||
surface[ORDERED_SLIDER_BOUND_FLAG] = true;
|
||||
const items = Array.from(surface.children);
|
||||
const startOffset = items.length > 1 ? -1 : 0;
|
||||
|
||||
slider.config.infinite = true;
|
||||
slider.target = startOffset;
|
||||
slider.current = startOffset;
|
||||
slider.speed = 0;
|
||||
|
||||
items.forEach((item) => {
|
||||
item.classList.remove("current");
|
||||
});
|
||||
|
||||
slider.resize?.();
|
||||
slider.update?.();
|
||||
}
|
||||
|
||||
function bindOrderedSliders() {
|
||||
document.querySelectorAll('[data-module="slider"][data-admin-order="true"]').forEach(bindOrderedSlider);
|
||||
}
|
||||
|
||||
function bindDockLink(link) {
|
||||
if (!link || link[DOCK_LINK_BOUND_FLAG]) return;
|
||||
|
||||
link[DOCK_LINK_BOUND_FLAG] = true;
|
||||
link.addEventListener(
|
||||
"click",
|
||||
(event) => {
|
||||
const href = String(link.getAttribute("href") || "").trim();
|
||||
const targetId = String(link.dataset.target || "").trim();
|
||||
const hasAppTarget = Boolean(targetId && document.getElementById(targetId));
|
||||
const isInertHref = !href || href === "#" || href === "#hero" || href.toLowerCase().startsWith("javascript:");
|
||||
|
||||
if (!hasAppTarget && !isInertHref) return;
|
||||
|
||||
event.preventDefault();
|
||||
window.requestAnimationFrame(() => link.blur());
|
||||
if (!hasAppTarget) event.stopPropagation();
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
}
|
||||
|
||||
function bindDockLinks() {
|
||||
document.querySelectorAll('[data-module="dock"] a[data-app]').forEach(bindDockLink);
|
||||
}
|
||||
|
||||
function mediaExtension(src) {
|
||||
const cleanSrc = String(src || "").split(/[?#]/)[0];
|
||||
const match = /\.([a-z0-9]+)$/i.exec(cleanSrc);
|
||||
|
|
@ -313,6 +366,8 @@
|
|||
() => {
|
||||
hydrateMediaHandles();
|
||||
bindInteractiveScroll();
|
||||
bindOrderedSliders();
|
||||
bindDockLinks();
|
||||
bindAdaptiveVideos();
|
||||
},
|
||||
{ once: true },
|
||||
|
|
@ -320,16 +375,22 @@
|
|||
} else {
|
||||
hydrateMediaHandles();
|
||||
bindInteractiveScroll();
|
||||
bindOrderedSliders();
|
||||
bindDockLinks();
|
||||
bindAdaptiveVideos();
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
hydrateMediaHandles();
|
||||
bindInteractiveScroll();
|
||||
bindOrderedSliders();
|
||||
bindDockLinks();
|
||||
bindAdaptiveVideos();
|
||||
window.setTimeout(() => {
|
||||
hydrateMediaHandles();
|
||||
bindInteractiveScroll();
|
||||
bindOrderedSliders();
|
||||
bindDockLinks();
|
||||
bindAdaptiveVideos();
|
||||
}, 500);
|
||||
});
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
87
index.html
87
index.html
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
<section id="{{attr:anchor}}" class="s central-text-block"><div class="c center ve"><hgroup data-module="hg" class="ce"><div data-module="text-wave" class="hg-par darker-70">{{text:content.eyebrow}}</div><h2 class="main-h h1 xl"><span class="darker-40">{{text:content.heading.muted}}</span><span class="darker-70">{{text:content.heading.middle}}</span><span>{{text:content.heading.main}}</span></h2><div class="div-block-11"><div class="h-txt">{{html:content.introHtml}}</div><div class="h-txt">{{html:content.tokenBillingHtml}}</div><div class="h-txt darker-40">{{html:content.founderLimitHtml}}</div></div></hgroup></div></section>
|
||||
|
|
@ -1 +1 @@
|
|||
<footer class="s footer"><div class="c footer-col"><div class="div-block-9"><div class="div-block-2"><img data-module="mouse-follow" loading="lazy" alt="{{attr:content.footer.appIconAlt}}" src="{{attr:content.footer.appIconSrc}}" class="logo app footer"/><img loading="lazy" src="{{attr:content.footer.wordmarkSrc}}" alt="{{attr:content.footer.wordmarkAlt}}" class="logo-size"/></div><div class="footer-notice mt">{{html:content.footer.copyrightHtml}}</div></div><div class="footer-cols"><div class="div-block-3"><h2 class="footer-list-he">{{text:content.footer.navTitle}}</h2><ul data-group="hero" data-module="list" role="list" class="w-list-unstyled">{{#each content.footer.navLinks}}<li><a data-module="link" href="{{attr:href}}" target="{{attr:target}}" class="ft-link w-inline-block"><div class="clip-12"><div>{{text:label}}</div></div></a></li>{{/each}}</ul></div><div class="div-block-3"><h2 data-module="text-wave" class="footer-list-he">{{text:content.footer.contactTitle}}</h2><ul data-group="hero" data-module="list" role="list" class="w-list-unstyled">{{#each content.footer.contactLinks}}<li><a data-module="link" href="{{attr:href}}" target="{{attr:target}}" class="ft-link w-inline-block"><div class="clip-12"><div>{{text:label}}</div></div></a></li>{{/each}}</ul></div></div></div><div class="c footer-col"><div class="footer-notice mt">{{html:content.footer.policyHtml}}</div></div></footer>
|
||||
<footer class="s footer"><div class="c footer-col"><div class="div-block-9"><div class="div-block-2"><img data-module="mouse-follow" loading="lazy" alt="{{attr:content.footer.appIconAlt}}" src="{{attr:content.footer.appIconSrc}}" class="logo app footer"/><img loading="lazy" src="{{attr:content.footer.wordmarkSrc}}" alt="{{attr:content.footer.wordmarkAlt}}" class="logo-size"/></div><div class="footer-notice mt">{{html:content.footer.copyrightHtml}}</div></div><div class="footer-cols"><div class="div-block-3"><h2 class="footer-list-he">{{text:content.footer.navTitle}}</h2><ul data-group="hero" data-module="list" role="list" class="w-list-unstyled">{{#each content.footer.navLinks}}{{#if enabled}}<li><a data-module="link" href="{{attr:href}}" target="{{attr:target}}" class="ft-link w-inline-block"><div class="clip-12"><div>{{text:label}}</div></div></a></li>{{/if}}{{/each}}</ul></div><div class="div-block-3"><h2 data-module="text-wave" class="footer-list-he">{{text:content.footer.contactTitle}}</h2><ul data-group="hero" data-module="list" role="list" class="w-list-unstyled">{{#each content.footer.contactLinks}}{{#if enabled}}<li><a data-module="link" href="{{attr:href}}" target="{{attr:target}}" class="ft-link w-inline-block"><div class="clip-12"><div>{{text:label}}</div></div></a></li>{{/if}}{{/each}}</ul></div></div></div>{{#if content.footer.policyEnabled}}<div class="c footer-col"><div class="footer-notice mt">{{html:content.footer.policyHtml}}</div></div>{{/if}}</footer>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +1,6 @@
|
|||
<section class="s">
|
||||
<div class="c _w-60">
|
||||
<hgroup data-module="hg" class="ho">
|
||||
<section class="s project-composition">
|
||||
<div class="c _w-60 project-composition-copy project-composition-copy-top">
|
||||
<hgroup data-module="hg" class="ho project-composition-hgroup">
|
||||
<h2 class="main-h h2">
|
||||
<span class="darker-40">{{text:content.heading.muted}}</span>
|
||||
<span>{{text:content.heading.main}}</span>
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
</div>
|
||||
<div class="c full">
|
||||
<div class="w-dyn-list">
|
||||
<div data-module="slider" data-scroll-speed="{{attr:content.scroll.speed}}" role="list" class="slider w-dyn-items">
|
||||
<div data-module="slider" data-admin-order="true" data-scroll-speed="{{attr:content.scroll.speed}}" role="list" class="slider w-dyn-items">
|
||||
{{#each content.sliderItems}}
|
||||
{{#if enabled}}
|
||||
<div role="listitem" class="slide-w w-dyn-item">
|
||||
|
|
@ -28,6 +28,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="c _w-60 project-composition-copy project-composition-copy-bottom">
|
||||
<hgroup data-module="hg" class="ho flip project-composition-hgroup">
|
||||
<h2 class="main-h h2">
|
||||
<span class="darker-40">{{text:content.bottomInfo.heading.muted}}</span>
|
||||
<span>{{text:content.bottomInfo.heading.main}}</span>
|
||||
</h2>
|
||||
<div class="h-txt">{{html:content.bottomInfo.introHtml}}</div>
|
||||
</hgroup>
|
||||
</div>
|
||||
<div class="webgl-target-w">
|
||||
<div data-scale="1, 0.6" data-module="webgl-target" class="webgl-target"></div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
</div>
|
||||
<div class="c full">
|
||||
<div class="w-dyn-list">
|
||||
<div data-module="slider" data-scroll-speed="{{attr:content.scroll.speed}}" role="list" class="slider w-dyn-items">
|
||||
<div data-module="slider" data-admin-order="true" data-scroll-speed="{{attr:content.scroll.speed}}" role="list" class="slider w-dyn-items">
|
||||
{{#each content.sliderItems}}
|
||||
{{#if enabled}}
|
||||
<div role="listitem" class="slide-w w-dyn-item">
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
<section id="{{attr:anchor}}" class="s h-screen">{{#if content.accessCard.enabled}}<div class="app-w"><div id="app-data" data-module="app" class="app-item data"><div data-draggable-area="" class="app-head preview"><div class="app-head-trigs"><button data-close="" aria-label="закрыть окно" class="circle opaque"><div class="x-icon"><div class="line full x-icon rot"></div><div class="line full x-icon"></div></div></button><div class="circle opaque"></div><div class="circle opaque"></div></div></div><div class="flex-v"><div class="flex-v _w-full"><img src="{{attr:content.accessCard.iconSrc}}" loading="lazy" data-module="mouse-follow" alt="{{attr:content.accessCard.iconAlt}}" class="logo app"/><div class="logo-lockup-w"><img src="{{attr:content.accessCard.wordmarkSrc}}" loading="eager" alt="{{attr:content.accessCard.wordmarkAlt}}" class="logo-size"/><div class="notice-txt sm">{{text:content.accessCard.release}}</div></div></div><h3 data-module="text-wave" class="data-he">{{text:content.accessCard.heading}}</h3><h2 class="data-he h2">{{text:content.accessCard.description}}</h2><div class="form-element"><div data-module="form" class="form-w w-form"><form id="wf-form-sign-up" name="wf-form-sign-up" data-name="sign-up" method="get" data-form="" class="form" data-wf-page-id="69b2dc3d81980aaf43601640" data-wf-element-id="4c5736fb-5001-9c71-eaa8-239119d387ce"><textarea placeholder="{{attr:content.form.messagePlaceholder}}" maxlength="5000" id="Message" name="Message" data-name="Message" class="form-field taller w-input"></textarea><input class="form-field w-input" maxlength="256" name="name" data-name="Имя" placeholder="{{attr:content.form.namePlaceholder}}" type="text" id="Name" required=""/><div class="form-item"><input class="form-field w-input" maxlength="256" name="Email" data-name="Email" placeholder="{{attr:content.form.emailPlaceholder}}" type="email" id="Email" required=""/><button data-module="btn" class="form-btn"><div data-module="alpha" class="btn-bg"><div class="clip-12"><div>{{text:content.form.submitLabel}}</div></div></div></button></div></form><div data-success="" class="form-success"><h2 class="data-he sm">{{text:content.form.successHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.successTextHtml}}</h2><a data-module="btn" href="beta-apply.html" class="form-btn static w-inline-block"><div class="btn-bg gray"><div class="clip-12"><div>{{text:content.form.betaCtaLabel}}</div></div></div></a><h2 class="data-he h2 xs">{{html:content.form.founderIntroHtml}}</h2><a data-module="btn" href="founders.html" class="form-btn static w-inline-block"><div class="btn-bg"><div class="clip-12"><div>{{html:content.form.founderCtaHtml}}</div></div></div></a><link rel="prefetch" href="founders.html"/><div data-url="https://web.ssscript.app/api/founders-spots-remaining" data-module="founders-spots" class="pricing-sm darker-70 is--right">{{text:content.form.spotsLabel}}</div></div></div><div data-failure="" class="form-fail"><h2 class="data-he sm">{{text:content.form.failureHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.failureTextHtml}}</h2></div></div>{{#if content.legal.enabled}}<div class="notice-txt">{{html:content.legal.html}}</div>{{/if}}</div></div></div>{{/if}}{{#if content.filesEnabled}}<div class="waitlist-coll"><div class="folder-w txts w-dyn-list"><div role="list" class="folder-w txts-windows w-dyn-items">{{#each content.files}}{{#if enabled}}<div role="listitem" class="app-item-dot w-dyn-item"><div id="{{attr:id}}" data-module="app" data-start="closed" class="app-item txt"><div data-draggable-area="" class="app-head"><div class="app-head-trigs"><button data-close="" class="circle red"></button><div class="circle yellow"></div><div class="circle green"></div></div><div class="app-name-w"><img src="{{attr:iconSrc}}" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" srcset="{{attr:iconSrcset}}" alt="{{attr:iconAlt}}" class="app-icon"/><div class="app-name-txt">{{text:name}}</div></div></div><div class="text-editable"><div data-module="editable-text" class="txt-text-block editable">{{html:bodyHtml}}</div></div></div></div>{{/if}}{{/each}}</div></div><div class="collection-list-wrapper-3 w-dyn-list"><div data-form="duplicate" role="list" class="folders txts w-dyn-items">{{#each content.files}}{{#if enabled}}<div role="listitem" class="collection-item-2 w-dyn-item"><div tabindex="0" data-target="{{attr:id}}" data-module="apple-icon" class="folder"><img class="image" src="{{attr:iconSrc}}" alt="{{attr:iconAlt}}" sizes="(max-width: 1024px) 100vw, 1024px" data-icon="" loading="eager" srcset="{{attr:iconSrcset}}"/><div data-txt="" class="text-ho"><div class="folder-title">{{text:name}}</div><div class="folder-title lower">.txt</div></div></div></div>{{/if}}{{/each}}</div></div></div>{{/if}}</section>
|
||||
|
|
@ -0,0 +1 @@
|
|||
<div class="s component-lib"></div><div class="s color-flip"><div class="webgl-target-w"><div data-module="color-flip" class="webgl-target short"></div></div><div class="light-c"><div class="w-dyn-list"><div data-module="features" role="list" class="folder-w abs w-dyn-items">{{#each content.galleryItems}}{{#if enabled}}<div data-spread="" role="listitem" class="collection-item w-dyn-item"><div id="{{attr:id}}" data-module="app" class="app-item img"><div data-draggable-area="" class="app-head preview"><div class="app-head-trigs"><button data-close="" aria-label="закрыть" class="circle opaque"><div class="x-icon"><div class="line full x-icon rot"></div><div class="line full x-icon"></div></div></button><div class="circle opaque"></div></div><div class="app-name-w"><div class="app-name-txt preview">{{text:windowTitle}}</div></div></div><div class="inner-block"><div class="abs flex"><img src="{{attr:imageSrc}}" loading="eager" alt="{{attr:imageAlt}}" sizes="100vw" srcset="{{attr:imageSrcset}}" class="img"/></div></div></div><div tabindex="0" data-target="{{attr:id}}" data-module="apple-icon" class="folder"><img src="{{attr:iconSrc}}" loading="eager" data-icon="" alt="{{attr:iconAlt}}" class="image"/><div class="folder-title-w"><div class="dot highlight purple"></div><div data-txt="" class="folder-title">{{text:folderLabel}}</div></div></div></div>{{/if}}{{/each}}</div></div></div><div class="webgl-target-w bl"><div data-scale="1" data-module="webgl-target" class="webgl-target"></div></div></div><div class="s component-lib"><div class="webgl-target-w"><div data-flip-reverse="true" data-module="color-flip" class="webgl-target short"></div></div></div>
|
||||
|
|
@ -1 +1 @@
|
|||
<header id="hero" class="s h-screen"><div class="s-cont shorter"><div class="h-full between"><hgroup id="w-node-_42aec6af-ef19-ac2b-f604-ecf49ea735c6-43601640" data-module="hg" data-group="hero" class="hgroup main"><h1 class="main-h"><span class="darker-70">{{text:content.heading.muted}}</span><span>{{text:content.heading.main}}</span></h1><div class="h-txt">{{html:content.introHtml}}</div></hgroup><hgroup id="w-node-ddd50e0c-bdcb-417b-7dc2-7db828a06f46-43601640" data-module="hg" data-group="hero" class="to-left"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.0.muted}}</span><span>{{text:content.cards.0.main}}</span></h2><div class="h-txt">{{html:content.cards.0.bodyHtml}}</div></hgroup></div><div class="h-full between lower"><hgroup data-module="hg" data-group="hero"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.1.muted}}</span><span>{{text:content.cards.1.main}}</span></h2><div class="h-txt">{{html:content.cards.1.bodyHtml}}</div></hgroup><hgroup id="w-node-f82ddc17-0624-f069-9963-dda808a65750-43601640" data-module="hg" data-group="hero" class="to-right"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.2.muted}}</span><span>{{text:content.cards.2.main}}</span></h2><div class="h-txt">{{html:content.cards.2.bodyHtml}}</div></hgroup></div></div>{{#if content.accessCard.enabled}}<div class="app-w"><div id="app-data" data-module="app" class="app-item data"><div data-draggable-area="" class="app-head preview"><div class="app-head-trigs"><button data-close="" arial-label="закрыть окно" class="circle opaque"><div class="x-icon"><div class="line full x-icon rot"></div><div class="line full x-icon"></div></div></button><div class="circle opaque"></div><div class="circle opaque"></div></div></div><div class="flex-v"><div class="flex-v _w-full"><img src="{{attr:content.accessCard.iconSrc}}" loading="lazy" data-module="mouse-follow" alt="{{attr:content.accessCard.iconAlt}}" class="logo app"/><div class="logo-lockup-w"><img src="{{attr:content.accessCard.wordmarkSrc}}" loading="eager" alt="{{attr:content.accessCard.wordmarkAlt}}" class="logo-size"/><div class="notice-txt sm">{{text:content.accessCard.release}}</div></div></div><h3 data-module="text-wave" class="data-he">{{text:content.accessCard.heading}}</h3><h2 class="data-he h2">{{text:content.accessCard.description}}</h2><div class="form-element"><div data-module="form" class="form-w w-form"><form id="wf-form-sign-up" name="wf-form-sign-up" data-name="sign-up" method="get" data-form="" class="form" data-wf-page-id="69b2dc3d81980aaf43601640" data-wf-element-id="4c5736fb-5001-9c71-eaa8-239119d387ce"><textarea placeholder="{{attr:content.form.messagePlaceholder}}" maxlength="5000" id="Message" name="Message" data-name="Message" class="form-field taller w-input"></textarea><input class="form-field w-input" maxlength="256" name="name" data-name="Имя" placeholder="{{attr:content.form.namePlaceholder}}" type="text" id="Name" required=""/><div class="form-item"><input class="form-field w-input" maxlength="256" name="Email" data-name="Email" placeholder="{{attr:content.form.emailPlaceholder}}" type="email" id="Email" required=""/><button data-module="btn" class="form-btn"><div data-module="alpha" class="btn-bg"><div class="clip-12"><div>{{text:content.form.submitLabel}}</div></div></div></button></div></form><div data-success="" class="form-success"><h2 class="data-he sm">{{text:content.form.successHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.successTextHtml}}</h2><a data-module="btn" href="beta-apply.html" class="form-btn static w-inline-block"><div class="btn-bg gray"><div class="clip-12"><div>{{text:content.form.betaCtaLabel}}</div></div></div></a><h2 class="data-he h2 xs">{{html:content.form.founderIntroHtml}}</h2><a data-module="btn" href="founders.html" class="form-btn static w-inline-block"><div class="btn-bg"><div class="clip-12"><div>{{html:content.form.founderCtaHtml}}</div></div></div></a><link rel="prefetch" href="founders.html"/><div data-url="https://web.ssscript.app/api/founders-spots-remaining" data-module="founders-spots" class="pricing-sm darker-70 is--right">{{text:content.form.spotsLabel}}</div></div></div><div data-failure="" class="form-fail"><h2 class="data-he sm">{{text:content.form.failureHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.failureTextHtml}}</h2></div></div><div class="notice-txt">{{html:content.legalHtml}}</div></div></div></div>{{/if}}</header>
|
||||
<header id="hero" class="s h-screen"><div class="s-cont shorter"><div class="h-full between"><hgroup id="w-node-_42aec6af-ef19-ac2b-f604-ecf49ea735c6-43601640" data-module="hg" data-group="hero" class="hgroup main"><h1 class="main-h"><span class="darker-70">{{text:content.heading.muted}}</span><span>{{text:content.heading.main}}</span></h1><div class="h-txt">{{html:content.introHtml}}</div></hgroup><hgroup id="w-node-ddd50e0c-bdcb-417b-7dc2-7db828a06f46-43601640" data-module="hg" data-group="hero" class="to-left"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.0.muted}}</span><span>{{text:content.cards.0.main}}</span></h2><div class="h-txt">{{html:content.cards.0.bodyHtml}}</div></hgroup></div><div class="h-full between lower"><hgroup data-module="hg" data-group="hero"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.1.muted}}</span><span>{{text:content.cards.1.main}}</span></h2><div class="h-txt">{{html:content.cards.1.bodyHtml}}</div></hgroup><hgroup id="w-node-f82ddc17-0624-f069-9963-dda808a65750-43601640" data-module="hg" data-group="hero" class="to-right"><h2 class="main-h sm"><span class="darker-70">{{text:content.cards.2.muted}}</span><span>{{text:content.cards.2.main}}</span></h2><div class="h-txt">{{html:content.cards.2.bodyHtml}}</div></hgroup></div></div>{{#if content.accessCard.enabled}}<div class="app-w"><div id="app-data" data-module="app" class="app-item data"><div data-draggable-area="" class="app-head preview"><div class="app-head-trigs"><button data-close="" aria-label="закрыть окно" class="circle opaque"><div class="x-icon"><div class="line full x-icon rot"></div><div class="line full x-icon"></div></div></button><div class="circle opaque"></div><div class="circle opaque"></div></div></div><div class="flex-v"><div class="flex-v _w-full"><img src="{{attr:content.accessCard.iconSrc}}" loading="lazy" data-module="mouse-follow" alt="{{attr:content.accessCard.iconAlt}}" class="logo app"/><div class="logo-lockup-w"><img src="{{attr:content.accessCard.wordmarkSrc}}" loading="eager" alt="{{attr:content.accessCard.wordmarkAlt}}" class="logo-size"/><div class="notice-txt sm">{{text:content.accessCard.release}}</div></div></div><h3 data-module="text-wave" class="data-he">{{text:content.accessCard.heading}}</h3><h2 class="data-he h2">{{text:content.accessCard.description}}</h2><div class="form-element"><div data-module="form" class="form-w w-form"><form id="wf-form-sign-up" name="wf-form-sign-up" data-name="sign-up" method="get" data-form="" class="form" data-wf-page-id="69b2dc3d81980aaf43601640" data-wf-element-id="4c5736fb-5001-9c71-eaa8-239119d387ce"><textarea placeholder="{{attr:content.form.messagePlaceholder}}" maxlength="5000" id="Message" name="Message" data-name="Message" class="form-field taller w-input"></textarea><input class="form-field w-input" maxlength="256" name="name" data-name="Имя" placeholder="{{attr:content.form.namePlaceholder}}" type="text" id="Name" required=""/><div class="form-item"><input class="form-field w-input" maxlength="256" name="Email" data-name="Email" placeholder="{{attr:content.form.emailPlaceholder}}" type="email" id="Email" required=""/><button data-module="btn" class="form-btn"><div data-module="alpha" class="btn-bg"><div class="clip-12"><div>{{text:content.form.submitLabel}}</div></div></div></button></div></form><div data-success="" class="form-success"><h2 class="data-he sm">{{text:content.form.successHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.successTextHtml}}</h2><a data-module="btn" href="beta-apply.html" class="form-btn static w-inline-block"><div class="btn-bg gray"><div class="clip-12"><div>{{text:content.form.betaCtaLabel}}</div></div></div></a><h2 class="data-he h2 xs">{{html:content.form.founderIntroHtml}}</h2><a data-module="btn" href="founders.html" class="form-btn static w-inline-block"><div class="btn-bg"><div class="clip-12"><div>{{html:content.form.founderCtaHtml}}</div></div></div></a><link rel="prefetch" href="founders.html"/><div data-url="https://web.ssscript.app/api/founders-spots-remaining" data-module="founders-spots" class="pricing-sm darker-70 is--right">{{text:content.form.spotsLabel}}</div></div></div><div data-failure="" class="form-fail"><h2 class="data-he sm">{{text:content.form.failureHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.failureTextHtml}}</h2></div></div><div class="notice-txt">{{html:content.legalHtml}}</div></div></div></div>{{/if}}</header>
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
<section id="{{attr:anchor}}" class="s h-screen">{{#if content.accessCard.enabled}}<div class="app-w"><div id="app-data" data-module="app" class="app-item data"><div data-draggable-area="" class="app-head preview"><div class="app-head-trigs"><button data-close="" aria-label="закрыть" class="circle opaque"><div class="x-icon"><div class="line full x-icon rot"></div><div class="line full x-icon"></div></div></button><div class="circle opaque"></div><div class="circle opaque"></div></div></div><div class="flex-v"><div class="flex-v _w-full"><img src="{{attr:content.accessCard.iconSrc}}" loading="eager" data-module="mouse-follow" alt="{{attr:content.accessCard.iconAlt}}" class="logo app"/><div class="logo-lockup-w"><img src="{{attr:content.accessCard.wordmarkSrc}}" loading="eager" alt="{{attr:content.accessCard.wordmarkAlt}}" class="logo-size"/><div class="notice-txt sm">{{text:content.accessCard.release}}</div></div></div><h1 data-module="text-wave" class="data-he">{{text:content.accessCard.heading}}</h1><h2 class="data-he h2">{{text:content.accessCard.description}}</h2><div class="form-element"><div data-module="form" class="form-w w-form"><form id="wf-form-sign-up" name="wf-form-sign-up" data-name="sign-up" method="get" data-form="" class="form" data-wf-page-id="69b2dc3d81980aaf43601640" data-wf-element-id="3167f865-849c-497b-197f-50d61e82127f"><textarea placeholder="{{attr:content.form.messagePlaceholder}}" maxlength="5000" id="Message" name="Message" data-name="Message" class="form-field taller w-input"></textarea><input class="form-field w-input" maxlength="256" name="name" data-name="Имя" placeholder="{{attr:content.form.namePlaceholder}}" type="text" id="Name" required=""/><div class="form-item"><input class="form-field w-input" maxlength="256" name="Email" data-name="Email" placeholder="{{attr:content.form.emailPlaceholder}}" type="email" id="Email" required=""/><button data-module="btn" class="form-btn"><div data-module="alpha" class="btn-bg"><div class="clip-12"><div>{{text:content.form.submitLabel}}</div></div></div></button></div></form><div data-success="" class="form-success"><h2 class="data-he sm">{{text:content.form.successHeading}}</h2><h2 class="data-he h2 xs">{{html:content.form.successTextHtml}}</h2><a data-module="btn" href="{{attr:content.form.betaHref}}" class="form-btn static w-inline-block"><div data-module="alpha" class="btn-bg gray"><div class="clip-12"><div>{{text:content.form.betaCtaLabel}}</div></div></div></a></div></div></div><div class="notice-txt">{{html:content.legalHtml}}</div></div></div></div>{{/if}}<div class="waitlist-coll"><div class="folder-w txts w-dyn-list"><div role="list" class="folder-w txts-windows w-dyn-items">{{#each content.files}}<div role="listitem" class="app-item-dot w-dyn-item"><div id="{{attr:id}}" data-module="app" data-start="closed" class="app-item txt"><div data-draggable-area="" class="app-head"><div class="app-head-trigs"><button data-close="" class="circle red"></button><div class="circle yellow"></div><div class="circle green"></div></div><div class="app-name-w"><img src="{{attr:iconSrc}}" loading="lazy" sizes="(max-width: 1024px) 100vw, 1024px" srcset="{{attr:iconSrcset}}" alt="{{attr:iconAlt}}" class="app-icon"/><div class="app-name-txt">{{text:name}}</div></div></div><div class="text-editable"><div data-module="editable-text" class="txt-text-block editable">{{html:bodyHtml}}</div></div></div></div>{{/each}}</div></div><div class="collection-list-wrapper-3 w-dyn-list"><div data-form="duplicate" role="list" class="folders txts w-dyn-items">{{#each content.files}}<div role="listitem" class="collection-item-2 w-dyn-item"><div tabindex="0" data-target="{{attr:id}}" data-module="apple-icon" class="folder"><img class="image" src="{{attr:iconSrc}}" alt="{{attr:iconAlt}}" sizes="(max-width: 1024px) 100vw, 1024px" data-icon="" loading="eager" srcset="{{attr:iconSrcset}}"/><div data-txt="" class="text-ho"><div class="folder-title">{{text:name}}</div><div class="folder-title lower">.txt</div></div></div></div>{{/each}}</div></div></div></section>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -133,10 +133,10 @@ const blocks = [
|
|||
},
|
||||
{
|
||||
region: "cViz",
|
||||
id: "waitlist-files",
|
||||
id: "request-demo-txt-files",
|
||||
type: "staticHtml",
|
||||
template: "waitlist-files.html",
|
||||
adminLabel: "Форма ожидания и txt-файлы",
|
||||
template: "request-demo-txt-files.html",
|
||||
adminLabel: "Запрос DEMO и TXT-файлы",
|
||||
anchor: "waitlist",
|
||||
html: html.slice(waitlistFilesStart, demoVideoFolderStart),
|
||||
},
|
||||
|
|
@ -173,6 +173,8 @@ function inferFieldGroup(path) {
|
|||
if (path.startsWith("content.app.")) return "Карточка раннего доступа";
|
||||
if (path.startsWith("content.form.")) return "Форма";
|
||||
if (path === "content.legalHtml") return "Юридический блок";
|
||||
if (path.startsWith("content.legal.")) return "Юридический блок";
|
||||
if (path === "content.filesEnabled" || path.startsWith("content.files.")) return "TXT-файлы";
|
||||
if (path === "content.windowTitle" || path === "content.videoSrc") return "Видео-окно";
|
||||
if (path.startsWith("content.features.")) return "Пункты";
|
||||
if (path.startsWith("content.sliderItems.")) return "Слайдер";
|
||||
|
|
@ -448,12 +450,22 @@ const typedBlockDefinitions = {
|
|||
main: "режимы ИИ.",
|
||||
},
|
||||
introHtml: 'Разные <span class="darker-70">режимы</span> и <span class="darker-70">модели</span> для разных задач.',
|
||||
bottomInfo: {
|
||||
heading: {
|
||||
muted: "Гибкие",
|
||||
main: "режимы ИИ.",
|
||||
},
|
||||
introHtml: 'Разные <span class="darker-70">режимы</span> и <span class="darker-70">модели</span> для разных задач.',
|
||||
},
|
||||
sliderItems: demoSliderItems,
|
||||
},
|
||||
editableFields: [
|
||||
field("content.heading.muted", "Заголовок: приглушённая строка"),
|
||||
field("content.heading.main", "Заголовок: основная строка"),
|
||||
field("content.introHtml", "Вводный текст", "html"),
|
||||
field("content.heading.muted", "Приглушённая строка", "text", "text", "Верхний информационный блок"),
|
||||
field("content.heading.main", "Основная строка", "text", "text", "Верхний информационный блок"),
|
||||
field("content.introHtml", "Вводный текст", "html", "html", "Верхний информационный блок"),
|
||||
field("content.bottomInfo.heading.muted", "Приглушённая строка", "text", "text", "Нижний информационный блок"),
|
||||
field("content.bottomInfo.heading.main", "Основная строка", "text", "text", "Нижний информационный блок"),
|
||||
field("content.bottomInfo.introHtml", "Вводный текст", "html", "html", "Нижний информационный блок"),
|
||||
...sliderEditableFields(),
|
||||
],
|
||||
},
|
||||
|
|
|
|||
|
|
@ -43,6 +43,31 @@ function isTruthy(value) {
|
|||
return Boolean(value);
|
||||
}
|
||||
|
||||
function cloneValue(value) {
|
||||
return value == null ? value : JSON.parse(JSON.stringify(value));
|
||||
}
|
||||
|
||||
function allBlocks(model) {
|
||||
return (model.regions ?? []).flatMap((region) => region.blocks ?? []);
|
||||
}
|
||||
|
||||
function applySharedDemoRequest(model) {
|
||||
const blocks = allBlocks(model);
|
||||
const source = blocks.find((block) => block.id === "hero-waitlist");
|
||||
|
||||
if (!source?.content) return;
|
||||
|
||||
for (const block of blocks) {
|
||||
if (block.id === source.id || block.type !== "waitlistFiles") continue;
|
||||
|
||||
block.content ??= {};
|
||||
block.content.accessCard = cloneValue(source.content.accessCard);
|
||||
block.content.form = cloneValue(source.content.form);
|
||||
block.content.legal ??= { enabled: true, html: "" };
|
||||
block.content.legal.html = source.content.legalHtml ?? block.content.legal.html ?? "";
|
||||
}
|
||||
}
|
||||
|
||||
function escapeHtml(value) {
|
||||
return String(value)
|
||||
.replaceAll("&", "&")
|
||||
|
|
@ -206,6 +231,8 @@ async function renderSections() {
|
|||
return output.join("");
|
||||
}
|
||||
|
||||
applySharedDemoRequest(page);
|
||||
|
||||
let output = renderTemplate(shell, { id: page.slug, ...page });
|
||||
|
||||
if (output.includes(REGION_TOKEN.sections)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue