|
|
@ -3,44 +3,47 @@ class app.DB
|
|
|
|
|
|
|
|
|
|
|
|
constructor: ->
|
|
|
|
constructor: ->
|
|
|
|
@useIndexedDB = @useIndexedDB()
|
|
|
|
@useIndexedDB = @useIndexedDB()
|
|
|
|
|
|
|
|
@callbacks = []
|
|
|
|
|
|
|
|
|
|
|
|
db: (fn) ->
|
|
|
|
db: (fn) ->
|
|
|
|
return fn @_db unless @useIndexedDB and @_db is undefined
|
|
|
|
return fn() unless @useIndexedDB
|
|
|
|
|
|
|
|
@callbacks.push(fn)
|
|
|
|
if @callback isnt undefined
|
|
|
|
return if @open
|
|
|
|
_callback = @callback
|
|
|
|
|
|
|
|
@callback = =>
|
|
|
|
|
|
|
|
_callback()
|
|
|
|
|
|
|
|
fn @_db
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@callback = =>
|
|
|
|
|
|
|
|
@_db ?= false
|
|
|
|
|
|
|
|
delete @callback
|
|
|
|
|
|
|
|
fn @_db
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
try
|
|
|
|
|
|
|
|
@open = true
|
|
|
|
req = indexedDB.open(NAME, @indexedDBVersion())
|
|
|
|
req = indexedDB.open(NAME, @indexedDBVersion())
|
|
|
|
req.onerror = @callback
|
|
|
|
|
|
|
|
req.onsuccess = @onOpenSuccess
|
|
|
|
req.onsuccess = @onOpenSuccess
|
|
|
|
|
|
|
|
req.onerror = @onOpenError
|
|
|
|
req.onupgradeneeded = @onUpgradeNeeded
|
|
|
|
req.onupgradeneeded = @onUpgradeNeeded
|
|
|
|
catch
|
|
|
|
catch
|
|
|
|
@callback()
|
|
|
|
@onOpenError()
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
onOpenSuccess: (event) =>
|
|
|
|
onOpenSuccess: (event) =>
|
|
|
|
try
|
|
|
|
try
|
|
|
|
@_db = event.target.result
|
|
|
|
db = event.target.result
|
|
|
|
@_db.transaction(['docs', app.docs.all()[0].slug], 'readwrite').abort() # https://bugs.webkit.org/show_bug.cgi?id=136937
|
|
|
|
db.transaction(['docs', app.docs.all()[0].slug], 'readwrite').abort() # https://bugs.webkit.org/show_bug.cgi?id=136937
|
|
|
|
catch
|
|
|
|
catch
|
|
|
|
@_db = false
|
|
|
|
try db.close()
|
|
|
|
|
|
|
|
@onOpenError()
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@runCallbacks(db)
|
|
|
|
|
|
|
|
@open = false
|
|
|
|
|
|
|
|
db.close()
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
onOpenError: =>
|
|
|
|
|
|
|
|
@useIndexedDB = @open = false
|
|
|
|
|
|
|
|
@runCallbacks()
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
@callback()
|
|
|
|
runCallbacks: (db) ->
|
|
|
|
|
|
|
|
fn(db) while fn = @callbacks.shift()
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
onUpgradeNeeded: (event) =>
|
|
|
|
onUpgradeNeeded: (event) ->
|
|
|
|
db = event.target.result
|
|
|
|
db = event.target.result
|
|
|
|
|
|
|
|
|
|
|
|
unless db.objectStoreNames.contains('docs')
|
|
|
|
unless db.objectStoreNames.contains('docs')
|
|
|
@ -126,7 +129,7 @@ class app.DB
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
load: (entry, onSuccess, onError) ->
|
|
|
|
load: (entry, onSuccess, onError) ->
|
|
|
|
if @useIndexedDB and @_db isnt false
|
|
|
|
if @useIndexedDB
|
|
|
|
onError = @loadWithXHR.bind(@, entry, onSuccess, onError)
|
|
|
|
onError = @loadWithXHR.bind(@, entry, onSuccess, onError)
|
|
|
|
@loadWithIDB entry, onSuccess, onError
|
|
|
|
@loadWithIDB entry, onSuccess, onError
|
|
|
|
else
|
|
|
|
else
|
|
|
|