kis-js/src/modules/indexedDB.js

115 lines
2.1 KiB
JavaScript

/**
* Module for simplifying Indexed DB access
*/
(function() {
"use strict";
var db = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB,
indexedDB = {};
//Well, some browsers don't support it yet
if(typeof db === "undefined")
{
return;
}
/**
* Module for simplifying Indexed DB access
*
* @namespace
* @name indexedDB
* @memberOf $_
*/
indexedDB = {
current_db: null,
/**
* Connects to an indexedDB database
*
* @memberOf $_.indexedDB
* @name connect
* @function
* @param string dbname
* @param [int] version
* @param [function] onupgradeneeded
*/
connect: function(dbname, version, onupgradeneeded)
{
var request = {};
version = version || 1;
// Ask for permission to use db
request = db.open(dbname, version);
// Assign onupgradeneeded callback
if(typeof onupgradeneeded !== "undefined")
{
request.onupgradeneeded = onupgradeneeded;
}
/**
* @private
*/
request.onerror = function(event)
{
console.log("IndexedDB disallowed.");
};
/**
* @private
*/
request.onsuccess = function(event)
{
// Connect to the specified db
indexedDB.current_db = request.result;
};
},
/**
* Helper function to create a new object store
*
* @memberOf $_.indexedDB
* @name create_store
* @function
* @param string name
* @param [string] key
* @param [bool] generator
* @return IDBDataStore object
*/
create_store: function(name, key, generator)
{
var params = {};
if(typeof key !== "undefined")
{
params.keyPath = key;
}
if(typeof generator !== "undefined")
{
// Cast to a boolean value
params.autoIncrement = !! generator;
}
return db.createObjectStore(name, params);
},
/**
* Delete an object store
*
* @memberOf $_.indexedDB
* @name delete_store
* @function
* @param string name
*/
delete_store: function(name)
{
var request = db.deleteObjectStore();
// Pass the error up
request.onerror = db.onerror;
}
};
$_.ext('indexedDB', indexedDB);
}());