mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-28 10:06:08 -05:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
62b050f6d8
9 changed files with 104 additions and 27 deletions
|
@ -1212,6 +1212,7 @@
|
|||
variables: "Variables"
|
||||
vectors: "Vectors"
|
||||
while_loops: "While Loops"
|
||||
recursion: "Recursion"
|
||||
|
||||
delta:
|
||||
added: "Added"
|
||||
|
|
|
@ -34,6 +34,7 @@ defaultTasks = [
|
|||
'Write the guide.'
|
||||
'Write a loading tip, if needed.'
|
||||
'Click the Populate i18n button.'
|
||||
'Add programming concepts covered.'
|
||||
|
||||
'Mark whether it requires a subscription.'
|
||||
'Release to everyone via MailChimp.'
|
||||
|
|
|
@ -255,4 +255,5 @@ me.concept = me.shortString enum: [
|
|||
'variables'
|
||||
'vectors'
|
||||
'while_loops'
|
||||
'recursion'
|
||||
]
|
||||
|
|
|
@ -5,3 +5,8 @@
|
|||
|
||||
.select-language
|
||||
width: 200px
|
||||
display: inline
|
||||
|
||||
.select-session
|
||||
width: 300px
|
||||
display: inline
|
||||
|
|
|
@ -9,3 +9,6 @@
|
|||
.enroll-container
|
||||
margin: 5% 20%
|
||||
width: 60%
|
||||
|
||||
.session-name
|
||||
width: 300px
|
||||
|
|
|
@ -8,24 +8,43 @@ block content
|
|||
span *UNDER CONSTRUCTION, send feedback to
|
||||
a.spl(href='mailto:team@codecombat.com') team@codecombat.com
|
||||
div
|
||||
input(type='checkbox')
|
||||
input.student-view-checkbox(type='checkbox')
|
||||
span.spl Student view
|
||||
div TODO: edit button for class name
|
||||
div TODO: description field
|
||||
div TODO: fix ugly tabs
|
||||
div TODO: add student progress monitoring
|
||||
div TODO: level concepts, status, working play button
|
||||
div TODO: select course session
|
||||
div TODO: no unlock code or capacity limit for first course
|
||||
div TODO: student view
|
||||
div(style='border-bottom: 1px solid black')
|
||||
div(style='border-bottom: 1px solid black;')
|
||||
|
||||
h1= course.title
|
||||
p Class name: #{instance.name}
|
||||
p= course.description
|
||||
p
|
||||
strong Concepts:
|
||||
ul
|
||||
each topic in course.topics
|
||||
li= topic
|
||||
strong= course.duration
|
||||
|
||||
p Select programming languages available to students.
|
||||
h3 Your Class
|
||||
.form-group
|
||||
select.form-control.select-language
|
||||
select.form-control.select-session
|
||||
each instance in instances
|
||||
option= instance.name
|
||||
span.spl
|
||||
button.btn.btn-xs.edit-class-name-btn edit class name
|
||||
|
||||
p
|
||||
if instance.description
|
||||
span= instance.description
|
||||
span.spl
|
||||
button.btn.btn-xs.edit-description-btn edit class description
|
||||
else
|
||||
div
|
||||
button.btn.btn-xs.edit-description-btn add class description
|
||||
|
||||
.form-group
|
||||
span Class programming language:
|
||||
select.spl.form-control.select-language
|
||||
option(value="Python") Python
|
||||
option(value="JavaScript") JavaScript
|
||||
option(value="All Languages") All Languages
|
||||
|
@ -56,8 +75,9 @@ block content
|
|||
|
||||
.tab-pane#invite(role='tabpanel')
|
||||
p Invite students to join this class.
|
||||
p Student unlock code: #{instance.code}
|
||||
p Class capacity: 34/50
|
||||
if course.title !== 'Introduction to Computer Science'
|
||||
p Student unlock code: #{instance.code}
|
||||
p Class capacity: 34/50
|
||||
|
||||
textarea.textarea-emails(rows=3, placeholder="Enter student emails to invite, one per line")
|
||||
div
|
||||
|
|
|
@ -64,7 +64,10 @@ block content
|
|||
span Up to 500 students $2999
|
||||
else
|
||||
span Up to 500 students $799
|
||||
h3 3. Finish Purchase
|
||||
h3 3. Pick a name for your class
|
||||
p Displayed on the course page for you and your students.
|
||||
input.session-name(type='text', placeholder="Mrs. Smith's 4th Period")
|
||||
h3 4. Finish Purchase
|
||||
p After purchase you will be able to invite your students to enroll in the selected course.
|
||||
p.center
|
||||
button.btn.btn-info.btn-lg.btn-buy Buy #{selectedCourseTitle} for $#{price}
|
||||
|
|
|
@ -2,12 +2,15 @@ app = require 'core/application'
|
|||
RootView = require 'views/core/RootView'
|
||||
template = require 'templates/courses/mock1/course-details'
|
||||
|
||||
# TODO: show invite tab and no students tab if no students
|
||||
|
||||
module.exports = class CourseDetailsView extends RootView
|
||||
id: 'course-details-view'
|
||||
template: template
|
||||
|
||||
events:
|
||||
'click .edit-class-name-btn': 'onClickEditClassName'
|
||||
'click .edit-description-btn': 'onClickEditClassDescription'
|
||||
'change .select-session': 'onChangeSession'
|
||||
|
||||
constructor: (options, @courseID) ->
|
||||
super options
|
||||
@initData()
|
||||
|
@ -15,10 +18,25 @@ module.exports = class CourseDetailsView extends RootView
|
|||
getRenderData: ->
|
||||
context = super()
|
||||
context.course = @course ? {}
|
||||
context.instance = @instance ? {}
|
||||
context.instance = @instances?[@currentInstanceIndex] ? {}
|
||||
context.instances = @instances ? []
|
||||
context
|
||||
|
||||
initData: ->
|
||||
mockData = require 'views/courses/mock1/CoursesMockData'
|
||||
@course = mockData.courses[@courseID]
|
||||
@instance = mockData.instances[_.random(0, mockData.instances.length - 1)]
|
||||
# @instance = mockData.instances[_.random(0, mockData.instances.length - 1)]
|
||||
@currentInstanceIndex = 0
|
||||
@instances = mockData.instances
|
||||
|
||||
onChangeSession: (e) ->
|
||||
newSessionValue = $(e.target).val()
|
||||
for val, index in @instances when val.name is newSessionValue
|
||||
@currentInstanceIndex = index
|
||||
@render?()
|
||||
|
||||
onClickEditClassName: (e) ->
|
||||
alert 'TODO: Popup for editing name for this course session'
|
||||
|
||||
onClickEditClassDescription: (e) ->
|
||||
alert 'TODO: Popup for editing description for this course session'
|
||||
|
|
|
@ -1,66 +1,87 @@
|
|||
data = {}
|
||||
|
||||
data.concepts = [
|
||||
'Advanced Strings'
|
||||
'Algorithms'
|
||||
'Arithmetic'
|
||||
'Arrays'
|
||||
'Basic Syntax'
|
||||
'Boolean Logic'
|
||||
'Break Statements'
|
||||
'Classes'
|
||||
'For Loops'
|
||||
'Functions'
|
||||
'If Statements'
|
||||
'Input Handling'
|
||||
'Math Operations'
|
||||
'Object Literals'
|
||||
'Strings'
|
||||
'Variables'
|
||||
'Vectors'
|
||||
'While Loops'
|
||||
]
|
||||
|
||||
data.courses = [
|
||||
{
|
||||
title: 'Introduction to Computer Science'
|
||||
description: 'Learn basic syntax, method calls, and the CodeCombat learning environment.'
|
||||
topics: ['Basic syntax', 'Method calls', 'String constants', 'while loops', 'Game mechanic: movement', 'Game mechanic: combat']
|
||||
description: 'Learn basic syntax, while loops, and the CodeCombat learning environment.'
|
||||
topics: ['Basic syntax', 'Strings', 'While Loops']
|
||||
duration: '1 hour of material'
|
||||
levels: ['Dungeons of Kithgard', 'Gems in the Deep', 'Shadow Guard', 'Kounter Kithwise', 'Crawlways of Kithgard', 'Enemy Mine', 'Illusory Interruption', 'Forgetful Gemsmith', 'Signs and Portents', 'Favorable Odds', 'True Names', 'The Prisoner', 'Banefire', 'The Raised Sword', 'Haunted Kithmaze', 'Riddling Kithmaze', 'Descending Further', 'The Second Kithmaze', 'Dread Door', 'Cupboards of Kithgard', 'Hack and Dash']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 102'
|
||||
description: 'Add parameters, if statements, and some other stuff.'
|
||||
topics: ['Parameters', 'Variables', 'Booleans', 'if statement', 'Arithmetic', 'Game mechanic: building']
|
||||
topics: ['Variables', 'Booleans', 'If Statements', 'Arithmetic']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Known Enemy', 'Master of Names', 'Lowly Kithmen', 'Closing the Distance', 'Tactical Strike', 'The Final Kithmaze', 'The Gauntlet', 'Radiant Aura', 'Kithgard Gates', 'Destroying Angel', 'Deadly Dungeon Rescue', 'Kithgard Brawl', 'Cavern Survival', 'Breakout', 'Attack Wisely!', 'Kithgard Mastery', 'Kithgard Apprentice', 'Long Kithmaze', 'Boom! and Bust', 'Defense of Plainswood', 'Winding Trail', 'Thumb Biter', 'Gems or Death', 'Backwoods Ambush', 'Patrol Buster', 'Endangered Burl', 'Village Guard', 'Thornbush Farm', 'Back to Back', 'Ogre Encampment', 'Woodland Cleaver', 'Shield Rush', 'Peasant Protection', 'Munchkin Swarm']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 103'
|
||||
description: 'Learn how to handle input.'
|
||||
topics: ['Handling input', 'Game mechanic: gathering']
|
||||
topics: ['If Statements', 'Arithmetic', 'Input Handling']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Munchkin Harvest', 'Swift Dagger', 'Shrapnel', 'Arcane Ally', 'Touch of Death', 'Bonemender', 'Coinucopia', 'Copper Meadows', 'Drop the Flag', 'Deadly Pursuit', 'Rich Forager', 'Siege of Stonehold', 'Multiplayer Treasure Grove', 'Dueling Grounds', 'Backwoods Brawl', 'Backwoods Treasure', 'Range Finder', 'Stillness in Motion', 'The Agrippa Defense', 'Storming the Towers of Areth', 'Hold the Forest Pass', 'Hold for Reinforcements', 'Storming the Farmhouse', 'Wild Horses', 'Boulder Woods', 'Unfair Support', 'Tactical Timing', 'Apocalypse', 'Doom Glade', 'Defend the Garrison', 'Lost Viking', 'Forest Flower Grove', 'The Dunes', 'The Mighty Sand Yak', 'Oasis', 'Sarven Road', 'Sarven Gaps', 'Thunderhooves', 'Medical Attention', 'The Great Yak Stampede', 'Minesweeper', 'Sarven Sentry', 'Keeping Time']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 104'
|
||||
description: 'Time to tackle arrays and some pvp stuff.'
|
||||
topics: ['Arrays', 'break statement', 'Game mechanic: multiplayer']
|
||||
topics: ['Arrays', 'Break Statements']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Hoarding Gold', 'Decoy Drill', 'Yakstraction', 'Sarven Brawl', 'Desert Combat', 'Dust', 'Sarven Rescue', 'Sacred Statue', 'Mirage Maker', 'Sarven Savior', 'Odd Sandstorm', 'Lurkers', 'Preferential Treatment', 'Sarven Shepherd', 'Shine Getter', 'The Trials', 'Mad Maxer', 'Mad Maxer Strikes Back', 'Mad Maxer Sells Out', 'Mad Maxer Gets Greedy', 'Mad Maxer: Redemption', 'Sarven Treasure', 'Harrowland', 'Sarven Siege', 'Clash of Clones', 'Sand Snakes', 'Crag Tag']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 105'
|
||||
description: 'Time to tackle arrays and some PVP.'
|
||||
topics: ['Object literals', 'Practice levels']
|
||||
topics: ['Arrays', 'Break Statements', 'Object Literals']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Slalom', 'Black Diamond', 'Treasure Cave', 'Ogre Gorge Gouger', 'Dance-Off', 'Alpine Rally', 'Cloudrip Commander', 'Mountain Mercenaries']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 106'
|
||||
description: 'For loops!'
|
||||
topics: ['for loops', 'Practice levels']
|
||||
topics: ['Break Statements', 'Object Literals', 'For loops']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Timber Guard', 'Hunting Party', 'Zoo Keeper', 'Cloudrip Brawl', 'Cloudrip Treasure', 'Cloudrip Siege', 'Noble Sacrifice', 'Zero Sum', 'Borrowed Sword', 'Protect and Serve']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 107'
|
||||
description: 'Functions!'
|
||||
topics: ['Functions', 'Practice levels']
|
||||
topics: ['Object Literals', 'For loops', 'Functions']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Vital Powers', 'Timber Turncoat', 'Restless Dead', 'Ring Bearer', 'The Two Flowers', 'The Geometry of Flowers', 'Mountain Flower Grove', 'Hunters and Prey', 'Library Tactician']
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 108'
|
||||
description: 'Maths.'
|
||||
topics: ['Modulo', 'Math operations', 'Practice levels']
|
||||
topics: ['For loops', 'Functions', 'Math Operations']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Steelclaw Gap', 'Pesky Yaks', 'Mixed Unit Tactics', 'Sowing Fire', 'Reaping Fire', 'Toil and Trouble', 'What in Carnation', 'Misty Island Mine', 'Raiders of the Long Dark', 'Grim Determination', 'Deadly Discs', "Summit's Gate"]
|
||||
},
|
||||
{
|
||||
title: 'Computer Science 109'
|
||||
description: 'Vectors and strings.'
|
||||
topics: ['Vectors', 'String manipulation', 'Practice levels']
|
||||
topics: ['Vectors', 'Advanced Strings']
|
||||
duration: '5 hours of material'
|
||||
levels: ['Circle Walking', 'Skating Away', 'Kelvintaph Crusader', 'Kelvintaph Burgler', 'Ice Soccer', 'Razorfray']
|
||||
}
|
||||
|
@ -73,16 +94,19 @@ getStudents = ->
|
|||
data.instances = [
|
||||
{
|
||||
name: "Mr. Smith's First Period"
|
||||
description: "Homework due on Friday."
|
||||
code: 'b2KF7'
|
||||
students: getStudents()
|
||||
},
|
||||
{
|
||||
name: "Mr. Smith's Second Period"
|
||||
description: "Test class description"
|
||||
code: 'b2KF7'
|
||||
students: getStudents()
|
||||
},
|
||||
{
|
||||
name: "Mrs. Anderson's Third Period"
|
||||
name: "Summer Camp 2015"
|
||||
description: "You should have received an email with extra credit homework."
|
||||
code: 'b2KF7'
|
||||
students: getStudents()
|
||||
},
|
||||
|
@ -93,6 +117,7 @@ data.instances = [
|
|||
},
|
||||
{
|
||||
name: "Test class name one"
|
||||
description: "Test class description"
|
||||
code: 'b2KF7'
|
||||
students: getStudents()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue