ngx-xtroedge-cms 1.3.13 → 1.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.global.js +4 -4
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -431,7 +431,7 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
431
431
|
this.defaultLanguage = this.config.defaultLanguage || this.languages[0] || "en";
|
|
432
432
|
this.highlightColor = this.config.highlightColor || "#00C853";
|
|
433
433
|
this.historyRetentionMs = (this.config.historyRetentionDays || 7) * 24 * 60 * 60 * 1e3;
|
|
434
|
-
this.currentLang = this.
|
|
434
|
+
this.currentLang = this.detectCurrentLanguage();
|
|
435
435
|
this.siteIdentifier = this.resolveSiteIdentifier();
|
|
436
436
|
const savedColor = localStorage.getItem("xtroedge_theme_color");
|
|
437
437
|
if (savedColor) this.highlightColor = savedColor;
|
|
@@ -932,12 +932,28 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
932
932
|
}
|
|
933
933
|
return text;
|
|
934
934
|
}
|
|
935
|
+
hasEditableChildren(el) {
|
|
936
|
+
return !!el.querySelector("[data-cms]");
|
|
937
|
+
}
|
|
938
|
+
setDirectTextContent(el, val) {
|
|
939
|
+
if (this.hasEditableChildren(el)) {
|
|
940
|
+
const textNodes = [];
|
|
941
|
+
for (let i = 0; i < el.childNodes.length; i++) {
|
|
942
|
+
if (el.childNodes[i].nodeType === Node.TEXT_NODE) textNodes.push(el.childNodes[i]);
|
|
943
|
+
}
|
|
944
|
+
if (textNodes.length > 0) textNodes[0].textContent = val;
|
|
945
|
+
else el.prepend(document.createTextNode(val));
|
|
946
|
+
} else {
|
|
947
|
+
el.textContent = val;
|
|
948
|
+
}
|
|
949
|
+
}
|
|
935
950
|
// ===============================================
|
|
936
951
|
// ELEMENT EDITING
|
|
937
952
|
// ===============================================
|
|
938
953
|
attachElement(el, key) {
|
|
954
|
+
const getText = () => this.hasEditableChildren(el) ? this.getDirectTextContent(el).trim() : el.textContent?.trim() || "";
|
|
939
955
|
const blurHandler = () => {
|
|
940
|
-
const text =
|
|
956
|
+
const text = getText();
|
|
941
957
|
const currentVal = this.getPageText(key);
|
|
942
958
|
if (text !== currentVal) this.onTextChanged(key, text);
|
|
943
959
|
};
|
|
@@ -948,7 +964,7 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
948
964
|
}
|
|
949
965
|
};
|
|
950
966
|
const inputHandler = () => {
|
|
951
|
-
const text =
|
|
967
|
+
const text = getText();
|
|
952
968
|
const currentVal = this.getPageText(key);
|
|
953
969
|
if (text !== currentVal) this.onTextChanged(key, text);
|
|
954
970
|
};
|
|
@@ -977,7 +993,7 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
977
993
|
}
|
|
978
994
|
enableElementEdit(el, _key, blurH, keyH, inputH, clickH) {
|
|
979
995
|
const val = this.getPageText(_key);
|
|
980
|
-
if (val) el
|
|
996
|
+
if (val) this.setDirectTextContent(el, val);
|
|
981
997
|
el.setAttribute("contenteditable", "true");
|
|
982
998
|
el.style.outline = `2px dashed ${this.highlightColor}`;
|
|
983
999
|
el.style.outlineOffset = "-2px";
|
|
@@ -998,7 +1014,7 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
998
1014
|
el.style.transition = "";
|
|
999
1015
|
el.style.minWidth = "";
|
|
1000
1016
|
const val = this.getPageText(_key);
|
|
1001
|
-
if (val) el
|
|
1017
|
+
if (val) this.setDirectTextContent(el, val);
|
|
1002
1018
|
el.removeEventListener("blur", blurH);
|
|
1003
1019
|
el.removeEventListener("keydown", keyH);
|
|
1004
1020
|
el.removeEventListener("input", inputH);
|
|
@@ -1016,7 +1032,9 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
1016
1032
|
for (const [el, info] of this.managedElements) {
|
|
1017
1033
|
if (document.activeElement === el) continue;
|
|
1018
1034
|
const val = this.getPageText(info.key);
|
|
1019
|
-
if (val
|
|
1035
|
+
if (!val) continue;
|
|
1036
|
+
const current = this.hasEditableChildren(el) ? this.getDirectTextContent(el).trim() : el.textContent?.trim() || "";
|
|
1037
|
+
if (val !== current) this.setDirectTextContent(el, val);
|
|
1020
1038
|
}
|
|
1021
1039
|
this.observer?.observe(document.body, { childList: true, subtree: true });
|
|
1022
1040
|
}
|
|
@@ -1361,8 +1379,11 @@ var XtroedgeCMS = class _XtroedgeCMS {
|
|
|
1361
1379
|
}
|
|
1362
1380
|
}
|
|
1363
1381
|
hasSection(type) {
|
|
1364
|
-
|
|
1365
|
-
|
|
1382
|
+
const slug = type === "header" ? "/header" : "/footer";
|
|
1383
|
+
for (const [, info] of this.managedElements) {
|
|
1384
|
+
if (info.sectionSlug === slug) return true;
|
|
1385
|
+
}
|
|
1386
|
+
return false;
|
|
1366
1387
|
}
|
|
1367
1388
|
async loadPageContent(status) {
|
|
1368
1389
|
this.setLoading(true);
|