index.db.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. //index.db.js;
  2. window.indexedDB = window.indexedDB ||
  3. window.mozIndexedDB ||
  4. window.webkitIndexedDB ||
  5. window.msIndexedDB;
  6. window.IDBTransaction = window.IDBTransaction ||
  7. window.webkitIDBTransaction ||
  8. window.msIDBTransaction;
  9. window.IDBKeyRange = window.IDBKeyRange ||
  10. window.webkitIDBKeyRange ||
  11. window.msIDBKeyRange;
  12. (function (window) {
  13. 'use strict';
  14. var db = {
  15. version: 1, // important: only use whole numbers!
  16. objectStoreName: 'tasks',
  17. instance: {},
  18. upgrade: function (e) {
  19. var
  20. _db = e.target.result,
  21. names = _db.objectStoreNames,
  22. name = db.objectStoreName;
  23. if (!names.contains(name)) {
  24. _db.createObjectStore(
  25. name, {
  26. keyPath: 'id',
  27. autoIncrement: true
  28. });
  29. }
  30. },
  31. errorHandler: function (error) {
  32. window.alert('error: ' + error.target.code);
  33. debugger;
  34. },
  35. open: function (callback) {
  36. var request = window.indexedDB.open(
  37. db.objectStoreName, db.version);
  38. request.onerror = db.errorHandler;
  39. request.onupgradeneeded = db.upgrade;
  40. request.onsuccess = function (e) {
  41. db.instance = request.result;
  42. db.instance.onerror =
  43. db.errorHandler;
  44. callback();
  45. };
  46. },
  47. getObjectStore: function (mode) {
  48. var txn, store;
  49. mode = mode || 'readonly';
  50. txn = db.instance.transaction(
  51. [db.objectStoreName], mode);
  52. store = txn.objectStore(
  53. db.objectStoreName);
  54. return store;
  55. },
  56. save: function (data, callback) {
  57. db.open(function () {
  58. var store, request,
  59. mode = 'readwrite';
  60. store = db.getObjectStore(mode),
  61. request = data.id ?
  62. store.put(data) :
  63. store.add(data);
  64. request.onsuccess = callback;
  65. });
  66. },
  67. getAll: function (callback) {
  68. db.open(function () {
  69. var
  70. store = db.getObjectStore(),
  71. cursor = store.openCursor(),
  72. data = [];
  73. cursor.onsuccess = function (e) {
  74. var result = e.target.result;
  75. if (result &&
  76. result !== null) {
  77. data.push(result.value);
  78. result.continue();
  79. } else {
  80. callback(data);
  81. }
  82. };
  83. });
  84. },
  85. get: function (id, callback) {
  86. id = parseInt(id);
  87. db.open(function () {
  88. var
  89. store = db.getObjectStore(),
  90. request = store.get(id);
  91. request.onsuccess = function (e) {
  92. callback(e.target.result);
  93. };
  94. });
  95. },
  96. 'delete': function (id, callback) {
  97. id = parseInt(id);
  98. db.open(function () {
  99. var
  100. mode = 'readwrite',
  101. store, request;
  102. store = db.getObjectStore(mode);
  103. request = store.delete(id);
  104. request.onsuccess = callback;
  105. });
  106. },
  107. deleteAll: function (callback) {
  108. db.open(function () {
  109. var mode, store, request;
  110. mode = 'readwrite';
  111. store = db.getObjectStore(mode);
  112. request = store.clear();
  113. request.onsuccess = callback;
  114. });
  115. }
  116. };
  117. window.app = window.app || {};
  118. window.app.db = db;
  119. }(window));