Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DBMagic {
- constructor( db_name, db_version, stores ) {
- if ( typeof stores === 'string' ) stores = [ 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();
- this.tables = {};
- }
- store( name, mode ) {
- return new Promise( (resolve, reject) => {
- const req = this.indexedDB.open( this.db_name, this.db_version );
- req.onerror = ( e ) => { reject( e ); };
- req.onsuccess = () => {
- let db = req.result;
- let tx = db.transaction ( [ name ], mode );
- resolve( tx.objectStore( name ) );
- };
- } );
- }
- add( name, items ) {
- if ( ! Array.isArray( items ) ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.add( item );
- req.onerror = () => {
- resolve( item.id );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Added key ['+ item.id +'] to store [' +
- name + '] on database [' + this.db_name + ']' );
- resolve( item.id );
- };
- } );
- } );
- } );
- }
- get( name, items ) {
- if ( typeof items === 'string' ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readonly' ).then( store => {
- items.forEach( item => {
- const req = store.get( item );
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not connect to database [' +
- this.db_name +']\n', e.srcElement.error );
- reject( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Retrieved key ['+ item +'] from store [' +
- name + '] on database ['+ this.db_name +']' );
- resolve( req.result );
- };
- } );
- } );
- } );
- }
- getAll( name, callback ) {
- this.store( name, 'readonly' ).then( store => {
- const req = store.getAll();
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Retrieved all keys from store [' + name + '] on database ['+ this.db_name +']' );
- if ( callback ) callback( req.result );
- };
- } );
- }
- update( name, items, callback ) {
- if ( typeof items === 'string' ) items = [ items ];
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.put( item );
- req.onerror = ( e ) => {
- if ( debug )
- console.log( 'ERROR: Updating key ['+ item.id +'] in store [' +
- name + '] on database [' + this.db_name + ']\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log( 'SUCCESS: Updated key ['+ item.id +'] in store [' +
- name + '] on database [' + this.db_name + ']' );
- if ( callback ) callback( e );
- };
- });
- } );
- }
- delete( name, items, callback ) {
- if ( typeof items === 'string' ) items = [ items ];
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.delete( item );
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Deleted key ['+ item +'] from store ['+ name +']\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log('SUCCESS: Deleted key ['+ item +'] from store ['+ name +']');
- if ( callback ) callback( e );
- };
- } );
- } );
- }
- deleteAll( name, callback ) {
- this.store( name, 'readwrite' ).then( store => {
- const req = store.clear();
- req.onerror = ( e ) => {
- if ( debug )
- console.log('ERROR: Could not delete keys from store ['+ name +'] on database ['+ db_name +']\n', e.srcElement.error );
- if ( callback ) callback( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- console.log('SUCCESS: Deleted all keys from store ['+ name +'] on database ['+ db_name +']' );
- if ( callback ) callback( e );
- };
- });
- }
- db_create( callback ) {
- const req = this.indexedDB.open( this.db_name, this.db_version );
- req.onerror = () => {
- let db = req.result;
- if ( debug )
- console.log('ERROR: Database ['+ this.db_name +'] could not be opened successfully, [ version = ' + db.version + ' ]');
- if ( callback ) callback( true );
- };
- req.onsuccess = () => {
- let db = req.result;
- if ( debug )
- console.log('SUCCESS: Database ['+ this.db_name +'] opened successfully, [ version = ' + db.version + ' ]');
- if ( callback ) callback( true );
- };
- req.onupgradeneeded = ( e ) => {
- let db = req.result;
- switch( e.oldVersion ) {
- case 0:
- this.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 );
- if ( debug )
- console.log('SUCCESS: Database ['+ db_name +'] deleted successfully.');
- if ( callback ) callback( true );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement