Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DBMagic {
- constructor( db_name, db_version, stores ) {
- this.stores = stores;
- this.db_name = db_name;
- this.db_version = db_version;
- var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
- this.indexedDB = indexedDB;
- // this.db_delete();
- this.db_create();
- }
- add( name, items, callback ) {
- const db_name = this.db_name;
- let req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], 'readwrite' );
- tx.oncomplete = () => {
- if ( debug )
- console.log( 'SUCCESS: Transaction [add] on database [' + db_name + '] store [' + name + '] completed successfully.' );
- };
- tx.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Transaction method add() has failed.\n', e.srcElement.error );
- };
- items.forEach( item => {
- let storeReq = tx.objectStore( name ).add( item );
- storeReq.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Added key ['+ item.id +'] to store [' + name + '] on database [' + db_name + '] successfully.' );
- if ( callback ) callback( e );
- };
- storeReq.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Adding key ['+ item.id +'] to store [' + name + '] on database [' + db_name + '] failed.\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- });
- };
- req.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Could not connect to database [' + db_name + '].\n', e.srcElement.error );
- };
- }
- get( name, items, callback ) {
- const db_name = this.db_name;
- const req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], 'readonly' );
- let store = tx.objectStore( name );
- tx.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Transaction on database [' + db_name + '] failed.\n', e.srcElement.error );
- };
- tx.oncomplete = () => {
- if ( debug )
- console.log( 'SUCCESS: Transaction [get] on database [' + db_name + '] store [' + name + '] completed successfully.' );
- };
- items.forEach( item => {
- let storeReq = store.get( item );
- storeReq.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- storeReq.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Retrieved key ['+ item +'] from store [' + name + '] on database ['+ db_name +'] successfully.' );
- if ( callback ) callback( e.target.result );
- };
- });
- };
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
- };
- }
- getAll( name, callback ) {
- const db_name = this.db_name;
- const req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], 'readonly' );
- let store = tx.objectStore( name );
- tx.oncomplete = () => {
- if ( debug )
- console.log( 'SUCCESS: Transaction [getAll] on database [' + db_name + '] store [' + name + '] completed successfully.' );
- };
- let storeReq = store.getAll();
- storeReq.onsuccess = ( e ) => {
- if ( callback ) callback( e.target.result );
- };
- };
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
- };
- }
- delete( name, items, callback ) {
- const db_name = this.db_name;
- const req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], "readwrite" );
- let store = tx.objectStore( name );
- tx.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Transaction [delete] on database [' + db_name + '] failed.\n', e.srcElement.error );
- };
- tx.oncomplete = () => {
- if ( debug )
- console.log( 'SUCCESS: Transaction [delete] on database [' + db_name + '] store [' + name + '] completed successfully.' );
- };
- items.forEach( item => {
- let storeReq = store.delete( item );
- storeReq.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Deleted key ['+ item +'] from store ['+ name +'] failed.\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- storeReq.onsuccess = ( e ) => {
- if ( debug )
- console.log('SUCCESS: Deleted key ['+ item +'] from store ['+ name +'] successfully.');
- if ( callback ) callback( e );
- };
- });
- };
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
- };
- }
- update( name, items, callback ) {
- const db_name = this.db_name;
- let req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], 'readwrite' );
- tx.oncomplete = () => {
- if ( debug )
- console.log( 'SUCCESS: Transaction [update] on database [' + db_name + '] store [' + name + '] completed successfully.' );
- };
- tx.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Transaction method update() has failed.\n', e.srcElement.error );
- };
- items.forEach( item => {
- let storeReq = tx.objectStore( name ).put( item );
- storeReq.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Updated key ['+ item.id +'] in store [' + name + '] on database [' + db_name + '] successfully.' );
- if ( callback ) callback( e );
- };
- storeReq.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Updating key ['+ item.id +'] in store [' + name + '] on database [' + db_name + '] failed.\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- });
- };
- req.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Could not connect to database [' + db_name + '].\n', e.srcElement.error );
- };
- }
- db_create( callback ) {
- const db_name = this.db_name;
- const self = this;
- const req = this.indexedDB.open( db_name, this.db_version );
- req.onsuccess = () => {
- let db = req.result;
- if ( debug )
- console.log('SUCCESS: Database ['+ db_name +'] opened successfully, [ version = ' + db.version + ' ]');
- if ( callback ) callback( true );
- };
- req.onerror = () => {
- let db = req.result;
- if ( debug )
- console.log('ERROR: Database ['+ db_name +'] could not be opened successfully, [ version = ' + db.version + ' ]');
- if ( callback ) callback( true );
- };
- req.onupgradeneeded = ( e ) => {
- let db = req.result;
- switch( e.oldVersion ) {
- case 0:
- self.stores.forEach( name => {
- db.createObjectStore( name, { keyPath: 'id' } );
- } );
- case 1:
- let oldVersion = e.oldVersion;
- let newVersion = e.newVersion;
- if ( debug ) log( db.objectStoreNames );
- }
- };
- }
- db_delete( callback ) {
- const db_name = this.db_name;
- this.indexedDB.deleteDatabase( db_name, this.db_version );
- if ( debug )
- console.log('SUCCESS: Database ['+ db_name +'] deleted successfully.');
- if ( callback ) callback( true );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement