Merge pull request #1323 from codecombat/master

Master into production
This commit is contained in:
Michael Schmatz 2014-07-14 11:15:31 -07:00
commit aaf9bf1253
12 changed files with 98 additions and 82 deletions

View file

@ -30,6 +30,7 @@ module.exports = class ThangState
if type is 'Vector'
@props.push value?.copy() # could try storing [x, y, z] or {x, y, z} here instead if this is expensive
else if type is 'object' or type is 'array'
console.log 'storing', prop, 'as', value if prop is 'myTiles'
@props.push clone(value, true)
else
@props.push value
@ -144,7 +145,7 @@ module.exports = class ThangState
# We make sure the array keys won't collide with any string keys by using some unprintable characters.
stringPieces = ['\x1D'] # Group Separator
for element in value
if element and element.isThang
if element and element.id # Was checking element.isThang, but we can't store non-strings anyway
element = element.id
stringPieces.push element, '\x1E' # Record Separator(s)
value = stringPieces.join('')

View file

@ -173,8 +173,8 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
email_announcements: "Bejelentések"
email_announcements_description: "Szeretnél levelet kapni a legújabb fejlesztéseinkről?"
email_notifications: "Értesítések"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
email_any_notes: "Bármely értesítés"
email_notifications_summary: "CodeCombat tevékenységedre vonatkozó személyre szóló, automatikus értesítések beállításai."
email_any_notes: "Bármely megjegyzés"
email_any_notes_description: "Minden tevékenységgel kapcsolatos e-mail értesítés letiltása."
email_recruit_notes: "Álláslehetőségek"
email_recruit_notes_description: "Ha igazán jól játszol lehet, hogy felveszzük veled a kapcsolatot és megbeszéljük, hogy szerezzünk-e neked egy (jobb) állást."

View file

@ -1 +0,0 @@
@import "bootstrap/bootstrap";

View file

@ -13,13 +13,14 @@
$childMargin: 2px
$childSize: $height - 2 * $childMargin
height: $height
width: 80%
width: -webkit-calc(100% - 100px)
width: calc(100% - 100px)
width: 90%
width: -webkit-calc(100% - 50px)
width: calc(100% - 50px)
padding: 0px 8px
border-width: 3px
border-image: url(/images/level/code_editor_tab_background.png) 4 fill repeat
text-align: center
white-space: nowrap
position: relative
&.read-only
background: linear-gradient(to bottom, rgba(0,0,0,0.2) 0%,rgba(0,0,0,0.2) 100%), url(/images/level/code_editor_tab_background.png)
@ -34,6 +35,11 @@
.spell-list-button, .thang-avatar-wrapper
float: left
.spell-tool-buttons
position: absolute
right: 0px
top: 0px
.reload-code
float: right
display: none
@ -66,6 +72,7 @@
code
margin-top: 7px
font-size: 1vw
.spell-list-entry-view:not(.spell-tab)
cursor: pointer

View file

@ -36,22 +36,22 @@ block content
ul
li We write about our progress and current projects on our
a(href="http://blog.codecombat.com", data-i18n="nav.blog")
a.spl(href="http://blog.codecombat.com", data-i18n="nav.blog")
| .
li Participate in our active user community by checking out our
a(href="http://discourse.codecombat.com", data-i18n="nav.forum")
a.spl(href="http://discourse.codecombat.com", data-i18n="nav.forum")
| .
li For regular news about learning to code, games, and education, check out our
a(href="https://www.facebook.com/codecombat", data-i18n="community.facebook")
a.spl(href="https://www.facebook.com/codecombat", data-i18n="community.facebook")
| .
li For realtime status or to have a quick chat, follow us on
a(href="https://twitter.com/CodeCombat", data-i18n="community.twitter")
a.spl(href="https://twitter.com/CodeCombat", data-i18n="community.twitter")
| .
li Don't like Facebook? We're on
a(href="https://plus.google.com/115285980638641924488/posts", data-i18n="community.gplus")
a.spl(href="https://plus.google.com/115285980638641924488/posts", data-i18n="community.gplus")
| .
li You can also find us in our
a(href="http://www.hipchat.com/g3plnOKqa", data-i18n="editor.hipchat_url")
a.spl(href="http://www.hipchat.com/g3plnOKqa", data-i18n="editor.hipchat_url")
.community_columns
@ -81,5 +81,5 @@ block content
| : support our community of educators and coders.
| Check out the
a(href="/contribute", data-i18n="nav.contribute")
a.spl(href="/contribute", data-i18n="nav.contribute")
| page to find out more about the roles and how you can get started.

View file

@ -49,7 +49,7 @@ block header
if level.get('type') === 'ladder'
li.dropdown
a(data-toggle='dropdown')
a(data-toggle='dropdown').play-with-team-parent
span.glyphicon-play.glyphicon
ul.dropdown-menu
li.dropdown-header Play As Which Team?

View file

@ -4,6 +4,7 @@
code #{methodSignature}
.spell-tool-buttons
.btn.btn-small.fullscreen-code(title="Expand code editor")
i.icon-fullscreen
i.icon-resize-small
@ -14,5 +15,4 @@ code #{methodSignature}
.btn.btn-small.beautify-code(title="Ctrl+Shift+B: Beautify code for " + spell.name)
i.icon-magnet
.clearfix

View file

@ -26,6 +26,7 @@ module.exports = class EditorLevelView extends View
events:
'click #play-button': 'onPlayLevel'
'click .play-with-team-button': 'onPlayLevel'
'click .play-with-team-parent': 'onPlayLevelTeamSelect'
'click #commit-level-start-button': 'startCommittingLevel'
'click #fork-level-start-button': 'startForkingLevel'
'click #level-history-button': 'showVersionHistory'
@ -77,6 +78,12 @@ module.exports = class EditorLevelView extends View
@listenTo @patchesView, 'accepted-patch', -> location.reload()
@$el.find('#level-watch-button').find('> span').toggleClass('secret') if @level.watching()
onPlayLevelTeamSelect: (e) ->
if @childWindow and not @childWindow.closed
# We already have a child window open, so we don't need to ask for a team; we'll use its existing team.
e.stopImmediatePropagation()
@onPlayLevel e
onPlayLevel: (e) ->
team = $(e.target).data('team')
sendLevel = =>

View file

@ -66,6 +66,7 @@ sizes = {
'borderSize': {
'x':4
'y':4
'thickness':2
}
}
@ -114,34 +115,36 @@ module.exports = class TerrainRandomizeModal extends ModalView
randomizeBorder: (preset, presetSize) ->
for i in _.range(0-sizes.floorSize.x/2+sizes.borderSize.x, presetSize.x-sizes.floorSize.x/2, sizes.borderSize.x)
for j in _.range(sizes.borderSize.thickness)
@thangs.push {
'id': @getRandomThang(preset.borders)
'pos': {
'x': i
'y': 0-sizes.floorSize.x/2
'x': i + _.random(-sizes.borderSize.x/2, sizes.borderSize.x/2)
'y': 0 - sizes.floorSize.x/2 + _.random(-sizes.borderSize.x/2, sizes.borderSize.x/2)
}
}
@thangs.push {
'id': @getRandomThang(preset.borders)
'pos': {
'x': i
'y': presetSize.y - sizes.borderSize.y
'x': i + _.random(-sizes.borderSize.x/2, sizes.borderSize.x/2)
'y': presetSize.y - sizes.borderSize.y + _.random(-sizes.borderSize.x/2, sizes.borderSize.x/2)
}
}
for i in _.range(0-sizes.floorSize.y/2, presetSize.y-sizes.borderSize.y, sizes.borderSize.y)
for j in _.range(3)
@thangs.push {
'id': @getRandomThang(preset.borders)
'pos': {
'x': 0-sizes.floorSize.x/2+sizes.borderSize.x
'y': i
'x': 0-sizes.floorSize.x/2+sizes.borderSize.x + _.random(-sizes.borderSize.y/2, sizes.borderSize.y/2)
'y': i + _.random(-sizes.borderSize.y/2, sizes.borderSize.y/2)
}
}
@thangs.push {
'id': @getRandomThang(preset.borders)
'pos': {
'x': presetSize.x - sizes.borderSize.x - sizes.floorSize.x/2
'y': i
'x': presetSize.x - sizes.borderSize.x - sizes.floorSize.x/2 + _.random(-sizes.borderSize.y/2, sizes.borderSize.y/2)
'y': i + _.random(-sizes.borderSize.y/2, sizes.borderSize.y/2)
}
}

View file

@ -368,7 +368,7 @@ module.exports = class SpellView extends View
# Now that that's figured out, perform the update.
# The web worker Aether won't track state, so don't have to worry about updating it
finishUpdatingAether = (aether) =>
@displayAether aether
@displayAether aether, codeIsAsCast
@lastUpdatedAetherSpellThang = @spellThang
@guessWhetherFinished aether if fromCodeChange
@ -396,10 +396,9 @@ module.exports = class SpellView extends View
@aceSession.setAnnotations []
@highlightCurrentLine {} # This'll remove all highlights
displayAether: (aether) ->
displayAether: (aether, isCast=false) ->
@displayedAether = aether
isCast = not _.isEmpty(aether.metrics) or _.some aether.problems.errors, {type: 'runtime'}
isCast = isCast or @spell.language isnt 'javascript' # Since we don't have linting for other languages
isCast = isCast or not _.isEmpty(aether.metrics) or _.some aether.problems.errors, {type: 'runtime'}
problem.destroy() for problem in @problems # Just in case another problem was added since clearAetherDisplay() ran.
@problems = []
annotations = []

View file

@ -64,7 +64,7 @@ exports.config =
'stylesheets/app.css': /^(app|vendor|bower_components)/
order:
before: [
'app/styles/bootstrap.scss'
'app/styles/bootstrap/*'
'vendor/styles/nanoscroller.scss'
]
templates:

View file

@ -84,7 +84,7 @@
"nodemon": "0.7.5",
"marked": "0.2.x",
"telepath-brunch": "https://github.com/nwinter/telepath-brunch/tarball/master",
"bower": "~1.2.8",
"bower": "~1.3.8",
"bless-brunch": "~1.6.1",
"karma-script-launcher": "~0.1.0",
"karma-chrome-launcher": "~0.1.2",