b854f630198fd5e4319b8f89e08b8eb35a485ccd.svn-base 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. const DB = {
  2. name: 'mapDB',
  3. version: 1,
  4. objName: 'mapAnimationData',
  5. fidName: 'fidsData'
  6. }
  7. function getDB () {
  8. return new Promise((resolve, reject) => {
  9. if (DB.db) {
  10. resolve(DB.db)
  11. } else {
  12. let request = indexedDB.open(DB.name, DB.version)
  13. request.onsuccess = e => {
  14. DB.db = e.target.result
  15. resolve(DB.db)
  16. }
  17. request.onerror = reject
  18. request.onupgradeneeded = e => {
  19. console.log(`${DB.name} versiton changed to ${DB.version}`)
  20. initDB(e.target.result)
  21. }
  22. }
  23. })
  24. }
  25. function close () {
  26. if (DB.db) {
  27. DB.db.close()
  28. }
  29. }
  30. function deleteDB () {
  31. indexedDB.deleteDatabase(DB.name)
  32. }
  33. function initDB (db) {
  34. let objectStore = db.createObjectStore(DB.objName, {
  35. keyPath: 'id',
  36. autoIncrement: true
  37. })
  38. objectStore.createIndex('id', 'id', {unique: true})
  39. objectStore.createIndex('type', 'type');
  40. objectStore.createIndex('features', 'features');
  41. objectStore = db.createObjectStore(DB.fidName, {
  42. keyPath: 'id',
  43. autoIncrement: true
  44. })
  45. objectStore.createIndex('fid', 'fids')
  46. }
  47. async function update (newItem, tab = DB.objName) {
  48. let request = (await getDB())
  49. .transaction([tab], "readwrite")
  50. .objectStore(tab)
  51. .put(newItem)
  52. return new Promise((resolve, reject) => {
  53. request.onsuccess = e => resolve(e.target.result)
  54. request.onerror = reject
  55. })
  56. }
  57. async function add (newItem, tab = DB.objName) {
  58. let request = (await getDB())
  59. .transaction([tab], "readwrite")
  60. .objectStore(tab)
  61. .add(newItem)
  62. return new Promise((resolve, reject) => {
  63. request.onsuccess = e => resolve(e.target.result)
  64. request.onerror = reject
  65. })
  66. }
  67. async function get(id, tab = DB.objName) {
  68. let request = (await getDB())
  69. .transaction([tab])
  70. .objectStore(tab)
  71. .get(id)
  72. return new Promise((resolve, reject) => {
  73. request.onsuccess = e => {
  74. if (request.result) {
  75. resolve(request.result)
  76. } else {
  77. resolve()
  78. }
  79. }
  80. request.onerror = e => {
  81. reject
  82. }
  83. })
  84. }
  85. async function clear(tab = DB.objName) {
  86. let request = (await getDB())
  87. .transaction([tab], 'readwrite')
  88. .objectStore(tab)
  89. .clear()
  90. return new Promise((resolve, reject) => {
  91. request.onsuccess = resolve
  92. request.onerror = reject
  93. })
  94. }
  95. clear(DB.fidName).then(resolve => {
  96. add({id: 1, fids: []}, DB.fidName)
  97. })
  98. export {
  99. get,
  100. add,
  101. update,
  102. clear
  103. }