Storage.js 1.7 KB

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