Courses i18n

Also, removed duplicated 'Continue' string
This commit is contained in:
Imperadeiro98 2015-12-08 20:05:08 +00:00
parent 78548b550f
commit e284ec7959
22 changed files with 497 additions and 315 deletions

View file

@ -259,7 +259,6 @@
victory_sign_up_poke: "Want to save your code? Create a free account!"
victory_rate_the_level: "How fun was this level?"
victory_return_to_ladder: "Return to Ladder"
victory_play_continue: "Continue"
victory_saving_progress: "Saving Progress"
victory_go_home: "Go Home"
victory_review: "Tell us more!"
@ -272,9 +271,6 @@
victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks."
victory_become_a_viking: "Become a Viking"
guide_title: "Guide"
tome_minion_spells: "Your Minions' Spells" # Only in old-style levels.
tome_read_only_spells: "Read-Only Spells" # Only in old-style levels.
tome_other_units: "Other Units" # Only in old-style levels.
tome_cast_button_run: "Run"
tome_cast_button_running: "Running"
tome_cast_button_ran: "Ran"
@ -286,7 +282,6 @@
tome_available_spells: "Available Spells"
tome_your_skills: "Your Skills"
tome_current_method: "Current Method"
hud_continue_short: "Continue"
code_saved: "Code Saved"
skip_tutorial: "Skip (esc)"
keyboard_shortcuts: "Key Shortcuts"
@ -905,7 +900,6 @@
concepts_covered: "Concepts Covered"
students: "Students"
students1: "students"
expand_details: "Expand details"
concepts: "Concepts"
levels: "levels"
played: "Played"
@ -939,12 +933,6 @@
free_trial: "Free trial for teachers!"
get_access: "to get individual access to all courses for evalutaion purposes."
questions: "Questions?"
faq: "Courses FAQ"
question: "Q:" # Like in 'Question'
question1: "What's the difference between these courses and the single player game?"
answer: "A:" # Like in 'Answer'
answer1: "The single player game is designed for individuals, while the courses are designed for classes."
answer2: "The single player game has items, gems, hero selection, leveling up, and in-app purchases. Courses have classroom management features and streamlined student-focused level pacing."
teachers_click: "Teachers Click Here"
students_click: "Students Click Here"
courses_on_coco: "Courses on CodeCombat"
@ -965,6 +953,149 @@
topics: "Topics"
hours_content: "Hours of content:"
get_free: "Get FREE course"
enroll_paid: "Enroll Students in Paid Courses"
you_have1: "You have"
you_have2: "unused paid enrollments"
use_one: "Use 1 paid enrollment for"
use_multiple: "Use paid enrollments for the following students:"
already_enrolled: "already enrolled"
licenses_remaining: "licenses remaining:"
insufficient_enrollments: "insufficient paid enrollments"
enroll_students: "Enroll Students"
get_enrollments: "Get More Enrollments"
change_language: "Change Course Language"
keep_using: "Keep Using"
switch_to: "Switch To"
greetings: "Greetings!"
learn_p: "Learn Python"
learn_j: "Learn JavaScript"
back_classrooms: "Back to my classrooms"
back_courses: "Back to my courses"
edit_details: "Edit class details"
enrolled_courses: "enrolled in paid courses:"
purchase_enrollments: "Purchase Enrollments"
remove_student: "remove student"
assign: "Assign"
to_assign: "to assign paid courses."
teacher: "Teacher"
complete: "Complete"
none: "None"
save: "Save"
play_campaign_title: "Play the Campaign"
play_campaign_description: "Youre ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!"
create_account_title: "Create an Account"
create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!"
preview_campaign_title: "Preview Campaign"
preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account."
arena: "Arena"
arena_soon_title: "Arena Coming Soon"
arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
not_enrolled1: "Not enrolled"
not_enrolled2: "Ask your teacher to enroll you in the next course."
next_course: "Next Course"
coming_soon1: "Coming soon"
coming_soon2: "We are hard at work making more courses for you!"
available_levels: "Available Levels"
welcome_to_courses: "Adventurers, welcome to Courses!"
ready_to_play: "Ready to play?"
start_new_game: "Start New Game"
play_now_learn_header: "Play now to learn"
play_now_learn_1: "basic syntax to control your character"
play_now_learn_2: "while loops to solve pesky puzzles"
play_now_learn_3: "strings & variables to customize actions"
play_now_learn_4: "how to defeat an ogre (important life skills!)"
welcome_to_page: "Welcome to your Courses page!"
completed_hoc: "Amazing! You've completed the Hour of Code course!"
ready_for_more_header: "Ready for more? Play the campaign mode!"
ready_for_more_1: "Use gems to unlock new items!"
ready_for_more_2: "Play through brand new worlds and challenges"
ready_for_more_3: "Learn even more programming!"
saved_games: "Saved Games"
hoc: "Hour of Code"
change_language: "change language"
my_classes: "My Classes"
class_added: "Class successfully added!"
view_class: "view class"
view_levels: "view levels"
join_class: "Join A Class"
ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:"
enter_c_code: "<Enter Class Code>"
join: "Join"
joining: "Joining class"
course_complete: "Course Complete"
play_arena: "Play Arena"
start: "Start"
last_level: "Last Level"
welcome_to_hoc: "Adventurers, welcome to our Hour of Code!"
logged_in_as: "Logged in as:"
not_you: "Not you?"
welcome_back: "Hi adventurer, welcome back!"
continue_playing: "Continue Playing"
more_options: "More options:"
option1_header: "Option 1: Invite students via email"
option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password."
option2_header: "Option 2: Send URL to your students"
option2_body: "Students will be asked to enter an email address, username and password to create an account."
option3_header: "Option 3: Direct students to codecombat.com/courses"
option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account."
thank_you_pref: "Thank you for your purchase! You can now assign"
thank_you_suff: "more students to paid courses."
return_to_class: "Return to classroom"
return_to_course_man: "Return to course management."
students_not_enrolled: "students not enrolled"
total_all_classes: "Total Across All Classes"
how_many_enrollments: "How many additional paid enrollments do you need?"
each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually."
purchase_now: "Purchase Now"
enrollments: "enrollments"
remove_student1: "Remove Student"
are_you_sure: "Are you sure you want to remove this student from this class?"
remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time."
remove_description2: "The activated paid license will not be returned."
keep_student: "Keep Student"
removing_user: "Removing user"
to_join_ask: "To join a class, ask your teacher for an unlock code."
join_class: "Join Class"
enter_here: "<enter unlock code here>"
successfully_joined: "Successfully joined"
click_to_start: "Click here to start taking"
my_courses: "My Courses"
classroom: "Classroom"
use_school_email: "use your school email if you have one"
unique_name: "a unique name no one has chosen"
pick_something: "pick something you can remember"
class_code: "Class Code"
optional_ask: "optional - ask your teacher to give you one!"
optional_school: "optional - what school do you go to?"
start_playing: "Start Playing"
skip_this: "Skip this, I'll create an account later!"
welcome: "Welcome"
getting_started: "Getting Started with Courses"
download_getting_started: "Download Getting Started Guide [PDF]"
getting_started_1: "Create a new class by clicking the green 'Create New Class' button below."
getting_started_2: "Once you've created a class, click the blue 'Add Students' button."
getting_started_3: "You'll see student's progress below as they sign up and join your class."
addicional_resources: "Additional Resources"
addicional_resources_1_pref: "Download/print our"
addicional_resources_1_mid: "Course 1 Teacher's Guide"
addicional_resources_1_suff: "explanations and solutions to each level."
addicional_resources_2_pref: "Complete our"
addicional_resources_2_suff: "to get 15 more hours of content for FREE for 2 months."
addicional_resources_3_pref: "Visit our"
addicional_resources_3_mid: "Teacher Forums"
addicional_resources_3_suff: "to connect to fellow educators who are using CodeCombat."
your_classes: "Your Classes"
no_classes: "No classes yet!"
create_new_class1: "create new class"
available_courses: "Available Courses"
unused_enrollments: "Unused enrollments available:"
students_access: "All students get access to Introduction to Computer Science for free. One enrollment per student is required to assign them to paid CodeCombat courses. A single student does not need multiple enrollments to access all paid courses."
active_courses: "active courses"
no_students: "No students yet!"
add_students1: "add students"
view_edit: "view/edit"
students_enrolled: "students enrolled"
length: "Length:"
classes:
archmage_title: "Archmage"

