Conflicts:
	server/routes/mail.coffee
This commit is contained in:
Michael Schmatz 2014-07-18 11:07:11 -07:00
commit 8c3613dfc7
94 changed files with 479 additions and 132 deletions

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

Binary file not shown.

After

(image error) Size: 4 KiB

View file

Before

(image error) Size: 15 KiB

After

(image error) Size: 15 KiB

Before After
Before After

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 3.9 KiB

Binary file not shown.

After

(image error) Size: 2.8 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

Binary file not shown.

After

(image error) Size: 3 KiB

Binary file not shown.

After

(image error) Size: 2.9 KiB

View file

@ -82,7 +82,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
if @thangType.isFullyLoaded() if @thangType.isFullyLoaded()
@setupSprite() @setupSprite()
else else
@thangType.fetch() @thangType.fetch() unless @thangType.loading
@listenToOnce(@thangType, 'sync', @setupSprite) @listenToOnce(@thangType, 'sync', @setupSprite)
setupSprite: -> setupSprite: ->
@ -442,7 +442,7 @@ module.exports = CocoSprite = class CocoSprite extends CocoClass
console.warn 'Cannot show action', action, 'for', @thangType.get('name'), 'because it DNE' unless @warnedFor[action] console.warn 'Cannot show action', action, 'for', @thangType.get('name'), 'because it DNE' unless @warnedFor[action]
@warnedFor[action] = true @warnedFor[action] = true
return if @action is 'idle' then null else 'idle' return if @action is 'idle' then null else 'idle'
action = 'break' if @actions.break? and @thang?.erroredOut #action = 'break' if @actions.break? and @thang?.erroredOut # This makes it looks like it's dead when it's not: bad in Brawlwood.
action = 'die' if @actions.die? and thang?.health? and thang.health <= 0 action = 'die' if @actions.die? and thang?.health? and thang.health <= 0
@actions[action] @actions[action]

View file

