@contentstack/live-preview-utils
Version:
Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.
63 lines (62 loc) • 1.85 kB
JavaScript
import "../../chunk-5WRI5ZAA.js";
// src/visualBuilder/utils/getCsDataOfElement.ts
import { extractDetailsFromCslp } from "../../cslp/cslpdata.js";
import { DATA_CSLP_ATTR_SELECTOR } from "./constants.js";
function getCsDataOfElement(event) {
const targetElement = event.target;
if (!targetElement) {
return;
}
const editableElement = targetElement.closest("[data-cslp]");
if (!editableElement) {
return;
}
const cslpData = editableElement.getAttribute("data-cslp");
if (!cslpData) {
return;
}
const fieldMetadata = extractDetailsFromCslp(cslpData);
return {
editableElement,
cslpData,
fieldMetadata
};
}
function getPrefix(cslp) {
let prefix;
if (cslp.startsWith("v2:")) {
const variantPrefix = cslp.split(":")[1];
const content_type_uid = variantPrefix.split(".")[0];
const euid = variantPrefix.split(".")[1].split("_")[0];
const locale = variantPrefix.split(".")[2];
prefix = `${content_type_uid}.${euid}.${locale}`;
} else {
prefix = cslp;
}
return prefix.split(".").slice(0, 3).join(".");
}
function getDOMEditStack(ele) {
const cslpSet = [];
let curr = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
while (curr) {
const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);
if (!cslp) {
curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
continue;
}
const entryPrefix = getPrefix(cslp);
const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || "").startsWith(
entryPrefix
);
if (!hasSamePrevPrefix) {
cslpSet.unshift(cslp);
}
curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
}
return cslpSet.filter((cslp) => cslp).map((cslp) => extractDetailsFromCslp(cslp));
}
export {
getCsDataOfElement,
getDOMEditStack
};
//# sourceMappingURL=getCsDataOfElement.js.map