View file

@ -3,7 +3,7 @@ extends /templates/core/modal-base
block modal-header-content
.clearfix
.text-center
h2 Enroll Students in Paid Courses
h2(data-i18n="courses.enroll_paid")
p= view.classroom.get('name')
block modal-body-content
@ -12,9 +12,9 @@ block modal-body-content
- var remainingLic = totalLic - usedLic;
.text-center
p
strong.spr You have
strong.spr= remainingLic
strong unused paid enrollments
strong.spr(data-i18n="courses.you_have1")
strong= remainingLic
strong.spl(data-i18n="courses.you_have2")
.row
.col-sm-10.col-sm-offset-1
@ -24,13 +24,14 @@ block modal-body-content
.radio
label
input(type="radio", name="targets" value="given" checked=true)
span.spr Use 1 paid enrollment for #{view.user.broadName()}
span.spr(data-i18n="courses.use_one")
span= view.user.broadName()
.radio
label
input(type="radio", name="targets" value="selection")
span.spr Use paid enrollments for the following students:
span(data-i18n="courses.use_multiple")
else
p Use paid enrollments for the following students:
p(data-i18n="courses.use_multiple")
.well.form-group
for user in view.users.models
@ -41,33 +42,33 @@ block modal-body-content
span.spr= user.broadName()
if paid
span (
span already enrolled
span(data-i18n="courses.already_enrolled")
span )
#error-alert.alert.alert-danger.hide
#progress-area.hide
.progress
.progress-bar
#submit-form-area.text-center
p
span.spr Total students:
span.spr(data-i18n="courses.total_students")
span#total-selected-span.spr
span#not-depleted-span
| (
span.spr licenses remaining:
span.spr(data-i18n="courses.licenses_remaining")
span#licenses-remaining-span
| )
span#depleted-span
span#depleted-span
| (
span insufficient paid enrollments
span(data-i18n="courses.insufficient_enrollments")
| )
p
button#activate-licenses-btn.btn.btn-success.text-uppercase(type="submit") Enroll Students
button#activate-licenses-btn.btn.btn-success.text-uppercase(type="submit", data-i18n="courses.enroll_students")
p
a#get-more-licenses-btn.btn.btn-info.text-uppercase(href="/courses/purchase") Get More Enrollments
a#get-more-licenses-btn.btn.btn-info.text-uppercase(href="/courses/purchase", data-i18n="courses.get_enrollments")
block modal-footer-content

View file

@ -1,7 +1,7 @@
extends /templates/core/modal-base
block modal-header-content
h3 Change Course Language
h3(data-i18n="courses.change_language")
.clearfix
block modal-body-content
@ -9,20 +9,26 @@ block modal-body-content
- var currentLanguage = (me.get('aceConfig') || {}).language || 'python';
button.lang-choice-btn.btn.btn-success.btn-lg(data-language='python')
if currentLanguage === 'python'
| Keep Using Python
span.spr(data-i18n="courses.keep_using")
span Python
else
| Switch To Python
p - OR -
span.spr(data-i18n="courses.switch_to")
span Python
p
span.spr -
span.text-uppercase(data-i18n="general.or")
span.spl -
button.lang-choice-btn.btn.btn-default(data-language='javascript')
if currentLanguage === 'javascript'
| Keep Using JavaScript
span.spr(data-i18n="courses.keep_using")
span JavaScript
else
| Switch to JavaScript
span.spr(data-i18n="courses.switch_to")
span JavaScript
#saving-progress.progress.progress-striped.active.hide
.progress-bar(style="width: 100%")
block modal-footer-content

View file

@ -3,7 +3,7 @@ extends /templates/core/modal-base
block modal-header-content
.clearfix
.text-center
h2.modal-title Greetings!
h2.modal-title(data-i18n="courses.greetings")
h3(data-i18n="choose_hero.programming_language_description")
block modal-body-content
@ -12,14 +12,13 @@ block modal-body-content
img(src="/images/common/code_languages/python_small.png")
span.spl Python
p(data-i18n="choose_hero.python_blurb")
button.lang-choice-btn.btn.btn-default(data-language='javascript')
img(src="/images/common/code_languages/javascript_small.png")
span.spl JavaScript
p(data-i18n="choose_hero.javascript_blurb")
#saving-progress.progress.progress-striped.active.hide
.progress-bar(style="width: 100%")
block modal-footer-content

View file

@ -20,9 +20,8 @@ block modal-body-content
label(data-i18n="choose_hero.programming_language")
select.form-control#programming-language-select
- var aceConfig = view.classroom ? view.classroom.get('aceConfig') || {} : {};
option(value="python", selected=aceConfig.language==='python') Learn Python
option(value="javascript", selected=aceConfig.language==='javascript') Learn JavaScript
.language-locked Language cannot be changed once students join a class.
option(value="python", selected=aceConfig.language==='python', data-i18n="courses.learn_p")
option(value="javascript", selected=aceConfig.language==='javascript', data-i18n="courses.learn_j")
block modal-footer-content
if view.classroom

View file

