Merge conflict handling.
BIN
app/assets/images/common/code_languages/c_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
BIN
app/assets/images/common/code_languages/clojure_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
Before ![]() (image error) Size: 6.1 KiB After ![]() (image error) Size: 6.1 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/coffeescript_icon.png
Executable file
After ![]() (image error) Size: 2.9 KiB |
Before ![]() (image error) Size: 16 KiB After ![]() (image error) Size: 16 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/cpp_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
BIN
app/assets/images/common/code_languages/csharp_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
BIN
app/assets/images/common/code_languages/go_icon.png
Executable file
After ![]() (image error) Size: 2.9 KiB |
BIN
app/assets/images/common/code_languages/io_icon.png
Normal file
After ![]() (image error) Size: 4 KiB |
Before ![]() (image error) Size: 15 KiB After ![]() (image error) Size: 15 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/java_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
BIN
app/assets/images/common/code_languages/javascript_icon.png
Normal file
After ![]() (image error) Size: 3.9 KiB |
Before ![]() (image error) Size: 3.7 KiB After ![]() (image error) Size: 3.7 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/lua_icon.png
Executable file
After ![]() (image error) Size: 2.8 KiB |
Before ![]() (image error) Size: 1.5 KiB After ![]() (image error) Size: 1.5 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/php_icon.png
Executable file
After ![]() (image error) Size: 2.9 KiB |
BIN
app/assets/images/common/code_languages/python_icon.png
Executable file
After ![]() (image error) Size: 2.9 KiB |
Before ![]() (image error) Size: 17 KiB After ![]() (image error) Size: 17 KiB ![]() ![]() |
BIN
app/assets/images/common/code_languages/ruby_icon.png
Executable file
After ![]() (image error) Size: 3 KiB |
BIN
app/assets/images/common/code_languages/swift_icon.png
Executable file
After ![]() (image error) Size: 2.9 KiB |
Before ![]() (image error) Size: 9.4 KiB After ![]() (image error) Size: 9.1 KiB ![]() ![]() |
Before ![]() (image error) Size: 7.5 KiB After ![]() (image error) Size: 8.1 KiB ![]() ![]() |
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "български език", englishDescri
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Избери своето ниво"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
|
|||
for_beginners: "Per a principiants"
|
||||
multiplayer: "Multijugador"
|
||||
for_developers: "Per a Desenvolupadors"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Escull el teu nivell"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Zvolte si úroveň"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
|
|||
for_beginners: "For Begyndere"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "For Udviklere"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Vælg Dit Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
|
|||
for_beginners: "Für Afänger"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "Für Entwickler"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Wähl dis Level us"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
for_beginners: "Für Anfänger"
|
||||
multiplayer: "Mehrspieler"
|
||||
for_developers: "Für Entwickler"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Wähle dein Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
|
|||
for_beginners: "Für Anfänger"
|
||||
multiplayer: "Mehrspieler"
|
||||
for_developers: "Für Entwickler"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Wähle dein Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre
|
|||
for_beginners: "Για αρχάριους"
|
||||
# multiplayer: "Multiplayer"
|
||||
for_developers: "Για προγραμματιστές"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Διάλεξε την πίστα σου"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@
|
|||
for_beginners: "For Beginners"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "For Developers"
|
||||
javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
clojure_blurb: "A modern Lisp."
|
||||
lua_blurb: "Game scripting language."
|
||||
io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
|
|||
for_beginners: "Para Principiantes"
|
||||
multiplayer: "Multijugador"
|
||||
for_developers: "Para Desarrolladores"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Elige tu nivel"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
|
|||
for_beginners: "Para principiantes"
|
||||
multiplayer: "Multijugador"
|
||||
for_developers: "Para programadores"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Elige tu nivel"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t
|
|||
for_beginners: "Para principiantes"
|
||||
multiplayer: "Multijugador"
|
||||
for_developers: "Para desarrolladores"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Elige tu nivel"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "مرحله خود را انتخاب کنید"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
|
|||
for_beginners: "Pour débutants"
|
||||
multiplayer: "Multijoueurs"
|
||||
for_developers: "Pour développeurs"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Choisissez votre niveau"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
|
|||
for_beginners: "למתחילים"
|
||||
multiplayer: "רב-משתתפים"
|
||||
for_developers: "למומחים"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "בחר את השלב"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
|
|||
for_beginners: "Kezdőknek"
|
||||
# multiplayer: "Multiplayer"
|
||||
for_developers: "Fejlesztőknek"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Válaszd ki a pályát!"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
|
|||
for_beginners: "Per Principianti"
|
||||
# multiplayer: "Multiplayer"
|
||||
for_developers: "Per Sviluppatori"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Scegli il tuo livello"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
|
|||
for_beginners: "初心者向け"
|
||||
multiplayer: "マルチプレイヤー"
|
||||
for_developers: "開発者向け"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "レベル選択"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
for_beginners: "초보자용"
|
||||
multiplayer: "멀티플레이어"
|
||||
for_developers: "개발자용"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "레벨을 선택하세요."
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Velg Ditt Nivå"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
|
|||
for_beginners: "Voor Beginners"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "Voor ontwikkelaars"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Kies Je Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
for_beginners: "Voor Beginners"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "Voor ontwikkelaars"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Kies Je Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t
|
|||
for_beginners: "Voor Beginners"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "Voor ontwikkelaars"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Kies Je Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Velg Ditt Nivå"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
|
|||
for_beginners: "Dla początkujących"
|
||||
# multiplayer: "Multiplayer"
|
||||
for_developers: "Dla developerów"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Wybierz poziom"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
|
|||
for_beginners: "Para Iniciantes"
|
||||
multiplayer: "Multijogador"
|
||||
for_developers: "Para Desenvolvedores"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Escolha seu estágio"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
|
|||
for_beginners: "Para Iniciantes"
|
||||
multiplayer: "Multijogador"
|
||||
for_developers: "Para Programadores"
|
||||
# javascript_blurb: "A linguagem da web. Ótima para escrever websites, aplicações da web, jogos HTML5 e servidores."
|
||||
# python_blurb: "Simples mas poderoso, o Python é uma linguagem de programação ótima para propósitos gerais."
|
||||
# coffeescript_blurb: "Sintaxe do Javascript mais agradável."
|
||||
# clojure_blurb: "Um Lisp moderno"
|
||||
# lua_blurb: "Linguagem para scripts de jogos"
|
||||
# io_blurb: "Simples mas obscuro"
|
||||
|
||||
play:
|
||||
choose_your_level: "Escolha o Seu Nível"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Escolha seu estágio"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
|
|||
for_beginners: "Pentru Începători"
|
||||
multiplayer: "Multiplayer"
|
||||
for_developers: "Pentru dezvoltatori"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Alege nivelul"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
|
|||
for_beginners: "Новичкам"
|
||||
multiplayer: "Мультиплеер"
|
||||
for_developers: "Разработчикам"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Выберите ваш уровень"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
|
|||
for_beginners: "Pre začiatočníkov"
|
||||
# multiplayer: "Multiplayer"
|
||||
for_developers: "Pre vývojárov"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Vyber si úroveň"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Изабери ниво"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
|
|||
for_beginners: "För nybörjare"
|
||||
multiplayer: "Flera spelare"
|
||||
for_developers: "För utvecklare"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Välj din nivå"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
|
|||
for_beginners: "Yeni Başlayanlar için"
|
||||
multiplayer: "Çoklu-oyuncu Modu"
|
||||
for_developers: "Geliştiriciler için"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Seviye Seçimi"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
|
|||
for_beginners: "Для новачків"
|
||||
multiplayer: "Командна гра"
|
||||
for_developers: "Для розробників"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Оберіть свій рівень"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "Chọn Trình của bạn"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
|
|||
for_beginners: "适合初学者"
|
||||
multiplayer: "多人游戏"
|
||||
for_developers: "适合开发者"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "选择关卡"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "選取關卡"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
# play:
|
||||
# choose_your_level: "Choose Your Level"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
|
|||
for_beginners: "適合學起頭個人"
|
||||
multiplayer: "聚隊打遊戲"
|
||||
for_developers: "適合開發個人"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "揀關數"
|
||||
|
|
|
@ -100,6 +100,12 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra
|
|||
# for_beginners: "For Beginners"
|
||||
# multiplayer: "Multiplayer"
|
||||
# for_developers: "For Developers"
|
||||
# javascript_blurb: "The language of the web. Great for writing websites, web apps, HTML5 games, and servers."
|
||||
# python_blurb: "Simple yet powerful, Python is a great general purpose programming language."
|
||||
# coffeescript_blurb: "Nicer JavaScript syntax."
|
||||
# clojure_blurb: "A modern Lisp."
|
||||
# lua_blurb: "Game scripting language."
|
||||
# io_blurb: "Simple but obscure."
|
||||
|
||||
play:
|
||||
choose_your_level: "选取难度"
|
||||
|
|
|
@ -230,13 +230,14 @@ _.extend LevelSchema.properties,
|
|||
title: 'Next Level',
|
||||
description: 'Reference to the next level players will play after beating this one.'
|
||||
}
|
||||
employerDescription: { type:'string' }
|
||||
employerDescription: { type:'string', format: 'markdown', title: 'Employer Description' }
|
||||
scripts: c.array {title: 'Scripts', description: 'An array of scripts that trigger based on what the player does and affect things outside of the core level simulation.', 'default': []}, ScriptSchema
|
||||
thangs: c.array {title: 'Thangs', description: 'An array of Thangs that make up the level.', 'default': []}, LevelThangSchema
|
||||
systems: c.array {title: 'Systems', description: 'Levels are configured by changing the Systems attached to them.', uniqueItems: true, default: []}, LevelSystemSchema # TODO: uniqueness should be based on 'original', not whole thing
|
||||
victory: c.object {title: 'Victory Screen', default: {}, properties: {'body': {type: 'string', format: 'markdown', title: 'Body Text', description: 'Inserted into the Victory Modal once this level is complete. Tell the player they did a good job and what they accomplished!'}, i18n: {type: 'object', format: 'i18n', props: ['body'], description: 'Help translate this victory message'}}}
|
||||
i18n: {type: 'object', format: 'i18n', props: ['name', 'description'], description: 'Help translate this level'}
|
||||
icon: {type: 'string', format: 'image-file', title: 'Icon'}
|
||||
banner: {type: 'string', format: 'image-file', title: 'Banner'}
|
||||
goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema
|
||||
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial'])
|
||||
showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always'])
|
||||
|
|
|
@ -12,7 +12,23 @@ _.extend UserRemarkSchema.properties,
|
|||
history: c.array {title: 'History', description: 'Records of our interactions with the user.'},
|
||||
c.object {title: 'Record'}, {date: c.date(title: 'Date'), content: {title: 'Content', type: 'string', format: 'markdown'}}
|
||||
tasks: c.array {title: 'Tasks', description: 'Task entries: when to email the contact about something.'},
|
||||
c.object {title: 'Task'}, {date: c.date(title: 'Date'), action: {title: 'Action', type: 'string'}}
|
||||
c.object {title: 'Task'},
|
||||
date: c.date
|
||||
title: 'Date'
|
||||
action:
|
||||
title: 'Action'
|
||||
type: 'string'
|
||||
status:
|
||||
title: 'Status'
|
||||
description: 'The current status of the task'
|
||||
type: 'string'
|
||||
enum: ['Not started', 'In progress', 'Completed']
|
||||
notes:
|
||||
title: 'Notes'
|
||||
description: 'Notes about the task in progress'
|
||||
type: 'string'
|
||||
format: 'markdown'
|
||||
|
||||
|
||||
# denormalization
|
||||
userName: {title: 'Player Name', type: 'string'}
|
||||
|
|
|
@ -23,6 +23,9 @@ h1 h2 h3 h4
|
|||
padding: 14px 12px 5px 12px
|
||||
@include box-sizing(border-box)
|
||||
|
||||
#outer-content-wrapper
|
||||
background: #B4B4B4
|
||||
|
||||
#outer-content-wrapper.show-background
|
||||
background: #8cc63f url(/images/pages/base/repeat-tile.png) top center
|
||||
|
||||
|
@ -70,7 +73,7 @@ h1 h2 h3 h4
|
|||
&:hover
|
||||
color: $white
|
||||
|
||||
a[data-toggle="modal"]
|
||||
a
|
||||
cursor: pointer
|
||||
|
||||
.share-buttons, .partner-badges
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
.level-session-code-view
|
||||
#level-icon
|
||||
width: 100px
|
||||
max-width: 60%
|
||||
max-height: 150px
|
||||
margin-right: 10px
|
||||
display: inline-block
|
||||
float: left
|
||||
float: right
|
||||
margin-bottom: 20px
|
||||
|
||||
#level-meta-data
|
||||
margin-left: 120px
|
||||
width: 35%
|
||||
button
|
||||
float: right
|
||||
|
||||
#session-code
|
||||
clear: both
|
||||
margin-top: 20px
|
||||
|
||||
h3
|
||||
font-family: Arial
|
||||
margin: 0
|
||||
|
||||
.code
|
||||
height: 600px
|
||||
|
|
|
@ -167,6 +167,10 @@
|
|||
h2
|
||||
margin: 15px 0 5px
|
||||
|
||||
p
|
||||
overflow: hidden
|
||||
height: 40px
|
||||
|
||||
.secondary-code-languages
|
||||
margin-left: -10px
|
||||
|
||||
|
@ -201,17 +205,22 @@
|
|||
margin: 0
|
||||
padding: 0
|
||||
|
||||
p
|
||||
white-space: nowrap
|
||||
text-overflow: ellipsis
|
||||
overflow: hidden
|
||||
|
||||
#coffeescript .code-language-logo
|
||||
background: transparent url(/images/pages/home/language_logo_coffeescript.png) no-repeat center
|
||||
background: transparent url(/images/common/code_languages/coffeescript_small.png) no-repeat center
|
||||
|
||||
#clojure .code-language-logo
|
||||
background: transparent url(/images/pages/home/language_logo_clojure.png) no-repeat center
|
||||
background: transparent url(/images/common/code_languages/clojure_small.png) no-repeat center
|
||||
|
||||
#lua .code-language-logo
|
||||
background: transparent url(/images/pages/home/language_logo_lua.png) no-repeat center
|
||||
background: transparent url(/images/common/code_languages/lua_small.png) no-repeat center
|
||||
|
||||
#io .code-language-logo
|
||||
background: transparent url(/images/pages/home/language_logo_io.png) no-repeat center
|
||||
background: transparent url(/images/common/code_languages/io_small.png) no-repeat center
|
||||
|
||||
|
||||
#multiplayer-launch-modal
|
||||
|
|
|
@ -53,6 +53,5 @@
|
|||
|
||||
.code-language-cell
|
||||
padding: 0 10px
|
||||
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
|
||||
background-size: contain
|
||||
height: 19px
|
||||
background: transparent url(/images/common/code_languages/javascript_icon.png) no-repeat center center
|
||||
height: 16px
|
||||
|
|
|
@ -40,6 +40,5 @@
|
|||
|
||||
.code-language-cell
|
||||
padding: 0 10px
|
||||
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
|
||||
background-size: contain
|
||||
height: 19px
|
||||
background: transparent url(/images/common/code_languages/javascript_icon.png) no-repeat center center
|
||||
height: 16px
|
||||
|
|
|
@ -98,12 +98,12 @@
|
|||
|
||||
.code-language
|
||||
position: absolute
|
||||
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center
|
||||
background: transparent url(/images/common/code_languages/javascript_small.png) no-repeat center center
|
||||
background-size: contain
|
||||
width: 40px
|
||||
height: 40px
|
||||
right: -5px
|
||||
top: -15px
|
||||
width: 50px
|
||||
height: 50px
|
||||
right: -0px
|
||||
top: -30px
|
||||
display: block
|
||||
|
||||
.my-name
|
||||
|
|
|
@ -70,10 +70,10 @@
|
|||
|
||||
.code-language-logo
|
||||
position: absolute
|
||||
width: 20px
|
||||
height: 20px
|
||||
left: 12px
|
||||
top: 34px
|
||||
width: 16px
|
||||
height: 16px
|
||||
left: 16px
|
||||
top: 36px
|
||||
z-index: 10
|
||||
background-color: transparent
|
||||
background-repeat: no-repeat
|
||||
|
@ -81,21 +81,27 @@
|
|||
cursor: pointer
|
||||
|
||||
&.javascript
|
||||
background-image: url(/images/pages/home/language_logo_javascript.png)
|
||||
background-image: url(/images/common/code_languages/javascript_icon.png)
|
||||
&.python
|
||||
background-image: url(/images/pages/home/language_logo_python.png)
|
||||
background-image: url(/images/common/code_languages/python_icon.png)
|
||||
&.coffeescript
|
||||
background-image: url(/images/pages/home/language_logo_coffeescript.png)
|
||||
background-image: url(/images/common/code_languages/coffeescript_icon.png)
|
||||
&.clojure
|
||||
background-image: url(/images/pages/home/language_logo_clojure.png)
|
||||
background-image: url(/images/common/code_languages/clojure_icon.png)
|
||||
&.lua
|
||||
background-image: url(/images/pages/home/language_logo_lua.png)
|
||||
background-image: url(/images/common/code_languages/lua_icon.png)
|
||||
&.io
|
||||
background-image: url(/images/pages/home/language_logo_io.png)
|
||||
background-image: url(/images/common/code_languages/io_icon.png)
|
||||
|
||||
&:hover
|
||||
outline: 1px outset #ccc
|
||||
|
||||
&:active
|
||||
outline: 1px inset #ccc
|
||||
|
||||
html.no-borderimage
|
||||
#spell-palette-view
|
||||
span.code-palette-background
|
||||
display: none
|
||||
img.code-palette-background
|
||||
display: block
|
||||
display: block
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
extends /templates/modal/modal_base
|
||||
|
||||
block modal-header-content
|
||||
.modal-header
|
||||
h3 Applicant Code
|
||||
h3 Applicant Code for
|
||||
span.spl= session.get('levelName')
|
||||
|
||||
block modal-body-content
|
||||
.modal-body
|
||||
.level-session-code-view
|
||||
.level-session-code-view
|
||||
|
||||
block modal-footer
|
||||
.modal-footer
|
||||
|
|
|
@ -181,14 +181,12 @@ block content
|
|||
ul.sessions
|
||||
each session in sessions
|
||||
li
|
||||
span.session-link(data-session-id=session._id)= session.levelName
|
||||
//- var sessionLink = "/play/level/" + session.levelID + "?team=" + (session.team || 'humans') + (myProfile ? '' : "&session=" + session._id);
|
||||
//a(href=sessionLink)
|
||||
// span= session.levelName
|
||||
// if session.team
|
||||
// span #{session.team}
|
||||
//if session.codeLanguage != 'javascript'
|
||||
// span - #{{coffeescript: 'CoffeeScript', python: 'Python', lua: 'Lua', io: 'Io', clojure: 'Clojure'}[session.codeLanguage]}
|
||||
a.session-link(data-session-id=session._id)
|
||||
span= session.levelName
|
||||
if session.team
|
||||
span.spl - #{session.team}
|
||||
if session.codeLanguage != 'javascript'
|
||||
span.spl - #{{coffeescript: 'CoffeeScript', python: 'Python', lua: 'Lua', io: 'Io', clojure: 'Clojure'}[session.codeLanguage]}
|
||||
|
||||
.middle-column.full-height-column
|
||||
.sub-column
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
div#session-info
|
||||
img(src='/file/'+levelIcon alt='levelIcon')#level-icon
|
||||
div#level-meta-data
|
||||
strong= levelName
|
||||
a.btn.btn-primary(href=sessionLink, target=_blank) Spectate
|
||||
p!= levelDescription
|
||||
|
||||
div#session-code
|
||||
|
@ -10,4 +10,4 @@ div#session-code
|
|||
.panel-heading
|
||||
h3= spell.name
|
||||
.panel-body
|
||||
.code= spell.code
|
||||
.code(data-height=spell.height)= spell.code
|
|
@ -10,14 +10,14 @@ block content
|
|||
.code-language#javascript(data-code-language='javascript')
|
||||
.code-wizard
|
||||
h2 JavaScript
|
||||
p The language of the web. Great for writing websites, web apps, HTML5 games, and servers.
|
||||
p(data-i18n="home.javascript_blurb") The language of the web. Great for writing websites, web apps, HTML5 games, and servers.
|
||||
|
||||
.col-md-6
|
||||
.code-language.beta#python(data-code-language='python')
|
||||
.code-wizard
|
||||
.code-language-beta
|
||||
h2 Python
|
||||
p Simple yet powerful, Python is a great general purpose programming language.
|
||||
p(data-i18n="home.python_blurb") Simple yet powerful, Python is a great general purpose programming language.
|
||||
|
||||
.secondary-code-languages.row
|
||||
.col-md-3
|
||||
|
@ -26,7 +26,7 @@ block content
|
|||
.code-wizard
|
||||
.code-language-beta
|
||||
h3 CoffeeScript
|
||||
p Nicer JavaScript syntax
|
||||
p(data-i18n="home.coffeescript_blurb") Nicer JavaScript syntax.
|
||||
|
||||
.col-md-3
|
||||
.code-language.beta#clojure(data-code-language='clojure')
|
||||
|
@ -34,7 +34,7 @@ block content
|
|||
.code-wizard
|
||||
.code-language-beta
|
||||
h3 Clojure
|
||||
p A modern Lisp
|
||||
p(data-i18n="home.clojure_blurb") A modern Lisp.
|
||||
|
||||
.col-md-3
|
||||
.code-language.beta#lua(data-code-language='lua')
|
||||
|
@ -42,7 +42,7 @@ block content
|
|||
.code-wizard
|
||||
.code-language-beta
|
||||
h3 Lua
|
||||
p Game scripting language
|
||||
p(data-i18n="home.lua_blurb") Game scripting language.
|
||||
|
||||
.col-md-3
|
||||
.code-language.beta#io(data-code-language='io', title="Careful: Io is still quite buggy")
|
||||
|
@ -50,7 +50,7 @@ block content
|
|||
.code-wizard
|
||||
.code-language-beta
|
||||
h3 Io
|
||||
p Simple but obscure
|
||||
p(data-i18n="home.io_blurb") Simple but obscure.
|
||||
|
||||
.alert.alert-danger.lt-ie10
|
||||
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 9 or older. Sorry!
|
||||
|
|
|
@ -21,7 +21,7 @@ div#columns.row
|
|||
for session, rank in topSessions
|
||||
- var myRow = session.get('creator') == me.id
|
||||
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
|
||||
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + session.get('submittedCodeLanguage') + ".png)")
|
||||
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)")
|
||||
td.rank-cell= rank + 1
|
||||
td.score-cell= Math.round(session.get('totalScore') * 100)
|
||||
td.name-col-cell= session.get('creatorName') || "Anonymous"
|
||||
|
@ -35,7 +35,7 @@ div#columns.row
|
|||
for session in team.leaderboard.nearbySessions()
|
||||
- var myRow = session.get('creator') == me.id
|
||||
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
|
||||
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + session.get('submittedCodeLanguage') + ".png)")
|
||||
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)")
|
||||
td.rank-cell= session.rank
|
||||
td.score-cell= Math.round(session.get('totalScore') * 100)
|
||||
td.name-col-cell= session.get('creatorName') || "Anonymous"
|
||||
|
|
|
@ -39,7 +39,7 @@ div#columns.row
|
|||
span(data-i18n="general.loss").loss Loss
|
||||
if match.state === 'tie'
|
||||
span(data-i18n="general.tie").tie Tie
|
||||
td.code-language-cell(style="background-image: url(/images/pages/home/language_logo_" + match.codeLanguage + ".png)")
|
||||
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + match.codeLanguage + "_icon.png)")
|
||||
td.name-cell= match.opponentName || "Anonymous"
|
||||
td.time-cell= match.when
|
||||
td.battle-cell
|
||||
|
|
|
@ -33,7 +33,7 @@ block modal-body-content
|
|||
span= myName
|
||||
div.opponent-name.name-label
|
||||
span(data-i18n="ladder.simple_ai") Simple AI
|
||||
//span.code-language(style="background-image: url(/images/pages/home/language_logo_javascript.png)")
|
||||
//span.code-language(style="background-image: url(/images/common/code_languages/javascript_small.png)")
|
||||
div.difficulty
|
||||
span(data-i18n="ladder.warmup") Warmup
|
||||
div(data-i18n="ladder.vs").vs VS
|
||||
|
@ -50,7 +50,7 @@ block modal-body-content
|
|||
div.opponent-name.name-label
|
||||
span= challengers.easy.opponentName
|
||||
if challengers.easy.codeLanguage
|
||||
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.easy.codeLanguage + ".png)")
|
||||
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.easy.codeLanguage + "_small.png)")
|
||||
div.difficulty
|
||||
span(data-i18n="general.easy") Easy
|
||||
div(data-i18n="ladder.vs").vs VS
|
||||
|
@ -67,7 +67,7 @@ block modal-body-content
|
|||
div.opponent-name.name-label
|
||||
span= challengers.medium.opponentName
|
||||
if challengers.medium.codeLanguage
|
||||
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.medium.codeLanguage + ".png)")
|
||||
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.medium.codeLanguage + "_small.png)")
|
||||
div.difficulty
|
||||
span(data-i18n="general.medium") Medium
|
||||
div(data-i18n="ladder.vs").vs VS
|
||||
|
@ -84,7 +84,7 @@ block modal-body-content
|
|||
div.opponent-name.name-label
|
||||
span= challengers.hard.opponentName
|
||||
if challengers.hard.codeLanguage
|
||||
span.code-language(style="background-image: url(/images/pages/home/language_logo_" + challengers.hard.codeLanguage + ".png)")
|
||||
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.hard.codeLanguage + "_small.png)")
|
||||
div.difficulty
|
||||
span(data-i18n="general.hard") Hard
|
||||
div(data-i18n="ladder.vs").vs VS
|
||||
|
|
|
@ -52,7 +52,7 @@ module.exports = class HomeView extends RootView
|
|||
@updateLanguageLogos codeLanguage
|
||||
|
||||
updateLanguageLogos: (codeLanguage) ->
|
||||
@$el.find('.game-mode-wrapper .code-language-logo').css('background-image', "url(/images/pages/home/language_logo_#{codeLanguage}.png)").toggleClass 'inverted', (codeLanguage in ['io', 'coffeescript'])
|
||||
@$el.find('.game-mode-wrapper .code-language-logo').css('background-image', "url(/images/common/code_languages/#{codeLanguage}_small.png)").toggleClass 'inverted', (codeLanguage in ['io', 'coffeescript'])
|
||||
|
||||
onCodeLanguageSelected: (e) ->
|
||||
target = $(e.target).closest('.code-language')
|
||||
|
|
|
@ -6,14 +6,20 @@ console.log 'template', template
|
|||
module.exports = class JobProfileCodeModal extends ModalView
|
||||
id: 'job_profile_code_modal'
|
||||
template: template
|
||||
modalWidthPercent: 90
|
||||
plain: true
|
||||
|
||||
constructor: (options) ->
|
||||
super(arguments...)
|
||||
@session = options.session
|
||||
|
||||
getRenderData: ->
|
||||
c = super()
|
||||
c.session = @session
|
||||
c
|
||||
|
||||
afterRender: ->
|
||||
super()
|
||||
return unless @session.loaded
|
||||
codeView = new LevelSessionCodeView({session:@session})
|
||||
@insertSubView(codeView)
|
||||
@insertSubView(codeView, @$el.find('.level-session-code-view'))
|
||||
|
|
@ -590,7 +590,7 @@ module.exports = class ProfileView extends RootView
|
|||
]
|
||||
|
||||
onSessionLinkPressed: (e) ->
|
||||
sessionID = $(e.target).data('session-id')
|
||||
sessionID = $(e.target).closest('.session-link').data('session-id')
|
||||
session = _.find @sessions.models, (session) -> session.id is sessionID
|
||||
modal = new JobProfileCodeModal({session:session})
|
||||
@openModalView modal
|
|
@ -7,27 +7,28 @@ LevelSession = require 'models/LevelSession'
|
|||
module.exports = class LevelSessionCodeView extends CocoView
|
||||
className: 'level-session-code-view'
|
||||
template: template
|
||||
modalWidthPercent: 80
|
||||
plain: true
|
||||
|
||||
constructor: (options) ->
|
||||
super(options)
|
||||
@session = options.session
|
||||
@level = LevelSession.getReferencedModel(@session.get('level'), LevelSession.schema.properties.level)
|
||||
@level.setProjection ['employerDescription', 'name', 'icon']
|
||||
@level.setProjection ['employerDescription', 'name', 'icon', 'banner', 'slug']
|
||||
@supermodel.loadModel @level, 'level'
|
||||
|
||||
getRenderData: ->
|
||||
c = super()
|
||||
c.levelIcon = @level.get('icon')
|
||||
c.levelIcon = @level.get('banner') or @level.get('icon')
|
||||
c.levelName = @level.get('name')
|
||||
c.levelDescription = marked(@level.get('employerDescription') or '')
|
||||
c.levelSpells = @organizeCode()
|
||||
c.sessionLink = "/play/level/" + (@level.get('slug') or @level.id) + "?team=" + (@session.get('team') || 'humans') + "&session=" + @session.id
|
||||
c
|
||||
|
||||
afterRender: ->
|
||||
super()
|
||||
@$el.find('.code').each (index, codeEl) ->
|
||||
height = parseInt($(codeEl).data('height'))
|
||||
$(codeEl).height(height)
|
||||
editor = ace.edit codeEl
|
||||
editor.setReadOnly true
|
||||
aceSession = editor.getSession()
|
||||
|
@ -38,9 +39,12 @@ module.exports = class LevelSessionCodeView extends CocoView
|
|||
teamSpells = @session.get('teamSpells')[team] or []
|
||||
filteredSpells = []
|
||||
for spell in teamSpells
|
||||
code = @session.getSourceFor(spell)
|
||||
code = @session.getSourceFor(spell) ? ''
|
||||
lines = code.split('\n').length
|
||||
height = lines * 16 + 20
|
||||
filteredSpells.push {
|
||||
code: code
|
||||
name: spell.split('/')[1]
|
||||
name: spell
|
||||
height: height
|
||||
}
|
||||
filteredSpells
|
|
@ -13,7 +13,7 @@ module.exports = class SettingsTabView extends CocoView
|
|||
# not thangs or scripts or the backend stuff
|
||||
editableSettings: [
|
||||
'name', 'description', 'documentation', 'nextLevel', 'background', 'victory', 'i18n', 'icon', 'goals',
|
||||
'type', 'showsGuide'
|
||||
'type', 'showsGuide', 'banner', 'employerDescription'
|
||||
]
|
||||
|
||||
subscriptions:
|
||||
|
|
|
@ -25,6 +25,8 @@ LevelHandler = class LevelHandler extends Handler
|
|||
'goals'
|
||||
'type'
|
||||
'showsGuide'
|
||||
'banner'
|
||||
'employerDescription'
|
||||
]
|
||||
|
||||
postEditableProperties: ['name']
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
mail = require '../commons/mail'
|
||||
MailSent = require '../mail/sent/MailSent'
|
||||
UserRemark = require '../users/remarks/UserRemark'
|
||||
User = require '../users/User'
|
||||
async = require 'async'
|
||||
errors = require '../commons/errors'
|
||||
|
@ -28,6 +29,12 @@ setupScheduledEmails = ->
|
|||
,
|
||||
taskFunction: employerNewCandidatesAvailableTask
|
||||
frequencyMs: 10 * 60 * 1000 #10 minutes
|
||||
,
|
||||
taskFunction: unapprovedCandidateFinishProfileTask
|
||||
frequencyMs: 10 * 60 * 1000
|
||||
,
|
||||
taskFunction: emailUserRemarkTaskRemindersTask
|
||||
frequencyMs: 10 * 60 * 1000
|
||||
]
|
||||
|
||||
for mailTask in mailTasks
|
||||
|
@ -35,8 +42,7 @@ setupScheduledEmails = ->
|
|||
|
||||
testForLockManager = -> unless lockManager then throw "The system isn't configured to do distributed locking!"
|
||||
|
||||
### Candidate Update Reminder Task ###
|
||||
|
||||
### Approved Candidate Update Reminder Task ###
|
||||
candidateUpdateProfileTask = ->
|
||||
mailTaskName = "candidateUpdateProfileTask"
|
||||
lockDurationMs = 2 * 60 * 1000
|
||||
|
@ -132,7 +138,103 @@ sendReminderEmailToCandidate = (candidate, sendEmailCallback) ->
|
|||
sendwithus.api.send context, (err, result) ->
|
||||
log.error "Error sending candidate update reminder email: #{err} with result #{result}" if err
|
||||
sendEmailCallback null
|
||||
### End Candidate Update Reminder Task ###
|
||||
### End Approved Candidate Update Reminder Task ###
|
||||
|
||||
### Unapproved Candidate Finish Reminder Task ###
|
||||
unapprovedCandidateFinishProfileTask = ->
|
||||
mailTaskName = "unapprovedCandidateFinishProfileTask"
|
||||
lockDurationMs = 2 * 60 * 1000
|
||||
currentDate = new Date()
|
||||
timeRanges = []
|
||||
for weekPair in [[4, 2,'two weeks'], [8, 4, 'four weeks'], [52, 8, 'eight weeks']]
|
||||
timeRanges.push
|
||||
start: generateWeekOffset currentDate, weekPair[0]
|
||||
end: generateWeekOffset currentDate, weekPair[1]
|
||||
name: weekPair[2]
|
||||
lockManager.setLock mailTaskName, lockDurationMs, (err) ->
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
|
||||
async.each timeRanges, emailUnapprovedCandidateTimeRange.bind({mailTaskName: mailTaskName}), (err) ->
|
||||
if err
|
||||
log.error "There was an error sending the candidate profile update reminder emails: #{err}"
|
||||
else
|
||||
log.info "Completed mail task #{mailTaskName}"
|
||||
lockManager.releaseLock mailTaskName, (err) ->
|
||||
if err? then return log.error "There was an error releasing the distributed lock for task #{mailTaskName}: #{err}"
|
||||
|
||||
emailUnapprovedCandidateTimeRange = (timeRange, emailTimeRangeCallback) ->
|
||||
waterfallContext =
|
||||
"timeRange": timeRange
|
||||
"mailTaskName": @mailTaskName
|
||||
async.waterfall [
|
||||
findAllUnapprovedCandidatesWithinTimeRange.bind(waterfallContext)
|
||||
(unfilteredCandidates, cb) ->
|
||||
async.reject unfilteredCandidates, ignoredCandidateFilter, cb.bind(null,null)
|
||||
(unfilteredPotentialCandidates, cb) ->
|
||||
async.reject unfilteredPotentialCandidates, unapprovedCandidateFilter.bind(waterfallContext), cb.bind(null, null)
|
||||
(filteredCandidates, cb) ->
|
||||
async.each filteredCandidates, sendReminderEmailToUnapprovedCandidate.bind(waterfallContext), cb
|
||||
], emailTimeRangeCallback
|
||||
|
||||
findAllUnapprovedCandidatesWithinTimeRange = (cb) ->
|
||||
findParameters =
|
||||
"jobProfile":
|
||||
$exists: true
|
||||
"jobProfile.updated":
|
||||
$gt: @timeRange.start
|
||||
$lte: @timeRange.end
|
||||
"jobProfileApproved": false
|
||||
selection = "_id email jobProfile.name jobProfile.updated emails"
|
||||
User.find(findParameters).select(selection).lean().exec cb
|
||||
|
||||
ignoredCandidateFilter = (candidate, cb) ->
|
||||
findParameters =
|
||||
"user": candidate._id
|
||||
"contactName": "Ignore"
|
||||
UserRemark.count findParameters, (err, results) ->
|
||||
if err? then return true
|
||||
return cb Boolean(results.length)
|
||||
|
||||
unapprovedCandidateFilter = (candidate, sentEmailFilterCallback) ->
|
||||
if candidate.emails?.anyNotes?.enabled is false or candidate.emails?.recruitNotes?.enabled is false
|
||||
return sentEmailFilterCallback true
|
||||
findParameters =
|
||||
"user": candidate._id
|
||||
"mailTask": @mailTaskName
|
||||
"metadata.timeRangeName": @timeRange.name
|
||||
"metadata.updated": candidate.jobProfile.updated
|
||||
MailSent.find(findParameters).lean().exec (err, sentMail) ->
|
||||
if err?
|
||||
log.error "Error finding mail sent for task #{@mailTaskName} and user #{candidate._id}!"
|
||||
sentEmailFilterCallback true
|
||||
else
|
||||
sentEmailFilterCallback Boolean(sentMail.length)
|
||||
|
||||
sendReminderEmailToUnapprovedCandidate = (candidate, sendEmailCallback) ->
|
||||
if err?
|
||||
log.error "There was an error finding employers who signed up after #{candidate.jobProfile.updated}: #{err}"
|
||||
return sendEmailCallback err
|
||||
context =
|
||||
email_id: "tem_RXyjzmc7S2HJH287pfoSPN"
|
||||
recipient:
|
||||
address: candidate.email
|
||||
name: candidate.jobProfile.name
|
||||
email_data:
|
||||
user_profile: "http://codecombat.com/account/profile/#{candidate._id}"
|
||||
recipient_address: encodeURIComponent(candidate.email)
|
||||
log.info "Sending #{@timeRange.name} finish profile reminder to #{context.recipient.name}(#{context.recipient.address})"
|
||||
newSentMail =
|
||||
mailTask: @mailTaskName
|
||||
user: candidate._id
|
||||
metadata:
|
||||
timeRangeName: @timeRange.name
|
||||
updated: candidate.jobProfile.updated
|
||||
MailSent.create newSentMail, (err) ->
|
||||
if err? then return sendEmailCallback err
|
||||
sendwithus.api.send context, (err, result) ->
|
||||
log.error "Error sending candidate finish profile reminder email: #{err} with result #{result}" if err
|
||||
sendEmailCallback null
|
||||
### End Unapproved Candidate Finish Reminder Task ###
|
||||
|
||||
### Internal Candidate Update Reminder Email ###
|
||||
internalCandidateUpdateTask = ->
|
||||
mailTaskName = "internalCandidateUpdateTask"
|
||||
|
@ -304,6 +406,99 @@ sendEmployerNewCandidatesAvailableEmail = (employer, cb) ->
|
|||
cb null
|
||||
|
||||
### End Employer New Candidates Available Email ###
|
||||
|
||||
### Task Emails ###
|
||||
emailUserRemarkTaskRemindersTask = ->
|
||||
mailTaskName = "emailUserRemarkTaskRemindersTask"
|
||||
lockDurationMs = 2 * 60 * 1000
|
||||
lockManager.setLock mailTaskName, lockDurationMs, (err) ->
|
||||
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
|
||||
emailUserRemarkTaskReminders.call {"mailTaskName":mailTaskName}, (err) ->
|
||||
if err
|
||||
log.error "There was an error completing the #{mailTaskName}: #{err}"
|
||||
else
|
||||
log.info "Completed the #{mailTaskName}"
|
||||
lockManager.releaseLock mailTaskName, (err) ->
|
||||
if err? then return log.error "There was an error releasing the distributed lock for task #{mailTaskName}: #{err}"
|
||||
|
||||
emailUserRemarkTaskReminders = (cb) ->
|
||||
currentTime = new Date()
|
||||
asyncContext =
|
||||
"currentTime": currentTime
|
||||
"mailTaskName": @mailTaskName
|
||||
|
||||
async.waterfall [
|
||||
findAllIncompleteUserRemarkTasksDue.bind(asyncContext)
|
||||
processRemarksIntoTasks.bind(asyncContext)
|
||||
(allTasks, cb) ->
|
||||
async.reject allTasks, taskReminderAlreadySentThisWeekFilter.bind(asyncContext), cb.bind(null,null)
|
||||
(tasksToRemind, cb) ->
|
||||
async.each tasksToRemind, sendUserRemarkTaskEmail.bind(asyncContext), cb
|
||||
], cb
|
||||
|
||||
findAllIncompleteUserRemarkTasksDue = (cb) ->
|
||||
findParameters =
|
||||
tasks:
|
||||
$exists: true
|
||||
$elemMatch:
|
||||
date:
|
||||
$lte: @currentTime.toISOString()
|
||||
status:
|
||||
$ne: 'Completed'
|
||||
selection = "contact user tasks"
|
||||
UserRemark.find(findParameters).select(selection).lean().exec cb
|
||||
|
||||
processRemarksIntoTasks = (remarks, cb) ->
|
||||
tasks = []
|
||||
for remark in remarks
|
||||
for task in remark.tasks
|
||||
taskObject =
|
||||
date: task.date
|
||||
action: task.action
|
||||
contact: remark.contact
|
||||
user: remark.user
|
||||
remarkID: remark._id
|
||||
tasks.push taskObject
|
||||
cb null, tasks
|
||||
|
||||
taskReminderAlreadySentThisWeekFilter = (task, cb) ->
|
||||
findParameters =
|
||||
"user": task.contact
|
||||
"mailTask": @mailTaskName
|
||||
"sent":
|
||||
$gt: new Date(@currentTime.getTime() - 7 * 24 * 60 * 60 * 1000)
|
||||
"metadata":
|
||||
remarkID: task.remarkID
|
||||
taskAction: task.action
|
||||
date: task.date
|
||||
MailSent.count findParameters, (err, count) ->
|
||||
if err? then return cb true
|
||||
return cb Boolean(count)
|
||||
|
||||
sendUserRemarkTaskEmail = (task, cb) ->
|
||||
mailTaskName = @mailTaskName
|
||||
User.findOne("_id":task.contact).select("email").lean().exec (err, contact) ->
|
||||
if err? then return cb err
|
||||
context =
|
||||
email_id: "tem_aryDjyw6JmEmbKtCMTSwAM"
|
||||
recipient:
|
||||
address: contact.email
|
||||
email_data:
|
||||
candidate_link: "http://codecombat.com/account/profile/#{task.user}"
|
||||
due_date: task.date
|
||||
log.info "Sending recruitment task reminder to #{contact.email}"
|
||||
newSentMail =
|
||||
mailTask: mailTaskName
|
||||
user: task.contact
|
||||
"metadata":
|
||||
remarkID: task.remarkID
|
||||
taskAction: task.action
|
||||
date: task.date
|
||||
MailSent.create newSentMail, (err) ->
|
||||
if err? then return cb err
|
||||
sendwithus.api.send context, (err, result) ->
|
||||
log.error "Error sending #{mailTaskName} to #{contact.email}: #{err} with result #{result}" if err
|
||||
cb null
|
||||
|
||||
### New Recruit Leaderboard Email ###
|
||||
###
|
||||
|
|