@ -115,7 +115,8 @@ module.exports = Surface = class Surface extends CocoClass
setWorld: (@world) -> setWorld: (@world) ->
@worldLoaded = true @worldLoaded = true
@world.getFrame(Math.min(@getCurrentFrame(), @world.totalFrames - 1)).restoreState() unless @options.choosing lastFrame = Math.min(@getCurrentFrame(), @world.totalFrames - 1)
@world.getFrame(lastFrame).restoreState() unless @options.choosing
@spriteBoss.world = @world @spriteBoss.world = @world
@showLevel() @showLevel()
@ -241,7 +242,7 @@ module.exports = Surface = class Surface extends CocoClass
@onFrameChanged() @onFrameChanged()
getCurrentFrame: -> getCurrentFrame: ->
return Math.max(0, Math.min(Math.floor(@currentFrame), @world.totalFrames - 1)) return Math.max(0, Math.min(Math.floor(@currentFrame), @world.frames.length - 1))
getProgress: -> @currentFrame / @world.totalFrames getProgress: -> @currentFrame / @world.totalFrames

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "български език", englishDescri
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Избери своето ниво" choose_your_level: "Избери своето ниво"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
for_beginners: "Per a principiants" for_beginners: "Per a principiants"
multiplayer: "Multijugador" multiplayer: "Multijugador"
for_developers: "Per a Desenvolupadors" 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: play:
choose_your_level: "Escull el teu nivell" choose_your_level: "Escull el teu nivell"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Zvolte si úroveň" choose_your_level: "Zvolte si úroveň"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
for_beginners: "For Begyndere" for_beginners: "For Begyndere"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "For Udviklere" 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: play:
choose_your_level: "Vælg Dit Level" choose_your_level: "Vælg Dit Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
for_beginners: "Für Afänger" for_beginners: "Für Afänger"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "Für Entwickler" 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: play:
choose_your_level: "Wähl dis Level us" choose_your_level: "Wähl dis Level us"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
for_beginners: "Für Anfänger" for_beginners: "Für Anfänger"
multiplayer: "Mehrspieler" multiplayer: "Mehrspieler"
for_developers: "Für Entwickler" 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: play:
choose_your_level: "Wähle dein Level" choose_your_level: "Wähle dein Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Deutsch", englishDescription: "German", tra
for_beginners: "Für Anfänger" for_beginners: "Für Anfänger"
multiplayer: "Mehrspieler" multiplayer: "Mehrspieler"
for_developers: "Für Entwickler" 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: play:
choose_your_level: "Wähle dein Level" choose_your_level: "Wähle dein Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "ελληνικά", englishDescription: "Gre
for_beginners: "Για αρχάριους" for_beginners: "Για αρχάριους"
# multiplayer: "Multiplayer" # 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: play:
choose_your_level: "Διάλεξε την πίστα σου" choose_your_level: "Διάλεξε την πίστα σου"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@
for_beginners: "For Beginners" for_beginners: "For Beginners"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "For Developers" 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: play:
choose_your_level: "Choose Your Level" choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "español (América Latina)", englishDescrip
for_beginners: "Para Principiantes" for_beginners: "Para Principiantes"
multiplayer: "Multijugador" multiplayer: "Multijugador"
for_developers: "Para Desarrolladores" 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: play:
choose_your_level: "Elige tu nivel" choose_your_level: "Elige tu nivel"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
for_beginners: "Para principiantes" for_beginners: "Para principiantes"
multiplayer: "Multijugador" multiplayer: "Multijugador"
for_developers: "Para programadores" 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: play:
choose_your_level: "Elige tu nivel" choose_your_level: "Elige tu nivel"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "español", englishDescription: "Spanish", t
for_beginners: "Para principiantes" for_beginners: "Para principiantes"
multiplayer: "Multijugador" multiplayer: "Multijugador"
for_developers: "Para desarrolladores" 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: play:
choose_your_level: "Elige tu nivel" choose_your_level: "Elige tu nivel"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "مرحله خود را انتخاب کنید" choose_your_level: "مرحله خود را انتخاب کنید"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
for_beginners: "Pour débutants" for_beginners: "Pour débutants"
multiplayer: "Multijoueurs" multiplayer: "Multijoueurs"
for_developers: "Pour développeurs" 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: play:
choose_your_level: "Choisissez votre niveau" choose_your_level: "Choisissez votre niveau"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
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: play:
choose_your_level: "בחר את השלב" choose_your_level: "בחר את השלב"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
for_beginners: "Kezdőknek" for_beginners: "Kezdőknek"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
for_developers: "Fejlesztőknek" 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: play:
choose_your_level: "Válaszd ki a pályát!" choose_your_level: "Válaszd ki a pályát!"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
for_beginners: "Per Principianti" for_beginners: "Per Principianti"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
for_developers: "Per Sviluppatori" 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: play:
choose_your_level: "Scegli il tuo livello" choose_your_level: "Scegli il tuo livello"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
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: play:
choose_your_level: "レベル選択" choose_your_level: "レベル選択"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
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: play:
choose_your_level: "레벨을 선택하세요." choose_your_level: "레벨을 선택하세요."

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Velg Ditt Nivå" choose_your_level: "Velg Ditt Nivå"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
for_beginners: "Voor Beginners" for_beginners: "Voor Beginners"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "Voor ontwikkelaars" 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: play:
choose_your_level: "Kies Je Level" choose_your_level: "Kies Je Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
for_beginners: "Voor Beginners" for_beginners: "Voor Beginners"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "Voor ontwikkelaars" 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: play:
choose_your_level: "Kies Je Level" choose_your_level: "Kies Je Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Nederlands", englishDescription: "Dutch", t
for_beginners: "Voor Beginners" for_beginners: "Voor Beginners"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "Voor ontwikkelaars" 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: play:
choose_your_level: "Kies Je Level" choose_your_level: "Kies Je Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Velg Ditt Nivå" choose_your_level: "Velg Ditt Nivå"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
for_beginners: "Dla początkujących" for_beginners: "Dla początkujących"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
for_developers: "Dla developerów" 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: play:
choose_your_level: "Wybierz poziom" choose_your_level: "Wybierz poziom"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "português do Brasil", englishDescription:
for_beginners: "Para Iniciantes" for_beginners: "Para Iniciantes"
multiplayer: "Multijogador" multiplayer: "Multijogador"
for_developers: "Para Desenvolvedores" 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: play:
choose_your_level: "Escolha seu estágio" choose_your_level: "Escolha seu estágio"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
for_beginners: "Para Iniciantes" for_beginners: "Para Iniciantes"
multiplayer: "Multijogador" multiplayer: "Multijogador"
for_developers: "Para Programadores" 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: play:
choose_your_level: "Escolha o Seu Nível" choose_your_level: "Escolha o Seu Nível"
@ -186,7 +192,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
error_saving: "Erro ao Guardar" error_saving: "Erro ao Guardar"
saved: "Alterações Guardadas" saved: "Alterações Guardadas"
password_mismatch: "As palavras-passe não coincidem." password_mismatch: "As palavras-passe não coincidem."
# password_repeat: "Please repeat your password." password_repeat: "Por favor repita a sua palavra-passe."
job_profile: "Perfil de Emprego" job_profile: "Perfil de Emprego"
job_profile_approved: "O seu perfil de emprego foi aprovado pelo CodeCombat. Os empregadores poderão vê-lo até que o defina como inativo ou não o tenha alterado à 4 semanas." job_profile_approved: "O seu perfil de emprego foi aprovado pelo CodeCombat. Os empregadores poderão vê-lo até que o defina como inativo ou não o tenha alterado à 4 semanas."
job_profile_explanation: "Olá! Preencha isto e entraremos em contacto consigo sobre encontrar um emprego de desenvolvedor de software para si." job_profile_explanation: "Olá! Preencha isto e entraremos em contacto consigo sobre encontrar um emprego de desenvolvedor de software para si."
@ -327,7 +333,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# pass_screen_blurb: "Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News." # pass_screen_blurb: "Review each candidate's code before reaching out. One employer found that 5x as many of our devs passed their technical screen than hiring from Hacker News."
# make_hiring_easier: "Make my hiring easier, please." # make_hiring_easier: "Make my hiring easier, please."
what: "O que é o CodeCombat?" what: "O que é o CodeCombat?"
what_blurb: "O CodeCombat é um jogo de programação, no navegador e multijogador. Os jogadores escrevem código para controlar as forças deles em batalha contra outros desenvolvedores. Nós suportamos JavaScript, Python, Lua, Clojure, CoffeeScript e Io." what_blurb: "O CodeCombat é um jogo de programação, no navegador e multijogador. Os jogadores escrevem código para controlar as forças deles em batalha contra outros desenvolvedores. Os nossos jogadores têm experiência com todos os conceitos tecnológicos principais."
cost: "Quanto é que cobramos?" cost: "Quanto é que cobramos?"
cost_blurb: "Cobramos 15% do salário do primeiro ano e ofereçemos uma garantia de devolução de 100% do dinheiro durante 90 dias. Não cobramos por candidatos que já estejam a ser ativamente entrevistados na sua companhia." cost_blurb: "Cobramos 15% do salário do primeiro ano e ofereçemos uma garantia de devolução de 100% do dinheiro durante 90 dias. Não cobramos por candidatos que já estejam a ser ativamente entrevistados na sua companhia."
candidate_name: "Nome" candidate_name: "Nome"
@ -503,13 +509,13 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
pick_a_terrain: "Escolha Um Terreno" pick_a_terrain: "Escolha Um Terreno"
small: "Pequeno" small: "Pequeno"
grassy: "Com Relva" grassy: "Com Relva"
# fork_title: "Fork New Version" fork_title: "Bifurcar Nova Versão"
# fork_creating: "Creating Fork..." fork_creating: "A Criar Bifurcação..."
# randomize: "Randomize" # randomize: "Randomize"
# more: "More" more: "Mais"
# wiki: "Wiki" wiki: "Wiki"
# live_chat: "Live Chat" live_chat: "Chat Ao Vivo"
level_some_options: "Algumas opções?" level_some_options: "Algumas Opções?"
level_tab_thangs: "Thangs" level_tab_thangs: "Thangs"
level_tab_scripts: "Scripts" level_tab_scripts: "Scripts"
level_tab_settings: "Configurações" level_tab_settings: "Configurações"
@ -522,19 +528,19 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# delete: "Delete" # delete: "Delete"
# duplicate: "Duplicate" # duplicate: "Duplicate"
level_settings_title: "Configurações" level_settings_title: "Configurações"
level_component_tab_title: "Componentes atuais" level_component_tab_title: "Componentes Atuais"
level_component_btn_new: "Cria um novo Componente" level_component_btn_new: "Criar Novo Componente"
level_systems_tab_title: "Sistemas atuais" level_systems_tab_title: "Sistemas Atuais"
level_systems_btn_new: "Cria um novo Sistema" level_systems_btn_new: "Cria Novo Sistema"
level_systems_btn_add: "Adiciona um Sistema" level_systems_btn_add: "Adicionar Sistema"
level_components_title: "Voltar para Todos os Thangs" level_components_title: "Voltar para Todos os Thangs"
level_components_type: "Tipo" level_components_type: "Tipo"
level_component_edit_title: "Editar Componente" level_component_edit_title: "Editar Componente"
# level_component_config_schema: "Config Schema" # level_component_config_schema: "Config Schema"
level_component_settings: "Configurações" level_component_settings: "Configurações"
level_system_edit_title: "Editar Sistema" level_system_edit_title: "Editar Sistema"
create_system_title: "Criar novo Sistema" create_system_title: "Criar Novo Sistema"
new_component_title: "Criar novo Componente" new_component_title: "Criar Novo Componente"
new_component_field_system: "Sistema" new_component_field_system: "Sistema"
new_article_title: "Criar um Novo Artigo" new_article_title: "Criar um Novo Artigo"
new_thang_title: "Criar um Novo Tipo de Thang" new_thang_title: "Criar um Novo Tipo de Thang"
@ -559,20 +565,20 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
name: "Nome" name: "Nome"
body: "Corpo" body: "Corpo"
version: "Versão" version: "Versão"
commit_msg: "Mensagem de Commit" commit_msg: "Enviar Mensagem"
# version_history: "Version History" version_history: "Histórico de Versões"
version_history_for: "Histórico de versões por: " version_history_for: "Histórico de Versões para: "
result: "Resultado" result: "Resultado"
results: "Resultados" results: "Resultados"
description: "Descrição" description: "Descrição"
or: "ou" or: "ou"
# subject: "Subject" subject: "Assunto"
email: "E-mail" email: "E-mail"
password: "Palavra-passe" password: "Palavra-passe"
message: "Mensagem" message: "Mensagem"
code: "Código" code: "Código"
ladder: "Classificação" ladder: "Classificação"
when: "quando" when: "Quando"
opponent: "Adversário" opponent: "Adversário"
rank: "Classificação" rank: "Classificação"
score: "Resultado" score: "Resultado"
@ -768,17 +774,17 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
ambassador_title_description: "(Suporte)" ambassador_title_description: "(Suporte)"
ladder: ladder:
please_login: "Por favor, faz log in antes de jogar um jogo para o campeonato." please_login: "Por favor inicie sessão antes de jogar um jogo do campeonato."
my_matches: "Os meus jogos" my_matches: "Os Meus Jogos"
simulate: "Simular" simulate: "Simular"
simulation_explanation: "Simulando jogos podes fazer com que o teu jogo seja classificado mais rapidamente!" simulation_explanation: "Ao simular jogos pode ter o seu jogo classificado mais rapidamente!"
simulate_games: "Simular Jogos!" simulate_games: "Simular Jogos!"
# simulate_all: "RESET AND SIMULATE GAMES" # simulate_all: "RESET AND SIMULATE GAMES"
# games_simulated_by: "Games simulated by you:" games_simulated_by: "Jogos simulados por si:"
# games_simulated_for: "Games simulated for you:" games_simulated_for: "Jogos simulados para si:"
# games_simulated: "Games simulated" games_simulated: "Jogos simulados"
# games_played: "Games played" games_played: "Jogos jogados"
# ratio: "Ratio" ratio: "Rácio"
leaderboard: "Tabela de Classificação" leaderboard: "Tabela de Classificação"
battle_as: "Lutar como " battle_as: "Lutar como "
summary_your: "As tuas " summary_your: "As tuas "
@ -868,29 +874,29 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# server_error: "Server error." # server_error: "Server error."
# unknown: "Unknown error." # unknown: "Unknown error."
# resources: resources:
# your_sessions: "Your Sessions" your_sessions: "As Suas Sessões"
# level: "Level" level: "vel"
# social_network_apis: "Social Network APIs" # social_network_apis: "Social Network APIs"
# facebook_status: "Facebook Status" # facebook_status: "Facebook Status"
# facebook_friends: "Facebook Friends" facebook_friends: "Amigos do Facebook"
# facebook_friend_sessions: "Facebook Friend Sessions" # facebook_friend_sessions: "Facebook Friend Sessions"
# gplus_friends: "G+ Friends" gplus_friends: "Amigos do Google+"
# gplus_friend_sessions: "G+ Friend Sessions" # gplus_friend_sessions: "G+ Friend Sessions"
# leaderboard: "Leaderboard" leaderboard: "Tabela de Classificação"
# user_schema: "User Schema" # user_schema: "User Schema"
# user_profile: "User Profile" # user_profile: "User Profile"
# patches: "Patches" # patches: "Patches"
# patched_model: "Source Document" # patched_model: "Source Document"
# model: "Model" # model: "Model"
# system: "System" system: "Sistema"
# component: "Component" component: "Componente"
# components: "Components" components: "Componentes"
# thang: "Thang" thang: "Thang"
# thangs: "Thangs" thangs: "Thangs"
# level_session: "Your Session" level_session: "A Sua Sessão"
# opponent_session: "Opponent Session" opponent_session: "Sessão Do Oponente"
# article: "Article" article: "Artigo"
# user_names: "User Names" # user_names: "User Names"
# thang_names: "Thang Names" # thang_names: "Thang Names"
# files: "Files" # files: "Files"
@ -900,7 +906,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
# sprite_sheet: "Sprite Sheet" # sprite_sheet: "Sprite Sheet"
# candidate_sessions: "Candidate Sessions" # candidate_sessions: "Candidate Sessions"
# user_remark: "User Remark" # user_remark: "User Remark"
# versions: "Versions" versions: "Versões"
# delta: # delta:
# added: "Added" # added: "Added"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "português", englishDescription: "Portugues
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Escolha seu estágio" choose_your_level: "Escolha seu estágio"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
for_beginners: "Pentru Începători" for_beginners: "Pentru Începători"
multiplayer: "Multiplayer" multiplayer: "Multiplayer"
for_developers: "Pentru dezvoltatori" 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: play:
choose_your_level: "Alege nivelul" choose_your_level: "Alege nivelul"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
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: play:
choose_your_level: "Выберите ваш уровень" choose_your_level: "Выберите ваш уровень"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
for_beginners: "Pre začiatočníkov" for_beginners: "Pre začiatočníkov"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
for_developers: "Pre vývojárov" 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: play:
choose_your_level: "Vyber si úroveň" choose_your_level: "Vyber si úroveň"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Изабери ниво" choose_your_level: "Изабери ниво"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
for_beginners: "För nybörjare" for_beginners: "För nybörjare"
multiplayer: "Flera spelare" multiplayer: "Flera spelare"
for_developers: "För utvecklare" 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: play:
choose_your_level: "Välj din nivå" choose_your_level: "Välj din nivå"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
for_beginners: "Yeni Başlayanlar için" for_beginners: "Yeni Başlayanlar için"
multiplayer: "Çoklu-oyuncu Modu" multiplayer: "Çoklu-oyuncu Modu"
for_developers: "Geliştiriciler için" 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: play:
choose_your_level: "Seviye Seçimi" choose_your_level: "Seviye Seçimi"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "українська мова", englishDesc
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: play:
choose_your_level: "Оберіть свій рівень" choose_your_level: "Оберіть свій рівень"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "Chọn Trình của bạn" choose_your_level: "Chọn Trình của bạn"

