2
0

Storage.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. function Storage() {
  2. const indexedDB = window.indexedDB;
  3. if ( indexedDB === undefined ) {
  4. console.warn( 'Storage: IndexedDB not available.' );
  5. return { init: function () {}, get: function () {}, set: function () {}, clear: function () {} };
  6. }
  7. const name = 'threejs-editor';
  8. const version = 1;
  9. let database;
  10. return {
  11. init: function ( callback ) {
  12. const request = indexedDB.open( name, version );
  13. request.onupgradeneeded = function ( event ) {
  14. const db = event.target.result;
  15. if ( db.objectStoreNames.contains( 'states' ) === false ) {
  16. db.createObjectStore( 'states' );
  17. }
  18. };
  19. request.onsuccess = function ( event ) {
  20. database = event.target.result;
  21. callback();
  22. };
  23. request.onerror = function ( event ) {
  24. console.error( 'IndexedDB', event );
  25. };
  26. },
  27. get: function ( callback ) {
  28. const transaction = database.transaction( [ 'states' ], 'readonly' );
  29. const objectStore = transaction.objectStore( 'states' );
  30. const request = objectStore.get( 0 );
  31. request.onsuccess = function ( event ) {
  32. callback( event.target.result );
  33. };
  34. },
  35. set: function ( data ) {
  36. const start = performance.now();
  37. const transaction = database.transaction( [ 'states' ], 'readwrite' );
  38. const objectStore = transaction.objectStore( 'states' );
  39. const request = objectStore.put( data, 0 );
  40. request.onsuccess = function () {
  41. console.log( '[' + /\d\d\:\d\d\:\d\d/.exec( new Date() )[ 0 ] + ']', 'Saved state to IndexedDB. ' + ( performance.now() - start ).toFixed( 2 ) + 'ms' );
  42. };
  43. },
  44. clear: function () {
  45. if ( database === undefined ) return;
  46. const transaction = database.transaction( [ 'states' ], 'readwrite' );
  47. const objectStore = transaction.objectStore( 'states' );
  48. const request = objectStore.clear();
  49. request.onsuccess = function () {
  50. console.log( '[' + /\d\d\:\d\d\:\d\d/.exec( new Date() )[ 0 ] + ']', 'Cleared IndexedDB.' );
  51. };
  52. }
  53. };
  54. }
  55. export { Storage };