Storage.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. database.onabort = function ( event ) {
  18. database.close();
  19. database = null;
  20. };
  21. callback();
  22. };
  23. request.onerror = function ( event ) {
  24. console.error( 'IndexedDB', event );
  25. };
  26. },
  27. get: function ( callback ) {
  28. var transaction = database.transaction( [ 'states' ], 'readwrite' );
  29. var objectStore = transaction.objectStore( 'states' );
  30. var request = objectStore.get( 0 );
  31. request.onsuccess = function ( event ) {
  32. callback( event.target.result );
  33. };
  34. },
  35. set: function ( data, callback ) {
  36. var transaction = database.transaction( [ 'states' ], 'readwrite' );
  37. var objectStore = transaction.objectStore( 'states' );
  38. var request = objectStore.put( data, 0 );
  39. request.onsuccess = function ( event ) {
  40. console.log( '[' + /\d\d\:\d\d\:\d\d/.exec( new Date() )[ 0 ] + ']', 'Saved state to IndexedDB.' );
  41. };
  42. },
  43. clear: function ( callback ) {
  44. var transaction = database.transaction( [ 'states' ], 'readwrite' );
  45. var objectStore = transaction.objectStore( 'states' );
  46. var request = objectStore.clear();
  47. request.onsuccess = function ( event ) {
  48. callback();
  49. };
  50. }
  51. }
  52. };