44 lines
1.1 KiB
CoffeeScript
44 lines
1.1 KiB
CoffeeScript
class Task
|
|
constructor: (@name) ->
|
|
@status = 'incomplete'
|
|
|
|
complete: ->
|
|
if @parent? and @parent.status isnt 'complete'
|
|
throw "Dependent task '#{@parent.name}' is not completed."
|
|
@status = 'complete'
|
|
true
|
|
|
|
dependsOn: (@parent) ->
|
|
@parent.child = @
|
|
@status = 'dependent'
|
|
|
|
class TaskList
|
|
constructor: () ->
|
|
@tasks = []
|
|
@length = 0
|
|
add: (@name) ->
|
|
unless typeof @name is 'string' or @name instanceof Task
|
|
throw "Here's an error"
|
|
if typeof @name is 'string'
|
|
task = new Task 'take out garbage'
|
|
@tasks.push task
|
|
if @name instanceof Task
|
|
@tasks.push @name
|
|
@length++
|
|
remove: (task) ->
|
|
i = @tasks.indexOf task
|
|
@tasks = @tasks[0...i].concat @tasks[i+1..] if i > -1
|
|
@length = @tasks.length
|
|
print: ->
|
|
str = "Tasks\n\n"
|
|
for task in @tasks
|
|
str += "- #{task.name}"
|
|
str += " (depends on '#{task.parent.name}')" if task.parent?
|
|
str += " (completed)" if task.status is 'complete'
|
|
str += "\n"
|
|
str
|
|
|
|
|
|
root = exports ? window
|
|
root.Task = Task
|
|
root.TaskList = TaskList |