Merge pull request #3881 from Zerrien/intro-view

View for tracking Intro/Overview guide issues
This commit is contained in:
Josh Callebaut 2016-08-25 16:53:38 -07:00 committed by GitHub
commit e54cd7c05f
5 changed files with 147 additions and 4 deletions

View file

@ -52,6 +52,7 @@ module.exports = class CocoRouter extends Backbone.Router
'artisans/solution-problems': go('artisans/SolutionProblemsView')
'artisans/thang-tasks': go('artisans/ThangTasksView')
'artisans/level-concepts': go('artisans/LevelConceptMap')
'artisans/level-guides': go('artisans/LevelGuidesView')
'beta': go('HomeView')

View file

@ -0,0 +1,5 @@
#level-guides-view
.problem
color: red
.level-details
width: 15%

View file

@ -6,11 +6,14 @@ block content
a(href='/artisans/thang-tasks')
|Thang Tasks
div
a(href="/artisans/level-tasks")
a(href='/artisans/level-tasks')
|Level Tasks
div
a(href="/artisans/solution-problems")
a(href='/artisans/solution-problems')
|Solution Problems
div
a(href="/artisans/level-concepts")
a(href='/artisans/level-concepts')
|Level Concept Map
div
a(href='/artisans/level-guides')
|Level Guides Overview

View file

@ -0,0 +1,36 @@
// DNT
extends /templates/base
block content
div
a(href='/artisans')
span.glyphicon.glyphicon-chevron-left
span Artisans Home
button#overview-button Show Overviews
br
button#intro-button Show Intros
table.table#level-table
for levelObj in (view.levels || [])
- var level = levelObj.level
tr
td.level-details
a(href='/editor/level/'+level.get('slug') target="_blank")=level.get('name')
div
ul
for problem in levelObj.problems
li.problem=problem
td(style='width:90%')
if levelObj.overview
.panel.panel-default
.panel-heading
h2.panel-title
a(data-toggle='collapse' href='#'+level.get('slug')+'-overview-collapse') Overview
.panel-collapse.collapse.overview(id=level.get('slug')+'-overview-collapse')
pre=levelObj.overview.body
if levelObj.intro
.panel.panel-default
.panel-heading
h2.panel-title
a(data-toggle='collapse' href='#'+level.get('slug')+'-intro-collapse') Intro
.panel-collapse.collapse.intro(id=level.get('slug')+'-intro-collapse')
pre=levelObj.intro.body

View file

@ -0,0 +1,98 @@
RootView = require 'views/core/RootView'
template = require 'templates/artisans/level-guides-view'
Campaigns = require 'collections/Campaigns'
Campaign = require 'models/Campaign'
Levels = require 'collections/Levels'
Level = require 'models/Level'
module.exports = class LevelGuidesView extends RootView
template: template
id: 'level-guides-view'
events:
'click #overview-button': 'onOverviewButtonClicked'
'click #intro-button': 'onIntroButtonClicked'
excludedCampaigns = [
'pico-ctf', 'auditions'
]
includedCampaigns = [
'intro', 'course-2', 'course-3', 'course-4', 'course-5', 'course-6',
'web-dev-1', 'web-dev-2',
'game-dev-1', 'game-dev-2'
]
levels: []
onOverviewButtonClicked: (e) ->
@$('.overview').toggleClass('in')
onIntroButtonClicked: (e) ->
@$('.intro').toggleClass('in')
initialize: () ->
@campaigns = new Campaigns()
@listenTo(@campaigns, 'sync', @onCampaignsLoaded)
@supermodel.trackRequest(@campaigns.fetch(
data:
project: 'name,slug,levels'
))
onCampaignsLoaded: (campCollection) ->
for camp in campCollection.models
campaignSlug = camp.get 'slug'
continue if campaignSlug in excludedCampaigns
continue unless campaignSlug in includedCampaigns
levels = camp.get 'levels'
levels = new Levels()
@listenTo(levels, 'sync', @onLevelsLoaded)
levels.fetchForCampaign(campaignSlug)
#for key, level of levels
onLevelsLoaded: (lvlCollection) ->
lvlCollection.models.reverse()
#console.log lvlCollection
for level in lvlCollection.models
#console.log level
levelSlug = level.get 'slug'
overview = _.find(level.get('documentation').specificArticles, name:'Overview')
intro = _.find(level.get('documentation').specificArticles, name:'Intro')
#if intro and overview
problems = []
if not overview
problems.push 'No Overview'
else
if not overview.i18n
problems.push 'Overview doesn\'t have i18n field'
if not overview.body
problems.push 'Overview doesn\'t have a body'
else
if level.get('campaign')?.indexOf('web') is -1
jsIndex = overview.body.indexOf('```javascript')
pyIndex = overview.body.indexOf('```python')
if jsIndex is -1 and pyIndex isnt -1 or jsIndex isnt -1 and pyIndex is -1
problems.push 'Overview is missing a language example.'
if not intro
problems.push 'No Intro'
else
if not intro.i18n
problems.push 'Intro doesn\'t have i18n field'
if not intro.body
problems.push 'Intro doesn\'t have a body'
else
if intro.body.indexOf('file/db') is -1
problems.push 'Intro is missing image'
if level.get('campaign')?.indexOf('web') is -1
jsIndex = intro.body.indexOf('```javascript')
pyIndex = intro.body.indexOf('```python')
if jsIndex is -1 and pyIndex isnt -1 or jsIndex isnt -1 and pyIndex is -1
problems.push 'Intro is missing a language example.'
@levels.push
level: level
overview: overview
intro: intro
problems: problems
@levels.sort (a, b) ->
return b.problems.length - a.problems.length
@renderSelectors '#level-table'