Update NODEDC admin content and modules

This commit is contained in:
dcconstructions
2026-06-27 11:01:11 +03:00
parent 69e2b05fc2
commit bc0da49506
24 changed files with 1320 additions and 1049 deletions
+8 -1
View File
@@ -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;
}
+23 -13
View File
@@ -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";