@ -4,20 +4,20 @@ block content
- var isOwner = view.classroom ? view.classroom.get('ownerID') === me.id : false;
if isOwner
a(href="/courses/teachers") Back to my classrooms
a(href="/courses/teachers", data-i18n="courses.back_classrooms")
else
a(href="/courses") Back to my courses
a(href="/courses", data-i18n="courses.back_courses")
if !me.isAnonymous()
h1
span.spr= view.classroom.get('name')
if isOwner
a#edit-class-details-link
small Edit class details
small(data-i18n="courses.edit_details")
if view.classroom.get('description')
p= view.classroom.get('description')
h3(data-i18n="courses.stats")
table.progress-stats-container
- var stats = view.classStats()
@ -26,7 +26,7 @@ block content
td
span.spr= _.size(view.classroom.get('members'))
span (
span.spr enrolled in paid courses:
span.spr(data-i18n="courses.enrolled_courses")
span= stats.enrolledUsers
span )
tr
@ -41,17 +41,17 @@ block content
tr
td(data-i18n="courses.total_levels")
td= stats.totalLevelsComplete
h1
| Students
span(data-i18n="courses.students")
if view.teacherMode
.pull-right#main-button-area
button#add-students-btn.btn.btn-primary.text-uppercase Add Students
button#activate-licenses-btn.btn.btn-info.text-uppercase Enroll Students in Paid Courses
a.btn.btn-success.text-uppercase(href="/courses/purchase?from-classroom="+view.classroom.id) Purchase Enrollments
button#add-students-btn.btn.btn-primary.text-uppercase(data-i18n="courses.add_students")
button#activate-licenses-btn.btn.btn-info.text-uppercase(data-i18n="courses.enroll_paid")
a.btn.btn-success.text-uppercase(href="/courses/purchase?from-classroom="+view.classroom.id, data-i18n="courses.purchase_enrollments")
hr
for user in view.users.models
.row
.col-md-6
@ -60,16 +60,22 @@ block content
if view.teacherMode
a.remove-student-link.pull-right.text-uppercase(data-user-id=user.id)
span.glyphicon.glyphicon-remove
span.spl remove student
span.spl(data-i18n="courses.remove_student")
- var lastPlayedString = view.userLastPlayedString(user);
- var playtime = view.userPlaytimeString(user);
if lastPlayedString || playtime
#student-stats-row.row
if lastPlayedString
.col-sm-6 Last Played: #{lastPlayedString}
.col-sm-6
span(data-i18n="user.last_played")
span.spr :
span= lastPlayedString
if playtime
.col-sm-6 Playtime: #{playtime}
.col-sm-6
span(data-i18n="clans.playtime")
span.spr :
span= playtime
- var paidFor = user.get('coursePrepaidID');
for courseInstance in view.courseInstances.models
- var inCourse = _.contains(courseInstance.get('members'), user.id);
@ -107,16 +113,20 @@ block content
.progress-bar.progress-bar-default(style=css, data-content=content, data-toggle='popover')= i
else if paidFor
.text-center
button.enable-btn.btn.btn-info.btn-sm.text-uppercase(data-user-id=user.id, data-course-instance-cid=courseInstance.cid) Assign #{course.get('name')}
button.enable-btn.btn.btn-info.btn-sm.text-uppercase(data-user-id=user.id, data-course-instance-cid=courseInstance.cid)
span.spr(data-i18n="courses.assign")
span= course.get('name')
if view.teacherMode && !paidFor
.text-center
p
em
span.spr Enroll
strong.spr= user.broadName()
span to assign paid courses.
span.spr(data-i18n="courses.enroll")
strong= user.broadName()
span.spl(data-i18n="courses.to_assign")
p
button.activate-single-license-btn.btn.btn-info.btn-sm.text-uppercase(data-user-id=user.id) Enroll #{user.broadName()}
button.activate-single-license-btn.btn.btn-info.btn-sm.text-uppercase(data-user-id=user.id)
span.spr(data-i18n="courses.enroll")
span= user.broadName()
hr

View file

@ -3,9 +3,9 @@ extends /templates/base
block content
if view.teacherMode
a(href="/courses/teachers") Back to my classrooms
a(href="/courses/teachers", data-i18n="courses.back_classrooms")
else
a(href="/courses") Back to my courses
a(href="/courses", data-i18n="courses.back_courses")
br
br
@ -31,7 +31,7 @@ block content
.col-md-6
button.btn.btn-success.btn-select-instance(data-i18n="courses.select")
else if !course || !courseInstance
h1(data-i18n="common.loading") Loading...
h1(data-i18n="common.loading")
else
p
// TODO: format this text all good and stuff
@ -44,7 +44,9 @@ block content
span(data-i18n='courses.unnamed_class')
if !view.owner.isNew() && view.getOwnerName() && courseInstance.get('name') != 'Single Player'
span.spl.spr - Teacher:
span.spl -
span.spl(data-i18n='courses.teacher')
span.spr :
//a(href="/user/#{view.owner.id}") // Don't link to profiles until we improve them
span
strong= view.getOwnerName()
@ -52,8 +54,10 @@ block content
h1
| #{course.get('name')}
if view.courseComplete
span.spl - Complete!
span.spl -
span.spl(data-i18n='courses.complete')
span !
p
if courseInstance.get('description')
each line in courseInstance.get('description').split('\n')
@ -67,43 +71,46 @@ block content
form.form#school-form
.form-group
label.control-label(for="course-complete-school-input")
span.spr(data-i18n="signup.school_name") School Name and City
span.spr(data-i18n="signup.school_name")
em.optional-note
| (
span(data-i18n="signup.optional") optional
span(data-i18n="signup.optional")
| ):
.input-border
input#course-complete-school-input.input-large.form-control(name="schoolName", data-i18n="[placeholder]signup.school_name_placeholder")
button.btn.btn-primary.btn-submit.no-school(type="submit") None
button.btn.btn-info.btn-submit.save-school(type="submit") Save
button.btn.btn-primary.btn-submit.no-school(type="submit", data-i18n='courses.none')
button.btn.btn-info.btn-submit.save-school(type="submit", data-i18n='courses.save')
.row
if view.singlePlayerMode && !me.isAnonymous()
.col-md-6.col-md-offset-3
a.btn.btn-lg.btn-success(href="/play")
h1 Play the Campaign
p Youre ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!
h1(data-i18n='courses.play_campaign_title')
p(data-i18n='courses.play_campaign_description')
else if view.singlePlayerMode && me.isAnonymous()
.col-md-6
a.btn.btn-lg.btn-success.signup-button
h1 Create an Account
p Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!
h1(data-i18n='courses.create_account_title')
p(data-i18n='courses.create_account_description')
.col-md-6
a.btn.btn-lg.btn-success(href="/play")
h1 Preview Campaign
p Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account.
h1(data-i18n='courses.preview_campaign_title')
p(data-i18n='courses.preview_campaign_description')
else if !view.singlePlayerMode
.col-md-6
if view.arenaLevel
a.btn.btn-lg.btn-success.btn-play-level(data-level-slug=view.arenaLevel.slug, data-level-id=view.arenaLevel.original)
h1
span Arena
| :
span.spl= view.arenaLevel.name
span(data-i18n='courses.arena')
span.spr :
span= view.arenaLevel.name
p= view.arenaLevel.description.replace(/!\[.*?\)/, '')
else
a.btn.btn-lg.btn-success.disabled
h1 Arena Coming Soon
p We are working on a multiplayer arena for classrooms at the end of #{course.get('name')}.
h1(data-i18n='courses.arena_soon_title') Arena Coming Soon
p
span.spr(data-i18n='courses.arena_soon_description')
span= course.get('name')
span .
.col-md-6
if view.nextCourseInstance
a.btn.btn-lg.btn-success(href="/courses/#{view.nextCourse.id}/#{view.nextCourseInstance.id}")
@ -112,17 +119,17 @@ block content
else if view.nextCourse
a.btn.btn-lg.btn-success.disabled
h1= view.nextCourse.get('name')
p
em NOT ENROLLED
p Ask your teacher to enroll you in the next course.
p.text-uppercase
em(data-i18n='courses.not_enrolled1')
p(data-i18n='courses.not_enrolled2')
else
a.btn.btn-lg.btn-success(disabled=!view.nextCourse ? "disabled" : "")
h1 Next Course
p
em COMING SOON
p We are hard at work making more courses for you!
h1(data-i18n='courses.next_course')
p.text-uppercase
em(data-i18n='courses.coming_soon1')
p(data-i18n='courses.coming_soon2')
.available-courses-title Available Levels
.available-courses-title(data-i18n='courses.available_levels')
table.table.table-striped.table-condensed
thead
tr

