PageSourceSearch

https://www.lohnsteuer-kompakt.de/js/indexeddb.js?v=rev_28344_20260923

js lohnsteuer-kompakt.de collected 2026-09-24 10:08:12 UTC 6,379 bytes, 184 lines download raw bytes

1const dbName = "StIndexedDB"; // Name der Datenbank
2const storeName = "content"; // Name des ObjectStores
3const versNr = 9;
4
5//const request = indexedDB.open(dbName, 1);
6//openDB();
7
8//insertOrUpdateRecord('123', 'content 123', 10);
9
10//openDB();
11
12//indexedDB.deleteDatabase(dbName);
13//location.reload();  // Seite neu laden
14
15
16function openDB() {
17
18    return new Promise((resolve, reject) => {
19        const request = indexedDB.open(dbName, versNr);
20        request.onupgradeneeded = function(event) {
21
22            const db = event.target.result;
23
24            if (!db.objectStoreNames.contains(storeName)) {
25                let objectStore = db.createObjectStore(storeName, { keyPath: "id" });
26                // Erstelle Indizes für andere Felder
27                objectStore.createIndex("content", "content", { unique: false });
28                objectStore.createIndex("kundenaction_id", "kundenaction_id", { unique: false });
29                objectStore.createIndex("url", "url", { unique: false });
30                objectStore.createIndex("steuerjahr", "steuerjahr", { unique: false });
31                objectStore.createIndex("ablaufdatum", "ablaufdatum", { unique: false });
32                objectStore.createIndex("control", "control", { unique: false });
33            }
34        };
35
36        //request.onsuccess = (event) => resolve(event.target.result);
37        //request.onerror = (event) => reject(event.target.error);
38        request.onsuccess = function(event) {
39            //alert("OK:" + event.target.result);
40            resolve(event.target.result);
41        };
42        request.onerror = function(event) {
43            //alert("Fehler:" + event.target.error);
44            reject(event.target.error);
45        };
46        request.onblocked = function() {
47            //alert("⚠️ Das Upgrade ist blockiert. Schließe alle anderen Tabs.");
48        };
49
50    });
51}
52
53async function insertOrUpdateRecord(id, content, aktiv_minuten = 0, control = null) {
54    const db = await openDB();
55    return new Promise((resolve, reject) => {
56        // Starte eine Transaktion im Read-Write-Modus
57        const transaction = db.transaction(storeName, "readwrite");
58        const store = transaction.objectStore(storeName);
59
60        const currentDate = new Date();
61        currentDate.setMinutes(currentDate.getMinutes() + aktiv_minuten);  // 3 Minuten hinzufügen
62
63        const data = {
64            id: id,
65            content: content,
66            ablaufdatum: currentDate,
67            control: control
68        };
69
70        const request = store.put(data); // `put` fügt ein oder überschreibt
71
72        request.onsuccess = () => resolve("Daten erfolgreich gespeichert!");
73        request.onerror = () => reject("Fehler beim Einfügen der Daten");
74    });
75}
76
77async function IndexedDB_getRecord(url, aktiv_minuten = 0, update_el = null) {
78    let id = url.replace(/\//g, '::');
79
80    const db = await openDB();
81    return new Promise((resolve, reject) => {
82        // Starte eine Transaktion im Read-Write-Modus
83        const transaction = db.transaction(storeName, "readwrite");
84        const store = transaction.objectStore(storeName);
85
86        const getRequest = store.get(id); // Hole den Datensatz mit der ID
87
88        getRequest.onsuccess = function() {
89            const record = getRequest.result;
90            var content;
91
92            if (record) {
93                const currentDate = new Date();
94                const expirationDate = new Date(record.ablaufdatum);
95                if ((expirationDate > currentDate && aktiv_minuten > 0) || aktiv_minuten == 0) {
96                    // Wenn das Ablaufdatum nicht abgelaufen ist ODER kein Ablaufdatum gestetzt ist
97                    content = record.content;
98
99                    // Update im Frontend
100                    if(update_el){
101                        jQuery(update_el).html(content);
102                    }else{
103                        (new Function(content))();
104                    }
105                } else {
106                    // Der Datensatz ist abgelaufen.
107                    content = null;
108                }
109            } else {
110                // Datensatz mit der ID nicht gefunden.
111                content = null;
112            }
113
114
115
116            if(content == null || aktiv_minuten == 0){
117                //leer wird gesetzt
118
119                jQuery.ajax({
120                    url: url,
121                    type: 'POST',
122                    dataType: 'json',
123                    cache: false, timeout: 60000,
124                    success: function(response){
125                        if (response.script) {
126                            content = response.script;
127                        }else if(response){
128                            content = response;
129                        }
130
131                        if (content != null) {
132                            // Save in IndexedDB
133                            insertOrUpdateRecord(id, content, aktiv_minuten);
134
135                            // Update im Frontend
136                            if(update_el){
137                                jQuery(update_el).html(content);
138                            }else{
139                                (new Function(content))();
140                            }
141                        }
142                    },
143                    error: function(obj, strError){
144                        log_jquery_ajax_errors(this.url, url.replace('/', '::'), strError);
145                    }
146                });
147            }
148
149        };
150
151
152    });
153}
154
155const IndexedDB_deleteDatabase = () => {
156    const request = indexedDB.deleteDatabase(dbName);
157
158    request.onsuccess = () => {
159        console.log(`Database '${dbName}' deleted successfully`);
160    };
161
162    request.onerror = (event) => {
163        console.error(`Error deleting database '${dbName}':`, event.target.error);
164    };
165
166    request.onblocked = () => {
167        console.warn(`Database deletion is blocked. Close all connections and try again.`);
168    };
169};
170
171async function deleteAllIndexedDBs() {
172    if (!window.indexedDB.databases) {
173        console.warn("Diese Funktion wird in deinem Browser möglicherweise nicht unterstützt.");
174        return;
175    }
176
177    const databases = await window.indexedDB.databases();
178    for (const db of databases) {
179        if (db.name) {
180            console.log(`Lösche Datenbank: ${db.name}`);
181            indexedDB.deleteDatabase(db.name);
182        }
183    }
184}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.