asdasd
This commit is contained in:
@@ -258,131 +258,10 @@
|
|||||||
pluginsList.push('gjs-preset-newsletter');
|
pluginsList.push('gjs-preset-newsletter');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Speicherkonfiguration extrahieren, um die URL in onLoad zu verwenden.
|
const storageConf = {
|
||||||
// Verwenden Sie immer die zentrale API-Basis
|
autoload: false,
|
||||||
const storageBase = B.API_BASE;
|
autosave: false,
|
||||||
|
};
|
||||||
// Robustes Anhängen von Query-Parametern.
|
|
||||||
// Prüft, ob 'storageBase' bereits Query-Parameter enthält ('?')
|
|
||||||
const actionSeparator = storageBase.indexOf('?') === -1 ? '?' : '&';
|
|
||||||
|
|
||||||
const resourceName = (window.__editorMode || 'templates');
|
|
||||||
const entityId = (window.__editorId || 0);
|
|
||||||
const loadUrl = `${storageBase}${actionSeparator}action=${encodeURIComponent(resourceName)}.get&resource=${encodeURIComponent(resourceName)}&id=${encodeURIComponent(entityId)}`;
|
|
||||||
const storeUrl = `${storageBase}${actionSeparator}action=${encodeURIComponent(resourceName)}.update&resource=${encodeURIComponent(resourceName)}&id=${encodeURIComponent(entityId)}`;
|
|
||||||
|
|
||||||
const storageConf = {
|
|
||||||
type: 'remote',
|
|
||||||
// urlLoad: loadUrl, // ENTFERNT (korrekt, da customFetch verwendet wird)
|
|
||||||
urlStore: storeUrl,
|
|
||||||
|
|
||||||
// 🛑 KRITISCHER ABSCHNITT: customFetch MUSS DIE ERWARTETE SIGNATUR HABEN: customFetch(url, options)
|
|
||||||
customFetch: async (url, options) => { // <<< KORREKTUR DER SIGNATUR
|
|
||||||
// 1. Log Start
|
|
||||||
log('STORAGE START', 'Template wird geladen.', '#008080', 'info', true);
|
|
||||||
// 2. Log Link
|
|
||||||
log('API REQUEST', `Link für den API Request: ${loadUrl}`, '#4682B4', 'log', false);
|
|
||||||
|
|
||||||
const fetchOptions = {
|
|
||||||
method: 'GET',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
// Wichtig: Die übergebenen Optionen nicht vergessen zu mergen
|
|
||||||
...options
|
|
||||||
};
|
|
||||||
fetchOptions.headers = {
|
|
||||||
...(options?.headers || {}),
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
};
|
|
||||||
if (!fetchOptions.credentials || fetchOptions.credentials === 'omit') {
|
|
||||||
fetchOptions.credentials = 'include';
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = {};
|
|
||||||
let rawResponse = '';
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Verwendung der intern definierten loadUrl
|
|
||||||
const response = await fetch(loadUrl, fetchOptions);
|
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
const errorText = await response.text();
|
|
||||||
throw new Error(`HTTP-Fehler ${response.status}: ${errorText}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Holen des Raw Texts, um ihn loggen und parsen zu können
|
|
||||||
rawResponse = await response.text();
|
|
||||||
|
|
||||||
// 3. Log Result
|
|
||||||
log('API RESPONSE', 'Result vom API Request (Raw Text/JSON):', '#4682B4', 'log', false);
|
|
||||||
console.log(rawResponse); // Loggt den reinen String für die Analyse
|
|
||||||
|
|
||||||
// Versuch der JSON-Analyse (um den GrapesJS-Fehler zu vermeiden)
|
|
||||||
try {
|
|
||||||
data = JSON.parse(rawResponse);
|
|
||||||
log('STORAGE PARSE', 'Raw Response als JSON geparst.', 'green');
|
|
||||||
} catch (e) {
|
|
||||||
log('STORAGE PARSE ERROR', `Fehler beim Parsen der Antwort: ${e.message}. Antwort war wahrscheinlich kein gültiges JSON.`, 'red', 'error', true);
|
|
||||||
// Im Falle eines Parsing-Fehlers, leeres Objekt für Fallback-Logik
|
|
||||||
data = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (e) {
|
|
||||||
log('STORAGE FETCH ERROR', `Fehler beim Abruf: ${e.message}`, 'red', 'error', true);
|
|
||||||
// Sicherstellen, dass die Promise mit einem leeren Zustand erfüllt wird
|
|
||||||
// Wir müssen dennoch den Log End ausführen, bevor wir zurückkehren
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. Log End
|
|
||||||
log('STORAGE END', 'Template wurde geladen.', '#008080', 'info', true);
|
|
||||||
|
|
||||||
// --- Logik zur Extraktion des GrapesJS States aus der API-Antwort ---
|
|
||||||
let state = {};
|
|
||||||
|
|
||||||
if (data && data.gjs_data) {
|
|
||||||
log('STORAGE LOAD', 'Voller GrapesJS State aus "gjs_data" geladen.', 'green');
|
|
||||||
state = data.gjs_data;
|
|
||||||
}
|
|
||||||
else if (data && data.content) {
|
|
||||||
try {
|
|
||||||
const parsedState = JSON.parse(data.content);
|
|
||||||
log('STORAGE LOAD', 'Voller GrapesJS State aus "content" (JSON-String) geladen.', 'yellow');
|
|
||||||
state = parsedState;
|
|
||||||
} catch (e) {
|
|
||||||
log('STORAGE ERROR', `Fehler beim Parsen von "content": ${e.message}.`, 'red', 'error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// HINWEIS: Füge Fallback für "topContent" hinzu, basierend auf dem Server-Log
|
|
||||||
else if (data && data.topContent) {
|
|
||||||
try {
|
|
||||||
const parsedState = JSON.parse(data.topContent);
|
|
||||||
log('STORAGE LOAD', 'Voller GrapesJS State aus "topContent" (JSON-String) geladen.', 'green');
|
|
||||||
state = parsedState;
|
|
||||||
} catch (e) {
|
|
||||||
log('STORAGE ERROR', `Fehler beim Parsen von "topContent": ${e.message}.`, 'red', 'error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
log('STORAGE WARNING', 'Kein vollständiger GrapesJS State gefunden. Editor lädt leeren State.', 'orange', 'warn');
|
|
||||||
}
|
|
||||||
|
|
||||||
// customFetch MUSS den geladenen State zurückgeben
|
|
||||||
return state;
|
|
||||||
},
|
|
||||||
// --- ENDE customFetch ---
|
|
||||||
|
|
||||||
// onLoad ist bei customFetch nicht mehr nötig
|
|
||||||
// onLoad: (response) => { ... },
|
|
||||||
|
|
||||||
// KRITISCH: Speichert den vollen State als JSON-String im Feld 'json_content'.
|
|
||||||
onStore: (data) => {
|
|
||||||
// ACHTUNG: ed existiert hier nicht, muss über window.__gjs geladen werden ODER ed als Argument akzeptiert werden
|
|
||||||
const ed = window.__gjs;
|
|
||||||
return {
|
|
||||||
json_content: JSON.stringify(data),
|
|
||||||
html: ed ? ed.getHtml() : '' // Fügen Sie den HTML-Output zur Abwärtskompatibilität hinzu
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
var ed = grapesjs.init({
|
var ed = grapesjs.init({
|
||||||
container: '#gjs',
|
container: '#gjs',
|
||||||
|
|||||||
Reference in New Issue
Block a user