You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devdocs/assets/javascripts/models/doc.coffee

86 lines
1.7 KiB

class app.models.Doc extends app.Model
# Attributes: name, slug, type, version, index_path, mtime
constructor: ->
super
@reset @
reset: (data) ->
@resetEntries data.entries
@resetTypes data.types
return
resetEntries: (entries) ->
@entries = new app.collections.Entries(entries)
@entries.each (entry) => entry.doc = @
return
resetTypes: (types) ->
@types = new app.collections.Types(types)
@types.each (type) => type.doc = @
return
fullPath: (path = '') ->
path = "/#{path}" unless path[0] is '/'
"/#{@slug}#{path}"
fileUrl: (path) ->
"#{app.config.docs_host}#{@fullPath(path)}"
indexUrl: ->
"#{app.indexHost()}/#{@index_path}"
indexEntry: ->
new app.models.Entry
doc: @
name: @name
path: 'index'
findEntryByPathAndHash: (path, hash) ->
if hash and entry = @entries.findBy 'path', "#{path}##{hash}"
entry
else if path is 'index'
@indexEntry()
else
@entries.findBy 'path', path
load: (onSuccess, onError, options = {}) ->
return if options.readCache and @_loadFromCache(onSuccess)
callback = (data) =>
@reset data
onSuccess()
@_setCache data if options.writeCache
ajax
url: @indexUrl()
success: callback
error: onError
clearCache: ->
app.store.del @slug
return
_loadFromCache: (onSuccess) ->
return unless data = @_getCache()
callback = =>
@reset data
onSuccess()
setTimeout callback, 0
true
_getCache: ->
return unless data = app.store.get @slug
if data[0] is @mtime
return data[1]
else
@clearCache()
return
_setCache: (data) ->
app.store.set @slug, [@mtime, data]
return