-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfileloader.coffee
More file actions
42 lines (35 loc) · 1.3 KB
/
fileloader.coffee
File metadata and controls
42 lines (35 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class FileLoader
#Class Vars
@_loaded : []
@_loadAfter : []
@_debug : false
#Class Methods
@debug : (flag) =>
@constructor._debug = flag
#Instance Methods
constructor : (@source) ->
if _.findWhere @constructor._loaded , @source
debugMessage "##FileLoader - #{@source} is already loaded..."
else
debugMessage "##FileLoader - Loading #{@source}"
@constructor._loaded.push(@source)
loadAfter : (@dependencies , cb) =>
@constructor._loadAfter[@source] = { "dependencies" : @dependencies , "callback" : cb }
debugMessage "##FileLoader - Load '#{@source}' after loading: #{@dependencies}"
@checkDependencies()
load : (cb) =>
@checkDependencies()
finishedLoading : () =>
@checkDependencies()
checkDependencies : () ->
loaded = @constructor._loaded
loadAfter = @constructor._loadAfter
debugMessage "##FileLoader - Files loaded so far : #{loaded}"
_.each loaded , (source) ->
if loadAfter[source]
if _.difference( loadAfter[source].dependencies , _.intersection( loaded , loadAfter[source].dependencies ) ).length == 0
debugMessage "##FileLoader - All dependencies for #{source} are loaded.."
loadAfter[source].callback()
debugMessage = (message) =>
if @constructor._debug
console.log message