View file

@ -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: play:
choose_your_level: "选择关卡" choose_your_level: "选择关卡"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "選取關卡" choose_your_level: "選取關卡"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: # play:
# choose_your_level: "Choose Your Level" # choose_your_level: "Choose Your Level"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
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: play:
choose_your_level: "揀關數" choose_your_level: "揀關數"

View file

@ -100,6 +100,12 @@ module.exports = nativeDescription: "中文", englishDescription: "Chinese", tra
# for_beginners: "For Beginners" # for_beginners: "For Beginners"
# multiplayer: "Multiplayer" # multiplayer: "Multiplayer"
# for_developers: "For Developers" # 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: play:
choose_your_level: "选取难度" choose_your_level: "选取难度"

View file

@ -15,8 +15,11 @@
.doc-name .doc-name
color: rgb(139, 69, 19) color: rgb(139, 69, 19)
.index-column
width: 25%
.documentation-column .documentation-column
width: 75%
.specialList .specialList
list-style-type: none list-style-type: none

View file

@ -167,6 +167,10 @@
h2 h2
margin: 15px 0 5px margin: 15px 0 5px
p
overflow: hidden
height: 40px
.secondary-code-languages .secondary-code-languages
margin-left: -10px margin-left: -10px
@ -201,17 +205,22 @@
margin: 0 margin: 0
padding: 0 padding: 0
p
white-space: nowrap
text-overflow: ellipsis
overflow: hidden
#coffeescript .code-language-logo #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 #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 #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 #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 #multiplayer-launch-modal

