Merge branch 'master' into production
|
@ -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)
|
### [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")
|
![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")
|
![Scott Erickson](http://codecombat.com/images/pages/about/team-avatars/scott-avatar.png "Scott Erickson")
|
||||||
![Matt Lott](http://codecombat.com/images/pages/about/matt_small.png "Matt Lott")
|
![Matt Lott](http://codecombat.com/images/pages/about/team-avatars/matt-avatar.png "Matt Lott")
|
||||||
![Catherine Weresow](http://codecombat.com/images/pages/about/cat_small.png "Catherine Weresow")
|
![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")
|
![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")
|
![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")
|
![Josh Callebaut](https://dl.dropboxusercontent.com/u/138899/GitHub%20Wikis/avatars/Josh%20Callebaut/josh_callebaut_100.png "Josh Callebaut")
|
||||||
|
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
BIN
app/assets/images/pages/about/team-avatars/elliot-avatar.png
Normal file
After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
BIN
app/assets/images/pages/about/team-avatars/lisa-avatar.png
Normal file
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
BIN
app/assets/images/pages/about/team-avatars/matt-avatar.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
app/assets/images/pages/about/team-avatars/nick-avatar.png
Normal file
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
BIN
app/assets/images/pages/about/team-avatars/robin-avatar.png
Normal file
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 8 KiB After Width: | Height: | Size: 8 KiB |
BIN
app/assets/images/pages/about/team-avatars/sean-avatar.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/assets/images/pages/about/team-headshots/cat-headshot.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
app/assets/images/pages/about/team-headshots/elliot-headshot.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/assets/images/pages/about/team-headshots/josh-headshot.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
app/assets/images/pages/about/team-headshots/lisa-headshot.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
app/assets/images/pages/about/team-headshots/maka-headshot.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/assets/images/pages/about/team-headshots/matt-headshot.png
Normal file
After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
app/assets/images/pages/about/team-headshots/nolan-headshot.png
Normal file
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 23 KiB |
BIN
app/assets/images/pages/about/team-headshots/rob-headshot.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
app/assets/images/pages/about/team-headshots/robin-headshot.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
app/assets/images/pages/about/team-headshots/scott-headshot.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
app/assets/images/pages/about/team-headshots/sean-headshot.png
Normal file
After Width: | Height: | Size: 23 KiB |
|
@ -1,11 +1,11 @@
|
||||||
###### Last updated: 08/23/2016
|
###### Last updated: 09/01/2016
|
||||||
|
|
||||||
##### Lesson Plans
|
##### Lesson Plans
|
||||||
# Computer Science 2
|
# Computer Science 2
|
||||||
|
|
||||||
### Curriculum Summary
|
### Curriculum Summary
|
||||||
- Recommended Prerequisite: Introduction to Computer Science
|
- Recommended Prerequisite: Introduction to Computer Science
|
||||||
- 7 x 45-60 minute coding sessions
|
- 6 x 45-60 minute coding sessions
|
||||||
|
|
||||||
#### Overview
|
#### 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!
|
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 |
|
| Module | Levels | Transfer Goals |
|
||||||
| ----------------------------------------------------- |:-----------------|:-----------------|
|
| ----------------------------------------------------- |:-----------------|:-----------------|
|
||||||
| [5. Conditionals (if)](#conditionals-if-) | 1-9 |Check expression before executing|
|
| [5. Conditionals (if)](#conditionals-if-) | 1-10 |Check expression before executing|
|
||||||
| [6. Conditionals (else)](#conditionals-else-) | 10-17 |Execute default code|
|
| [6. Conditionals (else)](#conditionals-else-) | 11-18 |Execute default code|
|
||||||
| [7. Nested Conditionals](#nested-conditionals) | 18-20 |Put one conditional inside another|
|
| [7. Nested Conditionals](#nested-conditionals) | 19-21 |Put one conditional inside another|
|
||||||
| [8. Functions](#functions) | 21-30 |Save code for later|
|
| [8. Functions](#functions) | 22-30 |Save code for later|
|
||||||
| [9. Properties](#properties) | 31-33 |Access information about objects|
|
| [9. Events](#events) | 31-32 |Listen for events and execute code|
|
||||||
| [10. Review and Synthesis](#review-and-synthesis) | 34-36 |Use appropriate vocabulary|
|
| [10. Code Challenge](#code-challenge) | 33 |Design and implement algorithms|
|
||||||
| [11. Code Challenge](#code-challenge) | 37 |Design and implement algorithms|
|
|
||||||
|
|
||||||
### Core Vocabulary
|
### 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.
|
**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
|
##### Module 9
|
||||||
## Properties
|
## Events
|
||||||
### 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
|
Curriculum revision in progress, coming soon.
|
||||||
- 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)
|
|
||||||
**What’s 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 it’s 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 there’s 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
|
##### Module 10
|
||||||
## Review and Synthesis
|
## Review and Synthesis
|
||||||
|
|
185
app/assets/markdown/cs3.md
Normal 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)
|
||||||
|
**What’s 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 it’s 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 there’s 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 you’ll be able to tell it’s 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 other’s 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. It’s 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. It’s like an elf because it’s 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. It’s 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. That’s 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 didn’t 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.
|
32
app/assets/markdown/pair-programming.md
Normal 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 role’s 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)
|
|
@ -7,3 +7,7 @@ module.exports =
|
||||||
courseArenaLadder: ({level, courseInstance}) ->
|
courseArenaLadder: ({level, courseInstance}) ->
|
||||||
"/play/ladder/#{level.get('slug')}/course/#{courseInstance.id}"
|
"/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
|
||||||
|
|
|
@ -548,7 +548,9 @@ module.exports = Surface = class Surface extends CocoClass
|
||||||
|
|
||||||
onKeyEvent: (e) =>
|
onKeyEvent: (e) =>
|
||||||
return unless @realTime
|
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
|
#- Canvas callbacks
|
||||||
|
|
||||||
|
|
|
@ -1539,6 +1539,8 @@
|
||||||
cs1_curriculum_desc: "Scope and sequence, lesson plans, activities and more for Course 1."
|
cs1_curriculum_desc: "Scope and sequence, lesson plans, activities and more for Course 1."
|
||||||
cs2_curriculum: "Computer Science 2 - Curriculum Guide"
|
cs2_curriculum: "Computer Science 2 - Curriculum Guide"
|
||||||
cs2_curriculum_desc: "Scope and sequence, lesson plans, activities and more for Course 2."
|
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:
|
sharing:
|
||||||
game: "Game"
|
game: "Game"
|
||||||
|
|
|
@ -242,7 +242,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
||||||
|
|
||||||
login:
|
login:
|
||||||
sign_up: "Account maken"
|
sign_up: "Account maken"
|
||||||
# email_or_username: "Email or username"
|
email_or_username: "E-mail of gebruikersnaam"
|
||||||
log_in: "Inloggen"
|
log_in: "Inloggen"
|
||||||
logging_in: "Bezig met inloggen"
|
logging_in: "Bezig met inloggen"
|
||||||
log_out: "Uitloggen"
|
log_out: "Uitloggen"
|
||||||
|
@ -341,14 +341,14 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
||||||
continue: "Doorgaan" # When used as an action verb, like "Continue forward"
|
continue: "Doorgaan" # When used as an action verb, like "Continue forward"
|
||||||
# default_code: "Default Code"
|
# default_code: "Default Code"
|
||||||
loading: "Bezig met laden..."
|
loading: "Bezig met laden..."
|
||||||
# overview: "Overview"
|
overview: "Overzicht"
|
||||||
# solution: "Solution"
|
solution: "Oplossing"
|
||||||
# intro: "Intro"
|
intro: "Intro"
|
||||||
saving: "Opslaan..."
|
saving: "Opslaan..."
|
||||||
sending: "Verzenden..."
|
sending: "Verzenden..."
|
||||||
send: "Verzend"
|
send: "Verzend"
|
||||||
# sent: "Sent"
|
sent: "Verstuur"
|
||||||
# type: "Type"
|
type: "Type"
|
||||||
cancel: "Annuleren"
|
cancel: "Annuleren"
|
||||||
save: "Opslaan"
|
save: "Opslaan"
|
||||||
publish: "Publiceren"
|
publish: "Publiceren"
|
||||||
|
|
|
@ -86,7 +86,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
# student_count: "Number of students:"
|
# student_count: "Number of students:"
|
||||||
# start_playing_for_free: "Start Playing for Free!"
|
# start_playing_for_free: "Start Playing for Free!"
|
||||||
# students_and_players: "Students & Players"
|
# students_and_players: "Students & Players"
|
||||||
# goto_classes: "Go to My Classes"
|
goto_classes: "Idź do moich klas"
|
||||||
# view_profile: "View My Profile"
|
# view_profile: "View My Profile"
|
||||||
# view_progress: "View Progress"
|
# view_progress: "View Progress"
|
||||||
# want_coco: "Want CodeCombat at your school?"
|
# want_coco: "Want CodeCombat at your school?"
|
||||||
|
@ -101,7 +101,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
blog: "Blog"
|
blog: "Blog"
|
||||||
forum: "Forum"
|
forum: "Forum"
|
||||||
account: "Konto"
|
account: "Konto"
|
||||||
# my_account: "My Account"
|
my_account: "Moje Konto"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
stats: "Statystyki"
|
stats: "Statystyki"
|
||||||
code: "Kod"
|
code: "Kod"
|
||||||
|
@ -111,7 +111,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
about: "O nas"
|
about: "O nas"
|
||||||
contact: "Kontakt"
|
contact: "Kontakt"
|
||||||
twitter_follow: "Subskrybuj"
|
twitter_follow: "Subskrybuj"
|
||||||
# students: "Students"
|
students: "Uczniowie"
|
||||||
teachers: "Nauczyciele"
|
teachers: "Nauczyciele"
|
||||||
careers: "Kariera"
|
careers: "Kariera"
|
||||||
facebook: "Facebook"
|
facebook: "Facebook"
|
||||||
|
@ -119,19 +119,19 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
create_a_class: "Stwórz klasę"
|
create_a_class: "Stwórz klasę"
|
||||||
other: "Inne"
|
other: "Inne"
|
||||||
learn_to_code: "Naucz się programowania!"
|
learn_to_code: "Naucz się programowania!"
|
||||||
# toggle_nav: "Toggle navigation"
|
toggle_nav: "Przełącz nawigację"
|
||||||
# jobs: "Jobs"
|
# jobs: "Jobs"
|
||||||
# schools: "Schools"
|
schools: "Szkoły"
|
||||||
# educator_wiki: "Educator Wiki"
|
# educator_wiki: "Educator Wiki"
|
||||||
# get_involved: "Get Involved"
|
# get_involved: "Get Involved"
|
||||||
# open_source: "Open source (GitHub)"
|
# open_source: "Open source (GitHub)"
|
||||||
# support: "Support"
|
support: "Wsparcie"
|
||||||
# faqs: "FAQs"
|
# faqs: "FAQs"
|
||||||
# help_pref: "Need help? Email"
|
help_pref: "Potrzebujesz pomocy? Wyślij email"
|
||||||
# help_suff: "and we'll get in touch!"
|
help_suff: "a my się odezwiemy!"
|
||||||
|
|
||||||
modal:
|
modal:
|
||||||
# cancel: "Cancel"
|
cancel: "Anuluj"
|
||||||
close: "Zamknij"
|
close: "Zamknij"
|
||||||
okay: "OK"
|
okay: "OK"
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
|
|
||||||
share_progress_modal:
|
share_progress_modal:
|
||||||
blurb: "Robisz coraz to większe postępy! Pokaż swoim rodzicom jak wiele nauczyłeś się z CodeCombat."
|
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_blurb: "Wpisz adres email swich rodziców, a my ich o tym poinformujemy!"
|
||||||
form_label: "Adres email"
|
form_label: "Adres email"
|
||||||
placeholder: "adres email"
|
placeholder: "adres email"
|
||||||
|
@ -242,7 +242,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
|
|
||||||
login:
|
login:
|
||||||
sign_up: "Stwórz konto"
|
sign_up: "Stwórz konto"
|
||||||
# email_or_username: "Email or username"
|
email_or_username: "Email lub nazwa użytkownika"
|
||||||
log_in: "Zaloguj się"
|
log_in: "Zaloguj się"
|
||||||
logging_in: "Logowanie..."
|
logging_in: "Logowanie..."
|
||||||
log_out: "Wyloguj się"
|
log_out: "Wyloguj się"
|
||||||
|
@ -255,13 +255,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
signup_switch: "Chcesz stworzyć konto?"
|
signup_switch: "Chcesz stworzyć konto?"
|
||||||
|
|
||||||
signup:
|
signup:
|
||||||
# create_student_header: "Create Student Account"
|
create_student_header: "Stwórz konto ucznia"
|
||||||
# create_teacher_header: "Create Teacher Account"
|
create_teacher_header: "Stwórz konto nauczyciela"
|
||||||
# create_individual_header: "Create Individual Account"
|
create_individual_header: "Stwórz konto indywidualne"
|
||||||
# create_header: "Create Account"
|
create_header: "Stwórz konto"
|
||||||
email_announcements: "Otrzymuj powiadomienia na e-mail" # {change}
|
email_announcements: "Otrzymuj powiadomienia na e-mail" # {change}
|
||||||
creating: "Tworzenie konta..."
|
creating: "Tworzenie konta..."
|
||||||
# create_account: "Create Account"
|
create_account: "Stwórz konto"
|
||||||
sign_up: "Zarejestruj się"
|
sign_up: "Zarejestruj się"
|
||||||
log_in: "Zaloguj się używając hasła"
|
log_in: "Zaloguj się używając hasła"
|
||||||
required: "Musisz się zalogować zanim przejdziesz dalej."
|
required: "Musisz się zalogować zanim przejdziesz dalej."
|
||||||
|
@ -283,49 +283,49 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
# checking: "Checking..."
|
# checking: "Checking..."
|
||||||
# account_exists: "This email is already in use:"
|
# account_exists: "This email is already in use:"
|
||||||
# sign_in: "Sign in"
|
# sign_in: "Sign in"
|
||||||
# email_good: "Email looks good!"
|
email_good: "Email wygląda dobrze!"
|
||||||
# name_taken: "Username already taken! Try {{suggestedName}}?"
|
name_taken: "Nazwa użytkownika zajęta! Spróbuj {{suggestedName}}?"
|
||||||
# name_available: "Username available!"
|
name_available: "Nazwa użytkownika dostępna!"
|
||||||
# name_is_email: "Username may not be an email"
|
name_is_email: "Nazwa użytkownika nie może być adresem email"
|
||||||
# choose_type: "Choose your account type:"
|
choose_type: "Wybierz typ konta:"
|
||||||
# teacher_type_1: "Teach programming using CodeCombat!"
|
# teacher_type_1: "Teach programming using CodeCombat!"
|
||||||
# teacher_type_2: "Set up your class"
|
# teacher_type_2: "Set up your class"
|
||||||
# teacher_type_3: "Access Course Guides"
|
# teacher_type_3: "Access Course Guides"
|
||||||
# teacher_type_4: "View student progress"
|
# teacher_type_4: "View student progress"
|
||||||
# signup_as_teacher: "Sign up as a Teacher"
|
# signup_as_teacher: "Sign up as a Teacher"
|
||||||
# student_type_1: "Learn to program while playing an engaging game!"
|
student_type_1: "Naucz się programować grając we wciągającą grę!"
|
||||||
# student_type_2: "Play with your class"
|
student_type_2: "Graj ze swoją klasą"
|
||||||
# student_type_3: "Compete in arenas"
|
student_type_3: "Współzawodnicz na arenach"
|
||||||
# student_type_4: "Choose your hero!"
|
student_type_4: "Wybierz swojego bohatera!"
|
||||||
# student_type_5: "Have your Class Code ready!"
|
student_type_5: "Przygotuj kod swojej klasy!"
|
||||||
# signup_as_student: "Sign up as a Student"
|
signup_as_student: "Zarejestruj się jako uczeń"
|
||||||
# individuals_or_parents: "Individuals & Parents"
|
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."
|
# 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"
|
signup_as_individual: "Zarejestruj się jako osoba indywidualna"
|
||||||
# enter_class_code: "Enter your Class Code"
|
enter_class_code: "Podaj kod swojej klasy"
|
||||||
# enter_birthdate: "Enter your birthdate:"
|
enter_birthdate: "Podaj datę urodzenia:"
|
||||||
# parent_use_birthdate: "Parents, use your own birthdate."
|
# parent_use_birthdate: "Parents, use your own birthdate."
|
||||||
# ask_teacher_1: "Ask your teacher for your Class Code."
|
ask_teacher_1: "Zapytaj nauczyciela o kod Twojej klasy."
|
||||||
# ask_teacher_2: "Not part of a class? Create an "
|
ask_teacher_2: "Nie jesteś członkiem klasy? Stwórz "
|
||||||
# ask_teacher_3: "Individual Account"
|
ask_teacher_3: "konto indywidualne."
|
||||||
# ask_teacher_4: " instead."
|
ask_teacher_4: ""
|
||||||
# about_to_join: "You're about to join:"
|
about_to_join: "Zaraz dołączysz do:"
|
||||||
# enter_parent_email: "Enter your parent’s email address:"
|
enter_parent_email: "Podaj adres email rodzica:"
|
||||||
# parent_email_error: "Something went wrong when trying to send the email. Check the email address and try again."
|
parent_email_error: "Coś poszło nie tak z wysłaniem emaila. Sprawdź adres email i spróbuj ponownie."
|
||||||
# parent_email_sent: "We’ve sent an email with further instructions on how to create an account. Ask your parent to check their inbox."
|
parent_email_sent: "Wysłaliśmy email z instrukcją założenia konta. Poproś rodzica by sprawdził swoją skrzynkę."
|
||||||
# account_created: "Account Created!"
|
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_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!"
|
# 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!"
|
# start_playing: "Start Playing!"
|
||||||
# sso_connected: "Successfully connected with:"
|
# sso_connected: "Successfully connected with:"
|
||||||
# select_your_starting_hero: "Select Your Starting Hero:"
|
select_your_starting_hero: "Wybierz bohatera:"
|
||||||
# you_can_always_change_your_hero_later: "You can always change your hero later."
|
you_can_always_change_your_hero_later: "Zawsze możesz zmienić bohatera później."
|
||||||
|
|
||||||
recover:
|
recover:
|
||||||
recover_account_title: "Odzyskaj konto"
|
recover_account_title: "Odzyskaj konto"
|
||||||
send_password: "Wyślij hasło tymczasowe"
|
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:
|
items:
|
||||||
primary: "Główne"
|
primary: "Główne"
|
||||||
|
@ -342,13 +342,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
# default_code: "Default Code"
|
# default_code: "Default Code"
|
||||||
loading: "Ładowanie..."
|
loading: "Ładowanie..."
|
||||||
# overview: "Overview"
|
# overview: "Overview"
|
||||||
# solution: "Solution"
|
solution: "Rozwiązanie"
|
||||||
# intro: "Intro"
|
intro: "Wprowadzenie"
|
||||||
saving: "Zapisywanie..."
|
saving: "Zapisywanie..."
|
||||||
sending: "Wysyłanie…"
|
sending: "Wysyłanie..."
|
||||||
send: "Wyślij"
|
send: "Wyślij"
|
||||||
# sent: "Sent"
|
sent: "Wysłano"
|
||||||
# type: "Type"
|
type: "Typ"
|
||||||
cancel: "Anuluj"
|
cancel: "Anuluj"
|
||||||
save: "Zapisz"
|
save: "Zapisz"
|
||||||
publish: "Opublikuj"
|
publish: "Opublikuj"
|
||||||
|
@ -364,7 +364,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
submit_patch: "Prześlij łatkę"
|
submit_patch: "Prześlij łatkę"
|
||||||
submit_changes: "Prześlij zmiany"
|
submit_changes: "Prześlij zmiany"
|
||||||
save_changes: "Zapisz zmiany"
|
save_changes: "Zapisz zmiany"
|
||||||
# required_field: "required"
|
required_field: "wymagane"
|
||||||
|
|
||||||
general:
|
general:
|
||||||
and: "i"
|
and: "i"
|
||||||
|
@ -397,7 +397,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
subject: "Temat"
|
subject: "Temat"
|
||||||
email: "Email"
|
email: "Email"
|
||||||
password: "Hasło"
|
password: "Hasło"
|
||||||
# confirm_password: "Confirm Password"
|
confirm_password: "Potwierdź hasło"
|
||||||
message: "Wiadomość"
|
message: "Wiadomość"
|
||||||
code: "Kod"
|
code: "Kod"
|
||||||
ladder: "Drabinka"
|
ladder: "Drabinka"
|
||||||
|
@ -416,10 +416,10 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
warrior: "Wojownik"
|
warrior: "Wojownik"
|
||||||
ranger: "Łucznik"
|
ranger: "Łucznik"
|
||||||
wizard: "Czarodziej"
|
wizard: "Czarodziej"
|
||||||
# first_name: "First Name"
|
first_name: "Imię"
|
||||||
# last_name: "Last Name"
|
last_name: "Nazwisko"
|
||||||
# last_initial: "Last Initial"
|
last_initial: "Inicjał nazwiska"
|
||||||
# username: "Username"
|
username: "Nazwa użytkownika"
|
||||||
|
|
||||||
units:
|
units:
|
||||||
second: "sekunda"
|
second: "sekunda"
|
||||||
|
@ -438,15 +438,15 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
years: "lat"
|
years: "lat"
|
||||||
|
|
||||||
play_level:
|
play_level:
|
||||||
# level_complete: "Level Complete"
|
level_complete: "Poziom ukończony"
|
||||||
completed_level: "Ukończony poziom:"
|
completed_level: "Ukończony poziom:"
|
||||||
course: "Kurs:"
|
course: "Kurs:"
|
||||||
done: "Zrobione"
|
done: "Zrobione"
|
||||||
next_level: "Następny poziom"
|
next_level: "Następny poziom"
|
||||||
next_game: "Następna gra"
|
next_game: "Następna gra"
|
||||||
# language: "Language"
|
language: "Język"
|
||||||
# languages: "Languages"
|
languages: "Języki"
|
||||||
# programming_language: "Programming language"
|
programming_language: "Język programowania"
|
||||||
show_menu: "Pokaż menu gry"
|
show_menu: "Pokaż menu gry"
|
||||||
home: "Strona główna" # Not used any more, will be removed soon.
|
home: "Strona główna" # Not used any more, will be removed soon.
|
||||||
level: "Poziom" # Like "Level: Dungeons of Kithgard"
|
level: "Poziom" # Like "Level: Dungeons of Kithgard"
|
||||||
|
@ -456,7 +456,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
restart: "Zacznij od nowa"
|
restart: "Zacznij od nowa"
|
||||||
goals: "Cele"
|
goals: "Cele"
|
||||||
goal: "Cel"
|
goal: "Cel"
|
||||||
running: "Symulowanie..."
|
running: "Symulacja..."
|
||||||
success: "Sukces!"
|
success: "Sukces!"
|
||||||
incomplete: "Niekompletne"
|
incomplete: "Niekompletne"
|
||||||
timed_out: "Czas minął"
|
timed_out: "Czas minął"
|
||||||
|
@ -475,13 +475,13 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
victory_saving_progress: "Zapisywanie postępów"
|
victory_saving_progress: "Zapisywanie postępów"
|
||||||
victory_go_home: "Powrót do strony głównej"
|
victory_go_home: "Powrót do strony głównej"
|
||||||
victory_review: "Powiedz nam coś więcej!"
|
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: "Skończyłeś już?"
|
||||||
victory_hour_of_code_done_yes: "Tak, skończyłem moją Godzinę Kodu."
|
victory_hour_of_code_done_yes: "Tak, skończyłem moją Godzinę Kodu."
|
||||||
victory_experience_gained: "Doświadczenie zdobyte"
|
victory_experience_gained: "Doświadczenie zdobyte"
|
||||||
victory_gems_gained: "Klejnoty zdobyte"
|
victory_gems_gained: "Klejnoty zdobyte"
|
||||||
victory_new_item: "Nowy przedmiot"
|
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_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_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."
|
# 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_available_spells: "Dostępne czary"
|
||||||
tome_your_skills: "Twoje umiejętności"
|
tome_your_skills: "Twoje umiejętności"
|
||||||
tome_current_method: "Obecna Metoda"
|
tome_current_method: "Obecna Metoda"
|
||||||
# hints: "Hints"
|
hints: "Podpowiedzi"
|
||||||
# hints_title: "Hint {{number}}"
|
hints_title: "Podpowiedź {{number}}"
|
||||||
code_saved: "Kod zapisano"
|
code_saved: "Kod zapisano"
|
||||||
skip_tutorial: "Pomiń (esc)"
|
skip_tutorial: "Pomiń (esc)"
|
||||||
keyboard_shortcuts: "Skróty klawiszowe"
|
keyboard_shortcuts: "Skróty klawiszowe"
|
||||||
|
@ -506,16 +506,16 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
time_total: "Maksymalnie:"
|
time_total: "Maksymalnie:"
|
||||||
time_goto: "Idź do:"
|
time_goto: "Idź do:"
|
||||||
non_user_code_problem_title: "Błąd podczas ładowania poziomu"
|
non_user_code_problem_title: "Błąd podczas ładowania poziomu"
|
||||||
infinite_loop_title: "Wykryto niekończącą się pętlę"
|
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 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ć."
|
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ę deweloperska i sprawdzić w czym tkwi problem."
|
check_dev_console: "Możesz też otworzyć konsolę deweloperską i sprawdzić w czym tkwi problem."
|
||||||
check_dev_console_link: "(instrukcje)"
|
check_dev_console_link: "(instrukcje)"
|
||||||
infinite_loop_try_again: "Próbuj ponownie"
|
infinite_loop_try_again: "Próbuj ponownie"
|
||||||
infinite_loop_reset_level: "Resetuj poziom"
|
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_toggle_play: "Włącz/zatrzymaj grę naciskając Ctrl+P."
|
||||||
tip_scrub_shortcut: "Ctrl+[ i Ctrl+] przesuwają czas."
|
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_open_source: "CodeCombat ma w 100% otwarty kod!"
|
||||||
tip_tell_friends: "Podoba ci się CodeCombat? Opowiedz o nas swoim znajomym!"
|
tip_tell_friends: "Podoba ci się CodeCombat? Opowiedz o nas swoim znajomym!"
|
||||||
tip_beta_launch: "CodeCombat uruchomił fazę beta w październiku 2013."
|
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_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_no_code: "Nie ma szybszego kodu od braku kodu"
|
||||||
tip_code_never_lies: "Kod nigdy nie kłamie, komentarze czasami tak. — Ron Jeffries"
|
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_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_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_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_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_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_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!"
|
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."
|
editor_config_behaviors_description: "Autouzupełnianie nawiasów, klamer i cudzysłowów."
|
||||||
|
|
||||||
about:
|
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."
|
main_description: "Naszym zadaniem jest dopilnowanie, żebyś robił to z uśmiechem na twarzy."
|
||||||
mission_link: "Misja"
|
mission_link: "Misja"
|
||||||
team_link: "Zespół"
|
team_link: "Zespół"
|
||||||
story_link: "Historia"
|
story_link: "Historia"
|
||||||
press_link: "Prasa"
|
press_link: "Prasa"
|
||||||
mission_title: "Nasza misja: każdy na Ziemi powinien mieć dostęp do nauki programowania."
|
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_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łąś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_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_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."
|
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"
|
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_2b: "ponad 200 krajów"
|
||||||
story_statistic_3a: "Razem udało im się napisać"
|
story_statistic_3a: "Razem udało im się napisać"
|
||||||
story_statistic_3b: "1 bilion linii kodu"
|
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_long_way_1: "Udało nam się dużo osiągnąć, ale..."
|
||||||
story_sketch_caption: "Pierwszy szkic Nicka opisujący akcję w grze."
|
story_sketch_caption: "Pierwszy szkic Nicka opisujący akcje w grze."
|
||||||
story_long_way_2: "wciąż mamy wiele do zrobienia, więć..."
|
story_long_way_2: "wciąż mamy wiele do zrobienia, więc..."
|
||||||
jobs_title: "Zacznij z nami pisać przyszłą historię CodeCombat!"
|
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_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"
|
jobs_benefits: "Korzyści z pracy u nas"
|
||||||
|
@ -880,8 +880,8 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
|
|
||||||
teachers:
|
teachers:
|
||||||
who_for_title: "Dla kogo jest CodeCombat?"
|
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_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ó pomaga nauczycielom w stworzeniu klasy, śledzeniu postępu, oraz w przydzielaniu dodatkowych zadań, a to wszystko w dedykowanym do tego interfejsie."
|
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_title: "Gdzie mogę znaleźć więcej informacji?"
|
||||||
more_info_1: "Nasze"
|
more_info_1: "Nasze"
|
||||||
more_info_2: "forum nauczycieli"
|
more_info_2: "forum nauczycieli"
|
||||||
|
@ -961,8 +961,8 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
faq: "FAQ"
|
faq: "FAQ"
|
||||||
subscribe_prefix: "Jeśli masz jakiś problem z rozwiązaniem poziomu,"
|
subscribe_prefix: "Jeśli masz jakiś problem z rozwiązaniem poziomu,"
|
||||||
subscribe: "wykup subskrypcję CodeCombat,"
|
subscribe: "wykup subskrypcję CodeCombat,"
|
||||||
subscribe_suffix: "a my z radością ci pomożemy."
|
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."
|
subscriber_support: "Jako, że będziesz subskrybentem CodeCombat, Twoje e-maile będą miały najwyższy priorytet."
|
||||||
screenshot_included: "Dołączymy zrzuty ekranu."
|
screenshot_included: "Dołączymy zrzuty ekranu."
|
||||||
where_reply: "Gdzie mamy odpisać?"
|
where_reply: "Gdzie mamy odpisać?"
|
||||||
send: "Wyślij wiadomość"
|
send: "Wyślij wiadomość"
|
||||||
|
@ -988,10 +988,10 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
new_password: "Nowe hasło"
|
new_password: "Nowe hasło"
|
||||||
new_password_verify: "Zweryfikuj"
|
new_password_verify: "Zweryfikuj"
|
||||||
type_in_email: "Wpisz swój email, aby potwierdzić usunięcie konta." # {change}
|
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."
|
type_in_password: "Wpisz również swoje hasło."
|
||||||
email_subscriptions: "Powiadomienia email"
|
email_subscriptions: "Powiadomienia email"
|
||||||
email_subscriptions_none: "Brak powiadomień e-mail."
|
email_subscriptions_none: "Brak powiadomień email."
|
||||||
email_announcements: "Ogłoszenia"
|
email_announcements: "Ogłoszenia"
|
||||||
email_announcements_description: "Otrzymuj powiadomienia o najnowszych wiadomościach i zmianach w CodeCombat."
|
email_announcements_description: "Otrzymuj powiadomienia o najnowszych wiadomościach i zmianach w CodeCombat."
|
||||||
email_notifications: "Powiadomienia"
|
email_notifications: "Powiadomienia"
|
||||||
|
@ -1844,7 +1844,7 @@ module.exports = nativeDescription: "polski", englishDescription: "Polish", tran
|
||||||
# verifying_email: "Verifying your email address..."
|
# verifying_email: "Verifying your email address..."
|
||||||
# successfully_verified: "You've successfully verified your email address!"
|
# successfully_verified: "You've successfully verified your email address!"
|
||||||
# back_to_student_page: "Go back to student things"
|
# 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!"
|
# back_to_game: "Go play some more levels!"
|
||||||
# verify_error: "Something went wrong when verifying your email :("
|
# verify_error: "Something went wrong when verifying your email :("
|
||||||
|
|
||||||
|
|
|
@ -197,6 +197,16 @@ module.exports = class User extends CocoModel
|
||||||
application.tracker.identify hintsGroup: @hintsGroup unless me.isAdmin()
|
application.tracker.identify hintsGroup: @hintsGroup unless me.isAdmin()
|
||||||
@hintsGroup
|
@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)->
|
getVideoTutorialStylesIndex: (numVideos=0)->
|
||||||
# A/B Testing video tutorial styles
|
# A/B Testing video tutorial styles
|
||||||
# Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently)
|
# Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently)
|
||||||
|
|
|
@ -40,43 +40,43 @@
|
||||||
margin-right: 0.6em
|
margin-right: 0.6em
|
||||||
border-bottom: 4px solid white
|
border-bottom: 4px solid white
|
||||||
border-radius: 0
|
border-radius: 0
|
||||||
|
|
||||||
#jumbotron
|
#jumbotron
|
||||||
background-color: $navy
|
background-color: $navy
|
||||||
background-image: url("/images/pages/about/codebackground_zoom_compressed.png")
|
background-image: url("/images/pages/about/codebackground_zoom_compressed.png")
|
||||||
background-size: cover
|
background-size: cover
|
||||||
background-repeat: no-repeat
|
background-repeat: no-repeat
|
||||||
|
|
||||||
h1
|
h1
|
||||||
color: white
|
color: white
|
||||||
margin-top: 100px
|
margin-top: 100px
|
||||||
|
|
||||||
h2
|
h2
|
||||||
color: white
|
color: white
|
||||||
margin-bottom: 100px
|
margin-bottom: 100px
|
||||||
|
|
||||||
.responsive-side-margins, h3, h4, p
|
.responsive-side-margins, h3, h4, p
|
||||||
max-width: 460px
|
max-width: 460px
|
||||||
margin-left: auto
|
margin-left: auto
|
||||||
margin-right: auto
|
margin-right: auto
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
max-width: inherit
|
max-width: inherit
|
||||||
|
|
||||||
h3
|
h3
|
||||||
margin-top: 60px
|
margin-top: 60px
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
margin-top: 150px
|
margin-top: 150px
|
||||||
|
|
||||||
#about-container
|
#about-container
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
margin-top: 85px
|
margin-top: 85px
|
||||||
background-color: white
|
background-color: white
|
||||||
|
|
||||||
#mission-text
|
#mission-text
|
||||||
margin-top: 30px
|
margin-top: 30px
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
margin-top: 45px
|
margin-top: 45px
|
||||||
|
|
||||||
#mission-graphic, #community-graphic
|
#mission-graphic, #community-graphic
|
||||||
padding: 30px 40px
|
padding: 30px 40px
|
||||||
position: relative
|
position: relative
|
||||||
|
@ -87,21 +87,21 @@
|
||||||
h2
|
h2
|
||||||
color: white
|
color: white
|
||||||
width: 50%
|
width: 50%
|
||||||
|
|
||||||
#mission-graphic
|
#mission-graphic
|
||||||
margin-top: 30px
|
margin-top: 30px
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
margin-top: 45px
|
margin-top: 45px
|
||||||
background: $navy
|
background: $navy
|
||||||
|
|
||||||
h2
|
h2
|
||||||
float: right
|
float: right
|
||||||
|
|
||||||
img
|
img
|
||||||
position: absolute
|
position: absolute
|
||||||
bottom: 0
|
bottom: 0
|
||||||
left: 0
|
left: 0
|
||||||
|
|
||||||
#mission-graphic-filler
|
#mission-graphic-filler
|
||||||
background: $navy
|
background: $navy
|
||||||
height: 100%
|
height: 100%
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
position: absolute
|
position: absolute
|
||||||
right: 100%
|
right: 100%
|
||||||
top: 0
|
top: 0
|
||||||
|
|
||||||
#team
|
#team
|
||||||
ul
|
ul
|
||||||
text-align: center
|
text-align: center
|
||||||
|
@ -128,12 +128,21 @@
|
||||||
.img-thumbnail
|
.img-thumbnail
|
||||||
border-radius: 50%
|
border-radius: 50%
|
||||||
padding: 0
|
padding: 0
|
||||||
// background-color: $burgandy
|
background-color: $burgandy
|
||||||
// border: 5px solid $gold
|
// 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
|
// #community
|
||||||
// margin-top: 100px
|
// margin-top: 100px
|
||||||
|
|
||||||
#community-row-1
|
#community-row-1
|
||||||
#community-avatars
|
#community-avatars
|
||||||
width: 90%
|
width: 90%
|
||||||
|
@ -143,7 +152,7 @@
|
||||||
margin-top: 35px
|
margin-top: 35px
|
||||||
@media (min-width: $screen-sm-min)
|
@media (min-width: $screen-sm-min)
|
||||||
margin-top: 70px
|
margin-top: 70px
|
||||||
|
|
||||||
#community-graphic
|
#community-graphic
|
||||||
background: $burgandy
|
background: $burgandy
|
||||||
|
|
||||||
|
@ -215,7 +224,7 @@
|
||||||
display: inline-block
|
display: inline-block
|
||||||
padding-left: auto
|
padding-left: auto
|
||||||
padding-right: auto
|
padding-right: auto
|
||||||
|
|
||||||
#story-graphic-4
|
#story-graphic-4
|
||||||
margin-left: auto
|
margin-left: auto
|
||||||
margin-right: auto
|
margin-right: auto
|
||||||
|
@ -272,7 +281,7 @@
|
||||||
margin-left: -85px
|
margin-left: -85px
|
||||||
p
|
p
|
||||||
margin-top: 15px
|
margin-top: 15px
|
||||||
|
|
||||||
#files
|
#files
|
||||||
padding: 30px 0
|
padding: 30px 0
|
||||||
margin-top: 50px
|
margin-top: 50px
|
||||||
|
@ -287,7 +296,7 @@
|
||||||
img
|
img
|
||||||
display: inline-block
|
display: inline-block
|
||||||
margin: 6.5px
|
margin: 6.5px
|
||||||
|
|
||||||
#downloads-container
|
#downloads-container
|
||||||
position: relative
|
position: relative
|
||||||
height: 250px
|
height: 250px
|
||||||
|
@ -309,7 +318,7 @@
|
||||||
margin-right: 15px
|
margin-right: 15px
|
||||||
vertical-align: middle
|
vertical-align: middle
|
||||||
font-size: 1.5em
|
font-size: 1.5em
|
||||||
|
|
||||||
#screenshot-lightbox
|
#screenshot-lightbox
|
||||||
.modal-dialog
|
.modal-dialog
|
||||||
width: auto
|
width: auto
|
||||||
|
|
|
@ -54,7 +54,9 @@ block content
|
||||||
// Full time
|
// Full time
|
||||||
li
|
li
|
||||||
a(href="http://www.nickwinter.net" rel="external")
|
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
|
.team-bio
|
||||||
h6.label.team-name
|
h6.label.team-name
|
||||||
a(href="http://www.nickwinter.net" rel="external") Nick Winter
|
a(href="http://www.nickwinter.net" rel="external") Nick Winter
|
||||||
|
@ -63,7 +65,9 @@ block content
|
||||||
|
|
||||||
li
|
li
|
||||||
a(href="http://www.mattlott.com/" rel="external")
|
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
|
.team-bio
|
||||||
h6.label.team-name
|
h6.label.team-name
|
||||||
a(href="http://www.mattlott.com/" rel="external") Matt Lott
|
a(href="http://www.mattlott.com/" rel="external") Matt Lott
|
||||||
|
@ -72,7 +76,9 @@ block content
|
||||||
|
|
||||||
li
|
li
|
||||||
a(href="http://cat.zdh.com/" rel="external")
|
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
|
.team-bio
|
||||||
h6.label.team-name
|
h6.label.team-name
|
||||||
a(href="http://cat.zdh.com/" rel="external") Catherine Weresow
|
a(href="http://cat.zdh.com/" rel="external") Catherine Weresow
|
||||||
|
@ -80,14 +86,18 @@ block content
|
||||||
small(data-i18n="about.cat_blurb")
|
small(data-i18n="about.cat_blurb")
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Scott Erickson
|
h6.label.team-name Scott Erickson
|
||||||
small(data-i18n="about.scott_title")
|
small(data-i18n="about.scott_title")
|
||||||
small(data-i18n="about.scott_blurb")
|
small(data-i18n="about.scott_blurb")
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Michael 'Maka' Gradin
|
h6.label.team-name Michael 'Maka' Gradin
|
||||||
small(data-i18n="about.maka_title")
|
small(data-i18n="about.maka_title")
|
||||||
|
@ -95,7 +105,9 @@ block content
|
||||||
|
|
||||||
li
|
li
|
||||||
a(href="http://basicer.com/" rel="external")
|
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
|
.team-bio
|
||||||
h6.label.team-name
|
h6.label.team-name
|
||||||
a(href="http://basicer.com/" rel="external") Rob Blanckaert
|
a(href="http://basicer.com/" rel="external") Rob Blanckaert
|
||||||
|
@ -103,7 +115,9 @@ block content
|
||||||
small(data-i18n="about.rob_blurb")
|
small(data-i18n="about.rob_blurb")
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Josh Callebaut
|
h6.label.team-name Josh Callebaut
|
||||||
small(data-i18n="about.josh_c_title")
|
small(data-i18n="about.josh_c_title")
|
||||||
|
@ -111,7 +125,9 @@ block content
|
||||||
|
|
||||||
li
|
li
|
||||||
a(href="http://robinyang.com/" rel="external")
|
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
|
.team-bio
|
||||||
h6.label.team-name
|
h6.label.team-name
|
||||||
a(href="http://robinyang.com/" rel="external") Robin Yang
|
a(href="http://robinyang.com/" rel="external") Robin Yang
|
||||||
|
@ -119,40 +135,50 @@ block content
|
||||||
small(data-i18n="about.robin_blurb")
|
small(data-i18n="about.robin_blurb")
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Phoenix Eliot
|
h6.label.team-name Phoenix Eliot
|
||||||
small(data-i18n="about.phoenix_title")
|
small(data-i18n="about.phoenix_title")
|
||||||
br
|
br
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Nolan Kelly
|
h6.label.team-name Nolan Kelly
|
||||||
small(data-i18n="about.nolan_title")
|
small(data-i18n="about.nolan_title")
|
||||||
br
|
br
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Elliot Okiwelu
|
h6.label.team-name Elliot Okiwelu
|
||||||
small(data-i18n="about.elliot_title")
|
small(data-i18n="about.elliot_title")
|
||||||
small(data-i18n="about.elliot_blurb")
|
small(data-i18n="about.elliot_blurb")
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Lisa Wu
|
h6.label.team-name Lisa Wu
|
||||||
small(data-i18n="about.lisa_title")
|
small(data-i18n="about.lisa_title")
|
||||||
br
|
br
|
||||||
|
|
||||||
li
|
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
|
.team-bio
|
||||||
h6.label.team-name Sean McNulty
|
h6.label.team-name Sean McNulty
|
||||||
small(data-i18n="about.sean_title")
|
small(data-i18n="about.sean_title")
|
||||||
br
|
br
|
||||||
|
ul
|
||||||
// Part time / contract
|
// Part time / contract
|
||||||
li
|
li
|
||||||
a(href="http://floor.is/lava/" rel="external")
|
a(href="http://floor.is/lava/" rel="external")
|
||||||
|
|
|
@ -115,26 +115,24 @@ mixin course-instance-body(courseInstance, classroom)
|
||||||
- var arenaLevel = stats.levels.arena;
|
- var arenaLevel = stats.levels.arena;
|
||||||
- var projectLevel = stats.levels.project;
|
- var projectLevel = stats.levels.project;
|
||||||
if arenaLevel
|
if arenaLevel
|
||||||
- var arenaURL = "/play/ladder/"+arenaLevel.get('slug')+"/course/"+courseInstance.id;
|
- 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=arenaURL, data-level-slug=arenaLevel.get('slug'), data-event-action="Students Play Arena")
|
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")
|
span(data-i18n="courses.play_arena")
|
||||||
else if projectLevel
|
else if projectLevel
|
||||||
- var projectURL = "/play/level/"+projectLevel.get('slug')+"?course="+course.id+"&course-instance="+courseInstance.id;
|
- 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=projectURL, data-level-slug=projectLevel.get('slug'), data-event-action="Students Play Project")
|
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")
|
span(data-i18n="courses.view_project")
|
||||||
else
|
else
|
||||||
a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete")
|
a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete")
|
||||||
else if stats.levels.next != stats.levels.first
|
else if stats.levels.next != stats.levels.first
|
||||||
- var next = stats.levels.next;
|
- var next = stats.levels.next;
|
||||||
- var levelURL = "/play/level/"+next.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
|
- 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=levelURL, data-level-slug=next.get('slug'), data-event-action="Students Continue Course")
|
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")
|
span(data-i18n="common.continue")
|
||||||
else
|
else
|
||||||
- var firstLevel = stats.levels.first;
|
- var firstLevel = stats.levels.first;
|
||||||
- var levelURL = "/play/level/"+firstLevel.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
|
- var url = view.urls.courseLevel({level: view.originalLevelMap[firstLevel.get('original')] || firstLevel, courseInstance: courseInstance});
|
||||||
if firstLevel.get('primerLanguage')
|
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")
|
||||||
- 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")
|
|
||||||
span(data-i18n="courses.start")
|
span(data-i18n="courses.start")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,10 @@ block content
|
||||||
a(href="http://files.codecombat.com/docs/resources/WorksheetExample.pdf" target="blank")
|
a(href="http://files.codecombat.com/docs/resources/WorksheetExample.pdf" target="blank")
|
||||||
i.span.spl(data-i18n="teacher.engineering_cycle_worksheet_link")
|
i.span.spl(data-i18n="teacher.engineering_cycle_worksheet_link")
|
||||||
p(data-i18n="teacher.engineering_cycle_worksheet_desc")
|
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")
|
h4(data-i18n="teacher.cs2")
|
||||||
ul
|
ul
|
||||||
|
|
|
@ -13,6 +13,7 @@ Course = require 'models/Course'
|
||||||
Classroom = require 'models/Classroom'
|
Classroom = require 'models/Classroom'
|
||||||
Classrooms = require 'collections/Classrooms'
|
Classrooms = require 'collections/Classrooms'
|
||||||
LevelSession = require 'models/LevelSession'
|
LevelSession = require 'models/LevelSession'
|
||||||
|
Levels = require 'collections/Levels'
|
||||||
NameLoader = require 'core/NameLoader'
|
NameLoader = require 'core/NameLoader'
|
||||||
Campaign = require 'models/Campaign'
|
Campaign = require 'models/Campaign'
|
||||||
ThangType = require 'models/ThangType'
|
ThangType = require 'models/ThangType'
|
||||||
|
@ -50,6 +51,8 @@ module.exports = class CoursesView extends RootView
|
||||||
@supermodel.trackCollection(@ownedClassrooms)
|
@supermodel.trackCollection(@ownedClassrooms)
|
||||||
@courses = new CocoCollection([], { url: "/db/course", model: Course})
|
@courses = new CocoCollection([], { url: "/db/course", model: Course})
|
||||||
@supermodel.loadCollection(@courses)
|
@supermodel.loadCollection(@courses)
|
||||||
|
@originalLevelMap = {}
|
||||||
|
@urls = require('core/urls')
|
||||||
|
|
||||||
# TODO: Trim this section for only what's necessary
|
# TODO: Trim this section for only what's necessary
|
||||||
@hero = new ThangType
|
@hero = new ThangType
|
||||||
|
@ -95,7 +98,13 @@ module.exports = class CoursesView extends RootView
|
||||||
@ownerNameMap[ownerID] = NameLoader.getName(ownerID) for ownerID in ownerIDs
|
@ownerNameMap[ownerID] = NameLoader.getName(ownerID) for ownerID in ownerIDs
|
||||||
@render?()
|
@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: ->
|
onClickLogInButton: ->
|
||||||
modal = new AuthModal()
|
modal = new AuthModal()
|
||||||
|
|
|
@ -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.
|
# 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]
|
playerCode = @originalSource.match(/<playercode>\n([\s\S]*)\n *<\/playercode>/)[1]
|
||||||
playerCodeLines = playerCode.split('\n')
|
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')
|
playerCode = (line.substr(indentation) for line in playerCodeLines).join('\n')
|
||||||
@wrapperCode = @originalSource.replace /<playercode>[\s\S]*<\/playercode>/, '☃' # ☃ serves as placeholder for constructHTML
|
@wrapperCode = @originalSource.replace /<playercode>[\s\S]*<\/playercode>/, '☃' # ☃ serves as placeholder for constructHTML
|
||||||
@originalSource = playerCode
|
@originalSource = playerCode
|
||||||
|
|
|
@ -107,12 +107,21 @@ module.exports = class PlayHeroesModal extends ModalView
|
||||||
{id: 'javascript', name: 'JavaScript'}
|
{id: 'javascript', name: 'JavaScript'}
|
||||||
]
|
]
|
||||||
else
|
else
|
||||||
@codeLanguageList = [
|
@codeLanguageList = switch me.getDefaultLanguageGroup()
|
||||||
{id: 'python', name: "Python (#{$.i18n.t('choose_hero.default')})"}
|
when 'javascript'
|
||||||
{id: 'javascript', name: 'JavaScript'}
|
[
|
||||||
{id: 'coffeescript', name: "CoffeeScript (#{$.i18n.t('choose_hero.experimental')})"}
|
{id: 'javascript', name: "JavaScript (#{$.i18n.t('choose_hero.default')})"}
|
||||||
{id: 'lua', name: 'Lua'}
|
{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')})"}
|
||||||
|
{id: 'lua', name: 'Lua'}
|
||||||
|
]
|
||||||
|
|
||||||
if me.isAdmin() or not application.isProduction()
|
if me.isAdmin() or not application.isProduction()
|
||||||
@codeLanguageList.push {id: 'java', name: "Java (#{$.i18n.t('choose_hero.experimental')})"}
|
@codeLanguageList.push {id: 'java', name: "Java (#{$.i18n.t('choose_hero.experimental')})"}
|
||||||
|
@ -226,7 +235,7 @@ module.exports = class PlayHeroesModal extends ModalView
|
||||||
onCodeLanguageChanged: (e) ->
|
onCodeLanguageChanged: (e) ->
|
||||||
@codeLanguage = @$el.find('#option-code-language').val()
|
@codeLanguage = @$el.find('#option-code-language').val()
|
||||||
@codeLanguageChanged = true
|
@codeLanguageChanged = true
|
||||||
|
window.tracker?.trackEvent 'Campaign changed code language', category: 'Campaign Hero Select', codeLanguage: @codeLanguage, levelSlug: @options.level?.get('slug')
|
||||||
|
|
||||||
#- Purchasing the hero
|
#- Purchasing the hero
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ const usSchoolStatuses = ['Auto Attempt 1', 'New US Schools Auto Attempt 1', 'Ne
|
||||||
|
|
||||||
const emailDelayMinutes = 27;
|
const emailDelayMinutes = 27;
|
||||||
|
|
||||||
const closeParallelLimit = 100;
|
const closeParallelLimit = 10;
|
||||||
|
|
||||||
const scriptStartTime = new Date();
|
const scriptStartTime = new Date();
|
||||||
const closeIoApiKey = process.argv[2];
|
const closeIoApiKey = process.argv[2];
|
||||||
|
@ -136,7 +136,9 @@ function getCountryCode(country, emails) {
|
||||||
if (countryCode) return countryCode;
|
if (countryCode) return countryCode;
|
||||||
}
|
}
|
||||||
for (const email of emails) {
|
for (const email of emails) {
|
||||||
const tld = parseDomain(email).tld;
|
const domain = parseDomain(email);
|
||||||
|
if (!domain) continue;
|
||||||
|
const tld = domain.tld;
|
||||||
if (tld) {
|
if (tld) {
|
||||||
const matches = /^[A-Za-z]*\.?([A-Za-z]{2})$/ig.exec(tld);
|
const matches = /^[A-Za-z]*\.?([A-Za-z]{2})$/ig.exec(tld);
|
||||||
if (matches && matches.length === 2) {
|
if (matches && matches.length === 2) {
|
||||||
|
@ -850,7 +852,7 @@ function createAddContactFn(postData, internalLead, closeIoLead, userApiKeyMap)
|
||||||
// Send email to new contact
|
// Send email to new contact
|
||||||
const email = postData.emails[0].email;
|
const email = postData.emails[0].email;
|
||||||
const countryCode = getCountryCode(internalLead.contacts[email].trial.properties.country, [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);
|
sendMail(email, closeIoLead.id, newContact.id, emailTemplate, emailApiKey, emailDelayMinutes, done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -30,7 +30,10 @@ AnalyticsLogEventSchema.statics.logEvent = (user, event, properties={}) ->
|
||||||
|
|
||||||
unless config.proxy
|
unless config.proxy
|
||||||
analyticsMongoose = mongoose.createConnection()
|
analyticsMongoose = mongoose.createConnection()
|
||||||
analyticsMongoose.open "mongodb://#{config.mongo.analytics_host}:#{config.mongo.analytics_port}/#{config.mongo.analytics_db}", (error) ->
|
analyticsMongoose.open config.mongo.analytics_replica_string, (error) ->
|
||||||
log.error "Couldn't connect to analytics", error if 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)
|
module.exports = AnalyticsLogEvent = analyticsMongoose.model('analytics.log.event', AnalyticsLogEventSchema, config.mongo.analytics_collection)
|
||||||
|
|
|
@ -25,6 +25,11 @@ config.mongo =
|
||||||
mongoose_replica_string: process.env.COCO_MONGO_MONGOOSE_REPLICA_STRING or ''
|
mongoose_replica_string: process.env.COCO_MONGO_MONGOOSE_REPLICA_STRING or ''
|
||||||
readpref: process.env.COCO_MONGO_READPREF or 'primary'
|
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?
|
if process.env.COCO_MONGO_LS_REPLICA_STRING?
|
||||||
config.mongo.level_session_replica_string = process.env.COCO_MONGO_LS_REPLICA_STRING
|
config.mongo.level_session_replica_string = process.env.COCO_MONGO_LS_REPLICA_STRING
|
||||||
|
|
||||||
|
|