mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
Add a page for tracking intro/guide issues
This commit is contained in:
parent
18e985a845
commit
53e68a79a6
5 changed files with 147 additions and 4 deletions
|
@ -52,6 +52,7 @@ module.exports = class CocoRouter extends Backbone.Router
|
||||||
'artisans/solution-problems': go('artisans/SolutionProblemsView')
|
'artisans/solution-problems': go('artisans/SolutionProblemsView')
|
||||||
'artisans/thang-tasks': go('artisans/ThangTasksView')
|
'artisans/thang-tasks': go('artisans/ThangTasksView')
|
||||||
'artisans/level-concepts': go('artisans/LevelConceptMap')
|
'artisans/level-concepts': go('artisans/LevelConceptMap')
|
||||||
|
'artisans/level-guides': go('artisans/LevelGuidesView')
|
||||||
|
|
||||||
'beta': go('HomeView')
|
'beta': go('HomeView')
|
||||||
|
|
||||||
|
|
5
app/styles/artisans/level-guides-view.sass
Normal file
5
app/styles/artisans/level-guides-view.sass
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#level-guides-view
|
||||||
|
.problem
|
||||||
|
color: red
|
||||||
|
.level-details
|
||||||
|
width: 15%
|
|
@ -6,11 +6,14 @@ block content
|
||||||
a(href='/artisans/thang-tasks')
|
a(href='/artisans/thang-tasks')
|
||||||
|Thang Tasks
|
|Thang Tasks
|
||||||
div
|
div
|
||||||
a(href="/artisans/level-tasks")
|
a(href='/artisans/level-tasks')
|
||||||
|Level Tasks
|
|Level Tasks
|
||||||
div
|
div
|
||||||
a(href="/artisans/solution-problems")
|
a(href='/artisans/solution-problems')
|
||||||
|Solution Problems
|
|Solution Problems
|
||||||
div
|
div
|
||||||
a(href="/artisans/level-concepts")
|
a(href='/artisans/level-concepts')
|
||||||
|Level Concept Map
|
|Level Concept Map
|
||||||
|
div
|
||||||
|
a(href='/artisans/level-guides')
|
||||||
|
|Level Guides Overview
|
36
app/templates/artisans/level-guides-view.jade
Normal file
36
app/templates/artisans/level-guides-view.jade
Normal 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='http://direct.codecombat.com/editor/level/'+level.get('slug') target="_blank")=level.get('name')
|
||||||
|
div
|
||||||
|
ul
|
||||||
|
for problem in levelObj.problems
|
||||||
|
li.problem=problem
|
||||||
|
td(style='width:90%')
|
||||||
|
.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 ? levelObj.overview.body : 'NOPE'
|
||||||
|
.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 ? levelObj.intro.body : 'NOPE'
|
||||||
|
|
||||||
|
|
98
app/views/artisans/LevelGuidesView.coffee
Normal file
98
app/views/artisans/LevelGuidesView.coffee
Normal 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'
|
Loading…
Reference in a new issue