/** * @name CeL function for Indexed Database API * @fileoverview 本檔案包含了 Indexed Database API 用的 functions。 * * @since * @example CeL.run('data.statistics', function() { // table / objectStore // schema: use createIndex(name, keyPath, optionalParameters) // schema: {key:key name/key function, unique: false, multiEntry: false} // keyPath: key name @ objectStore // keyPath: how to get the key of inputted object. var store = new CeL.indexedDB(database_name, { store : store_name, version : 1, schema : [ key / column0, column1, column2 ], keyPath : 'id', autoIncrement : true, error : function() { } }); store.add(); store.get(); store.delete(); store.forEach(function() { }); store.db.close(); }); * * * @see http://www.w3.org/TR/IndexedDB/ * https://developer.mozilla.org/en-US/docs/IndexedDB * https://developer.mozilla.org/zh-TW/docs/Web/API/IndexedDB_API/Using_IndexedDB */ 'use strict'; // -------------------------------------------------------------------------------------------- // 不採用 if 陳述式,可以避免 Eclipse JSDoc 與 format 多縮排一層。 typeof CeL === 'function' && CeL.run({ // module name name : 'data.indexedDB', require : '', // 設定不匯出的子函式。 // no_extend : '*', // 為了方便格式化程式碼,因此將 module 函式主體另外抽出。 code : module_code }); function module_code(library_namespace) { if (false) { var indexedDB; if (typeof indexedDB !== 'object') indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; } // ------------------------------------------------------------ function IndexedDB(database_name, options) { options = library_namespace.setup_options(options); var request = window.indexedDB.open(database_name, options.version); // var db = event.target.result; request.onsuccess = options.onsuccess; request.onerror = options.onerror; var _this = this; request.onupgradeneeded = function(event) { // request === event.target this.db = event.target.result; console.log(this.db); this.db.onerror = function(event) { // Generic error handler for all errors targeted at this // database's requests! console.error("Database error: " + event.target.errorCode); }; var store_name = options.store, objectStore; if (!this.db.objectStoreNames.contains(store_name)) { objectStore = this.db.createObjectStore(store_name, { keyPath : options.keyPath, autoIncrement : options.autoIncrement }); } }; } // ------------------------------------------------------------ TODO // ------------------------------------------------------------ return IndexedDB; }