View file

@ -53,6 +53,5 @@
.code-language-cell .code-language-cell
padding: 0 10px padding: 0 10px
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center background: transparent url(/images/common/code_languages/javascript_icon.png) no-repeat center center
background-size: contain height: 16px
height: 19px

View file

@ -40,6 +40,5 @@
.code-language-cell .code-language-cell
padding: 0 10px padding: 0 10px
background: transparent url(/images/pages/home/language_logo_javascript.png) no-repeat center center background: transparent url(/images/common/code_languages/javascript_icon.png) no-repeat center center
background-size: contain height: 16px
height: 19px

View file

@ -98,12 +98,12 @@
.code-language .code-language
position: absolute 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 background-size: contain
width: 40px width: 50px
height: 40px height: 50px
right: -5px right: -0px
top: -15px top: -30px
display: block display: block
.my-name .my-name

View file

@ -70,10 +70,10 @@
.code-language-logo .code-language-logo
position: absolute position: absolute
width: 20px width: 16px
height: 20px height: 16px
left: 12px left: 16px
top: 34px top: 36px
z-index: 10 z-index: 10
background-color: transparent background-color: transparent
background-repeat: no-repeat background-repeat: no-repeat
@ -81,21 +81,27 @@
cursor: pointer cursor: pointer
&.javascript &.javascript
background-image: url(/images/pages/home/language_logo_javascript.png) background-image: url(/images/common/code_languages/javascript_icon.png)
&.python &.python
background-image: url(/images/pages/home/language_logo_python.png) background-image: url(/images/common/code_languages/python_icon.png)
&.coffeescript &.coffeescript
background-image: url(/images/pages/home/language_logo_coffeescript.png) background-image: url(/images/common/code_languages/coffeescript_icon.png)
&.clojure &.clojure
background-image: url(/images/pages/home/language_logo_clojure.png) background-image: url(/images/common/code_languages/clojure_icon.png)
&.lua &.lua
background-image: url(/images/pages/home/language_logo_lua.png) background-image: url(/images/common/code_languages/lua_icon.png)
&.io &.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 html.no-borderimage
#spell-palette-view #spell-palette-view
span.code-palette-background span.code-palette-background
display: none display: none
img.code-palette-background img.code-palette-background
display: block display: block

View file

@ -26,8 +26,8 @@ block content
li(id="#{component.get('name')}#{doc.name}") li(id="#{component.get('name')}#{doc.name}")
| #{doc.name} | #{doc.name}
ul.specialList ul.specialList
if doc.description[language.substring(1,language.length-1)] if doc.description[language]
li!=marked(doc.description[language.substring(1,language.length-1)]) li!=marked(doc.description[language])
else else
li!=marked(doc.description) li!=marked(doc.description)

View file

@ -10,14 +10,14 @@ block content
.code-language#javascript(data-code-language='javascript') .code-language#javascript(data-code-language='javascript')
.code-wizard .code-wizard
h2 JavaScript 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 .col-md-6
.code-language.beta#python(data-code-language='python') .code-language.beta#python(data-code-language='python')
.code-wizard .code-wizard
.code-language-beta .code-language-beta
h2 Python 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 .secondary-code-languages.row
.col-md-3 .col-md-3
@ -26,7 +26,7 @@ block content
.code-wizard .code-wizard
.code-language-beta .code-language-beta
h3 CoffeeScript h3 CoffeeScript
p Nicer JavaScript syntax p(data-i18n="home.coffeescript_blurb") Nicer JavaScript syntax.
.col-md-3 .col-md-3
.code-language.beta#clojure(data-code-language='clojure') .code-language.beta#clojure(data-code-language='clojure')
@ -34,7 +34,7 @@ block content
.code-wizard .code-wizard
.code-language-beta .code-language-beta
h3 Clojure h3 Clojure
p A modern Lisp p(data-i18n="home.clojure_blurb") A modern Lisp.
.col-md-3 .col-md-3
.code-language.beta#lua(data-code-language='lua') .code-language.beta#lua(data-code-language='lua')
@ -42,7 +42,7 @@ block content
.code-wizard .code-wizard
.code-language-beta .code-language-beta
h3 Lua h3 Lua
p Game scripting language p(data-i18n="home.lua_blurb") Game scripting language.
.col-md-3 .col-md-3
.code-language.beta#io(data-code-language='io', title="Careful: Io is still quite buggy") .code-language.beta#io(data-code-language='io', title="Careful: Io is still quite buggy")
@ -50,7 +50,7 @@ block content
.code-wizard .code-wizard
.code-language-beta .code-language-beta
h3 Io h3 Io
p Simple but obscure p(data-i18n="home.io_blurb") Simple but obscure.
.alert.alert-danger.lt-ie10 .alert.alert-danger.lt-ie10
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 9 or older. Sorry! strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 9 or older. Sorry!

View file

@ -21,7 +21,7 @@ div#columns.row
for session, rank in topSessions for session, rank in topSessions
- var myRow = session.get('creator') == me.id - var myRow = session.get('creator') == me.id
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.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.rank-cell= rank + 1
td.score-cell= Math.round(session.get('totalScore') * 100) td.score-cell= Math.round(session.get('totalScore') * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous" td.name-col-cell= session.get('creatorName') || "Anonymous"
@ -35,7 +35,7 @@ div#columns.row
for session in team.leaderboard.nearbySessions() for session in team.leaderboard.nearbySessions()
- var myRow = session.get('creator') == me.id - var myRow = session.get('creator') == me.id
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.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.rank-cell= session.rank
td.score-cell= Math.round(session.get('totalScore') * 100) td.score-cell= Math.round(session.get('totalScore') * 100)
td.name-col-cell= session.get('creatorName') || "Anonymous" td.name-col-cell= session.get('creatorName') || "Anonymous"

View file

@ -39,7 +39,7 @@ div#columns.row
span(data-i18n="general.loss").loss Loss span(data-i18n="general.loss").loss Loss
if match.state === 'tie' if match.state === 'tie'
span(data-i18n="general.tie").tie 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.name-cell= match.opponentName || "Anonymous"
td.time-cell= match.when td.time-cell= match.when
td.battle-cell td.battle-cell

View file

@ -33,7 +33,7 @@ block modal-body-content
span= myName span= myName
div.opponent-name.name-label div.opponent-name.name-label
span(data-i18n="ladder.simple_ai") Simple AI 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 div.difficulty
span(data-i18n="ladder.warmup") Warmup span(data-i18n="ladder.warmup") Warmup
div(data-i18n="ladder.vs").vs VS div(data-i18n="ladder.vs").vs VS
@ -50,7 +50,7 @@ block modal-body-content
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.easy.opponentName span= challengers.easy.opponentName
if challengers.easy.codeLanguage 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 div.difficulty
span(data-i18n="general.easy") Easy span(data-i18n="general.easy") Easy
div(data-i18n="ladder.vs").vs VS div(data-i18n="ladder.vs").vs VS
@ -67,7 +67,7 @@ block modal-body-content
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.medium.opponentName span= challengers.medium.opponentName
if challengers.medium.codeLanguage 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 div.difficulty
span(data-i18n="general.medium") Medium span(data-i18n="general.medium") Medium
div(data-i18n="ladder.vs").vs VS div(data-i18n="ladder.vs").vs VS
@ -84,7 +84,7 @@ block modal-body-content
div.opponent-name.name-label div.opponent-name.name-label
span= challengers.hard.opponentName span= challengers.hard.opponentName
if challengers.hard.codeLanguage 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 div.difficulty
span(data-i18n="general.hard") Hard span(data-i18n="general.hard") Hard
div(data-i18n="ladder.vs").vs VS div(data-i18n="ladder.vs").vs VS

View file

@ -34,5 +34,5 @@ module.exports = class UnnamedView extends RootView
if (me.get('aceConfig')?.language?) is false if (me.get('aceConfig')?.language?) is false
c.language = 'javascript' c.language = 'javascript'
else else
c.language = JSON.stringify(me.get('aceConfig').language) c.language = me.get('aceConfig').language
c c

View file

@ -40,7 +40,7 @@ module.exports = class EditorLevelView extends View
constructor: (options, @levelID) -> constructor: (options, @levelID) ->
super options super options
@supermodel.shouldSaveBackups = (model) -> @supermodel.shouldSaveBackups = (model) ->
model.constructor.className in ['Level', 'LevelComponent', 'LevelSystem'] model.constructor.className in ['Level', 'LevelComponent', 'LevelSystem', 'ThangType']
@levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, headless: true, editorMode: true @levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, headless: true, editorMode: true
@level = @levelLoader.level @level = @levelLoader.level
@files = new DocumentFiles(@levelLoader.level) @files = new DocumentFiles(@levelLoader.level)

View file

@ -52,7 +52,7 @@ module.exports = class HomeView extends View
@updateLanguageLogos codeLanguage @updateLanguageLogos codeLanguage
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) -> onCodeLanguageSelected: (e) ->
target = $(e.target).closest('.code-language') target = $(e.target).closest('.code-language')

View file

@ -84,8 +84,9 @@ module.exports = class PlayLevelView extends View
@saveScreenshot = _.throttle @saveScreenshot, 30000 @saveScreenshot = _.throttle @saveScreenshot, 30000
if @isEditorPreview if @isEditorPreview
# wait to see if it's just given to us through setLevel @supermodel.shouldSaveBackups = (model) -> # Make sure to load possibly changed things from localStorage.
f = => @load() unless @levelLoader model.constructor.className in ['Level', 'LevelComponent', 'LevelSystem', 'ThangType']
f = => @load() unless @levelLoader # Wait to see if it's just given to us through setLevel.
setTimeout f, 100 setTimeout f, 100
else else
@load() @load()

View file

@ -117,7 +117,7 @@ module.exports = class PlayView extends View
difficulty: 2 difficulty: 2
id: 'emphasis-on-aim' id: 'emphasis-on-aim'
image: '/file/db/level/525f384d96cd77000000000f/munchkin_masher_icon.png' image: '/file/db/level/525f384d96cd77000000000f/munchkin_masher_icon.png'
description: 'Chose your targets carefully.' description: 'Choose your targets carefully.'
} }
{ {
name: 'Zone of Danger' name: 'Zone of Danger'

View file

@ -9,15 +9,15 @@ LevelSession = require '../levels/sessions/LevelSession'
Level = require '../levels/Level' Level = require '../levels/Level'
log = require 'winston' log = require 'winston'
sendwithus = require '../sendwithus' sendwithus = require '../sendwithus'
if config.isProduction if config.isProduction and config.redis.host isnt 'localhost'
lockManager = require '../commons/LockManager' lockManager = require '../commons/LockManager'
module.exports.setup = (app) -> module.exports.setup = (app) ->
app.all config.mail.mailchimpWebhook, handleMailchimpWebHook app.all config.mail.mailchimpWebhook, handleMailchimpWebHook
app.get '/mail/cron/ladder-update', handleLadderUpdate app.get '/mail/cron/ladder-update', handleLadderUpdate
if lockManager if lockManager
setupScheduledEmails() setupScheduledEmails()
setupScheduledEmails = -> setupScheduledEmails = ->
testForLockManager() testForLockManager()
mailTasks = [ mailTasks = [
@ -35,15 +35,14 @@ setupScheduledEmails = ->
] ]
for mailTask in mailTasks for mailTask in mailTasks
setInterval mailTask.taskFunction, mailTask.frequencyMs setInterval mailTask.taskFunction, mailTask.frequencyMs
testForLockManager = -> unless lockManager then throw "The system isn't configured to do distributed locking!"
### Approved Candidate Update Reminder Task ###
testForLockManager = -> unless lockManager then throw "The system isn't configured to do distributed locking!"
### Approved Candidate Update Reminder Task ###
candidateUpdateProfileTask = -> candidateUpdateProfileTask = ->
mailTaskName = "candidateUpdateProfileTask" mailTaskName = "candidateUpdateProfileTask"
lockDurationMs = 2 * 60 * 1000 lockDurationMs = 2 * 60 * 1000
currentDate = new Date() currentDate = new Date()
timeRanges = [] timeRanges = []
for weekPair in [[4, 2,'two weeks'], [8, 4, 'four weeks'], [52, 8, 'eight weeks']] for weekPair in [[4, 2,'two weeks'], [8, 4, 'four weeks'], [52, 8, 'eight weeks']]
@ -70,12 +69,12 @@ emailTimeRange = (timeRange, emailTimeRangeCallback) ->
"mailTaskName": @mailTaskName "mailTaskName": @mailTaskName
async.waterfall [ async.waterfall [
findAllCandidatesWithinTimeRange.bind(waterfallContext) findAllCandidatesWithinTimeRange.bind(waterfallContext)
(unfilteredCandidates, cb) -> (unfilteredCandidates, cb) ->
async.reject unfilteredCandidates, candidateFilter.bind(waterfallContext), cb.bind(null, null) async.reject unfilteredCandidates, candidateFilter.bind(waterfallContext), cb.bind(null, null)
(filteredCandidates, cb) -> (filteredCandidates, cb) ->
async.each filteredCandidates, sendReminderEmailToCandidate.bind(waterfallContext), cb async.each filteredCandidates, sendReminderEmailToCandidate.bind(waterfallContext), cb
], emailTimeRangeCallback ], emailTimeRangeCallback
findAllCandidatesWithinTimeRange = (cb) -> findAllCandidatesWithinTimeRange = (cb) ->
findParameters = findParameters =
"jobProfile.updated": "jobProfile.updated":
@ -84,7 +83,7 @@ findAllCandidatesWithinTimeRange = (cb) ->
"jobProfileApproved": true "jobProfileApproved": true
selection = "_id email jobProfile.name jobProfile.updated emails" #make sure to check for anyNotes too. selection = "_id email jobProfile.name jobProfile.updated emails" #make sure to check for anyNotes too.
User.find(findParameters).select(selection).lean().exec cb User.find(findParameters).select(selection).lean().exec cb
candidateFilter = (candidate, sentEmailFilterCallback) -> candidateFilter = (candidate, sentEmailFilterCallback) ->
if candidate.emails?.anyNotes?.enabled is false or candidate.emails?.recruitNotes?.enabled is false if candidate.emails?.anyNotes?.enabled is false or candidate.emails?.recruitNotes?.enabled is false
return sentEmailFilterCallback true return sentEmailFilterCallback true
@ -106,7 +105,7 @@ findEmployersSignedUpAfterDate = (dateObject, cb) ->
employerAt: {$exists: true} employerAt: {$exists: true}
permissions: "employer" permissions: "employer"
User.count countParameters, cb User.count countParameters, cb
sendReminderEmailToCandidate = (candidate, sendEmailCallback) -> sendReminderEmailToCandidate = (candidate, sendEmailCallback) ->
findEmployersSignedUpAfterDate new Date(candidate.jobProfile.updated), (err, employersAfterCount) => findEmployersSignedUpAfterDate new Date(candidate.jobProfile.updated), (err, employersAfterCount) =>
if err? if err?
@ -236,7 +235,7 @@ sendReminderEmailToUnapprovedCandidate = (candidate, sendEmailCallback) ->
### Internal Candidate Update Reminder Email ### ### Internal Candidate Update Reminder Email ###
internalCandidateUpdateTask = -> internalCandidateUpdateTask = ->
mailTaskName = "internalCandidateUpdateTask" mailTaskName = "internalCandidateUpdateTask"
lockDurationMs = 2 * 60 * 1000 lockDurationMs = 2 * 60 * 1000
lockManager.setLock mailTaskName, lockDurationMs, (err) -> lockManager.setLock mailTaskName, lockDurationMs, (err) ->
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}" if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
emailInternalCandidateUpdateReminder.call {"mailTaskName":mailTaskName}, (err) -> emailInternalCandidateUpdateReminder.call {"mailTaskName":mailTaskName}, (err) ->
@ -262,31 +261,31 @@ emailInternalCandidateUpdateReminder = (internalCandidateUpdateReminderCallback)
(filteredCandidates, cb) -> (filteredCandidates, cb) ->
async.each filteredCandidates, sendInternalCandidateUpdateReminder.bind(asyncContext), cb async.each filteredCandidates, sendInternalCandidateUpdateReminder.bind(asyncContext), cb
], internalCandidateUpdateReminderCallback ], internalCandidateUpdateReminderCallback
findNonApprovedCandidatesWhoUpdatedJobProfileToday = (cb) -> findNonApprovedCandidatesWhoUpdatedJobProfileToday = (cb) ->
findParameters = findParameters =
"jobProfile.updated": "jobProfile.updated":
$lte: @currentTime.toISOString() $lte: @currentTime.toISOString()
$gt: @beginningOfUTCDay.toISOString() $gt: @beginningOfUTCDay.toISOString()
"jobProfileApproved": false "jobProfileApproved": false
User.find(findParameters).select("_id jobProfile.name jobProfile.updated").lean().exec cb User.find(findParameters).select("_id jobProfile.name jobProfile.updated").lean().exec cb
candidatesUpdatedTodayFilter = (candidate, cb) -> candidatesUpdatedTodayFilter = (candidate, cb) ->
findParameters = findParameters =
"user": candidate._id "user": candidate._id
"mailTask": @mailTaskName "mailTask": @mailTaskName
"metadata.beginningOfUTCDay": @beginningOfUTCDay "metadata.beginningOfUTCDay": @beginningOfUTCDay
MailSent.find(findParameters).lean().exec (err, sentMail) -> MailSent.find(findParameters).lean().exec (err, sentMail) ->
if err? if err?
log.error "Error finding mail sent for task #{@mailTaskName} and user #{candidate._id}!" log.error "Error finding mail sent for task #{@mailTaskName} and user #{candidate._id}!"
cb true cb true
else else
cb Boolean(sentMail.length) cb Boolean(sentMail.length)
sendInternalCandidateUpdateReminder = (candidate, cb) -> sendInternalCandidateUpdateReminder = (candidate, cb) ->
context = context =
email_id: "tem_Ac7nhgKqatTHBCgDgjF5pE" email_id: "tem_Ac7nhgKqatTHBCgDgjF5pE"
recipient: recipient:
address: "team@codecombat.com" address: "team@codecombat.com"
name: "The CodeCombat Team" name: "The CodeCombat Team"
email_data: email_data:
@ -297,7 +296,7 @@ sendInternalCandidateUpdateReminder = (candidate, cb) ->
user: candidate._id user: candidate._id
metadata: metadata:
beginningOfUTCDay: @beginningOfUTCDay beginningOfUTCDay: @beginningOfUTCDay
MailSent.create newSentMail, (err) -> MailSent.create newSentMail, (err) ->
if err? then return cb err if err? then return cb err
sendwithus.api.send context, (err, result) -> sendwithus.api.send context, (err, result) ->
@ -308,7 +307,7 @@ sendInternalCandidateUpdateReminder = (candidate, cb) ->
### Employer New Candidates Available Email ### ### Employer New Candidates Available Email ###
employerNewCandidatesAvailableTask = -> employerNewCandidatesAvailableTask = ->
mailTaskName = "employerNewCandidatesAvailableTask" mailTaskName = "employerNewCandidatesAvailableTask"
lockDurationMs = 2 * 60 * 1000 lockDurationMs = 2 * 60 * 1000
lockManager.setLock mailTaskName, lockDurationMs, (err) -> lockManager.setLock mailTaskName, lockDurationMs, (err) ->
if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}" if err? then return log.error "Error getting a distributed lock for task #{mailTaskName}: #{err}"
emailEmployerNewCandidatesAvailable.call {"mailTaskName":mailTaskName}, (err) -> emailEmployerNewCandidatesAvailable.call {"mailTaskName":mailTaskName}, (err) ->
@ -321,10 +320,10 @@ employerNewCandidatesAvailableTask = ->
emailEmployerNewCandidatesAvailable = (emailEmployerNewCandidatesAvailableCallback) -> emailEmployerNewCandidatesAvailable = (emailEmployerNewCandidatesAvailableCallback) ->
currentTime = new Date() currentTime = new Date()
asyncContext = asyncContext =
"currentTime": currentTime "currentTime": currentTime
"mailTaskName": @mailTaskName "mailTaskName": @mailTaskName
async.waterfall [ async.waterfall [
findAllEmployers findAllEmployers
makeEmployerNamesEasilyAccessible makeEmployerNamesEasilyAccessible
@ -333,15 +332,15 @@ emailEmployerNewCandidatesAvailable = (emailEmployerNewCandidatesAvailableCallba
(employersToEmail, cb) -> (employersToEmail, cb) ->
async.each employersToEmail, sendEmployerNewCandidatesAvailableEmail.bind(asyncContext), cb async.each employersToEmail, sendEmployerNewCandidatesAvailableEmail.bind(asyncContext), cb
], emailEmployerNewCandidatesAvailableCallback ], emailEmployerNewCandidatesAvailableCallback
findAllEmployers = (cb) -> findAllEmployers = (cb) ->
findParameters = findParameters =
"employerAt": "employerAt":
$exists: true $exists: true
permissions: "employer" permissions: "employer"
selection = "_id email employerAt signedEmployerAgreement.data.firstName signedEmployerAgreement.data.lastName activity dateCreated emails" selection = "_id email employerAt signedEmployerAgreement.data.firstName signedEmployerAgreement.data.lastName activity dateCreated emails"
User.find(findParameters).select(selection).lean().exec cb User.find(findParameters).select(selection).lean().exec cb
makeEmployerNamesEasilyAccessible = (allEmployers, cb) -> makeEmployerNamesEasilyAccessible = (allEmployers, cb) ->
for employer, index in allEmployers for employer, index in allEmployers
if employer.signedEmployerAgreement?.data?.firstName if employer.signedEmployerAgreement?.data?.firstName
@ -349,17 +348,17 @@ makeEmployerNamesEasilyAccessible = (allEmployers, cb) ->
delete employer.signedEmployerAgreement delete employer.signedEmployerAgreement
allEmployers[index] = employer allEmployers[index] = employer
cb null, allEmployers cb null, allEmployers
employersEmailedDigestMoreThanWeekAgoFilter = (employer, cb) -> employersEmailedDigestMoreThanWeekAgoFilter = (employer, cb) ->
if employer.emails?.employerNotes?.enabled is false if employer.emails?.employerNotes?.enabled is false
return cb true return cb true
if not employer.signedEmployerAgreement and not employer.activity?.login? if not employer.signedEmployerAgreement and not employer.activity?.login?
return cb true return cb true
findParameters = findParameters =
"user": employer._id "user": employer._id
"mailTask": @mailTaskName "mailTask": @mailTaskName
"sent": "sent":
$gt: new Date(@currentTime.getTime() - 7 * 24 * 60 * 60 * 1000) $gt: new Date(@currentTime.getTime() - 7 * 24 * 60 * 60 * 1000)
MailSent.find(findParameters).lean().exec (err, sentMail) -> MailSent.find(findParameters).lean().exec (err, sentMail) ->
if err? if err?
log.error "Error finding mail sent for task #{@mailTaskName} and employer #employer._id}!" log.error "Error finding mail sent for task #{@mailTaskName} and employer #employer._id}!"
@ -368,17 +367,17 @@ employersEmailedDigestMoreThanWeekAgoFilter = (employer, cb) ->
cb Boolean(sentMail.length) cb Boolean(sentMail.length)
sendEmployerNewCandidatesAvailableEmail = (employer, cb) -> sendEmployerNewCandidatesAvailableEmail = (employer, cb) ->
lastLoginDate = employer.activity?.login?.last ? employer.dateCreated lastLoginDate = employer.activity?.login?.last ? employer.dateCreated
countParameters = countParameters =
"jobProfileApproved": true "jobProfileApproved": true
$or: [ $or: [
jobProfileApprovedDate: jobProfileApprovedDate:
$gt: lastLoginDate.toISOString() $gt: lastLoginDate.toISOString()
, ,
jobProfileApprovedDate: jobProfileApprovedDate:
$exists: false $exists: false
"jobProfile.updated": "jobProfile.updated":
$gt: lastLoginDate.toISOString() $gt: lastLoginDate.toISOString()
] ]
User.count countParameters, (err, numberOfCandidatesSinceLogin) => User.count countParameters, (err, numberOfCandidatesSinceLogin) =>
if err? then return cb err if err? then return cb err
@ -415,8 +414,8 @@ newRecruitLeaderboardEmailTask = ->
lockManager.setLock mailTaskName, lockDurationMs, (err, lockResult) -> lockManager.setLock mailTaskName, lockDurationMs, (err, lockResult) ->
### ###
### End New Recruit Leaderboard Email ### ### End New Recruit Leaderboard Email ###
### Employer Matching Candidate Notification Email ### ### Employer Matching Candidate Notification Email ###
### ###
employerMatchingCandidateNotificationTask = -> employerMatchingCandidateNotificationTask = ->
# tem_mYsepTfWQ265noKfZJcbBH # tem_mYsepTfWQ265noKfZJcbBH
@ -444,7 +443,7 @@ isRequestFromDesignatedCronHandler = (req, res) ->
return true return true
handleLadderUpdate = (req, res) -> handleLadderUpdate = (req, res) ->
log.info('Going to see about sending ladder update emails.') log.info('Going to see about sending ladder update emails.')
requestIsFromDesignatedCronHandler = isRequestFromDesignatedCronHandler req, res requestIsFromDesignatedCronHandler = isRequestFromDesignatedCronHandler req, res