Files
Housekeeping-web-admin/node_modules/@base44/vite-plugin/dist/capabilities/inline-edit/dom-utils.js
T
2026-06-24 09:48:54 +02:00

59 lines
1.9 KiB
JavaScript

const FOCUS_STYLE_ID = "visual-edit-focus-styles";
const EDITABLE_TAGS = [
"div", "p", "h1", "h2", "h3", "h4", "h5", "h6",
"span", "li", "td", "a", "button", "label",
];
export const isStaticArrayTextElement = (element) => {
return !!element.dataset.arrField;
};
const passesStructuralChecks = (element) => {
if (!EDITABLE_TAGS.includes(element.tagName.toLowerCase()))
return false;
if (!element.textContent?.trim())
return false;
if (element.querySelector("img, video, canvas, svg"))
return false;
if (element.children?.length > 0)
return false;
return true;
};
export const injectFocusOutlineCSS = () => {
if (document.getElementById(FOCUS_STYLE_ID))
return;
const style = document.createElement("style");
style.id = FOCUS_STYLE_ID;
style.textContent = `
[data-selected="true"][contenteditable="true"]:focus {
outline: none !important;
}
`;
document.head.appendChild(style);
};
export const removeFocusOutlineCSS = () => {
document.getElementById(FOCUS_STYLE_ID)?.remove();
};
export const selectText = (element) => {
const range = document.createRange();
range.selectNodeContents(element);
const selection = window.getSelection();
selection?.removeAllRanges();
selection?.addRange(range);
};
export const isEditableTextElement = (element) => {
if (!(element instanceof HTMLElement))
return false;
if (!passesStructuralChecks(element))
return false;
if (isStaticArrayTextElement(element))
return true;
if (element.dataset.dynamicContent === "true")
return false;
return true;
};
export const shouldEnterInlineEditingMode = (element) => {
if (!(element instanceof HTMLElement) || element.dataset.selected !== "true") {
return false;
}
return isEditableTextElement(element);
};
//# sourceMappingURL=dom-utils.js.map