View file

@ -19,7 +19,7 @@ block content
else if view.state === 'purchasing'
p
.alert.alert-info(data-i18n="courses.purchasing_course")
else
else
.well.well-lg.enroll-container
if view.price > 0
h1.center(data-i18n="courses.buy_course")

View file

@ -3,122 +3,132 @@ extends /templates/base
block content
h3.text-right
if me.isAnonymous()
a(href="/teachers") Teachers, click here!
a(href="/teachers")
span(data-i18n="courses.teachers_click")
span !
else
a(href="/courses/teachers") Teachers, click here!
a(href="/courses/teachers")
span(data-i18n="courses.teachers_click")
span !
#main-content
if me.isAnonymous()
h1.text-center Adventurers, welcome to Courses!
h1.text-center(data-i18n="courses.welcome_to_courses")
.text-center
p
h3 Ready to play?
h3(data-i18n="courses.ready_to_play")
p
button#start-new-game-btn.btn.btn-default Start New Game
p - OR -
button#start-new-game-btn.btn.btn-default(data-i18n="courses.start_new_game")
p
span.spr -
span.text-uppercase(data-i18n="general.or")
span.spl -
p
button#log-in-btn.btn.btn-default(data-i18n="login.log_in")
h3#play-now-to-learn-header.text-center PLAY NOW TO LEARN
h3#play-now-to-learn-header.text-center.text-uppercase(data-i18n="courses.play_now_learn_header")
ul
li basic syntax to control your character
li while loops to solve pesky puzzles
li strings & variables to customize actions
li how to defeat an ogre (important life skills!)
li(data-i18n="courses.play_now_learn_1")
li(data-i18n="courses.play_now_learn_2")
li(data-i18n="courses.play_now_learn_3")
li(data-i18n="courses.play_now_learn_4")
else
- var showHOCComplete = false;
if view.hocCourseInstance
- var course = view.courses.get(view.hocCourseInstance.get('courseID'));
- var campaign = view.campaigns.get(course.get('campaignID'));
- var stats = campaign.statsForSessions(view.hocCourseInstance.sessions);
- showHOCComplete = stats.levels.done && !view.classrooms.size();
.text-center
if !showHOCComplete
h1 Welcome to your Courses page!
h1(data-i18n="courses.welcome_to_page") Welcome to your Courses page!
else
h1 Amazing! You've completed the Hour of Code course!
h2 Ready for more? Play the campaign mode!
h1(data-i18n="courses.completed_hoc")
h2(data-i18n="courses.ready_for_more_header")
ul.text-left
li Use gems to unlock new items!
li Play through brand new worlds and challenges
li Learn even more programming!
li(data-i18n="courses.ready_for_more_1")
li(data-i18n="courses.ready_for_more_2")
li(data-i18n="courses.ready_for_more_3")
a.btn.btn-lg.btn-success(href="/play") Play Now
if view.hocCourseInstance && !view.classrooms.size()
h3 Saved Games
h3(data-i18n="courses.saved_games")
hr
.course-instance-entry
h3
span.spr Hour of Code: Course 1
span(data-i18n="courses.hoc")
span.spr :
span.spr(data-i18n="courses.course")
span 1
span.spr= (me.get('aceConfig') || {}).language === 'python' ? 'Python' : 'JavaScript'
small
a#change-language-link change language
a#change-language-link(data-i18n="courses.change_language")
+course-instance-body(view.hocCourseInstance)
.clearfix
else if view.classrooms.size()
h3.text-uppercase My Classes
h3.text-uppercase(data-i18n="courses.my_classes")
hr
for classroom in view.classrooms.models
- var justAdded = classroom.id === view.classroomJustAdded;
- var classroomClass = justAdded ? 'just-added' : '';
if justAdded
#just-added-text.text-center Class successfully added!
#just-added-text.text-center(data-i18n="courses.class_added")
//- sigh
div(class=classroomClass)
h3
span.spr= classroom.get('name')
span.spr (#{(classroom.get('aceConfig') || {}).language === 'python' ? 'Python' : 'JavaScript'})
a(href="/courses/"+classroom.id) view class
a(href="/courses/"+classroom.id, data-i18n="courses.view_class")
- var courseInstances = view.courseInstances.where({classroomID: classroom.id});
for courseInstance in courseInstances
.course-instance-entry
- var course = view.courses.get(courseInstance.get('courseID'));
h3
span.spr= course.get('name')
small
a(href="/courses/"+courseInstance.get('courseID')+'/'+courseInstance.id) view levels
a(href="/courses/"+courseInstance.get('courseID')+'/'+courseInstance.id, data-i18n="courses.view_levels")
+course-instance-body(courseInstance)
.clearfix
else
.text-center
button#start-new-game-btn.btn.btn-success.btn-lg Start New Game
h3.text-uppercase Join A Class
button#start-new-game-btn.btn.btn-success.btn-lg(data-i18n="courses.start_new_game")
h3.text-uppercase(data-i18n="courses.join_class")
hr
form#join-class-form.form-inline
.help-block
em Ask your teacher if you have a CodeCombat class code! If so, enter it below:
em(data-i18n="courses.ask_teacher_for_code")
.form-group
input#class-code-input.form-control(placeholder="<Enter Class Code>", value=view.classCode)
input#join-class-button.btn.btn-default(type="submit" value="Join")
input#class-code-input.form-control(data-i18n="[placeholder]courses.enter_c_code", placeholder="<Enter Class Code>", value=view.classCode)
input#join-class-button.btn.btn-default(type="submit", data-i18n="[value]courses.join", value="Join")
if view.state === 'enrolling'
.progress.progress-striped.active
.progress-bar(style="width: 100%") Joining class
.progress-bar(style="width: 100%", data-i18n="courses.joining") Joining class
if view.errorMessage
.alert.alert-danger= view.errorMessage
#begin-hoc-area.hide
h3.text-center(data-i18n="common.loading")
.progress.progress-striped.active
.progress-bar(style="width: 100%")
mixin course-instance-body(courseInstance)
- var course = view.courses.get(courseInstance.get('courseID'));
- var campaign = view.campaigns.get(course.get('campaignID'));
@ -126,39 +136,38 @@ mixin course-instance-body(courseInstance)
if stats.levels.done
.text-success
span.glyphicon.glyphicon-ok
span.spl Course Complete!
span.spl(data-i18n="courses.course_complete")
span !
.pull-right
if stats.levels.done
- var arenaLevel = stats.levels.arena;
if arenaLevel
- var arenaURL = "/play/ladder/"+arenaLevel.slug+"/course/"+courseInstance.id;
a.btn.btn-warning.btn-lg(href=arenaURL)
| Play Arena
span(data-i18n="courses.play_arena")
else
a.btn.btn-default.btn-lg(disabled=true) Course Complete
a.btn.btn-default.btn-lg(disabled=true, data-i18n="courses.course_complete")
else if courseInstance.sessions.size()
- var lastLevel = stats.levels.lastPlayed;
- var levelURL = "/play/level/"+lastLevel.slug+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-success.btn-lg(href=levelURL)
| Continue
span(data-i18n="common.continue")
else
- var firstLevel = stats.levels.first;
- var levelURL = "/play/level/"+firstLevel.slug+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-info.btn-lg(href=levelURL)
| Start
span(data-i18n="courses.start")
div
span Playtime
span(data-i18n="clans.playtime")
span.spr :
span= moment.duration(stats.playtime, 'seconds').humanize()
if stats.levels.lastPlayed
div
span Last Level
span(data-i18n="courses.last_level")
span.spr :
span= stats.levels.lastPlayed.name
.progress
.progress-bar(style="width:"+stats.levels.pctDone)= stats.levels.pctDone

View file

@ -3,51 +3,59 @@ extends /templates/base
block content
.pull-right
if me.isAnonymous()
a(href="/teachers") Teachers, click here!
a(href="/teachers")
span(data-i18n="courses.teachers_click")
span !
else
a(href="/courses/teachers") Teachers, click here!
a(href="/courses/teachers")
span(data-i18n="courses.teachers_click")
span !
br
h1.text-center Adventurers, welcome to our Hour of Code!
h1.text-center(data-i18n="courses.welcome_to_hoc")
#main-content
.well.text-center
if !me.isAnonymous()
p
strong.spr Logged in as:
strong.spr(data-i18n="courses.logged_in_as")
strong= me.get('name') || me.get('email')
p
span.spr Not you?
a#log-out-link Logout
span.spr(data-i18n="courses.not_you")
a#log-out-link(data-i18n="login.logout")
hr
if !view.lastLevel
p
strong Ready to play?
strong(data-i18n="courses.ready_to_play")
p
button#start-new-game-btn.btn.btn-success.btn-lg Start New Game
button#start-new-game-btn.btn.btn-success.btn-lg(data-i18n="courses.start_new_game")
else
p
strong Hi adventurer, welcome back!
strong(data-i18n="courses.welcome_back")
p
button#continue-playing-btn.btn.btn-success.btn-lg Continue Playing
button#continue-playing-btn.btn.btn-success.btn-lg(data-i18n="courses.continue_playing")
p
em.spr
span.spr Last Played:
span(data-i18n="clans.last_played")
span.spr :
span= view.lastLevel.get('name').replace('Course :', '')
if me.isAnonymous()
p
strong More options:
strong(data-i18n="courses.more_options")
p
button#start-new-game-btn.btn.btn-default.btn-lg Start New Game
button#start-new-game-btn.btn.btn-default.btn-lg(data-i18n="courses.start_new_game")
if me.isAnonymous()
p - OR -
p
span.spr -
span.text-uppercase(data-i18n="general.or")
span.spl -
p
button#log-in-btn.btn.btn-default.btn-lg(data-i18n="login.log_in")
@ -58,9 +66,9 @@ block content
.progress-bar(style="width: 100%")
h3.text-center PLAY NOW TO LEARN
h3.text-center.text-uppercase(data-i18n="courses.play_now_learn_header")
ul
li basic syntax to control your character
li while loops to solve pesky puzzles
li strings & variables to customize actions
li how to defeat an ogre (important life skills!)
li(data-i18n="courses.play_now_learn_1")
li(data-i18n="courses.play_now_learn_2")
li(data-i18n="courses.play_now_learn_3")
li(data-i18n="courses.play_now_learn_4")

View file

@ -1,13 +1,12 @@
extends /templates/core/modal-base
block modal-header-content
h2 Add Students
h2(data-i18n="courses.add_students")
h3= view.classroom.get('name')
block modal-body-content
h3 Option 1: Invite students via email
p Students will automatically be sent an invitation to join this class, and will
| need to create an account with a username and password.
h3(data-i18n="courses.option1_header")
p(data-i18n="courses.option1_body")
.form
.form-group
textarea#invite-emails-textarea.form-control
@ -17,9 +16,9 @@ block modal-body-content
#invite-emails-sending-alert.alert.alert-info.hide(data-i18n="common.sending")
#invite-emails-success-alert.alert.alert-success.hide(data-i18n="play_level.done")
h3 Option 2: Send URL to your students
p Students will be asked to enter an email address, username and password to create an account.
h3(data-i18n="courses.option2_header")
p(data-i18n="courses.option2_body")
.row
.col-sm-9
input.form-control#join-url-input(value=view.joinURL)
@ -27,10 +26,9 @@ block modal-body-content
button#copy-url-btn.btn.btn-fixed.btn-default.text-uppercase Copy URL
#copied-alert.alert.alert-info.hide Copied
#copy-failed-alert.alert.alert-danger.hide Error copying
h3 Option 3: Direct students to codecombat.com/courses
p Give students the following passcode to enter along with an email address,
| username and password when they create an account.
h3(data-i18n="courses.option3_header")
p(data-i18n="courses.option3_body")
.text-center
#class-code-well.well= view.classCode

View file

@ -3,22 +3,25 @@ extends /templates/base
block content
if view.state === 'purchasing'
p.text-center Purchasing...
p.text-center(data-i18n="buy_gems.purchasing")
.progress.progress-striped.active
.progress-bar(style="width: 100%")
else if view.state === 'purchased'
p Thank you for your purchase! You can now assign #{view.numberOfStudents} more students to paid courses.
p
span.spr(data-i18n="courses.thank_you_pref")
span= view.numberOfStudents
span.spl(data-i18n="courses.thank_you_suff")
p.text-center
if view.fromClassroom
a(href="/courses/"+view.fromClassroom) Return to classroom
a(href="/courses/"+view.fromClassroom, data-i18n="courses.return_to_class")
else
a(href="/courses/teachers") Return to course management.
a(href="/courses/teachers", data-i18n="courses.return_to_course_man")
else
h2.text-center Purchase Enrollments
h2.text-center(data-i18n="courses.purchase_enrollments")
br
if view.state === 'error'
@ -30,21 +33,21 @@ block content
.row
.col-md-4
.col-md-3
strong.uppercase unused paid enrollments
strong.uppercase(data-i18n="courses.you_have2")
.col-md-1
strong= remainingEnrollments
br
.row
.col-md-4
.col-md-3
strong.uppercase students not enrolled
strong.uppercase(data-i18n="courses.students_not_enrolled")
.row
.col-md-4
.col-md-3
each classroom in view.classrooms.models
if classroom.get('members').length > 0
.not-enrolled= classroom.get('name')
.not-enrolled Total Across All Classes
.not-enrolled(data-i18n="courses.total_all_classes")
.col-md-1
- var totalNotEnrolled = 0
each classroom in view.classrooms.models
@ -58,7 +61,7 @@ block content
br
p.text-center
strong How many additional paid enrollments do you need?
strong(data-i18n="courses.how_many_enrollments")
br
p.text-center
@ -70,13 +73,16 @@ block content
.container-fluid
.row
.col-md-offset-3.col-md-6
| Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses.
| You may assign each course to each student individually.
.col-md-offset-3.col-md-6
span(data-i18n="courses.each_student_access")
br
p.text-center#price-form-group
strong Total: #{view.numberOfStudents} enrollments x $#{view.pricePerStudent.toFixed(2)} = #{view.getPriceString()}
strong
span(data-i18n="account_prepaid.purchase_total")
span.spr : #{view.numberOfStudents}
span(data-i18n="courses.enrollments")
span.spl x $#{view.pricePerStudent.toFixed(2)} = #{view.getPriceString()}
p.text-center
button#purchase-btn.btn.btn-lg.btn-success.uppercase Purchase Now
button#purchase-btn.btn.btn-lg.btn-success.uppercase(data-i18n="courses.purchase_now")

View file

@ -2,26 +2,25 @@ extends /templates/core/modal-base
block modal-header-content
.text-center
h3.modal-title Remove Student
h3.modal-title(data-i18n="courses.remove_student1")
span.glyphicon.glyphicon-warning-sign.text-danger
h3 Are you sure you want to remove this student from this class?
h3(data-i18n="courses.are_you_sure")
block modal-body-content
p.text-center
| Student will lose access to this classroom and assigned classes.
| Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time.
span(data-i18n="courses.remove_description1")
if view.user.get('coursePrepaidID')
| The activated paid license will not be returned.
span(data-i18n="courses.remove_description2")
block modal-footer-content
#remove-student-buttons.text-center
p
button.btn.btn-lg.btn-success.text-uppercase(data-dismiss="modal") Keep Student
button.btn.btn-lg.btn-success.text-uppercase(data-dismiss="modal", data-i18n="courses.keep_student")
p - OR -
p
button#remove-student-btn.btn.btn-lg.btn-default.text-uppercase Remove Student
button#remove-student-btn.btn.btn-lg.btn-default.text-uppercase(data-i18n="courses.remove_student1")
#remove-student-progress.text-center.hide
.progress
.progress-bar
p.text-info Removing user
p.text-info(data-i18n="courses.removing_user")

View file

@ -2,46 +2,50 @@ extends /templates/base
block content
p To join a class, ask your teacher for an unlock code.
p(data-i18n="courses.to_join_ask")
#join-classroom-form.form-horizontal
.form-group
.col-sm-2
button#join-class-btn.btn.btn-default.btn-block(disabled=view.state==='enrolling') Join Class
button#join-class-btn.btn.btn-default.btn-block(disabled=view.state==='enrolling', data-i18n="courses.join_class")
.col-sm-6
input#classroom-code-input.form-control(
data-i18n="[placeholder]courses.enter_here",
placeholder='<enter unlock code here>',
value=view.classCode,
disabled=view.state==='enrolling')
if view.state === 'enrolling'
.progress.progress-striped.active
.progress-bar(style="width: 100%") Joining class
.progress-bar(style="width: 100%", data-i18n="courses.joining")
if view.state === 'unknown_error'
.alert.alert-danger= view.stateMessage
- var justJoinedCourseInstance = view.courseInstances.find(function(ci) { return ci.justJoined; });
if justJoinedCourseInstance
- var course = view.courses.get(justJoinedCourseInstance.get('courseID'));
- var classroom = view.classrooms.get(justJoinedCourseInstance.get('classroomID'));
if course && classroom
.alert.alert-info
span.spr Successfully joined "#{classroom.get('name')}"!
a(href="/courses/#{course.id}/#{justJoinedCourseInstance.id}")
strong Click here to start taking "#{course.get('name')}".
span.spr(data-i18n="courses.successfully_joined")
span.spr "#{classroom.get('name')}"!
a(href="/courses/#{course.id}/#{justJoinedCourseInstance.id}")
strong
span.spr(data-i18n="courses.click_to_start")
span "#{course.get('name')}".
.panel.panel-default
.panel-heading
.panel-title My Courses
.panel-title(data-i18n="courses.my_courses")
.list-group
.list-group-item
.row
.col-sm-3
strong Classroom
strong(data-i18n="courses.classroom")
.col-sm-3
strong Course
strong(data-i18n="courses.course")
for courseInstance in view.courseInstances.models
- var classroom = view.classrooms.get(courseInstance.get('classroomID'))
- var course = view.courses.get(courseInstance.get('courseID'))
@ -57,14 +61,14 @@ block content
if course
| #{course.get('name')}
.col-sm-6
a.btn.btn-default.btn-sm(href="/courses/#{course.id}/#{courseInstance.id}") Enter
a.btn.btn-default.btn-sm(href="/courses/#{course.id}/#{courseInstance.id}", data-i18n="courses.enter")
.panel.panel-default
.panel-heading
.panel-title My Classes
.panel-title(data-i18n="courses.my_classes")
.list-group
for classroom in view.classrooms.models
.list-group-item
.row
.col-sm-3= classroom.get('name')
.col-sm-9= classroom.get('description')
.col-sm-9= classroom.get('description')

View file

@ -2,12 +2,12 @@ extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="login.log_in")
form.form
.form-group
label.control-label(for="email")
@ -15,9 +15,9 @@ block modal-body-content
input#email.input-large.form-control(name="email", type="email")
.form-group
label.control-label(for="password")
span(data-i18n="general.password") Password
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
#errors-alert.alert.alert-danger.hide
.text-center
@ -25,6 +25,6 @@ block modal-body-content
p
a#create-new-account-link(data-i18n="login.signup_switch")
p
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password") Forgot your password?
block modal-footer-content
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password")
block modal-footer-content

View file

@ -2,50 +2,50 @@ extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="signup.sign_up")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
input#email.input-large.form-control(name="email", type="email")
.help-block use your school email if you have one
.help-block(data-i18n="courses.use_school_email")
.form-group
label.control-label(for="name")
span(data-i18n="general.name") Name
span(data-i18n="general.name")
if me.get('name')
input#name.input-large.form-control(name="name", type="text", value="#{me.get('name')}")
else
input#name.input-large.form-control(name="name", type="text", value="", placeholder="e.g. Alex W the Skater")
.help-block a unique name no one has chosen
.help-block(data-i18n="courses.unique_name")
.form-group
label.control-label(for="password")
span(data-i18n="general.password") Password
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
.help-block pick something you can remember
.help-block(data-i18n="courses.pick_something")
.form-group
label.control-label(for="class-code-input")
span Class Code
span(data-i18n="courses.class_code")
input#class-code-input.input-large.form-control(name="classCode", value=view.classCode)
.help-block optional - ask your teacher to give you one!
.help-block(data-i18n="courses.optional_ask")
.form-group
label.control-label(for="school-input")
span(data-i18n="signup.school_name") School Name and City
span(data-i18n="signup.school_name")
input#school-input.input-large.form-control(name="schoolName", data-i18n="[placeholder]signup.school_name_placeholder")
.help-block optional - what school do you go to?
.help-block(data-i18n="courses.optional_school")
#errors-alert.alert.alert-danger.hide
.text-center
if view.willPlay
input#sign-up-btn.btn.btn-default(type="submit", value="Start Playing")
input#sign-up-btn.btn.btn-default(type="submit", data-i18n="[value]courses.start_playing", value="Start Playing")
p
a#skip-link Skip this, I'll create an account later!
a#skip-link(data-i18n="courses.skip_this")
else
input#sign-up-btn.btn.btn-default(data-i18n="[value]signup.sign_up", type="submit")
block modal-footer-content
block modal-footer-content

View file

@ -4,9 +4,13 @@ block content
.text-center
if me.isAnonymous() || !me.get('name')
.welcome Welcome!
.welcome
span(data-i18n="courses.welcome")
span !
else
.welcome Welcome, #{me.get('name')}!
.welcome
span(data-i18n="courses.welcome")
span , #{me.get('name')}!
.container-fluid
.row
@ -14,58 +18,55 @@ block content
.col-md-8
.well
.text-center
strong.uppercase Getting Started with Courses
strong.uppercase(data-i18n="courses.getting_started")
br
.text-center
a.btn.btn-info(href='http://codecombat.com/docs/CodeCombatHourofCodeGettingStartedGuide.pdf') Download Getting Started Guide [PDF]
a.btn.btn-info(href='http://codecombat.com/docs/CodeCombatHourofCodeGettingStartedGuide.pdf', data-i18n="courses.download_getting_started")
br
ol
li Create a new class by clicking the green "Create New Class" button below.
li Once you've created a class, click the blue "Add Students" button.
li You'll see student's progress below as they sign up and join your class.
li(data-i18n="courses.getting_started_1")
li(data-i18n="courses.getting_started_2")
li(data-i18n="courses.getting_started_3")
br
.text-center
strong Additional Resources
strong(data-i18n="courses.addicional_resources")
ul
li
span.spr Download/print our
a.spr(href='http://codecombat.com/docs/CodeCombatTeacherGuideCourse1.pdf') Course 1 Teacher's Guide
span for explanations and solutions to each level.
span.spr(data-i18n="courses.addicional_resources_1_pref")
a(href='http://codecombat.com/docs/CodeCombatTeacherGuideCourse1.pdf', data-i18n="courses.addicional_resources_1_mid")
span.spl(data-i18n="courses.addicional_resources_1_suff")
li
span.spr Complete our
a.spr(href='/teachers/freetrial') Teacher Survey
span to get 15 more hours of content for FREE for 2 months.
span.spr(data-i18n="courses.addicional_resources_2_pref")
a(href='/teachers/freetrial', data-i18n="teachers_survey.title")
span.spl(data-i18n="courses.addicional_resources_2_suff")
li
span.spr Visit our
a.spr(href='http://discourse.codecombat.com/c/teachers') Teacher Forums
span to connect to fellow educators who are using CodeCombat.
span.spr(data-i18n="courses.addicional_resources_3_pref")
a(href='http://discourse.codecombat.com/c/teachers', data-i18n="courses.addicional_resources_3_mid")
span.spl(data-i18n="courses.addicional_resources_3_suff")
.section-header Your Classes
.section-header(data-i18n="courses.your_classes")
if view.classrooms.models.length > 0
.container-fluid
each classroom in view.classrooms.models
+classroom(classroom)
else
.no-students No classes yet!
.no-students(data-i18n="courses.no_classes")
.text-center
button.btn.btn-lg.btn-success.uppercase.create-new-class create new class
button.btn.btn-lg.btn-success.uppercase.create-new-class(data-i18n="courses.create_new_class1")
br
.section-header Available Courses
.section-header(data-i18n="courses.available_courses")
if !me.isAnonymous()
p.text-center
strong.spr Unused enrollments available:
strong.spr(data-i18n="courses.unused_enrollments")
strong.spr= view.prepaids.totalAvailable()
a.btn.btn-success.btn(href="/courses/purchase") Purchase Enrollments
p
| All students get access to Introduction to Computer Science for free.
| One enrollment per student is required to assign them to paid CodeCombat courses.
| A single student does not need multiple enrollments to access all paid courses.
a.btn.btn-success.btn(href="/courses/purchase", data-i18n="courses.purchase_enrollments")
p(data-i18n="courses.students_access")
.container-fluid
- var courses = view.courses.models;
- var i = 0;
@ -95,7 +96,7 @@ mixin classroom(classroom)
else
span.spr.class-name (Python)
a.edit-classroom-small(data-i18n="courses.edit_settings", data-classroom-id="#{classroom.id}")
.active-courses active courses
.active-courses(data-i18n="courses.active_courses")
- var courseInstances = view.courseInstances.where({classroomID: classroom.id});
each courseInstance in courseInstances
+course(courseInstance, classMemberCount)
@ -108,15 +109,15 @@ mixin classroom(classroom)
else
span.spr.class-name (Python)
a.edit-classroom-small(data-i18n="courses.edit_settings", data-classroom-id="#{classroom.id}")
.no-students No students yet!
.no-students(data-i18n="courses.no_students")
.text-center
button.btn.btn-info.uppercase.btn-add-students(data-classroom-id="#{classroom.id}") add students
button.btn.btn-info.uppercase.btn-add-students(data-classroom-id="#{classroom.id}", data-i18n="courses.add_students1")
br
if classMemberCount > 0
.col-md-4.text-center
.class-count= classMemberCount
.active-courses(style='margin:6px;') students
a.btn.btn-info.uppercase(href='/courses/#{classroom.id}') view/edit
.active-courses(style='margin:6px;', data-i18n="courses.students1")
a.btn.btn-info.uppercase(href='/courses/#{classroom.id}', data-i18n="courses.view_edit")
.row
.col-md-12
.divider
@ -127,7 +128,9 @@ mixin course(courseInstance, classMemberCount)
- var course = view.courses.get(courseInstance.get('courseID'));
p
.course-name= course.get('name')
.course-enrolled #{courseMemberCount} / #{classMemberCount} students enrolled
.course-enrolled
span #{courseMemberCount} / #{classMemberCount}
span.spl(data-i18n="courses.students_enrolled")
each concept in course.get('concepts')
span.spr.course-concept(data-i18n="concepts." + concept)
@ -138,11 +141,14 @@ mixin course-info(course)
span.spr.course-name= course.get('name')
p= course.get('description')
p
strong.spr Concepts:
strong
span(data-i18n="courses.concepts")
span.spr :
each concept in course.get('concepts')
span(data-i18n="concepts." + concept)
if course.get('concepts').indexOf(concept) !== course.get('concepts').length - 1
span.spr ,
p
strong.spr Length:
span #{course.get('duration') || 0} hours
strong.spr(data-i18n="courses.length")
span= course.get('duration') || 0
span.spl(data-i18n="units.hours")

