Merge branch 'master' into production

This commit is contained in:
Rob 2016-09-02 16:01:03 -07:00
commit bf66851905
51 changed files with 464 additions and 236 deletions

View file

@ -45,11 +45,11 @@ so we can accept your pull requests. It is easy.
### [Join Us!](http://blog.codecombat.com/why-you-should-open-source-your-startup)
![Nick Winter](http://codecombat.com/images/pages/about/nick_small.png "Nick Winter")
![Nick Winter](http://codecombat.com/images/pages/about/team-avatars/nick-avatar.png "Nick Winter")
![George Saines](http://codecombat.com/images/pages/about/george_small.png "George Saines")
![Scott Erickson](http://codecombat.com/images/pages/about/scott_small.png "Scott Erickson")
![Matt Lott](http://codecombat.com/images/pages/about/matt_small.png "Matt Lott")
![Catherine Weresow](http://codecombat.com/images/pages/about/cat_small.png "Catherine Weresow")
![Scott Erickson](http://codecombat.com/images/pages/about/team-avatars/scott-avatar.png "Scott Erickson")
![Matt Lott](http://codecombat.com/images/pages/about/team-avatars/matt-avatar.png "Matt Lott")
![Catherine Weresow](http://codecombat.com/images/pages/about/team-avatars/cat-avatar.png "Catherine Weresow")
![Maka Gradin](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/avatars/Maka%20Gradin/maka_gradin_100.png "Maka Gradin")
![Rob Blanckaert](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/avatars/Rob%20Blanckaert/rob_blanckaert_100.png "Rob Blanckaert")
![Josh Callebaut](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/avatars/Josh%20Callebaut/josh_callebaut_100.png "Josh Callebaut")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View file

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View file

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

Before

Width:  |  Height:  |  Size: 8 KiB

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -1,11 +1,11 @@
###### Last updated: 08/23/2016
###### Last updated: 09/01/2016
##### Lesson Plans
# Computer Science 2
### Curriculum Summary
- Recommended Prerequisite: Introduction to Computer Science
- 7 x 45-60 minute coding sessions
- 6 x 45-60 minute coding sessions
#### Overview
Armed with basic knowledge of the structure and syntax of simple programs, students are ready to tackle more advanced topics. Conditionals, arithmetic, input handling, oh my! Computer Science 2 is where students move past the programming-toy stage into writing code similar to that they would use in the next major software or killer app!
@ -19,13 +19,12 @@ _This guide is written with Python-language classrooms in mind, but can easily b
| Module | Levels | Transfer Goals |
| ----------------------------------------------------- |:-----------------|:-----------------|
| [5. Conditionals (if)](#conditionals-if-) | 1-9 |Check expression before executing|
| [6. Conditionals (else)](#conditionals-else-) | 10-17 |Execute default code|
| [7. Nested Conditionals](#nested-conditionals) | 18-20 |Put one conditional inside another|
| [8. Functions](#functions) | 21-30 |Save code for later|
| [9. Properties](#properties) | 31-33 |Access information about objects|
| [10. Review and Synthesis](#review-and-synthesis) | 34-36 |Use appropriate vocabulary|
| [11. Code Challenge](#code-challenge) | 37 |Design and implement algorithms|
| [5. Conditionals (if)](#conditionals-if-) | 1-10 |Check expression before executing|
| [6. Conditionals (else)](#conditionals-else-) | 11-18 |Execute default code|
| [7. Nested Conditionals](#nested-conditionals) | 19-21 |Put one conditional inside another|
| [8. Functions](#functions) | 22-30 |Save code for later|
| [9. Events](#events) | 31-32 |Listen for events and execute code|
| [10. Code Challenge](#code-challenge) | 33 |Design and implement algorithms|
### Core Vocabulary
**Object** - a character or thing that can perform actions. Objects are the building blocks of Python. They are things or characters that can perform actions. Your `hero` is an object. It can perform the moving actions. In `hero.moveRight()`, the object is `hero`. In Course 2, students will also be using the `pet` object to perform actions.
@ -425,80 +424,9 @@ These levels are all about writing good code. The helper code that is given to y
##### Module 9
## Properties
### Summary
Flags give the game a real-time element. Players may place flags on the game screen, and have their hero respond to them. Either click on the flag color, or use the first letter of the color, then click on the screen to place the flag. Use `hero.pickUpFlag()` to make the hero go to the flag and clear it.
## Events
### Transfer Goals
- Access a property using dot notation.
- Save a property in a variable.
- Tell the difference between a property and a function.
### Standards
**CCSS.Math.Practice.MP1** Make sense of problems and persevere in solving them.
**CCSS.Math.Practice.MP2** Reason abstractly and quantitatively.
**CCSS.Math.Practice.MP4** Model with mathematics.
### Instructive Activity: Properties (10 mins)
#### Explain (3 mins)
A property is something about an object. You get to it by specifying the object, then a dot, then the name of the property. To get the position of a flag, type:
`flag.pos`
This is similar to functions, because both functions and properties are things that belong to the object. Functions are like actions or verbs and properties are like aspects (adjectives) or possessions (nouns).
Properties can have properties! Access them by adding another dot and another property.
`flag.pos.x`
Once you can get to a property, you can find out its value. Different flags have the same way of accessing their position properties, but those properties may have different values.
#### Interact (5 mins)
Property interview: Give each student a turn to ask something about another student by querying one of their properties. Write the object name and property on the board using Python syntax (dot notation), e.g.
`amy.age`
`victor.favoriteMovie`
`marcia.height`
`francisco.sister.name`
When the syntax is correct, the queried student should should out the value of that property, e.g.
`12`
`“Die Hard”`
`4.5 feet`
`“Diana”`
Note that everyone has an age property, and the same way of accessing it, but the values of that property are not the same for everyone!
#### Reflect (2 mins)
**Whats a property?** (Something about an object)
**How can you tell the difference between a function and a property?** Functions have parentheses (), properties do not.
**Can two objects have the same property?** (yes)
**Do two objects properties always have the same value?** (no)
### Coding Time (30-45 mins)
Allow the students to go through the game at their own pace, keeping notes about every level on paper or digital document. We recommend using following format, which you can also print out as templates: [Progress Journal [PDF]](http://files.codecombat.com/docs/resources/ProgressJournal.pdf)
```
Level #: _____ Level Name: ____________________________________
Goal: __________________________________________________________
What I did:
What I learned:
What was challenging:
```
Circulate to assist. Draw students attention to the instructions and tips. Flags can be tricky for some students, so allow them to pair up to beat the levels. Each student should write their own code, but its ok for another student to place the flags for them.
### Written Reflection (5 mins)
**How did you use properties today?**
>I had to see where the flag was and the flag has a property called pos. Then inside that it has two more properties, x and y. You use a dot to get inside the object, or inside the property.
**Tell me about flags.**
>You use flags to tell the hero what to do when the game is running. You can write code to say if theres a flag, then go to it. Flags have a pos that has x and y. X is right-left and y is up-down.
Curriculum revision in progress, coming soon.
##### Module 10
## Review and Synthesis

185
app/assets/markdown/cs3.md Normal file
View file

@ -0,0 +1,185 @@
###### Last updated:
##### Module 9
## Properties
### Summary
Flags give the game a real-time element. Players may place flags on the game screen, and have their hero respond to them. Either click on the flag color, or use the first letter of the color, then click on the screen to place the flag. Use `hero.pickUpFlag()` to make the hero go to the flag and clear it.
### Transfer Goals
- Access a property using dot notation.
- Save a property in a variable.
- Tell the difference between a property and a function.
### Standards
**CCSS.Math.Practice.MP1** Make sense of problems and persevere in solving them.
**CCSS.Math.Practice.MP2** Reason abstractly and quantitatively.
**CCSS.Math.Practice.MP4** Model with mathematics.
### Instructive Activity: Properties (10 mins)
#### Explain (3 mins)
A property is something about an object. You get to it by specifying the object, then a dot, then the name of the property. To get the position of a flag, type:
`flag.pos`
This is similar to functions, because both functions and properties are things that belong to the object. Functions are like actions or verbs and properties are like aspects (adjectives) or possessions (nouns).
Properties can have properties! Access them by adding another dot and another property.
`flag.pos.x`
Once you can get to a property, you can find out its value. Different flags have the same way of accessing their position properties, but those properties may have different values.
#### Interact (5 mins)
Property interview: Give each student a turn to ask something about another student by querying one of their properties. Write the object name and property on the board using Python syntax (dot notation), e.g.
`amy.age`
`victor.favoriteMovie`
`marcia.height`
`francisco.sister.name`
When the syntax is correct, the queried student should should out the value of that property, e.g.
`12`
`“Die Hard”`
`4.5 feet`
`“Diana”`
Note that everyone has an age property, and the same way of accessing it, but the values of that property are not the same for everyone!
#### Reflect (2 mins)
**Whats a property?** (Something about an object)
**How can you tell the difference between a function and a property?** Functions have parentheses (), properties do not.
**Can two objects have the same property?** (yes)
**Do two objects properties always have the same value?** (no)
### Coding Time (30-45 mins)
Allow the students to go through the game at their own pace, keeping notes about every level on paper or digital document. We recommend using following format, which you can also print out as templates: [Progress Journal [PDF]](http://files.codecombat.com/docs/resources/ProgressJournal.pdf)
```
Level #: _____ Level Name: ____________________________________
Goal: __________________________________________________________
What I did:
What I learned:
What was challenging:
```
Circulate to assist. Draw students attention to the instructions and tips. Flags can be tricky for some students, so allow them to pair up to beat the levels. Each student should write their own code, but its ok for another student to place the flags for them.
### Written Reflection (5 mins)
**How did you use properties today?**
>I had to see where the flag was and the flag has a property called pos. Then inside that it has two more properties, x and y. You use a dot to get inside the object, or inside the property.
**Tell me about flags.**
>You use flags to tell the hero what to do when the game is running. You can write code to say if theres a flag, then go to it. Flags have a pos that has x and y. X is right-left and y is up-down.
##### Module 10
## Review and Synthesis
### Summary
Read the instructions! Remember the hints! Sit and think about how to solve the problem and how youll be able to tell its solved. All the habits of mind of a good programmer come to bear on these levels: defining the problem, breaking the problem down into parts, making a plan, syntax and debugging, sticking to it, and asking for help.
### Transfer Goals
- Use appropriate vocabulary
- Persist in solving a problem
### Standards
**CCSS.Math.Practice.MP1** Make sense of problems and persevere in solving them.
**CCSS.Math.Practice.MP6** Attend to precision.
**CCSS.Math.Practice.MP7** Look for and make use of structure.
**CCSS.Math.Practice.MP8** Look for and express regularity in repeated reasoning.
### Instructive Activity: Review & Synthesis (10 mins)
#### Interact (10 mins)
Review! As a class, try to remember all the new vocabulary words you learned so far. Decide on a definition and an example. Have students write these on the board and correct each others work. Consult the game where there are disputes.
**Object** - a character or thing can can do actions, hero
**Function** - an action that an object can do, hero.cleave()
**Argument** - additional information for a function, hero.attack(enemy)
**Loop** - code that repeats, while True:
**Variable** - a holder for a value, enemy = ...
**Conditional** - code that checks if, if hero.isReady():
**Property** - something about an object, flag.pos
### Coding Time (30-45 mins)
Allow the students to go through the game at their own pace, keeping notes about every level on paper or digital document. We recommend using following format, which you can also print out as templates: [Progress Journal [PDF]](http://files.codecombat.com/docs/resources/ProgressJournal.pdf)
```
Level #: _____ Level Name: ____________________________________
Goal: __________________________________________________________
What I did:
What I learned:
What was challenging:
```
Circulate to assist. Draw students attention to the instructions and tips. Students will need to call on everything they have learned so far. Its important they understand the instructions in the comments. If they are stuck, have them read the comment out loud and explain what it means in their own words. That way, you can identify which part is giving them trouble.
### Written Reflection (5 mins)
**What is elif? Is it an elf?**
>Elif means else if. You use it to do three things instead of two with if. Its like an elf because its tricky.
**Tell me about spaces.**
>You use four spaces to make code go inside a while True, if, else, or elif. If an if is inside another if, you have to use eight spaces. Its important to count the spaces and get them exactly right, or else the computer thinks you mean something different. You have to be really careful.
##### Module 11
## Code Challenge
### Summary
This is a boss level! It will take all your ingenuity and collaboration to solve it. Have students work in pairs and share their tips with other teams. Make observations about the level on scratch paper, and then use them to make a plan. The goal of the level is to defeat the main boss, but you also have to collect coins, hire mercenaries, and heal your champion. The player area is in the bottom left, and the tents may be obscured by the status bar. Press SUBMIT to see the full screen.
### Transfer Goals
- Design an algorithm to solve a problem.
- Implement an algorithm in Python.
- Debug a Python program.
### Standards
**CCSS.Math.Practice.MP1** Make sense of problems and persevere in solving them.
**CCSS.Math.Practice.MP2** Reason abstractly and quantitatively.
**CCSS.Math.Practice.MP3** Construct viable arguments and critique the reasoning of others.
**CCSS.Math.Practice.MP5** Use appropriate tools strategically.
**CCSS.Math.Practice.MP6** Attend to precision.
### Instructive Activity: Engineering Cycle (10 mins)
#### Explain (5 mins)
Engineering is all about solving problems, but the first rule of engineering is that no one gets it right the first time. Thats where the Engineering Cycle comes in:
First, we DESIGN a solution to our problem. This includes figuring out what the problem is, and breaking it down into smaller parts. Then we IMPLEMENT this design, which putting our ideas into action with code. Third, we TEST our implementation. Does it work? Does it solve the problem? If our test fails, we have to decide if it was because of the DESIGN or the IMPLEMENTATION.
Then we keep designing, implementing, and testing until it the problem is solved!
#### Reflect (2 mins)
**What are the steps of the Engineering Cycle?** (Design, implement, test)
**When does the Engineering Cycle stop?** (When the problem is solved, or you run out of time)
#### Interact (5 mins)
As a class, make a list of all the things your hero can do (functions). Use appropriate vocabulary. Annotate with any tips or code snippets the students deem useful.
`moveUp()`, `moveDown()`, `moveLeft()`, `moveRight()`
`moveToXY(x,y)`
`attack(something)`
### Coding Time (30-45 mins)
Break into small campaign groups to solve the last level.
**DESIGN**: In teams, make observations about the level. Make a list of requirements. Decide what part of the problem you will start with.
**IMPLEMENT**: Write the solution to that part of your problem in code. Tip: Use a different function to solve each part of the problem!
**TEST**: Does your code work? If not, fix your code. If it does, does it solve the right part of the problem? If not, redesign. If so, move on to the next part!
### Written Reflection (5 mins)
**Write a chronicle of your epic battle from the point of view of either the hero or the boss.**
>I am Tharin Thunderfist, the great hero of the battle of Cross Bones. Together with my guardian, Okar Stompfoot, I attacked the ogres and freed the valley from their tyranny. I gathered coins to pay archers and fighters to join the battle. Then I cured Okar when he was injured.
**How did you break down the problem? What challenges did you come up against? How did you solve them? How did you work together?**
>First we saw that the code already did collecting coins. So we made it go to the tents when we could afford to hire fighters. Then we had to get the potion, but we messed up the code. The teacher helped us fix it. But we still didnt win, so we asked another team for help and they showed us how to defeat the enemy. We worked well together. It was fun and hard.
### Writing Checkpoint: What is code?
>Code is when you type instructions to make the computer do things. Sometimes it gives you hints and completes the words for you. You have to spell everything right and indent the right number of spaces. Sometimes the puzzles are easy and sometimes they are hard. You have to make a plan for how to solve it, and then write the code exactly to make it work. The language we used is called Python. It has while True: to make your code repeat and if, else, and elif to make different things happen at different times.

View file

@ -0,0 +1,32 @@
##### Activity
# Pair Programming
### What is Pair Programming?
Pair programming is an exercise that real-life engineers use to collaborate on code together. One person is the **driver**, who controls the keyboard/mouse, and the other person is the **navigator**, who observes and plans. Pair programming is great because it teaches the value of communication while allowing two brains to work on the same problem at the same time. It also reduces bugs, encourages communication and listening skills, and reinforces existing concept mastery by allowing students to fill in each others' knowledge gaps.
*A great time to introduce Pair Programming is during an early challenging level like Haunted Kithmaze in Course 1. You can also suggest Pair Programming during later levels where there may be a larger mastery gap -- allow a student who has a firm grasp of the concept to be the Navigator.*
### What you need
- One workstation (computer, keyboard, mouse)
- One student to be the Driver
- One student to be the Navigator
### How to set up Pair Programming
1. Pair students up and assign one of them to be the **driver**, the other to be the **navigator**.
2. Remind students of each roles instructions: the **navigator** should not touch the keyboard/mouse, and the **driver** should communicate what they are doing.
3. Every 15 minutes, switch roles. If one player is much more experienced (or, say, has done all these levels before and is helping out), you can keep them as the navigator instead of switching them into the driver role.
4. Students should practice clear communication, patience and the spirit of collaboration.
### Discussion Questions
**Was it easier to be a Driver or a Navigator? Why?**
**What was challenging about pair programming?**
**What was useful about pair programming?**
**When would it be beneficial to pair program with a partner?**
### Additional Resources
[NCWIT: Pair Programming Activities](https://www.ncwit.org/resources/pair-programming-box-power-collaborative-learning)

View file

@ -7,3 +7,7 @@ module.exports =
courseArenaLadder: ({level, courseInstance}) ->
"/play/ladder/#{level.get('slug')}/course/#{courseInstance.id}"
courseLevel: ({level, courseInstance}) ->
url = "/play/level/#{level.get('slug')}?course=#{courseInstance.get('courseID')}&course-instance=#{courseInstance.id}"
url += "&codeLanguage=#{level.get('primerLanguage')}" if level.get('primerLanguage')
url

View file

@ -548,7 +548,9 @@ module.exports = Surface = class Surface extends CocoClass
onKeyEvent: (e) =>
return unless @realTime
@realTimeInputEvents.add(_.pick(e, 'type', 'keyCode', 'ctrlKey', 'metaKey', 'shiftKey'))
event = _.pick(e, 'type', 'keyCode', 'ctrlKey', 'metaKey', 'shiftKey')
event.time = @world.dt * @world.frames.length
@realTimeInputEvents.add(event)
#- Canvas callbacks

View file

@ -1539,6 +1539,8 @@
cs1_curriculum_desc: "Scope and sequence, lesson plans, activities and more for Course 1."
cs2_curriculum: "Computer Science 2 - Curriculum Guide"
cs2_curriculum_desc: "Scope and sequence, lesson plans, activities and more for Course 2."
cs1_pairprogramming: "Pair Programming Activity"
cs1_pairprogramming_desc: "Introduce students to a pair programming exercise that will help them become better listeners and communicators."
sharing:
game: "Game"

View file

@ -242,7 +242,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
login:
sign_up: "Account maken"
# email_or_username: "Email or username"
email_or_username: "E-mail of gebruikersnaam"
log_in: "Inloggen"
logging_in: "Bezig met inloggen"
log_out: "Uitloggen"
@ -341,14 +341,14 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
continue: "Doorgaan" # When used as an action verb, like "Continue forward"
# default_code: "Default Code"
loading: "Bezig met laden..."
# overview: "Overview"
# solution: "Solution"
# intro: "Intro"
overview: "Overzicht"
solution: "Oplossing"
intro: "Intro"
saving: "Opslaan..."
sending: "Verzenden..."
send: "Verzend"
# sent: "Sent"
# type: "Type"
sent: "Verstuur"
type: "Type"
cancel: "Annuleren"
save: "Opslaan"
publish: "Publiceren"

View file

@ -86,7 +86,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# student_count: "Number of students:"
# start_playing_for_free: "Start Playing for Free!"
# students_and_players: "Students & Players"
# goto_classes: "Go to My Classes"
goto_classes: "Idź do moich klas"
# view_profile: "View My Profile"
# view_progress: "View Progress"
# want_coco: "Want CodeCombat at your school?"
@ -101,7 +101,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
blog: "Blog"
forum: "Forum"
account: "Konto"
# my_account: "My Account"
my_account: "Moje Konto"
profile: "Profil"
stats: "Statystyki"
code: "Kod"
@ -111,7 +111,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
about: "O nas"
contact: "Kontakt"
twitter_follow: "Subskrybuj"
# students: "Students"
students: "Uczniowie"
teachers: "Nauczyciele"
careers: "Kariera"
facebook: "Facebook"
@ -119,19 +119,19 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
create_a_class: "Stwórz klasę"
other: "Inne"
learn_to_code: "Naucz się programowania!"
# toggle_nav: "Toggle navigation"
toggle_nav: "Przełącz nawigację"
# jobs: "Jobs"
# schools: "Schools"
schools: "Szkoły"
# educator_wiki: "Educator Wiki"
# get_involved: "Get Involved"
# open_source: "Open source (GitHub)"
# support: "Support"
support: "Wsparcie"
# faqs: "FAQs"
# help_pref: "Need help? Email"
# help_suff: "and we'll get in touch!"
help_pref: "Potrzebujesz pomocy? Wyślij email"
help_suff: "a my się odezwiemy!"
modal:
# cancel: "Cancel"
cancel: "Anuluj"
close: "Zamknij"
okay: "OK"
@ -234,7 +234,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
share_progress_modal:
blurb: "Robisz coraz to większe postępy! Pokaż swoim rodzicom jak wiele nauczyłeś się z CodeCombat."
email_invalid: "Błędny adres e-mail."
email_invalid: "Błędny adres email."
form_blurb: "Wpisz adres email swich rodziców, a my ich o tym poinformujemy!"
form_label: "Adres email"
placeholder: "adres email"
@ -242,7 +242,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
login:
sign_up: "Stwórz konto"
# email_or_username: "Email or username"
email_or_username: "Email lub nazwa użytkownika"
log_in: "Zaloguj się"
logging_in: "Logowanie..."
log_out: "Wyloguj się"
@ -255,13 +255,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
signup_switch: "Chcesz stworzyć konto?"
signup:
# create_student_header: "Create Student Account"
# create_teacher_header: "Create Teacher Account"
# create_individual_header: "Create Individual Account"
# create_header: "Create Account"
create_student_header: "Stwórz konto ucznia"
create_teacher_header: "Stwórz konto nauczyciela"
create_individual_header: "Stwórz konto indywidualne"
create_header: "Stwórz konto"
email_announcements: "Otrzymuj powiadomienia na e-mail" # {change}
creating: "Tworzenie konta..."
# create_account: "Create Account"
create_account: "Stwórz konto"
sign_up: "Zarejestruj się"
log_in: "Zaloguj się używając hasła"
required: "Musisz się zalogować zanim przejdziesz dalej."
@ -283,49 +283,49 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# checking: "Checking..."
# account_exists: "This email is already in use:"
# sign_in: "Sign in"
# email_good: "Email looks good!"
# name_taken: "Username already taken! Try {{suggestedName}}?"
# name_available: "Username available!"
# name_is_email: "Username may not be an email"
# choose_type: "Choose your account type:"
email_good: "Email wygląda dobrze!"
name_taken: "Nazwa użytkownika zajęta! Spróbuj {{suggestedName}}?"
name_available: "Nazwa użytkownika dostępna!"
name_is_email: "Nazwa użytkownika nie może być adresem email"
choose_type: "Wybierz typ konta:"
# teacher_type_1: "Teach programming using CodeCombat!"
# teacher_type_2: "Set up your class"
# teacher_type_3: "Access Course Guides"
# teacher_type_4: "View student progress"
# signup_as_teacher: "Sign up as a Teacher"
# student_type_1: "Learn to program while playing an engaging game!"
# student_type_2: "Play with your class"
# student_type_3: "Compete in arenas"
# student_type_4: "Choose your hero!"
# student_type_5: "Have your Class Code ready!"
# signup_as_student: "Sign up as a Student"
# individuals_or_parents: "Individuals & Parents"
student_type_1: "Naucz się programować grając we wciągającą grę!"
student_type_2: "Graj ze swoją klasą"
student_type_3: "Współzawodnicz na arenach"
student_type_4: "Wybierz swojego bohatera!"
student_type_5: "Przygotuj kod swojej klasy!"
signup_as_student: "Zarejestruj się jako uczeń"
individuals_or_parents: "Osoby indywidualne i rodzice"
# individual_type: "For players learning to code outside of a class. Parents should sign up for an account here."
# signup_as_individual: "Sign up as an Individual"
# enter_class_code: "Enter your Class Code"
# enter_birthdate: "Enter your birthdate:"
signup_as_individual: "Zarejestruj się jako osoba indywidualna"
enter_class_code: "Podaj kod swojej klasy"
enter_birthdate: "Podaj datę urodzenia:"
# parent_use_birthdate: "Parents, use your own birthdate."
# ask_teacher_1: "Ask your teacher for your Class Code."
# ask_teacher_2: "Not part of a class? Create an "
# ask_teacher_3: "Individual Account"
# ask_teacher_4: " instead."
# about_to_join: "You're about to join:"
# enter_parent_email: "Enter your parents email address:"
# parent_email_error: "Something went wrong when trying to send the email. Check the email address and try again."
# parent_email_sent: "Weve sent an email with further instructions on how to create an account. Ask your parent to check their inbox."
# account_created: "Account Created!"
ask_teacher_1: "Zapytaj nauczyciela o kod Twojej klasy."
ask_teacher_2: "Nie jesteś członkiem klasy? Stwórz "
ask_teacher_3: "konto indywidualne."
ask_teacher_4: ""
about_to_join: "Zaraz dołączysz do:"
enter_parent_email: "Podaj adres email rodzica:"
parent_email_error: "Coś poszło nie tak z wysłaniem emaila. Sprawdź adres email i spróbuj ponownie."
parent_email_sent: "Wysłaliśmy email z instrukcją założenia konta. Poproś rodzica by sprawdził swoją skrzynkę."
account_created: "Konto stworzone!"
# confirm_student_blurb: "Write down your information so that you don't forget it. Your teacher can also help you reset your password at any time."
# confirm_individual_blurb: "Write down your login information in case you need it later. Verify your email so you can recover your account if you ever forget your password - check your inbox!"
# write_this_down: "Write this down:"
write_this_down: "Zapisz to sobie:"
# start_playing: "Start Playing!"
# sso_connected: "Successfully connected with:"
# select_your_starting_hero: "Select Your Starting Hero:"
# you_can_always_change_your_hero_later: "You can always change your hero later."
select_your_starting_hero: "Wybierz bohatera:"
you_can_always_change_your_hero_later: "Zawsze możesz zmienić bohatera później."
recover:
recover_account_title: "Odzyskaj konto"
send_password: "Wyślij hasło tymczasowe"
recovery_sent: "Email do dozyskania hasła został wysłany."
recovery_sent: "Email do odzyskania hasła został wysłany."
items:
primary: "Główne"
@ -342,13 +342,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# default_code: "Default Code"
loading: "Ładowanie..."
# overview: "Overview"
# solution: "Solution"
# intro: "Intro"
solution: "Rozwiązanie"
intro: "Wprowadzenie"
saving: "Zapisywanie..."
sending: "Wysyłanie"
sending: "Wysyłanie..."
send: "Wyślij"
# sent: "Sent"
# type: "Type"
sent: "Wysłano"
type: "Typ"
cancel: "Anuluj"
save: "Zapisz"
publish: "Opublikuj"
@ -364,7 +364,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
submit_patch: "Prześlij łatkę"
submit_changes: "Prześlij zmiany"
save_changes: "Zapisz zmiany"
# required_field: "required"
required_field: "wymagane"
general:
and: "i"
@ -397,7 +397,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
subject: "Temat"
email: "Email"
password: "Hasło"
# confirm_password: "Confirm Password"
confirm_password: "Potwierdź hasło"
message: "Wiadomość"
code: "Kod"
ladder: "Drabinka"
@ -416,10 +416,10 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
warrior: "Wojownik"
ranger: "Łucznik"
wizard: "Czarodziej"
# first_name: "First Name"
# last_name: "Last Name"
# last_initial: "Last Initial"
# username: "Username"
first_name: "Imię"
last_name: "Nazwisko"
last_initial: "Inicjał nazwiska"
username: "Nazwa użytkownika"
units:
second: "sekunda"
@ -438,15 +438,15 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
years: "lat"
play_level:
# level_complete: "Level Complete"
level_complete: "Poziom ukończony"
completed_level: "Ukończony poziom:"
course: "Kurs:"
done: "Zrobione"
next_level: "Następny poziom"
next_game: "Następna gra"
# language: "Language"
# languages: "Languages"
# programming_language: "Programming language"
language: "Język"
languages: "Języki"
programming_language: "Język programowania"
show_menu: "Pokaż menu gry"
home: "Strona główna" # Not used any more, will be removed soon.
level: "Poziom" # Like "Level: Dungeons of Kithgard"
@ -456,7 +456,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
restart: "Zacznij od nowa"
goals: "Cele"
goal: "Cel"
running: "Symulowanie..."
running: "Symulacja..."
success: "Sukces!"
incomplete: "Niekompletne"
timed_out: "Czas minął"
@ -475,13 +475,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
victory_saving_progress: "Zapisywanie postępów"
victory_go_home: "Powrót do strony głównej"
victory_review: "Powiedz nam coś więcej!"
victory_review_placeholder: "Jak ci się podobał poziom?"
victory_review_placeholder: "Jak Ci się podobał poziom?"
victory_hour_of_code_done: "Skończyłeś już?"
victory_hour_of_code_done_yes: "Tak, skończyłem moją Godzinę Kodu."
victory_experience_gained: "Doświadczenie zdobyte"
victory_gems_gained: "Klejnoty zdobyte"
victory_new_item: "Nowy przedmiot"
# victory_new_hero: "New Hero"
victory_new_hero: "Nowy bohater"
victory_viking_code_school: "O jejku, trudny był ten poziom, co? Jeśli jeszcze nie jesteś twórcą oprogramowania, możesz nim już zostać. Złóż swoje podanie o przyjęcie do Viking Code School, a z ich pomocą w zostaniesz na pewno w pełni profesjonalnym programistą."
victory_become_a_viking: "Zostań wikingiem"
# victory_no_progress_for_teachers: "Progress is not saved for teachers. But, you can add a student account to your classroom for yourself."
@ -494,8 +494,8 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
tome_available_spells: "Dostępne czary"
tome_your_skills: "Twoje umiejętności"
tome_current_method: "Obecna Metoda"
# hints: "Hints"
# hints_title: "Hint {{number}}"
hints: "Podpowiedzi"
hints_title: "Podpowiedź {{number}}"
code_saved: "Kod zapisano"
skip_tutorial: "Pomiń (esc)"
keyboard_shortcuts: "Skróty klawiszowe"
@ -506,16 +506,16 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
time_total: "Maksymalnie:"
time_goto: "Idź do:"
non_user_code_problem_title: "Błąd podczas ładowania poziomu"
infinite_loop_title: "Wykryto niekończącą się pętlę"
infinite_loop_description: "Kod źródłowy, który miał stworzył ten świat nigdy nie przestał działać. Albo działa bardzo wolno, albo ma w sobie niekończącą sie pętlę. Albo też gdzieś jest błąd systemu. Możesz spróbować uruchomić go jeszcze raz, albo przywrócić domyślny kod. Jeśli nic nie pomoże daj nam o tym znać."
check_dev_console: "Możesz też otworzyć konsolę deweloperska i sprawdzić w czym tkwi problem."
infinite_loop_title: "Wykryto pętlę nieskończoną"
infinite_loop_description: "Kod źródłowy, który miał stworzyć ten świat nigdy nie przestał działać. Albo działa bardzo wolno, albo ma w sobie pętlę nieskończoną. Albo też gdzieś jest błąd systemu. Możesz spróbować uruchomić go jeszcze raz, albo przywrócić domyślny kod. Jeśli nic nie pomoże daj nam o tym znać."
check_dev_console: "Możesz też otworzyć konsolę deweloperską i sprawdzić w czym tkwi problem."
check_dev_console_link: "(instrukcje)"
infinite_loop_try_again: "Próbuj ponownie"
infinite_loop_reset_level: "Resetuj poziom"
infinite_loop_comment_out: "Comment Out My Code"
infinite_loop_comment_out: "Wykomentuj mój kod"
tip_toggle_play: "Włącz/zatrzymaj grę naciskając Ctrl+P."
tip_scrub_shortcut: "Ctrl+[ i Ctrl+] przesuwają czas."
tip_guide_exists: "Klikając Przewodnik u góry strony uzyskasz przydatne informacje."
tip_guide_exists: "Klikając Przewodnik w menu gry (u góry strony) uzyskasz przydatne informacje."
tip_open_source: "CodeCombat ma w 100% otwarty kod!"
tip_tell_friends: "Podoba ci się CodeCombat? Opowiedz o nas swoim znajomym!"
tip_beta_launch: "CodeCombat uruchomił fazę beta w październiku 2013."
@ -548,13 +548,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds"
tip_no_code: "Nie ma szybszego kodu od braku kodu"
tip_code_never_lies: "Kod nigdy nie kłamie, komentarze czasami tak. — Ron Jeffries"
# tip_reusable_software: "Before software can be reusable it first has to be usable."
tip_reusable_software: "Zanim kod stanie się reużywalny musi zacząć działać."
tip_optimization_operator: "Każdy język programowania ma operator optymalizujący. W większości z nich tym operatorem jest //"
# tip_lines_of_code: "Measuring programming progress by lines of code is like measuring aircraft building progress by weight. — Bill Gates"
# tip_source_code: "I want to change the world but they would not give me the source code."
tip_source_code: "Chciałbym zmienić świat, ale nie chcą mi dać kodu źródłowego."
# tip_javascript_java: "Java is to JavaScript what Car is to Carpet. - Chris Heilmann"
# tip_move_forward: "Whatever you do, keep moving forward. - Martin Luther King Jr."
tip_google: "Masz problem z którym nie dajesz sobie razy? Użyj Google!"
tip_google: "Masz problem z którym nie dajesz sobie rady? Użyj Google!"
# tip_adding_evil: "Adding a pinch of evil."
# tip_hate_computers: "That's the thing about people who think they hate computers. What they really hate is lousy programmers. - Larry Niven"
tip_open_source_contribute: "Możesz pomóc w ulepszeniu CodeCombat!"
@ -792,15 +792,15 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
editor_config_behaviors_description: "Autouzupełnianie nawiasów, klamer i cudzysłowów."
about:
main_title: "Jeśli chcesz nauczyć się rogramować, musisz napisać (mnóstwo) kodu."
main_title: "Jeśli chcesz nauczyć się programować, musisz napisać (mnóstwo) kodu."
main_description: "Naszym zadaniem jest dopilnowanie, żebyś robił to z uśmiechem na twarzy."
mission_link: "Misja"
team_link: "Zespół"
story_link: "Historia"
press_link: "Prasa"
mission_title: "Nasza misja: każdy na Ziemi powinien mieć dostęp do nauki programowania."
mission_description_1: "<strong>Programowanie jest jak magia</strong>. To możliwość tworzenia rzeczy na podstawie włąsnych fantazji. Stworzyliśmy CodeCombat, by nasi użytkownicy poczuli czarodziejskie moce podczas pisania <strong>prawdziwego, produkcyjnego kodu</strong>."
mission_description_2: "Jak się później okazało dzięki temu uczą się szybciej. DUŻO szybciej. To tak jakby rozmawiać o kodzie, zamiast czytać jego dokumentację. Chcemy, żeby włąśnie ta rozmowa byłą dostępna w każdej szkole i dla <strong>każdego ucznia</strong>, ponieważ każdy powinien choć przez chwilę poczuć magię programowania."
mission_description_1: "<strong>Programowanie jest jak magia</strong>. To możliwość tworzenia rzeczy na podstawie własnych fantazji. Stworzyliśmy CodeCombat, by nasi użytkownicy poczuli czarodziejskie moce podczas pisania <strong>prawdziwego, produkcyjnego kodu</strong>."
mission_description_2: "Jak się później okazało dzięki temu uczą się szybciej. DUŻO szybciej. To tak jakby rozmawiać o kodzie, zamiast czytać jego dokumentację. Chcemy, żeby właśnie ta rozmowa była dostępna w każdej szkole i dla <strong>każdego ucznia</strong>, ponieważ każdy powinien choć przez chwilę poczuć magię programowania."
team_title: "Poznaj twórców CodeCombat"
team_values: "Bardzo cenimy sobie otwarty dialog, taki gdzie wygrywają najlepsze pomysły. Nasze decyzje opierają się na oczekiwaniach klientów i dawaniu im namacalnych dowodów naszej pracy. Każdy z nas czuje się zaangażowany. Począwszy od naszego CEO, aż po kontrybutorów na GitHubie, ponieważ wiemy, że każdy od kogoś może się nauczyć czegoś nowego."
nick_title: "Współzałożyciel, CEO"
@ -845,10 +845,10 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
story_statistic_2b: "ponad 200 krajów"
story_statistic_3a: "Razem udało im się napisać"
story_statistic_3b: "1 bilion linii kodu"
story_statistic_3c: "z pośród sześciu dostępnych jężyków programowania" # {change}
story_statistic_3c: "z pośród sześciu dostępnych języków programowania" # {change}
story_long_way_1: "Udało nam się dużo osiągnąć, ale..."
story_sketch_caption: "Pierwszy szkic Nicka opisujący akcję w grze."
story_long_way_2: "wciąż mamy wiele do zrobienia, więć..."
story_sketch_caption: "Pierwszy szkic Nicka opisujący akcje w grze."
story_long_way_2: "wciąż mamy wiele do zrobienia, więc..."
jobs_title: "Zacznij z nami pisać przyszłą historię CodeCombat!"
jobs_subtitle: "Nie za bardzo się odnajdujesz póki co, ale chcesz pozostać w kontakcie? Zobacz \"Stórz Własną\"."
jobs_benefits: "Korzyści z pracy u nas"
@ -880,8 +880,8 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
teachers:
who_for_title: "Dla kogo jest CodeCombat?"
who_for_1: "Zalecamy CodeCombat dla osób od 9 roku życia. Nie trzeba znać programowania. CodeCombat jest zaprojektowane zarówno dla chłopców jak i dziewczym."
who_for_2: "Nasz system kursó pomaga nauczycielom w stworzeniu klasy, śledzeniu postępu, oraz w przydzielaniu dodatkowych zadań, a to wszystko w dedykowanym do tego interfejsie."
who_for_1: "Zalecamy CodeCombat dla osób od 9 roku życia. Nie trzeba znać programowania. CodeCombat jest zaprojektowane zarówno dla chłopców jak i dziewczyn."
who_for_2: "Nasz system kursów pomaga nauczycielom w stworzeniu klasy, śledzeniu postępu, oraz w przydzielaniu dodatkowych zadań, a to wszystko w dedykowanym do tego interfejsie."
more_info_title: "Gdzie mogę znaleźć więcej informacji?"
more_info_1: "Nasze"
more_info_2: "forum nauczycieli"
@ -961,8 +961,8 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
faq: "FAQ"
subscribe_prefix: "Jeśli masz jakiś problem z rozwiązaniem poziomu,"
subscribe: "wykup subskrypcję CodeCombat,"
subscribe_suffix: "a my z radością ci pomożemy."
subscriber_support: "Jako, że będziesz subskrybentem CodeCombat, twoje e-maile będą miały najwyższy priorytet."
subscribe_suffix: "a my z radością Ci pomożemy."
subscriber_support: "Jako, że będziesz subskrybentem CodeCombat, Twoje e-maile będą miały najwyższy priorytet."
screenshot_included: "Dołączymy zrzuty ekranu."
where_reply: "Gdzie mamy odpisać?"
send: "Wyślij wiadomość"
@ -988,10 +988,10 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
new_password: "Nowe hasło"
new_password_verify: "Zweryfikuj"
type_in_email: "Wpisz swój email, aby potwierdzić usunięcie konta." # {change}
type_in_email_progress: "Wpisz swój emial, aby potwierdzić usunięcie całego swojego postępu."
type_in_email_progress: "Wpisz swój email, aby potwierdzić usunięcie całego swojego postępu."
type_in_password: "Wpisz również swoje hasło."
email_subscriptions: "Powiadomienia email"
email_subscriptions_none: "Brak powiadomień e-mail."
email_subscriptions_none: "Brak powiadomień email."
email_announcements: "Ogłoszenia"
email_announcements_description: "Otrzymuj powiadomienia o najnowszych wiadomościach i zmianach w CodeCombat."
email_notifications: "Powiadomienia"
@ -1844,7 +1844,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
# verifying_email: "Verifying your email address..."
# successfully_verified: "You've successfully verified your email address!"
# back_to_student_page: "Go back to student things"
# back_to_teacher_page: "Go to My Classes"
back_to_teacher_page: "Idź do moich klas"
# back_to_game: "Go play some more levels!"
# verify_error: "Something went wrong when verifying your email :("

View file

@ -197,6 +197,16 @@ module.exports = class User extends CocoModel
application.tracker.identify hintsGroup: @hintsGroup unless me.isAdmin()
@hintsGroup
getDefaultLanguageGroup: ->
# A/B test default programming language in home version
return @defaultLanguageGroup if @defaultLanguageGroup
group = me.get('testGroupNumber') % 2
@defaultLanguageGroup = switch group
when 0 then 'javascript'
when 1 then 'python'
application.tracker.identify defaultLanguageGroup: @defaultLanguageGroup unless me.isAdmin()
@defaultLanguageGroup
getVideoTutorialStylesIndex: (numVideos=0)->
# A/B Testing video tutorial styles
# Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently)

View file

@ -128,8 +128,17 @@
.img-thumbnail
border-radius: 50%
padding: 0
// background-color: $burgandy
background-color: $burgandy
// border: 5px solid $gold
.avatar
display: none
.headshot
border: 5px solid #fff
.profile-pic:hover .headshot
display: none
.profile-pic:hover .avatar
display: inline
border: 5px solid $gold
// #community
// margin-top: 100px

View file

@ -54,7 +54,9 @@ block content
// Full time
li
a(href="http://www.nickwinter.net" rel="external")
img(src="/images/pages/about/nick_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/nick-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/nick-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name
a(href="http://www.nickwinter.net" rel="external") Nick Winter
@ -63,7 +65,9 @@ block content
li
a(href="http://www.mattlott.com/" rel="external")
img(src="/images/pages/about/matt_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/matt-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/matt-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name
a(href="http://www.mattlott.com/" rel="external") Matt Lott
@ -72,7 +76,9 @@ block content
li
a(href="http://cat.zdh.com/" rel="external")
img(src="/images/pages/about/cat_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/cat-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/cat-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name
a(href="http://cat.zdh.com/" rel="external") Catherine Weresow
@ -80,14 +86,18 @@ block content
small(data-i18n="about.cat_blurb")
li
img(src="/images/pages/about/scott_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/scott-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/scott-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Scott Erickson
small(data-i18n="about.scott_title")
small(data-i18n="about.scott_blurb")
li
img(src="/images/pages/about/maka_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/maka-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/maka-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Michael 'Maka' Gradin
small(data-i18n="about.maka_title")
@ -95,7 +105,9 @@ block content
li
a(href="http://basicer.com/" rel="external")
img(src="/images/pages/about/rob_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/rob-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/rob-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name
a(href="http://basicer.com/" rel="external") Rob Blanckaert
@ -103,7 +115,9 @@ block content
small(data-i18n="about.rob_blurb")
li
img(src="/images/pages/about/josh_c_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/josh-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/josh-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Josh Callebaut
small(data-i18n="about.josh_c_title")
@ -111,7 +125,9 @@ block content
li
a(href="http://robinyang.com/" rel="external")
img(src="/images/pages/about/robin_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/robin-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/robin-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name
a(href="http://robinyang.com/" rel="external") Robin Yang
@ -119,40 +135,50 @@ block content
small(data-i18n="about.robin_blurb")
li
img(src="/images/pages/about/phoenix_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/phoenix-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/phoenix-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Phoenix Eliot
small(data-i18n="about.phoenix_title")
br
li
img(src="/images/pages/about/nolan_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/nolan-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/nolan-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Nolan Kelly
small(data-i18n="about.nolan_title")
br
li
img(src="/images/pages/about/elliot_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/elliot-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/elliot-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Elliot Okiwelu
small(data-i18n="about.elliot_title")
small(data-i18n="about.elliot_blurb")
li
img(src="/images/pages/about/lisa_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/lisa-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/lisa-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Lisa Wu
small(data-i18n="about.lisa_title")
br
li
img(src="/images/pages/about/sean_small.png").img-thumbnail
.profile-pic
img(src="/images/pages/about/team-avatars/sean-avatar.png").img-thumbnail.avatar
img(src="/images/pages/about/team-headshots/sean-headshot.png").img-thumbnail.headshot
.team-bio
h6.label.team-name Sean McNulty
small(data-i18n="about.sean_title")
br
ul
// Part time / contract
li
a(href="http://floor.is/lava/" rel="external")

View file

@ -115,26 +115,24 @@ mixin course-instance-body(courseInstance, classroom)
- var arenaLevel = stats.levels.arena;
- var projectLevel = stats.levels.project;
if arenaLevel
- var arenaURL = "/play/ladder/"+arenaLevel.get('slug')+"/course/"+courseInstance.id;
a.play-btn.btn.btn-forest-alt.btn-lg.m-b-1(data-href=arenaURL, data-level-slug=arenaLevel.get('slug'), data-event-action="Students Play Arena")
- var url = view.urls.courseArenaLadder({level: view.originalLevelMap[arenaLevel.get('original')] || arenaLevel, courseInstance: courseInstance});
a.play-btn.btn.btn-forest-alt.btn-lg.m-b-1(data-href=url, data-level-slug=arenaLevel.get('slug'), data-event-action="Students Play Arena")
span(data-i18n="courses.play_arena")
else if projectLevel
- var projectURL = "/play/level/"+projectLevel.get('slug')+"?course="+course.id+"&course-instance="+courseInstance.id;
a.play-btn.btn.btn-forest-alt.btn-lg.m-b-1(data-href=projectURL, data-level-slug=projectLevel.get('slug'), data-event-action="Students Play Project")
- var url = view.urls.courseLevel({level: view.originalLevelMap[projectLevel.get('original')] || projectLevel, courseInstance: courseInstance});
a.play-btn.btn.btn-forest-alt.btn-lg.m-b-1(data-href=url, data-level-slug=projectLevel.get('slug'), data-event-action="Students Play Project")
span(data-i18n="courses.view_project")
else
a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete")
else if stats.levels.next != stats.levels.first
- var next = stats.levels.next;
- var levelURL = "/play/level/"+next.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.play-btn.btn.btn-forest.btn-lg.m-b-1(data-href=levelURL, data-level-slug=next.get('slug'), data-event-action="Students Continue Course")
- var url = view.urls.courseLevel({level: view.originalLevelMap[next.get('original')] || next, courseInstance: courseInstance});
a.play-btn.btn.btn-forest.btn-lg.m-b-1(data-href=url, data-level-slug=next.get('slug'), data-event-action="Students Continue Course")
span(data-i18n="common.continue")
else
- var firstLevel = stats.levels.first;
- var levelURL = "/play/level/"+firstLevel.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
if firstLevel.get('primerLanguage')
- levelURL += "&codeLanguage=" + firstLevel.get('primerLanguage');
a.play-btn.btn.btn-navy.btn-lg.m-b-1(data-href=levelURL, data-level-slug=firstLevel.get('slug'), data-event-action="Students Start Course")
- var url = view.urls.courseLevel({level: view.originalLevelMap[firstLevel.get('original')] || firstLevel, courseInstance: courseInstance});
a.play-btn.btn.btn-navy.btn-lg.m-b-1(data-href=url, data-level-slug=firstLevel.get('slug'), data-event-action="Students Start Course")
span(data-i18n="courses.start")

View file

@ -53,6 +53,10 @@ block content
a(href="http://files.codecombat.com/docs/resources/WorksheetExample.pdf" target="blank")
i.span.spl(data-i18n="teacher.engineering_cycle_worksheet_link")
p(data-i18n="teacher.engineering_cycle_worksheet_desc")
li
a(href="/teachers/resources/pair-programming")
span(data-i18n="teacher.cs1_pairprogramming")
p(data-i18n="teacher.cs1_pairprogramming_desc")
h4(data-i18n="teacher.cs2")
ul

View file

@ -13,6 +13,7 @@ Course = require 'models/Course'
Classroom = require 'models/Classroom'
Classrooms = require 'collections/Classrooms'
LevelSession = require 'models/LevelSession'
Levels = require 'collections/Levels'
NameLoader = require 'core/NameLoader'
Campaign = require 'models/Campaign'
ThangType = require 'models/ThangType'
@ -50,6 +51,8 @@ module.exports = class CoursesView extends RootView
@supermodel.trackCollection(@ownedClassrooms)
@courses = new CocoCollection([], { url: "/db/course", model: Course})
@supermodel.loadCollection(@courses)
@originalLevelMap = {}
@urls = require('core/urls')
# TODO: Trim this section for only what's necessary
@hero = new ThangType
@ -95,7 +98,13 @@ module.exports = class CoursesView extends RootView
@ownerNameMap[ownerID] = NameLoader.getName(ownerID) for ownerID in ownerIDs
@render?()
)
_.forEach _.unique(_.pluck(@classrooms.models, 'id')), (classroomID) =>
levels = new Levels()
@listenTo levels, 'sync', =>
return if @destroyed
@originalLevelMap[level.get('original')] = level for level in levels.models
@render()
@supermodel.trackRequest(levels.fetchForClassroom(classroomID, { data: { project: 'original,primerLanguage,slug' }}))
onClickLogInButton: ->
modal = new AuthModal()

View file

@ -76,7 +76,7 @@ module.exports = class Spell
# Pull apart the structural wrapper code and the player code, remember the wrapper code, and strip indentation on player code.
playerCode = @originalSource.match(/<playercode>\n([\s\S]*)\n *<\/playercode>/)[1]
playerCodeLines = playerCode.split('\n')
indentation = playerCodeLines[0].length - playerCodeLines[0].trim().length
indentation = _.min(_.filter(playerCodeLines.map (line) -> line.match(/^\s*/)?[0]?.length))
playerCode = (line.substr(indentation) for line in playerCodeLines).join('\n')
@wrapperCode = @originalSource.replace /<playercode>[\s\S]*<\/playercode>/, '' # serves as placeholder for constructHTML
@originalSource = playerCode

View file

@ -107,7 +107,16 @@ module.exports = class PlayHeroesModal extends ModalView
{id: 'javascript', name: 'JavaScript'}
]
else
@codeLanguageList = [
@codeLanguageList = switch me.getDefaultLanguageGroup()
when 'javascript'
[
{id: 'javascript', name: "JavaScript (#{$.i18n.t('choose_hero.default')})"}
{id: 'python', name: "Python"}
{id: 'coffeescript', name: "CoffeeScript (#{$.i18n.t('choose_hero.experimental')})"}
{id: 'lua', name: 'Lua'}
]
else
[
{id: 'python', name: "Python (#{$.i18n.t('choose_hero.default')})"}
{id: 'javascript', name: 'JavaScript'}
{id: 'coffeescript', name: "CoffeeScript (#{$.i18n.t('choose_hero.experimental')})"}
@ -226,7 +235,7 @@ module.exports = class PlayHeroesModal extends ModalView
onCodeLanguageChanged: (e) ->
@codeLanguage = @$el.find('#option-code-language').val()
@codeLanguageChanged = true
window.tracker?.trackEvent 'Campaign changed code language', category: 'Campaign Hero Select', codeLanguage: @codeLanguage, levelSlug: @options.level?.get('slug')
#- Purchasing the hero

View file

@ -59,7 +59,7 @@ const usSchoolStatuses = ['Auto Attempt 1', 'New US Schools Auto Attempt 1', 'Ne
const emailDelayMinutes = 27;
const closeParallelLimit = 100;
const closeParallelLimit = 10;
const scriptStartTime = new Date();
const closeIoApiKey = process.argv[2];
@ -136,7 +136,9 @@ function getCountryCode(country, emails) {
if (countryCode) return countryCode;
}
for (const email of emails) {
const tld = parseDomain(email).tld;
const domain = parseDomain(email);
if (!domain) continue;
const tld = domain.tld;
if (tld) {
const matches = /^[A-Za-z]*\.?([A-Za-z]{2})$/ig.exec(tld);
if (matches && matches.length === 2) {
@ -850,7 +852,7 @@ function createAddContactFn(postData, internalLead, closeIoLead, userApiKeyMap)
// Send email to new contact
const email = postData.emails[0].email;
const countryCode = getCountryCode(internalLead.contacts[email].trial.properties.country, [email]);
const emailTemplate = getEmailTemplate(internalLead.contacts[email].trial.properties.siteOrigin, closeIoLead.status_label);
const emailTemplate = getEmailTemplate(internalLead.contacts[email].trial.properties.siteOrigin, closeIoLead.status_label, countryCode);
sendMail(email, closeIoLead.id, newContact.id, emailTemplate, emailApiKey, emailDelayMinutes, done);
});
});

View file

@ -30,7 +30,10 @@ AnalyticsLogEventSchema.statics.logEvent = (user, event, properties={}) ->
unless config.proxy
analyticsMongoose = mongoose.createConnection()
analyticsMongoose.open "mongodb://#{config.mongo.analytics_host}:#{config.mongo.analytics_port}/#{config.mongo.analytics_db}", (error) ->
log.error "Couldn't connect to analytics", error if error
analyticsMongoose.open config.mongo.analytics_replica_string, (error) ->
if error
log.error "Couldn't connect to analytics", error
else
log.info "Connected to analytics mongo at #{config.mongo.analytics_replica_string}"
module.exports = AnalyticsLogEvent = analyticsMongoose.model('analytics.log.event', AnalyticsLogEventSchema, config.mongo.analytics_collection)

View file

@ -25,6 +25,11 @@ config.mongo =
mongoose_replica_string: process.env.COCO_MONGO_MONGOOSE_REPLICA_STRING or ''
readpref: process.env.COCO_MONGO_READPREF or 'primary'
if process.env.COCO_MONGO_ANALYTICS_REPLICA_STRING?
config.mongo.analytics_replica_string = process.env.COCO_MONGO_ANALYTICS_REPLICA_STRING
else
config.mongo.analytics_replica_string = "mongodb://#{config.mongo.analytics_host}:#{config.mongo.analytics_port}/#{config.mongo.analytics_db}"
if process.env.COCO_MONGO_LS_REPLICA_STRING?
config.mongo.level_session_replica_string = process.env.COCO_MONGO_LS_REPLICA_STRING