mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-23 15:48:11 -05:00
Merge pull request #3881 from Zerrien/intro-view
View for tracking Intro/Overview guide issues
This commit is contained in:
commit
e54cd7c05f
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/thang-tasks': go('artisans/ThangTasksView')
|
||||
'artisans/level-concepts': go('artisans/LevelConceptMap')
|
||||
'artisans/level-guides': go('artisans/LevelGuidesView')
|
||||
|
||||
'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')
|
||||
|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")
|
||||
|Level Concept Map
|
||||
a(href='/artisans/level-concepts')
|
||||
|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='/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
|
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