Skip to content

Instantly share code, notes, and snippets.

@sempostma
Created February 10, 2019 16:01
Show Gist options
  • Save sempostma/02bee6114479f7e954ae8f8266181ae7 to your computer and use it in GitHub Desktop.
Save sempostma/02bee6114479f7e954ae8f8266181ae7 to your computer and use it in GitHub Desktop.
indexeddb-wrapper.js
function IndexedDBStorage(name) {
this.name = name;
var self = this;
this.ready = new Promise(function(resolve, reject) {
var request = (window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB)
.open(location.origin);
request.onupgradeneeded = function(e) {
self.db = e.target.result;
self.db.createObjectStore(name);
};
request.onsuccess = function(e) {
self.db = e.target.result;
resolve();
};
request.onerror = function(e) {
self.db = e.target.result;
reject(e);
};
});
}
IndexedDBStorage.prototype.get = function (key) {
var self = this;
return this.ready.then(function() {
return new Promise(function(resolve, reject) {
var request = self.getStore().get(key);
request.onsuccess = function(e) { resolve(e.target.result); };
request.onerror = reject;
});
});
};
IndexedDBStorage.prototype.getStore = function () {
var transaction = this.db.transaction([this.name], 'readwrite');
transaction.onabort = function(e) {
var error = e.target.error;
if (error.name === 'QuotaExceededError') {
alert('Unable to store data because you\'ve reached the maximum storage quota.');
}
};
return transaction.objectStore(this.name);
};
IndexedDBStorage.prototype.set = function (key, value) {
var self = this;
return this.ready.then(function() {
return new Promise(function(resolve, reject) {
var request = self.getStore().put(value, key);
request.onsuccess = resolve;
request.onerror = reject;
});
});
};
IndexedDBStorage.prototype.delete = function (key) {
var self = this;
return this.ready.then(function() {
return new Promise(function(resolve, reject) {
var request = self.getStore().delete(key);
request.onsuccess = resolve;
request.onerror = reject;
});
});
}
IndexedDBStorage.prototype.deleteDatabase = function () {
window.indexedDB.deleteDatabase(location.origin);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment