asdasd
This commit is contained in:
@@ -258,131 +258,10 @@
|
||||
pluginsList.push('gjs-preset-newsletter');
|
||||
}
|
||||
|
||||
// Speicherkonfiguration extrahieren, um die URL in onLoad zu verwenden.
|
||||
// Verwenden Sie immer die zentrale API-Basis
|
||||
const storageBase = B.API_BASE;
|
||||
|
||||
// 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
|
||||
};
|
||||
},
|
||||
};
|
||||
const storageConf = {
|
||||
autoload: false,
|
||||
autosave: false,
|
||||
};
|
||||
|
||||
var ed = grapesjs.init({
|
||||
container: '#gjs',
|
||||
|
||||
Reference in New Issue
Block a user