codecombat/app/views/artisans/LevelTasksView.coffee

58 lines
1.7 KiB
CoffeeScript

RootView = require 'views/core/RootView'
template = require 'templates/artisans/level-tasks-view'
Campaigns = require 'collections/Campaigns'
Campaign = require 'models/Campaign'
module.exports = class LevelTasksView extends RootView
template: template
id: 'level-tasks-view'
events:
'input .searchInput': 'processLevels'
'change .searchInput': 'processLevels'
excludedCampaigns = [
'picoctf', 'auditions'
]
levels: {}
processedLevels: {}
initialize: () ->
@processLevels = _.debounce(@processLevels, 250)
@campaigns = new Campaigns()
@listenTo(@campaigns, 'sync', @onCampaignsLoaded)
@supermodel.trackRequest(@campaigns.fetch(
data:
project: 'name,slug,levels,tasks'
))
onCampaignsLoaded: (campCollection) ->
@levels = {}
for campaign in campCollection.models
campaignSlug = campaign.get 'slug'
continue if campaignSlug in excludedCampaigns
levels = campaign.get 'levels'
for key, level of levels
levelSlug = level.slug
@levels[levelSlug] = level
@processLevels()
processLevels: () ->
@processedLevels = {}
for key, level of @levels
continue unless ///#{$('#nameSearch')[0].value}///i.test level.name
filteredTasks = level.tasks.filter (elem) ->
# Similar case-insensitive search of input vs description (name).
return ///#{$('#descSearch')[0].value}///i.test elem.name
@processedLevels[key] = {
tasks: filteredTasks
name: level.name
}
@renderSelectors '#levelTable'
# Jade helper
hasIncompleteTasks: (level) ->
return level.tasks and level.tasks.filter((_elem) -> return not _elem.complete).length > 0