database.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. var designer_tables = [{ name: 'pdf_pages', key: 'pg_nr', auto_inc: true },
  2. { name: 'table_coords', key: 'id', auto_inc: true }];
  3. var DesignerOfflineDB = (function () {
  4. var designerDB = {};
  5. var datastore = null;
  6. designerDB.open = function (callback) {
  7. var version = 1;
  8. var request = window.indexedDB.open('pma_designer', version);
  9. request.onupgradeneeded = function (e) {
  10. var db = e.target.result;
  11. e.target.transaction.onerror = designerDB.onerror;
  12. for (var t in designer_tables) {
  13. if (db.objectStoreNames.contains(designer_tables[t].name)) {
  14. db.deleteObjectStore(designer_tables[t].name);
  15. }
  16. }
  17. for (var t in designer_tables) {
  18. db.createObjectStore(designer_tables[t].name, {
  19. keyPath: designer_tables[t].key,
  20. autoIncrement: designer_tables[t].auto_inc
  21. });
  22. }
  23. };
  24. request.onsuccess = function (e) {
  25. datastore = e.target.result;
  26. if (typeof callback !== 'undefined' && callback !== null) {
  27. callback(true);
  28. }
  29. };
  30. request.onerror = designerDB.onerror;
  31. };
  32. designerDB.loadObject = function (table, id, callback) {
  33. var db = datastore;
  34. var transaction = db.transaction([table], 'readwrite');
  35. var objStore = transaction.objectStore(table);
  36. var cursorRequest = objStore.get(parseInt(id));
  37. cursorRequest.onsuccess = function (e) {
  38. callback(e.target.result);
  39. };
  40. cursorRequest.onerror = designerDB.onerror;
  41. };
  42. designerDB.loadAllObjects = function (table, callback) {
  43. var db = datastore;
  44. var transaction = db.transaction([table], 'readwrite');
  45. var objStore = transaction.objectStore(table);
  46. var keyRange = IDBKeyRange.lowerBound(0);
  47. var cursorRequest = objStore.openCursor(keyRange);
  48. var results = [];
  49. transaction.oncomplete = function (e) {
  50. callback(results);
  51. };
  52. cursorRequest.onsuccess = function (e) {
  53. var result = e.target.result;
  54. if (Boolean(result) === false) {
  55. return;
  56. }
  57. results.push(result.value);
  58. result.continue();
  59. };
  60. cursorRequest.onerror = designerDB.onerror;
  61. };
  62. designerDB.loadFirstObject = function (table, callback) {
  63. var db = datastore;
  64. var transaction = db.transaction([table], 'readwrite');
  65. var objStore = transaction.objectStore(table);
  66. var keyRange = IDBKeyRange.lowerBound(0);
  67. var cursorRequest = objStore.openCursor(keyRange);
  68. var firstResult = null;
  69. transaction.oncomplete = function (e) {
  70. callback(firstResult);
  71. };
  72. cursorRequest.onsuccess = function (e) {
  73. var result = e.target.result;
  74. if (Boolean(result) === false) {
  75. return;
  76. }
  77. firstResult = result.value;
  78. };
  79. cursorRequest.onerror = designerDB.onerror;
  80. };
  81. designerDB.addObject = function (table, obj, callback) {
  82. var db = datastore;
  83. var transaction = db.transaction([table], 'readwrite');
  84. var objStore = transaction.objectStore(table);
  85. var request = objStore.put(obj);
  86. request.onsuccess = function (e) {
  87. if (typeof callback !== 'undefined' && callback !== null) {
  88. callback(e.currentTarget.result);
  89. }
  90. };
  91. request.onerror = designerDB.onerror;
  92. };
  93. designerDB.deleteObject = function (table, id, callback) {
  94. var db = datastore;
  95. var transaction = db.transaction([table], 'readwrite');
  96. var objStore = transaction.objectStore(table);
  97. var request = objStore.delete(parseInt(id));
  98. request.onsuccess = function (e) {
  99. if (typeof callback !== 'undefined' && callback !== null) {
  100. callback(true);
  101. }
  102. };
  103. request.onerror = designerDB.onerror;
  104. };
  105. designerDB.onerror = function (e) {
  106. console.log(e);
  107. };
  108. // Export the designerDB object.
  109. return designerDB;
  110. }());