ImageUpload: local storage erste Version
[kivitendo-erp.git] / js / kivi.FileDB.js
1 namespace("kivi.FileDB", function(ns) {
2   "use strict";
3
4   const database = 'kivi';
5   const store    = 'files';
6   const db_version = 1;
7
8   // IndexedDB
9   const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB;
10
11   // Create/open database
12   let db;
13   let request = indexedDB.open(database, db_version);
14   request.onupgradeneeded = (event) => {
15     ns.create_image_store(event.target.result);
16   };
17   request.onerror = ns.onerror;
18   request.onsuccess = () => {
19     db = request.result;
20
21     db.onerror = (event) => {
22       console.error("Error creating/accessing IndexedDB database");
23       console.error(event);
24     };
25
26     // Interim solution for Google Chrome to create an objectStore. Will be deprecated
27     if (db.setVersion) {
28       if (db.version != db_version) {
29         let setVersion = db.setVersion(db_version);
30         setVersion.onsuccess = () =>  {
31           ns.create_image_store(db);
32         };
33       }
34     }
35   };
36
37   ns.create_image_store = function (db) {
38     db.createObjectStore(store, { autoIncrement : true });
39   };
40
41   ns.store_image = function (blob, filename, success) {
42     let put_request = ns.open_store("readwrite").add(blob, filename);
43
44     put_request.onsuccess = success;
45     put_request.on_error = ns.onerror;
46   };
47
48   ns.retrieve_image = function(key, success) {
49     let get_request = ns.open_store().objectStore(store).get(key);
50
51     get_request.onsuccess = success;
52     get_request.onerror = request.onerror;
53   };
54
55   ns.retrieve_all = function(success) {
56     let request = ns.open_store().getAll();
57     request.onsuccess = (event) => { success(event.target.result); };
58     request.onerror = ns.error;
59   };
60
61   ns.retrieve_all_keys = function(success) {
62     let request = ns.open_store().getAllKeys();
63     request.onsuccess = (event) => { success(event.target.result); };
64     request.onerror = ns.error;
65   };
66
67   ns.delete_all= function() {
68     ns.retrieve_all_keys((keys) => {
69       keys.forEach((key) => ns.delete_key(key));
70     });
71   };
72
73   ns.delete_key= function(key, success) {
74     let request = ns.open_store("readwrite").delete(key);
75     request.onsuccess = (event) => { if (success) success(event.target.result); };
76     request.onerror = ns.error;
77   };
78
79   ns.open_store = function(mode = "readonly")  {
80     return db.transaction([store], mode).objectStore(store);
81   };
82
83   ns.onerror = (event) => {
84     console.error("Error creating/accessing IndexedDB database");
85     console.error(event.errorState);
86   };
87 });