Files
Hellion-NewTab/src/js/storage.js
T
JonKazama-Hellion 00baa0231b feat(ui): Custom Dialog-System, Onboarding und Backup-Reminder
- HellionDialog.alert/confirm ersetzt alle nativen confirm() und alert() Aufrufe
- 6-stufiger Onboarding-Flow beim ersten Start (Boards, Themes, Features, Backup)
- Backup-Reminder erinnert alle 7 Tage an JSON-Export
- innerHTML komplett durch createElement/createElementNS ersetzt (XSS-Schutz)
- Drag & Drop Inline-Styles durch CSS-Klassen ersetzt
2026-03-21 19:08:17 +01:00

60 lines
2.1 KiB
JavaScript

/* =============================================
HELLION NEWTAB — storage.js
Abstraction Layer: chrome.storage.local / localStorage
============================================= */
const Store = {
QUOTA_WARNING_BYTES: 8 * 1024 * 1024, // 8 MB Warnung (Limit ist 10 MB)
get(key) {
return new Promise(resolve => {
if (typeof chrome !== 'undefined' && chrome.storage) {
chrome.storage.local.get([key], r => resolve(r[key] ?? null));
} else {
try { resolve(JSON.parse(localStorage.getItem(key))); }
catch { resolve(null); }
}
});
},
set(key, value) {
return new Promise((resolve, reject) => {
if (typeof chrome !== 'undefined' && chrome.storage) {
chrome.storage.local.set({ [key]: value }, () => {
if (chrome.runtime.lastError) {
console.error('Storage-Fehler:', chrome.runtime.lastError.message);
HellionDialog.alert('Speicher voll! Bitte lösche alte Boards oder das Hintergrundbild, um Platz zu schaffen.', { type: 'danger', title: 'Speicher voll' });
reject(new Error(chrome.runtime.lastError.message));
return;
}
resolve();
});
} else {
try {
localStorage.setItem(key, JSON.stringify(value));
resolve();
} catch (e) {
console.error('Storage-Fehler:', e.message);
HellionDialog.alert('Speicher voll! Bitte lösche alte Boards oder das Hintergrundbild, um Platz zu schaffen.', { type: 'danger', title: 'Speicher voll' });
reject(e);
}
}
});
},
async checkQuota() {
if (typeof chrome !== 'undefined' && chrome.storage && chrome.storage.local.getBytesInUse) {
return new Promise(resolve => {
chrome.storage.local.getBytesInUse(null, bytes => {
if (bytes > Store.QUOTA_WARNING_BYTES) {
const usedMB = (bytes / 1024 / 1024).toFixed(1);
console.warn('Storage-Warnung: ' + usedMB + ' MB von 10 MB belegt.');
}
resolve(bytes);
});
});
}
return 0;
}
};