diff --git a/config/current.ver b/config/current.ver
index 474ad5b..e526099 100644
--- a/config/current.ver
+++ b/config/current.ver
@@ -1 +1 @@
-1.1.36
\ No newline at end of file
+1.1.37
\ No newline at end of file
diff --git a/public/assets/js/bridge/rte-editor.js b/public/assets/js/bridge/rte-editor.js
index b8255b7..e724c17 100644
--- a/public/assets/js/bridge/rte-editor.js
+++ b/public/assets/js/bridge/rte-editor.js
@@ -173,31 +173,6 @@
const isText = (component.is && component.is('text'))
|| (component.get && component.get('type') === 'text');
try {
- if (isText && component.components) {
- try {
- const comps = component.components();
- if (comps && comps.reset) comps.reset();
- } catch {}
- try {
- const wrapper = document.createElement('div');
- wrapper.innerHTML = content;
- const newComps = [];
- wrapper.childNodes.forEach((node) => {
- if (node.nodeType === 3) {
- const text = node.textContent || '';
- newComps.push({ type: 'textnode', content: text });
- } else if (node.nodeType === 1) {
- const tag = node.tagName ? node.tagName.toLowerCase() : '';
- if (tag === 'br') {
- newComps.push({ tagName: 'br', void: true });
- } else {
- newComps.push(node.outerHTML);
- }
- }
- });
- component.components(newComps.length ? newComps : content);
- } catch {}
- }
if (component.set) component.set('content', content);
} catch {}
if (component.view && typeof component.view.render === 'function') {
diff --git a/public/editor/bridge-core.js b/public/editor/bridge-core.js
index 30f48dc..810865b 100644
--- a/public/editor/bridge-core.js
+++ b/public/editor/bridge-core.js
@@ -360,23 +360,13 @@
normalized: normalizeHtml(composite),
};
};
- const buildTextComponentsFromHtml = (html) => {
- const wrapper = document.createElement('div');
- wrapper.innerHTML = String(html || '');
- const newComps = [];
- wrapper.childNodes.forEach((node) => {
- if (node.nodeType === 3) {
- newComps.push({ type: 'textnode', content: node.textContent || '' });
- } else if (node.nodeType === 1) {
- const tag = node.tagName ? node.tagName.toLowerCase() : '';
- if (tag === 'br') {
- newComps.push({ tagName: 'br', void: true });
- } else {
- newComps.push(node.outerHTML);
- }
- }
- });
- return newComps.length ? newComps : html;
+ const normalizeViewHtmlForModel = (html) => {
+ return String(html || '')
+ .replace(/
]*>/gi, '
')
+ .replace(/\sdata-gjs-type="[^"]*"/gi, '')
+ .replace(/\sdraggable="[^"]*"/gi, '')
+ .replace(/\scontenteditable="[^"]*"/gi, '')
+ .trim();
};
const storeSnapshot = (model, snap) => {
if (!model || !snap) return;
@@ -413,9 +403,6 @@
: null);
if (!stored || !stored.normalized) return;
try {
- if (target.components) {
- target.components(buildTextComponentsFromHtml(stored.html));
- }
target.set('content', stored.html);
target.trigger && target.trigger('change:content');
try { console.log('[PLAIN TEXT RESTORE] Inhalt wiederhergestellt.'); } catch {}
@@ -441,18 +428,23 @@
const syncTextFromViewOnDeselect = (model) => {
const target = resolveTextModel(model);
if (!isTextLike(target) || !target.view || !target.view.el || syncing.has(target)) return;
- const viewHtml = String(target.view.el.innerHTML || '').trim();
+ const viewHtml = normalizeViewHtmlForModel(target.view.el.innerHTML || '');
if (!viewHtml) return;
- const modelHtml = String(target.get ? target.get('content') || '' : '').trim();
+ const modelHtml = normalizeViewHtmlForModel(target.get ? target.get('content') || '' : '');
if (viewHtml === modelHtml) return;
try {
syncing.add(target);
- if (target.components) target.components(buildTextComponentsFromHtml(viewHtml));
if (target.set) target.set('content', viewHtml);
target.trigger && target.trigger('change:content');
+ if (target.view && typeof target.view.render === 'function') {
+ target.view.render();
+ }
+ if (editor && typeof editor.trigger === 'function') {
+ editor.trigger('component:update', target);
+ }
const reapply = () => {
try {
- const current = String(target.view.el.innerHTML || '').trim();
+ const current = normalizeViewHtmlForModel(target.view.el.innerHTML || '');
if (current !== viewHtml) target.view.el.innerHTML = viewHtml;
} catch {}
};