View file

@ -121,7 +121,7 @@ block modal-footer-content
else if level.get('type') === 'hero-ladder'
button.btn.btn-illustrated.btn-primary.btn-lg.return-to-ladder-button(data-href="/play/ladder/#{level.get('slug')}#my-matches", data-dismiss="modal", data-i18n="play_level.victory_return_to_ladder") Return to Ladder
else
button.btn.btn-illustrated.btn-success.btn-lg.world-map-button.next-level-button.hide#continue-button(data-i18n="play_level.victory_play_continue") Continue
button.btn.btn-illustrated.btn-success.btn-lg.world-map-button.next-level-button.hide#continue-button(data-i18n="common.continue") Continue
if !me.get('anonymous') && !showHourOfCodeDoneButton && showLeaderboard
button.btn.btn-illustrated.btn-success.leaderboard-button.btn-lg(data-dismiss="modal", data-i18n="leaderboard.view_other_solutions") View Other Solutions

View file

@ -7,11 +7,11 @@ User = require 'models/User'
module.exports = class ActivateLicensesModal extends ModalView
id: 'activate-licenses-modal'
template: template
events:
'change input': 'updateSelectionSpans'
'submit form': 'onSubmitForm'
initialize: (options) ->
@classroom = options.classroom
@users = options.users
@ -20,7 +20,7 @@ module.exports = class ActivateLicensesModal extends ModalView
@prepaids.comparator = '_id'
@prepaids.fetchByCreator(me.id)
@supermodel.loadCollection(@prepaids, 'prepaids')
afterRender: ->
super()
@updateSelectionSpans()
@ -38,11 +38,11 @@ module.exports = class ActivateLicensesModal extends ModalView
@$('#not-depleted-span').toggleClass('hide', depleted)
@$('#depleted-span').toggleClass('hide', !depleted)
@$('#activate-licenses-btn').toggleClass('disabled', depleted).toggleClass('btn-success', not depleted).toggleClass('btn-default', depleted)
showProgress: ->
@$('#submit-form-area').addClass('hide')
@$('#progress-area').removeClass('hide')
hideProgress: ->
@$('#submit-form-area').removeClass('hide')
@$('#progress-area').addClass('hide')
@ -91,5 +91,5 @@ module.exports = class ActivateLicensesModal extends ModalView
@$('#error-alert').text(message).removeClass('hide')
})
finishRedeemUsers: ->
finishRedeemUsers: ->
@trigger 'redeem-users'

