-
Notifications
You must be signed in to change notification settings - Fork 2
/
Database.js
106 lines (71 loc) · 2.35 KB
/
Database.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// C.R.U.D. for key/value pairs
//
// to delete the db, enter the following in the js console:
// indexedDB.deleteDatabase("mokshadb");
//
function Database() {
this.name = "mokshadb";
this.db = null;
this.onerror = function(e) {
console.log("MokshaDB error: "+ e.value);
};
this.open = function(callback) {
var self = this; //<- for use inside of nested event handlers
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var version = 1;
var request = indexedDB.open(this.name, version);
request.onerror = this.onerror;
request.onupgradeneeded = function(e) {
self.db = e.target.result;
e.target.transaction.onerror = self.onerror;
if (self.db.objectStoreNames.contains(self.name)) {
self.db.deleteObjectStore(self.name);
}
self.db.createObjectStore(self.name, {keyPath:"key"});
};
request.onsuccess = function(e) {
self.db = e.target.result;
if (callback) { callback(); }
};
};
// CRUD functions:
this.create = function(key, value, callback) {
var trans = this.db.transaction([this.name], "readwrite");
var store = trans.objectStore(this.name);
var request = store.put({"key":key, "value":value});
request.onerror = this.onerror;
request.onsuccess = function(e) {
if (callback) { callback(); }
};
};
this.read = function(callback) {
var trans = this.db.transaction([this.name], "readwrite");
var store = trans.objectStore(this.name);
var request = store.openCursor();
var data = {};
request.onerror = this.onerror;
request.onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
var row = cursor.value;
data[row.key] = row.value;
cursor.continue();
} else {
if (callback) { callback(data); }
}
};
};
this.update = function(key, value, callback) {
this.delete(key);
this.create(key, value, callback);
};
this.delete = function(key, callback) {
var trans = this.db.transaction([this.name], "readwrite");
var store = trans.objectStore(this.name);
var request = store.delete(key);
request.onerror = this.onerror;
request.onsuccess = function(e) {
if (callback) { callback(); }
};
};
}