View file

@ -79,7 +79,7 @@ module.exports = class CourseEnrollView extends RootView
onChangeCourse: (e) ->
@selectedCourse = _.find @courses.models, (a) -> a.id is $(e.target).val()
@renderNewPrice()
onChangeProgrammingLanguageSelect: (e) ->
@selectedLanguage = @$('#programming-language-select').val()
@ -99,7 +99,7 @@ module.exports = class CourseEnrollView extends RootView
token: token
timestamp: new Date().getTime()
aceConfig: { language: @selectedLanguage }
data.courseID = @selectedCourse.id if @selectedCourse
jqxhr = $.post('/db/course_instance/-/create', data)
jqxhr.done (data, textStatus, jqXHR) =>

View file

@ -4,7 +4,7 @@ template = require 'templates/courses/remove-student-modal'
module.exports = class RemoveStudentModal extends ModalView
id: 'remove-student-modal'
template: template
events:
'click #remove-student-btn': 'onClickRemoveStudentButton'
@ -33,5 +33,4 @@ module.exports = class RemoveStudentModal extends ModalView
pct = (100 * (@totalJobs - @toRemove.length) / @totalJobs).toFixed(1) + '%'
@$('#remove-student-progress .progress-bar').css('width', pct)
@listenToOnce model, 'sync', ->
@removeStudent()
@removeStudent()

View file

@ -66,7 +66,7 @@ module.exports = class LevelDialogueView extends CocoView
group.append(button)
response.button = $('button:last', group)
else
s = $.i18n.t('play_level.hud_continue_short', defaultValue: 'Continue')
s = $.i18n.t('common.continue', defaultValue: 'Continue')
sk = $.i18n.t('play_level.skip_tutorial', defaultValue: 'skip: esc')
if not @escapePressed and not @isFullScreen()
group.append('<span class="hud-hint">' + sk + '</span>')