Merge remote-tracking branch 'codecombat/master'

This commit is contained in:
Cat Sync 2016-06-15 16:26:25 -07:00
commit eec7f6d697
213 changed files with 3506 additions and 2953 deletions

View file

@ -30,3 +30,14 @@ before_script:
script:
- "./node_modules/karma/bin/karma start --browsers Firefox --single-run --reporters progress"
- "npm run jasmine"
notifications:
slack:
rooms:
- secure: dv1zozcLo/gGb1i1OeKKLQgjLagW3jqhkEIiZrVbubfRMrrHouZwtlg1HDVc2GOzP1yCaUOYOLBqT3lTE9CKt4pE8k3p0gJ77j1rHxTyeYny2ETq4w5sXak8ju8M3EDnj+Au2NWWrGiD0YkIUnF5vxzKUc1pkS+vDSWR2ORkOrU=
template:
- Tests failed <%{build_url}|#%{build_number}> (<%{compare_url}|%{commit}>) of %{repository}@%{branch} by %{author} %{result} <!here>
on_success: never
on_failure: always
on_start: never
on_pull_requests: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -3,4 +3,9 @@ ThangType = require 'models/ThangType'
module.exports = class ThangTypeCollection extends CocoCollection
url: '/db/thang.type'
model: ThangType
model: ThangType
fetchHeroes: ->
@fetch {
url: '/db/thang.type?view=heroes'
}

View file

@ -82,8 +82,8 @@ module.exports = ModuleLoader = class ModuleLoader extends CocoClass
# a module and its dependencies have loaded!
if @queue.progress is 1
@recentPaths.sort()
console.debug @recentPaths.join('\n')
console.debug 'loaded', @recentPaths.length, 'files,', parseInt(@recentLoadedBytes/1024), 'KB'
# console.debug @recentPaths.join('\n')
# console.debug 'loaded', @recentPaths.length, 'files,', parseInt(@recentLoadedBytes/1024), 'KB'
@trigger 'load-complete'
@trigger 'loaded', e.item

View file

@ -239,6 +239,12 @@ particleKinds['level-dungeon-replayable'] = particleKinds['level-dungeon-replaya
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-dungeon-game-dev'] = particleKinds['level-dungeon-game-dev-premium'] = ext particleKinds['level-dungeon-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-dungeon-premium-item'] = ext particleKinds['level-dungeon-gate'],
emitter:
particleCount: 2000
@ -288,6 +294,12 @@ particleKinds['level-forest-replayable'] = particleKinds['level-forest-replayabl
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-forest-game-dev'] = particleKinds['level-forest-game-dev-premium'] = ext particleKinds['level-forest-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-forest-premium-item'] = ext particleKinds['level-forest-gate'],
emitter:
particleCount: 2000
@ -337,6 +349,12 @@ particleKinds['level-desert-replayable'] = particleKinds['level-desert-replayabl
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-desert-game-dev'] = particleKinds['level-desert-game-dev-premium'] = ext particleKinds['level-desert-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-mountain-premium-hero'] = ext particleKinds['level-mountain-premium'],
emitter:
particleCount: 200
@ -371,6 +389,12 @@ particleKinds['level-mountain-replayable'] = particleKinds['level-mountain-repla
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-mountain-game-dev'] = particleKinds['level-mountain-game-dev-premium'] = ext particleKinds['level-mountain-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-glacier-premium-hero'] = ext particleKinds['level-glacier-premium'],
emitter:
particleCount: 200
@ -405,6 +429,12 @@ particleKinds['level-glacier-replayable'] = particleKinds['level-glacier-replaya
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-glacier-game-dev'] = particleKinds['level-glacier-game-dev-premium'] = ext particleKinds['level-glacier-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3
particleKinds['level-volcano-premium-hero'] = ext particleKinds['level-volcano-premium'],
emitter:
particleCount: 200
@ -438,3 +468,9 @@ particleKinds['level-volcano-replayable'] = particleKinds['level-volcano-replaya
colorStart: hsl 0.17, 0.75, 0.7
colorMiddle: hsl 0.17, 0.75, 0.5
colorEnd: hsl 0.17, 0.75, 0.3
particleKinds['level-volcano-game-dev'] = particleKinds['level-volcano-game-dev-premium'] = ext particleKinds['level-volcano-hero-ladder'],
emitter:
colorStart: hsl 0.7, 0.75, 0.7
colorMiddle: hsl 0.7, 0.75, 0.5
colorEnd: hsl 0.7, 0.75, 0.3

View file

@ -69,15 +69,15 @@ module.exports = class CocoRouter extends Backbone.Router
'contribute/diplomat': go('contribute/DiplomatView')
'contribute/scribe': go('contribute/ScribeView')
'courses': go('courses/CoursesView') # , { studentsOnly: true }) # TODO: Enforce after session-less play for teachers
'Courses': go('courses/CoursesView') # , { studentsOnly: true })
'courses': go('courses/CoursesView')
'Courses': go('courses/CoursesView')
'courses/students': redirect('/courses')
'courses/teachers': redirect('/teachers/classes')
'courses/purchase': redirect('/teachers/licenses')
'courses/enroll(/:courseID)': redirect('/teachers/licenses')
'courses/update-account': go('courses/CoursesUpdateAccountView')
'courses/:classroomID': go('courses/ClassroomView') #, { studentsOnly: true })
'courses/:courseID/:courseInstanceID': go('courses/CourseDetailsView')
'courses/:classroomID': go('courses/ClassroomView', { studentsOnly: true })
'courses/:courseID/:courseInstanceID': go('courses/CourseDetailsView', { studentsOnly: true })
'db/*path': 'routeToServer'
'demo(/*subpath)': go('DemoView')
@ -142,14 +142,14 @@ module.exports = class CocoRouter extends Backbone.Router
'SEEN': go('NewHomeView')
'teachers': redirect('/teachers/classes')
'teachers/classes': go('courses/TeacherClassesView') #, { teachersOnly: true })
'teachers/classes/:classroomID': go('courses/TeacherClassView') #, { teachersOnly: true })
'teachers/classes': go('courses/TeacherClassesView', { teachersOnly: true })
'teachers/classes/:classroomID': go('courses/TeacherClassView', { teachersOnly: true })
'teachers/courses': go('courses/TeacherCoursesView')
'teachers/demo': go('teachers/RequestQuoteView')
'teachers/enrollments': redirect('/teachers/licenses')
'teachers/licenses': go('courses/EnrollmentsView') #, { teachersOnly: true })
'teachers/licenses': go('courses/EnrollmentsView', { teachersOnly: true })
'teachers/freetrial': go('teachers/RequestQuoteView')
'teachers/quote': go('teachers/RequestQuoteView')
'teachers/quote': redirect('/teachers/demo')
'teachers/signup': ->
return @routeDirectly('teachers/CreateTeacherAccountView', []) if me.isAnonymous()
@navigate('/teachers/update-account', {trigger: true, replace: true})
@ -172,9 +172,9 @@ module.exports = class CocoRouter extends Backbone.Router
@navigate e, {trigger: true}
routeDirectly: (path, args=[], options={}) ->
if options.teachersOnly and not me.isTeacher()
if options.teachersOnly and not (me.isTeacher() or me.isAdmin())
return @routeDirectly('teachers/RestrictedToTeachersView')
if options.studentsOnly and me.isTeacher()
if options.studentsOnly and not (me.isStudent() or me.isAdmin())
return @routeDirectly('courses/RestrictedToStudentsView')
leavingMessage = _.result(window.currentView, 'onLeaveMessage')
if leavingMessage

View file

@ -95,9 +95,13 @@ module.exports = class Tracker extends CocoClass
analytics.identify me.id, traits
trackPageView: (includeIntegrations=[]) ->
includeMixpanel = (name) ->
mixpanelIncludes = ['', 'schools', 'play', 'play/level/dungeons-of-kithgard']
name in mixpanelIncludes or /courses|students|teachers/ig.test(name)
name = Backbone.history.getFragment()
url = "/#{name}"
console.log "Would track analytics pageview: #{url}" if debugAnalytics
console.log "Would track analytics pageview: #{url} Mixpanel=#{includeMixpanel(name)}" if debugAnalytics
@trackEventInternal 'Pageview', url: name unless me?.isAdmin() and @isProduction
return unless @isProduction and not me.isAdmin()
@ -106,8 +110,7 @@ module.exports = class Tracker extends CocoClass
ga? 'send', 'pageview', url
# Mixpanel
mixpanelIncludes = ['', 'courses', 'courses/purchase', 'courses/teachers', 'courses/students', 'schools', 'teachers', 'teachers/freetrial', 'teachers/quote', 'play', 'play/level/dungeons-of-kithgard']
mixpanel.track('page viewed', 'page name' : name, url : url) if name in mixpanelIncludes
mixpanel.track('page viewed', 'page name' : name, url : url) if includeMixpanel(name)
if me.isTeacher() and @segmentLoaded
options = {}
@ -162,22 +165,13 @@ module.exports = class Tracker extends CocoClass
properties[key] = value for key, value of @explicitTraits if @explicitTraits?
console.log 'Tracking internal analytics event:', event, properties if debugAnalytics
if @isProduction
eventObject = {}
eventObject["event"] = event
eventObject["properties"] = properties unless _.isEmpty properties
eventObject["user"] = me.id
dataToSend = JSON.stringify eventObject
# console.log dataToSend if debugAnalytics
$.post("#{window.location.protocol or 'http:'}//analytics.codecombat.com/analytics", dataToSend).fail ->
console.error "Analytics post failed!"
else
request = @supermodel.addRequestResource {
url: '/db/analytics.log.event/-/log_event'
data: {event: event, properties: properties}
method: 'POST'
}, 0
request.load()
request = @supermodel.addRequestResource {
url: '/db/analytics.log.event/-/log_event'
data: {event: event, properties: properties}
method: 'POST'
}, 0
request.load()
trackTiming: (duration, category, variable, label) ->
# https://developers.google.com/analytics/devguides/collection/analyticsjs/user-timings

View file

@ -14,40 +14,6 @@ init = ->
Backbone.listenTo me, 'sync', -> Backbone.Mediator.publish('auth:me-synced', me: me)
module.exports.createUser = (userObject, failure=backboneFailure, nextURL=null) ->
user = new User(userObject)
user.notyErrors = false
user.save({}, {
error: (model, jqxhr, options) ->
error = parseServerError(jqxhr.responseText)
property = error.property if error.property
if jqxhr.status is 409 and property is 'name'
anonUserObject = _.omit(userObject, 'name')
module.exports.createUser anonUserObject, failure, nextURL
else
genericFailure(jqxhr)
success: -> if nextURL then window.location.href = nextURL else window.location.reload()
})
module.exports.createUserWithoutReload = (userObject, failure=backboneFailure) ->
user = new User(userObject)
user.save({}, {
error: failure
success: ->
Backbone.Mediator.publish('created-user-without-reload')
})
module.exports.loginUser = (userObject, failure=genericFailure, nextURL=null) ->
console.log 'logging in as', userObject.email
jqxhr = $.post('/auth/login',
{
username: userObject.email,
password: userObject.password
},
(model) -> if nextURL then window.location.href = nextURL else window.location.reload()
)
jqxhr.fail(failure)
module.exports.logoutUser = ->
# TODO: Refactor to use User.logout
FB?.logout?()

View file

@ -259,8 +259,11 @@ module.exports.filterMarkdownCodeLanguages = (text, language) ->
return '' unless text
currentLanguage = language or me.get('aceConfig')?.language or 'python'
excludedLanguages = _.without ['javascript', 'python', 'coffeescript', 'clojure', 'lua', 'java', 'io'], currentLanguage
exclusionRegex = new RegExp "```(#{excludedLanguages.join('|')})\n[^`]+```\n?", 'gm'
text.replace exclusionRegex, ''
# Exclude language-specific code blocks like ```python (... code ...)``` for each non-target language.
codeBlockExclusionRegex = new RegExp "```(#{excludedLanguages.join('|')})\n[^`]+```\n?", 'gm'
# Exclude language-specific images like ![python - image description](image url) for each non-target language.
imageExclusionRegex = new RegExp "!\\[(#{excludedLanguages.join('|')}) - .+?\\]\\(.+?\\)\n?", 'gm'
return text.replace(codeBlockExclusionRegex, '').replace(imageExclusionRegex, '')
module.exports.aceEditModes = aceEditModes =
'javascript': 'ace/mode/javascript'

View file

@ -40,6 +40,7 @@ module.exports = class LevelLoader extends CocoClass
@worldNecessities = []
@listenTo @supermodel, 'resource-loaded', @onWorldNecessityLoaded
@listenTo @supermodel, 'failed', @onWorldNecessityLoadFailed
@loadLevel()
@loadAudio()
@playJingle()
@ -110,7 +111,7 @@ module.exports = class LevelLoader extends CocoClass
@loadDependenciesForSession @session
loadSession: ->
if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop']
if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course']
@sessionDependenciesRegistered = {}
if @sessionID
@ -122,7 +123,7 @@ module.exports = class LevelLoader extends CocoClass
url += "?course=#{@courseID}" if @courseID
session = new LevelSession().setURL url
session.project = ['creator', 'team', 'heroConfig', 'codeLanguage', 'submittedCodeLanguage', 'state'] if @headless
session.project = ['creator', 'team', 'heroConfig', 'codeLanguage', 'submittedCodeLanguage', 'state', 'submittedCode'] if @headless
@sessionResource = @supermodel.loadModel(session, 'level_session', {cache: false})
@session = @sessionResource.model
if @opponentSessionID
@ -146,6 +147,7 @@ module.exports = class LevelLoader extends CocoClass
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
loadDependenciesForSession: (session) ->
console.log "Loading dependencies for session: ", session
if me.id isnt session.get 'creator'
session.patch = session.save = -> console.error "Not saving session, since we didn't create it."
else if codeLanguage = utils.getQueryVariable 'codeLanguage'
@ -168,6 +170,16 @@ module.exports = class LevelLoader extends CocoClass
@consolidateFlagHistory() if @opponentSession?.loaded
else if session is @opponentSession
@consolidateFlagHistory() if @session.loaded
if @level.get('type', true) in ['course'] # course-ladder is hard to handle because there's 2 sessions
heroConfig = me.get('heroConfig')
console.log "Course mode, loading custom hero: ", heroConfig
return if not heroConfig
url = "/db/thang.type/#{heroConfig.thangType}/version"
if heroResource = @maybeLoadURL(url, ThangType, 'thang')
console.log "Pushing resource: ", heroResource
@worldNecessities.push heroResource
@sessionDependenciesRegistered[session.id] = true
return
return unless @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop']
heroConfig = session.get('heroConfig')
heroConfig ?= me.get('heroConfig') if session is @session and not @headless
@ -322,6 +334,9 @@ module.exports = class LevelLoader extends CocoClass
@worldNecessities = (r for r in @worldNecessities when r?)
@onWorldNecessitiesLoaded() if @checkAllWorldNecessitiesRegisteredAndLoaded()
onWorldNecessityLoadFailed: (resource) ->
@trigger('world-necessity-load-failed', resource: resource)
checkAllWorldNecessitiesRegisteredAndLoaded: ->
return false unless _.filter(@worldNecessities).length is 0
return false unless @thangNamesLoaded
@ -330,6 +345,7 @@ module.exports = class LevelLoader extends CocoClass
true
onWorldNecessitiesLoaded: ->
console.log "World necessities loaded."
@initWorld()
@supermodel.clearMaxProgress()
@trigger 'world-necessities-loaded'

View file

@ -156,6 +156,8 @@ module.exports =
courseProgress[levelID][userID] = { completed: true, started: false } # These don't matter, will always be set
session = _.find classroom.sessions.models, (session) ->
session.get('creator') is userID and session.get('level').original is levelID
courseProgress[levelID][userID].session = session
if not session # haven't gotten to this level yet, but might have completed others before
courseProgress.started ||= false #no-op

View file

@ -57,11 +57,11 @@ module.exports = class CountdownScreen extends CocoClass
else
@endCountdown()
hide: ->
hide: (duration=500) ->
return unless @showing
@showing = false
createjs.Tween.removeTweens @dimLayer
createjs.Tween.get(@dimLayer).to({alpha: 0}, 500).call => @layer.removeChild @dimLayer unless @destroyed
createjs.Tween.get(@dimLayer).to({alpha: 0}, duration).call => @layer.removeChild @dimLayer unless @destroyed
decrementCountdown: =>
return if @destroyed
@ -85,4 +85,4 @@ module.exports = class CountdownScreen extends CocoClass
onRealTimePlaybackEnded: (e) ->
clearInterval @countdownInterval if @countdownInterval
@countdownInterval = null
@hide()
@hide Math.max(500, 1000 * (@secondsRemaining or 0))

View file

@ -74,16 +74,16 @@ module.exports = class Label extends CocoClass
o.marginY = {D: 6, S: 4, N: 3}[st]
o.fontWeight = {D: 'bold', S: 'bold', N: 'bold'}[st]
o.shadow = {D: false, S: true, N: true}[st]
o.shadowColor = {D: '#FFF', S: '#000', N: '#FFF'}[st]
o.shadowColor = {D: '#FFF', S: '#000', N: '#000'}[st]
o.fontSize = {D: 25, S: 12, N: 24}[st]
fontFamily = {D: 'Arial', S: 'Arial', N: 'Arial'}[st]
o.fontDescriptor = "#{o.fontWeight} #{o.fontSize}px #{fontFamily}"
o.fontColor = {D: '#000', S: '#FFF', N: '#0a0'}[st]
o.fontColor = {D: '#000', S: '#FFF', N: '#6c6'}[st]
if @style is 'name' and @sprite?.thang?.team is 'humans'
o.fontColor = '#a00'
o.fontColor = '#c66'
else if @style is 'name' and @sprite?.thang?.team is 'ogres'
o.fontColor = '#00a'
o.backgroundFillColor = {D: 'white', S: 'rgba(0,0,0,0.4)', N: 'rgba(255,255,255,0.5)'}[st]
o.fontColor = '#66c'
o.backgroundFillColor = {D: 'white', S: 'rgba(0,0,0,0.4)', N: 'rgba(0,0,0,0.7)'}[st]
o.backgroundStrokeColor = {D: 'black', S: 'rgba(0,0,0,0.6)', N: 'rgba(0,0,0,0)'}[st]
o.backgroundStrokeStyle = {D: 2, S: 1, N: 1}[st]
o.backgroundBorderRadius = {D: 10, S: 3, N: 3}[st]

View file

@ -3,6 +3,7 @@ module.exports.thangNames = thangNames =
# Female
'Alali'
'Anabel'
'Delma'
'Dosha'
'Gurzunn'
'Hoot'
@ -22,6 +23,7 @@ module.exports.thangNames = thangNames =
# Male
'Blob'
'Brack'
'Cragg'
'Dobo'
'Draff'
'Eugen'
@ -72,6 +74,7 @@ module.exports.thangNames = thangNames =
'Pinakin'
'Rakash'
'Rasha'
'Savatha'
'Vujii'
'Wuda'
'Yetu'
@ -108,6 +111,7 @@ module.exports.thangNames = thangNames =
]
'Ogre Warlock': [
# Male
'Gronak'
'Sorgoth'
'Vax'
'Vyrryx'
@ -145,31 +149,14 @@ module.exports.thangNames = thangNames =
'Ofgar'
'Randall'
]
'Raven Pet': [
# Animal
'Nevermore'
]
'Cougar Pet': [
# Animal
'Kitty'
]
'Frog Pet': [
# Animal
'Bighead'
'Bufo'
'Bunda'
'Dan\'l Webster'
'Freddy'
'Frogger'
'Froggy'
'Hypnotoad'
'Mr. Toad'
'Slippy'
'Toada'
'Trevor'
'Wart'
'Wei Qi'
]
# Pets only have one name
'Raven Pet': ['Nevermore']
'Cougar Pet': ['Kitty']
'Frog Pet': ['Hypnotoad']
'Griffin Pet': ['']
'Pugicorn Pet': ['']
'Polar Bear Pet': ['']
'Wolf Pet': ['']
'Horse': [
# Animal
'Abby'
@ -606,6 +593,7 @@ module.exports.thangNames = thangNames =
'Hugo'
'Ieyasu'
'Jack'
'Jackson'
'James'
'Jason'
'Jax'

View file

@ -108,7 +108,7 @@ module.exports = class ThangState
storage = @trackedPropertyValues[propIndex]
value = @getStoredProp propIndex, type, storage
if prop is 'pos'
if @thang.teleport and @thang.pos.distanceSquared(value) > 900
if (@thang.teleport and @thang.pos.distanceSquared(value) > 900) or (@thang.pos.x is 0 and @thang.pos.y is 0)
# Don't interpolate; it was probably a teleport. https://github.com/codecombat/codecombat/issues/738
@thang.pos = value
else

View file

@ -5,14 +5,14 @@ class Vector
for name in ['add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate']
do (name) ->
Vector[name] = (a, b, useZ) ->
a.copy()["#{name}Self"](b, useZ)
a.copy()[name](b, useZ)
for name in ['magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared']
do (name) ->
Vector[name] = (a, b, useZ) ->
a[name](b, useZ)
isVector: true
apiProperties: ['x', 'y', 'z', 'magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared', 'rotate', 'add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate']
apiProperties: ['x', 'y', 'z', 'magnitude', 'heading', 'distance', 'dot', 'equals', 'copy', 'distanceSquared', 'add', 'subtract', 'multiply', 'divide', 'limit', 'normalize', 'rotate']
constructor: (x=0, y=0, z=0) ->
return new Vector x, y, z unless @ instanceof Vector
@ -24,68 +24,67 @@ class Vector
# Mutating methods:
normalizeSelf: (useZ) ->
normalize: (useZ) ->
m = @magnitude useZ
@divideSelf m, useZ if m > 0
@divide m, useZ if m > 0
@
normalize: (useZ) ->
# Hack to detect when we are in player code so we can avoid mutation
(if @__aetherAPIValue? then @copy() else @).normalizeSelf(useZ)
esper_normalize: (useZ) ->
@copy().normalize(useZ)
limitSelf: (max) ->
limit: (max) ->
if @magnitude() > max
@normalizeSelf()
@multiplySelf(max)
@normalize()
@multiply(max)
else
@
limit: (useZ) ->
(if @__aetherAPIValue? then @copy() else @).limitSelf(useZ)
esper_limit: (max) ->
@copy().limit(max)
subtractSelf: (other, useZ) ->
subtract: (other, useZ) ->
@x -= other.x
@y -= other.y
@z -= other.z if useZ
@
subtract: (other, useZ) ->
(if @__aetherAPIValue? then @copy() else @).subtractSelf(other, useZ)
esper_subtract: (other, useZ) ->
@copy().subtract(other, useZ)
addSelf: (other, useZ) ->
add: (other, useZ) ->
@x += other.x
@y += other.y
@z += other.z if useZ
@
add: (other, useZ) ->
(if @__aetherAPIValue? then @copy() else @).addSelf(other, useZ)
esper_add: (other, useZ) ->
@copy().add(other, useZ)
divideSelf: (n, useZ) ->
divide: (n, useZ) ->
[@x, @y] = [@x / n, @y / n]
@z = @z / n if useZ
@
divide: (n, useZ) ->
(if @__aetherAPIValue? then @copy() else @).divideSelf(n, useZ)
esper_divide: (n, useZ) ->
@copy().divide(n, useZ)
multiplySelf: (n, useZ) ->
multiply: (n, useZ) ->
[@x, @y] = [@x * n, @y * n]
@z = @z * n if useZ
@
multiply: (n, useZ) ->
(if @__aetherAPIValue? then @copy() else @).multiplySelf(n, useZ)
esper_multiply: (n, useZ) ->
@copy().multiply(n, useZ)
# Rotate it around the origin
# If we ever want to make this also use z: https://en.wikipedia.org/wiki/Axes_conventions
rotateSelf: (theta) ->
rotate: (theta) ->
return @ unless theta
[@x, @y] = [Math.cos(theta) * @x - Math.sin(theta) * @y, Math.sin(theta) * @x + Math.cos(theta) * @y]
@
rotate: (theta) ->
(if @__aetherAPIValue? then @copy() else @).rotateSelf(theta)
esper_rotate: (theta) ->
@copy().rotate(theta)
# Non-mutating methods:
@ -127,7 +126,7 @@ class Vector
# Not the strict projection, the other isn't converted to a unit vector first.
projectOnto: (other, useZ) ->
other.copy().multiplySelf(@dot(other, useZ), useZ)
other.copy().multiply(@dot(other, useZ), useZ)
isZero: (useZ) ->
result = @x is 0 and @y is 0

View file

@ -364,8 +364,8 @@ module.exports = class World
endFrame = @frames.length
#console.log "... world serializing frames from", startFrame, "to", endFrame, "of", @totalFrames
[transferableObjects, nontransferableObjects] = [0, 0]
delete flag.processed for flag in @flagHistory
o = {totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}, trackedProperties: {}, flagHistory: @flagHistory, difficulty: @difficulty, scores: @getScores(), randomSeed: @randomSeed, picoCTFFlag: @picoCTFFlag}
serializedFlagHistory = (_.omit(_.clone(flag), 'processed') for flag in @flagHistory)
o = {totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}, trackedProperties: {}, flagHistory: serializedFlagHistory, difficulty: @difficulty, scores: @getScores(), randomSeed: @randomSeed, picoCTFFlag: @picoCTFFlag}
o.trackedProperties[prop] = @[prop] for prop in @trackedProperties or []
for thangID, methods of @userCodeMap

View file

@ -4,7 +4,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
no_ie: "CodeCombat läuft nicht im IE8 oder älteren Browsern. Tut uns Leid!" # Warning that only shows up in IE8 and older
no_mobile: "CodeCombat ist nicht für Mobilgeräte optimiert und funktioniert möglicherweise nicht." # Warning that shows up on mobile devices
play: "Spielen" # The big play button that opens up the campaign view.
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses
play_campaign_version: "Spiele Kampagnen Version" # Shows up under big play button if you only play /courses
old_browser: "Oh! Dein Browser ist zu alt für CodeCombat. Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Du kannst es trotzdem versuchen, aber es wird wahrscheinlich nicht funktionieren."
ipad_browser: "Schlechte Nachricht: CodeCombat funktioniert im iPad-Browser nicht. Gute Nachricht: Unsere iPad App wartet auf das OK von Apple."
@ -97,12 +97,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
nav:
play: "Spielen" # The top nav bar entry where players choose which levels to play
community: "Community"
# courses: "Courses"
courses: "Kurse"
editor: "Editor"
blog: "Blog"
forum: "Forum"
account: "Account"
# my_account: "My Account"
my_account: "Mein Account"
profile: "Profil"
stats: "Statistiken"
code: "Code"
@ -112,24 +112,24 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
about: "Über"
contact: "Kontakt"
twitter_follow: "Twitter"
# students: "Students"
students: "Studenten"
teachers: "Lehrer"
# careers: "Careers"
# facebook: "Facebook"
# twitter: "Twitter"
# create_a_class: "Create a Class"
# other: "Other"
# learn_to_code: "Learn to Code!"
# toggle_nav: "Toggle navigation"
# jobs: "Jobs"
# schools: "Schools"
# educator_wiki: "Educator Wiki"
# get_involved: "Get Involved"
# open_source: "Open source (GitHub)"
# support: "Support"
# faqs: "FAQs"
# help_pref: "Need help? Email"
# help_suff: "and we'll get in touch!"
careers: "Berufe"
facebook: "Facebook"
twitter: "Twitter"
create_a_class: "Erstelle eine Klasse"
other: "Andere"
learn_to_code: "Lerne zu programmieren!"
toggle_nav: "Navigation umschalten"
jobs: "Jobs"
schools: "Schule"
educator_wiki: "Educator Wiki"
get_involved: "Werde eingebunden"
open_source: "Open source (GitHub)"
support: "Support"
faqs: "FAQs"
help_pref: "Brauchst du Hilfe? Email"
help_suff: "und wir treten in Kontakt!"
modal:
close: "Schließen"
@ -148,18 +148,18 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
play:
play_as: "Spiele als " # Ladder page
# compete: "Compete!" # Course details page
compete: "Abgeschlossen!" # Course details page
spectate: "Zuschauen" # Ladder page
players: "Spieler" # Hover over a level on /play
hours_played: "Stunden gespielt" # Hover over a level on /play
items: "Gegenstände" # Tooltip on item shop button from /play
# unlock: "Unlock" # For purchasing items and heroes
unlock: "Kaufen" # For purchasing items and heroes
confirm: "Bestätigen"
# owned: "Owned" # For items you own
owned: "bereits im Besitz" # For items you own
locked: "Gesperrt"
# purchasable: "Purchasable" # For a hero you unlocked but haven't purchased
purchasable: "Erhältlich" # For a hero you unlocked but haven't purchased
available: "Verfügbar"
# skills_granted: "Skills Granted" # Property documentation details
skills_granted: "Freischaltbare Fähigkeiten" # Property documentation details
heroes: "Helden" # Tooltip on hero shop button from /play
achievements: "Erfolge" # Tooltip on achievement list button from /play
account: "Account" # Tooltip on account button from /play
@ -168,69 +168,69 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
next: "Weiter" # Go from choose hero to choose inventory before playing a level
change_hero: "Held wechseln" # Go back from choose inventory to choose hero
buy_gems: "Juwelen kaufen"
# subscription_required: "Subscription Required"
subscription_required: "Abonnement benötigt"
anonymous: "Anonymer Spieler"
level_difficulty: "Schwierigkeit: "
# play_classroom_version: "Play Classroom Version" # Choose a level in campaign version that you also can play in one of your courses
play_classroom_version: "Spiele Kurs Version" # Choose a level in campaign version that you also can play in one of your courses
campaign_beginner: "Anfängerkampagne"
# awaiting_levels_adventurer_prefix: "We release new levels every week."
# awaiting_levels_adventurer: "Sign up as an Adventurer"
# awaiting_levels_adventurer_suffix: "to be the first to play new levels."
# adjust_volume: "Adjust volume"
awaiting_levels_adventurer_prefix: "Wir veröffentlichen wöchentlichen neu Levels."
awaiting_levels_adventurer: "Melde dich als Abenteuerer an"
awaiting_levels_adventurer_suffix: "um der erste zu sein der neue Levels spielt."
adjust_volume: "Lautstärke anpassen"
campaign_multiplayer: "Multiplayerarena"
campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas"
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
campaign_old_multiplayer: "(Veraltet) Alte Multiplayer Arenen"
campaign_old_multiplayer_description: "Relikte eines zivilisierteren Zeitalters. Es werden keine Simulationen für diese älteren, heldenlosen Mehrspieler Arenen durchgeführt."
# code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "else if"
# while: "while"
# loop: "loop"
# for: "for"
# break: "break"
# continue: "continue"
# pass: "pass"
# return: "return"
# then: "then"
# do: "do"
# end: "end"
# function: "function"
# def: "define"
# var: "variable"
# self: "self"
# hero: "hero"
# this: "this"
# or: "or"
# "||": "or"
# and: "and"
# "&&": "and"
# not: "not"
# "!": "not"
# "=": "assign"
# "==": "equals"
# "===": "strictly equals"
# "!=": "does not equal"
# "!==": "does not strictly equal"
# ">": "is greater than"
# ">=": "is greater than or equal"
# "<": "is less than"
# "<=": "is less than or equal"
# "*": "multiplied by"
# "/": "divided by"
# "+": "plus"
# "-": "minus"
# "+=": "add and assign"
# "-=": "subtract and assign"
# True: "True"
# true: "true"
# False: "False"
# false: "false"
# undefined: "undefined"
# null: "null"
# nil: "nil"
# None: "None"
code:
if: "wenn" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
else: "sonst"
elif: "sonst wenn"
while: "so lange"
loop: "schleife"
for: "r"
break: "pause"
continue: "fortsetzen"
pass: "bestehen"
return: "zurückgeben"
then: "dann"
do: "mache"
end: "ende"
function: "funktion"
def: "definiere"
var: "variable"
self: "selbst"
hero: "held"
this: "dies"
or: "oder"
"||": "oder"
and: "und"
"&&": "und"
not: "nicht"
"!": "nicht"
"=": "zuweisen"
"==": "entspricht"
"===": "entspricht strikt"
"!=": "entspricht nicht"
"!==": "entspricht strikt nicht"
">": "ist größer als"
">=": "ist größer als oder gleich"
"<": "ist kleiner als"
"<=": "ist kleiner als oder gleich"
"*": "multipliziert um"
"/": "dividiert durch"
"+": "plus"
"-": "minus"
"+=": "addieren und zuweisen"
"-=": "subtrahieren und zuweisen"
True: "Wahr"
true: "wahr"
False: "Falsch"
false: "falsch"
undefined: "undefiniert"
null: "nichts"
nil: "nichts"
None: "Kein"
# share_progress_modal:
# blurb: "Youre making great progress! Tell your parent how much you've learned with CodeCombat."
@ -260,18 +260,18 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
log_in: "mit Passwort einloggen"
required: "Du musst dich vorher einloggen um dort hin zu gehen."
login_switch: "Du hast bereits einen Account?"
# school_name: "School Name and City"
# optional: "optional"
# school_name_placeholder: "Example High School, Springfield, IL"
# or_sign_up_with: "or sign up with"
# connected_gplus_header: "You've successfully connected with Google+!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account."
# gplus_exists: "You already have an account associated with Google+!"
# connected_facebook_header: "You've successfully connected with Facebook!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account."
# facebook_exists: "You already have an account associated with Facebook!"
# hey_students: "Students, enter the class code from your teacher."
# birthday: "Birthday"
school_name: "Schulname und Stadt"
optional: "Optional"
school_name_placeholder: "Beispiel Schule, Springfield, IL"
or_sign_up_with: "oder melde dich an mit"
connected_gplus_header: "Du hast dich erfolgreich über Google+ verbunden!"
connected_gplus_p: "Vervollständige die Anmeldung um dich mit deinem Google+ Account anzumelden."
gplus_exists: "Du hast bereits einen verknüpften Google+ Account!"
connected_facebook_header: "Du hast dich erfolgreich über Facebook verbunden!"
connected_facebook_p: "Vervollständige die Anmeldung um dich mit deinem Facebook Account anzumelden."
facebook_exists: "Du hast bereits einen verknüpften Facebook Account!"
hey_students: "Schüler, gebt den Klassencode eures Lehrers ein."
birthday: "Geburstag"
recover:
recover_account_title: "Account Wiederherstellung"
@ -316,23 +316,23 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
date: "Datum"
body: "Inhalt"
version: "Version"
# pending: "Pending"
# accepted: "Accepted"
# rejected: "Rejected"
# withdrawn: "Withdrawn"
# accept: "Accept"
# reject: "Reject"
# withdraw: "Withdraw"
pending: "Ausstehend"
accepted: "Akzeptiert"
rejected: "Abgelehnt"
withdrawn: "Zurückgezogen"
accept: "Akzeptieren"
reject: "Abgelehnen"
withdraw: "Zurückziehen"
submitter: "Veröffentlicher"
submitted: "Veröffentlicht"
commit_msg: "Nachricht absenden"
version_history: "Versionshistorie"
version_history_for: "Versionsgeschichte für: "
# select_changes: "Select two changes below to see the difference."
# undo_prefix: "Undo"
# undo_shortcut: "(Ctrl+Z)"
# redo_prefix: "Redo"
# redo_shortcut: "(Ctrl+Shift+Z)"
select_changes: "Wählen zwei Änderungen unterhalb um den Unterschied zu sehen."
undo_prefix: "Rückgängig"
undo_shortcut: "(Strg+Z)"
redo_prefix: "Wiederherstellen"
redo_shortcut: "(Strg+Umschalt+Z)"
play_preview: "Vorschau vom aktuellen Level spielen"
result: "Ergebnis"
results: "Ergebnisse"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
subject: "Betreff"
email: "Email"
password: "Passwort"
# confirm_password: "Confirm Password"
confirm_password: "Passwort bestätigen"
message: "Nachricht"
code: "Code"
ladder: "Rangliste"
@ -357,12 +357,12 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
hard: "Schwer"
player: "Spieler"
player_level: "Spielerlevel" # Like player level 5, not like level: Dungeons of Kithgard
# warrior: "Warrior"
# ranger: "Ranger"
# wizard: "Wizard"
# first_name: "First Name"
# last_name: "Last Name"
# username: "Username"
warrior: "Krieger"
ranger: "ger"
wizard: "Hexer"
first_name: "Vorname"
last_name: "Nachname"
username: "Benutzername"
units:
second: "Sekunde"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
license: "Lizenz"
oreilly: "Ebook deiner Wahl"
# calendar:
# year: "Year"
# day: "Day"
# month: "Month"
# january: "January"
# february: "February"
# march: "March"
# april: "April"
# may: "May"
# june: "June"
# july: "July"
# august: "August"
# september: "September"
# october: "October"
# november: "November"
# december: "December"
calendar:
year: "Jahr"
day: "Tag"
month: "Monat"
january: "Januar"
february: "Februar"
march: "März"
april: "April"
may: "Mai"
june: "Juni"
july: "Juli"
august: "August"
september: "September"
october: "Oktober"
november: "November"
december: "Dezember"

View file

@ -243,6 +243,7 @@
login:
sign_up: "Create Account"
email_or_username: "Email or username"
log_in: "Log In"
logging_in: "Logging In"
log_out: "Log Out"
@ -439,6 +440,8 @@
tome_available_spells: "Available Spells"
tome_your_skills: "Your Skills"
tome_current_method: "Current Method"
hints: "Hints"
hints_title: "Hint {{number}}"
code_saved: "Code Saved"
skip_tutorial: "Skip (esc)"
keyboard_shortcuts: "Key Shortcuts"
@ -711,9 +714,6 @@
music_label: "Music"
music_description: "Turn background music on/off."
editor_config_title: "Editor Configuration"
editor_config_keybindings_label: "Key Bindings"
editor_config_keybindings_default: "Default (Ace)"
editor_config_keybindings_description: "Adds additional shortcuts known from the common editors."
editor_config_livecompletion_label: "Live Autocompletion"
editor_config_livecompletion_description: "Displays autocomplete suggestions while typing."
editor_config_invisibles_label: "Show Invisibles"
@ -1279,7 +1279,8 @@
student_age_range_to: "to"
create_class: "Create Class"
class_name: "Class Name"
teacher_account_restricted: "Your account is a teacher account, and so cannot access student content."
teacher_account_restricted: "Your account is a teacher account and cannot access student content." # {change}
account_restricted: "A student account is required to access this page."
update_account_login_title: "Log in to update your account"
update_account_title: "Your account needs attention!"
update_account_blurb: "Before you can access your classes, choose how you want to use this account."
@ -1316,6 +1317,9 @@
sent_verification: "We've sent a verification email to:"
you_can_edit: "You can edit your email address in "
account_settings: "Account Settings"
select_your_hero: "Select Your Hero"
select_your_hero_description: "You can always change your hero by going to your Courses page and clicking \"Select Hero\""
select_this_hero: "Select this Hero"
teacher:
teacher_dashboard: "Teacher Dashboard" # Navbar
@ -1341,6 +1345,7 @@
unarchive_class: "unarchive class"
unarchive_this_class: "Unarchive this class"
no_students_yet: "This class has no students yet."
try_refreshing: "(You may need to refresh the page)"
add_students: "Add Students"
create_new_class: "Create a New Class"
class_overview: "Class Overview" # View Class page
@ -1423,6 +1428,7 @@
status_expired: "Expired on {{date}}"
status_not_enrolled: "Not Enrolled"
status_enrolled: "Expires on {{date}}"
select_all: "Select All"
classes:
archmage_title: "Archmage"

View file

@ -27,7 +27,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
classroom_in_a_box: "Un aula prediseñada para enseñar informática."
codecombat_is: "CodeCombat es una plataforma para que los estudiantes aprendan informática mientras están jugando un juego de verdad." # {change}
our_courses: "Nuestros cursos fueron probados especificamente para destacarse en el aula, incluso con maestros con poca o ninguna experiencia previa en programación." # {change}
# top_screenshots_hint: "Students write code and see their changes update in real-time"
top_screenshots_hint: "Los estudiantes escriben código y ven sus cambios actualizarse en tiempo real"
designed_with: "Diseñado teniendo en cuenta a los maestros"
real_code: "Escritura real de código"
from_the_first_level: "desde el primer nivel"
@ -57,12 +57,12 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
real_game: "Un juego de verdad, jugado con código auténtico."
great_game: "Un gran juego es más que solo medallas y logros - se trata sobre una travesía del jugador, acertijos bien diseñados, y la habilidad de abordar desafios con voluntad y confianza."
agency: "CodeCombat es un juego que ofrece a los jugadores esa voluntad y confianza mediante nuestro motor de código robusto, que ayuda tanto a principiantes como a estudiantes avanzados por igual a escribir código correcto y válido."
# request_demo_title: "Get your students started today!"
# request_demo_title: "Get your students started hoy!"
# request_demo_subtitle: "Request a demo and get your students started in less than an hour."
# get_started_title: "Set up your class today"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science."
get_started_title: "Configure su clase hoy"
# get_started_subtitle: "Configure a class, add your students, and monitor their progress as they learn computer science."
request_demo: "Solicitar un Demo"
# setup_a_class: "Set Up a Class"
setup_a_class: "Configurar una Clase"
have_an_account: "¿Ya tenes una cuenta?" # {change}
logged_in_as: "Estás actualmente conectado como"
view_my_classes: "Ver mis clases"
@ -79,10 +79,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
teachers: "Maestros!"
teachers_and_educators: "Maestros y Educadores"
# class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum."
# get_started: "Get Started"
get_started: "Iniciarse"
students: "Estudiantes:"
join_class: "Unirse a una clase"
# role: "Your role:"
role: "Su rol:"
student_count: "Número de estudiantes:"
start_playing_for_free: "Empieza a jugar gratis!"
students_and_players: "Estudiantes y Jugadores"
@ -90,7 +90,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
view_profile: "Ver mi perfíl"
view_progress: "Ver mi progreso"
check_out_wiki: "Check out our new educator Wiki"
# want_coco: "Want CodeCombat at your school?"
want_coco: "¿Quisiera CodeCombat en su escuela?"
# form_select_role: "Select primary role"
form_select_range: "Seleccione el tamaño de la clase"
@ -102,7 +102,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
blog: "Blog"
forum: "Foro"
account: "Cuenta"
# my_account: "My Account"
my_account: "Mi Cuenta"
profile: "Perfil"
stats: "Estadísticas"
code: "Código"
@ -112,7 +112,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
about: "Acerca"
contact: "Contacto"
twitter_follow: "Seguir"
# students: "Students"
students: "Estudiantes"
teachers: "Maestros"
careers: "Carreras"
facebook: "Facebook"
@ -125,9 +125,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
schools: "Escuelas"
# educator_wiki: "Educator Wiki"
get_involved: "Participa"
# open_source: "Open source (GitHub)"
# support: "Support"
# faqs: "FAQs"
open_source: "Código Libre (GitHub)"
support: "Soporte"
faqs: "FAQs"
help_pref: "¿Necesitas ayuda? Envianos un correó electronico!"
help_suff: "y te contactaremos pronto"
@ -182,7 +182,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
campaign_old_multiplayer: "(Obsoleto) Antiguas Arenas Multijugador"
campaign_old_multiplayer_description: "Reliquias de una era más civilizada. Ninguna simulación es ejecutada para estas arenas multijugador antiguas y sin héroes."
# code:
code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "else if"
@ -204,14 +204,14 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# this: "this"
# or: "or"
# "||": "or"
# and: "and"
# "&&": "and"
# not: "not"
# "!": "not"
and: "y"
"&&": "y"
not: "no"
"!": "no"
# "=": "assign"
# "==": "equals"
# "===": "strictly equals"
# "!=": "does not equal"
"==": "iguala"
"===": "iguala estrictamente"
"!=": "no iguala"
# "!==": "does not strictly equal"
# ">": "is greater than"
# ">=": "is greater than or equal"
@ -219,15 +219,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# "<=": "is less than or equal"
# "*": "multiplied by"
# "/": "divided by"
# "+": "plus"
# "-": "minus"
"+": "mas"
"-": "menos"
# "+=": "add and assign"
# "-=": "subtract and assign"
# True: "True"
# true: "true"
# False: "False"
# false: "false"
# undefined: "undefined"
True: "Verdadero"
true: "verdadero"
False: "Falso"
false: "falso"
undefined: "undefinido"
# null: "null"
# nil: "nil"
# None: "None"
@ -265,13 +265,13 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
school_name_placeholder: "Ejemplo: High School, Springfield, IL"
or_sign_up_with: "o conectate a travez de:"
connected_gplus_header: "Te haz conectado exitosamente a travez de Google+!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account."
# gplus_exists: "You already have an account associated with Google+!"
connected_gplus_p: "Termina el registro para que inicies sesión con tu cuenta de Google+."
gplus_exists: "Ya tienes asociada una cuenta con Google+!"
connected_facebook_header: "Te haz conectado exitosamente a travez de Facebook!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account."
# facebook_exists: "You already have an account associated with Facebook!"
# hey_students: "Students, enter the class code from your teacher."
# birthday: "Birthday"
connected_facebook_p: "Termina el registro para que inicies sesión con tu cuenta de Facebook."
facebook_exists: "Ya tienes asociada una cuenta Facebook!"
hey_students: "Estudiante, ingresa el coódigo de clase de tu maestro."
birthday: "Cumpleaños"
recover:
recover_account_title: "recuperar cuenta"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
subject: "Asunto"
email: "Email"
password: "Contraseña"
# confirm_password: "Confirm Password"
confirm_password: "Confirme Contraseña"
message: "Mensaje"
code: "Código"
ladder: "Escalera"
@ -425,7 +425,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
victory_new_item: "Objeto Nuevo"
victory_viking_code_school: "¡Changos macacos!, el nivel que acabas de pasar era dificil! Si todavía no eres un desarrollador de software, deberías serlo. Acabas de conseguir una aceptación por vía rápida con la Escuela Vikinga de Có, donde tú puedes llevar tus habilidades al siguiente nivel y convertirteen un desarrollador web profesional en 14 semanas."
victory_become_a_viking: "Conviértete en un Vikingo"
# victory_no_progress_for_teachers: "Progress is not saved for teachers. But, you can add a student account to your classroom for yourself."
# victory_no_progress_for_teachers: "El progreso no es guardado para maestros. But, you can add a student account to your classroom for yourself."
guide_title: "Guía"
tome_cast_button_run: "Ejecutar"
tome_cast_button_running: "Ejecutando"
@ -509,17 +509,17 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
tip_understand_recursion: "La única manera de entender la recursividad es entender la recursividad."
tip_life_and_polymorphism: "El Open Source es como una estructura heterogénea totalmente polimórfica: Todos los tipos son bienvenidos."
tip_mistakes_proof_of_trying: "Errores en tu código son solo evidencia de que estas intentando."
# tip_adding_orgres: "Rounding up ogres."
# tip_sharpening_swords: "Sharpening the swords."
# tip_adding_orgres: "Rounding up ogros."
tip_sharpening_swords: "Afilando las espadas."
# tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
# tip_nemo: "When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
# tip_nemo: "Cuando la vida gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
# tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
# tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green"
# tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green"
# tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood"
# tip_luna_lovegood: "No te preocupes, you're just as sane as I am. - Luna Lovegood"
# tip_good_idea: "The best way to have a good idea is to have a lot of ideas. - Linus Pauling"
# tip_programming_not_about_computers: "Computer Science is no more about computers than astronomy is about telescopes. - Edsger Dijkstra"
# tip_mulan: "Believe you can, then you will. - Mulan"
# tip_programming_not_about_computers: "La ciencia cpomputacional is no more about computers than astronomy is about telescopes. - Edsger Dijkstra"
tip_mulan: "Cree que puedes, y entonces lo harás. - Mulan"
game_menu:
inventory_tab: "Inventario"
@ -585,7 +585,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
feature5: "Video tutoriales"
feature6: "Soporte Premium vía email"
feature7: "<strong>Clan</strong> Privado"
# feature8: "<strong>No ads!</strong>"
feature8: "<strong>¡Sin publicidad!</strong>"
free: "Gratis"
month: "mes"
must_be_logged: "Debes iniciar sesión primero. Por favor crea una cuenta o inicia sesión desde el menú superior."
@ -676,13 +676,13 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
restricted_to_certain_heroes: "Sólo ciertos héroes pueden jugar este nivel."
skill_docs:
# function: "function" # skill types
# method: "method"
function: "función" # skill types
method: "método"
# snippet: "snippet"
# number: "number"
# array: "array"
# object: "object"
# string: "string"
number: "número"
array: "arreglo"
object: "objeto"
string: "cadena"
writable: "escribible" # Hover over "attack" in Your Skills while playing a level to see most of this
read_only: "Sólo Lectura"
action: "Acción"
@ -753,9 +753,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
robin_blurb: "Scaffolding"
josh_title: "Diseñador de Juegos"
josh_blurb: "El piso es Lava"
# phoenix_title: "Software Engineer"
# nolan_title: "Territory Manager"
# elliot_title: "Partnership Manager"
phoenix_title: "Ingeniero de Software"
nolan_title: "Administrador de territorio"
# elliot_title: "Administrador de Partnership"
retrostyle_title: "Ilustración"
retrostyle_blurb: "Juegos con estilo Retro"
jose_title: "Música"
@ -785,10 +785,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
jobs_benefit_4: "Días personales/enfermo ilimitados" # {change}
jobs_benefit_5: "Desarrollo profesional y soporte de formación continua" # {change}
jobs_benefit_6: "Seguro médico/dental/vista" # {change}
# jobs_benefit_7: "Sit-stand desks for all"
# jobs_benefit_7: "Sit-stand escritorios para todos"
# jobs_benefit_9: "10-year option exercise window"
# jobs_benefit_10: "Maternity leave: 10 weeks paid, next 6 @ 55% salary"
# jobs_benefit_11: "Paternity leave: 10 weeks paid"
# jobs_benefit_10: "Maternity leave: 10 semanas pagadas, next 6 @ 55% salary"
# jobs_benefit_11: "Paternity leave: 10 semanas pagadas"
learn_more: "Aprender Más"
jobs_custom_title: "Crear Tu Propio"
jobs_custom_description: "¿Te apasiona CodeCombat pero nos ves un puesto de trabajo que coincida con tus cualificaciones? Escríbenos y muestrenos como cree que puede contribuir a nuestro equipo. ¡Nos encantaría saber de vos!"
@ -824,10 +824,10 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
email_exists: "Existe un usuario con este email."
phone_number: "Teléfono"
phone_number_help: "¿Dónde podemos contactarte durante el horario de trabajo ?"
# primary_role_label: "Your Primary Role"
# role_default: "Select Role"
# primary_role_default: "Select Primary Role"
# purchaser_role_default: "Select Purchaser Role"
primary_role_label: "Tu Rol Primario"
role_default: "Seleccione Rol"
primary_role_default: "Seleccione Rol Primario"
# purchaser_role_default: "Seleccione Purchaser Role"
tech_coordinator: "Coordinador de tecnología"
advisor: "Tutor"
principal: "Director"
@ -835,15 +835,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
parent: "Padre"
# purchaser_role_label: "Your Purchaser Role"
# influence_advocate: "Influence/Advocate"
# evaluate_recommend: "Evaluate/Recommend"
# approve_funds: "Approve Funds"
evaluate_recommend: "Evaluar/Recomendar"
approve_funds: "Aprobar Fondos"
# no_purchaser_role: "No role in purchase decisions"
organization_label: "Escuela / Distrito"
city: "Ciudad"
state: "Estado"
country: "País"
num_students_help: "¿Cuántos prevees inscribir en CodeCombat?"
# num_students_default: "Select Range"
num_students_default: "Seleccionar Rango"
education_level_label: "Nivel Educativo de los Estudiantes"
education_level_help: "Elegí todas las que correspondan."
elementary_school: "Escuela Primaria"
@ -853,19 +853,19 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
college_plus: "Universidad o superior"
anything_else: "¿Algo más que deberíamos saber?"
thanks_header: "¡Gracias por solicitar un presupuesto!" # {change}
# thanks_sub_header: "Thanks for expressing interest in CodeCombat for your school."
thanks_sub_header: "Gracias por el interés de su institución en CodeCombat" #"Gracias por expressing interest in CodeCombat for your school."
thanks_p: "Estaremos en contacto pronto. ¿Preguntas? Escríbenos:" # {change}
# back_to_classes: "Back to Classes"
# finish_signup: "Finish creating your teacher account:"
# finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
# signup_with: "Sign up with:"
# connect_with: "Connect with:"
back_to_classes: "Volver a las clases"#"Back to Clases"
finish_signup: "Termine la creación de su cuenta de maestro:"
finish_signup_p: "Crear una cuenta para configurar la clase, agregar estudiante y monitorear su progreso a medida que aprenden programacioón"#"Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
signup_with: "Registrarse con:"
connect_with: "Conectar con:"
# conversion_warning: "WARNING: Your current account is a <em>Student Account</em>. Once you submit this form, your account will be updated to a Teacher Account."
# learn_more_modal: "Teacher accounts on CodeCombat have the ability to monitor student progress, assign enrollments and manage classrooms. Teacher accounts cannot be a part of a classroom - if you are currently enrolled in a class using this account, you will no longer be able to access it once you update to a Teacher Account."
# create_account: "Create a Teacher Account"
create_account: "Crear una Cuenta de maestro"
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!"
# convert_account_title: "Update to Teacher Account"
# not: "Not"
not: "No"
# setup_a_class: "Set Up a Class"
versions:
@ -975,7 +975,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
social_facebook: "Me Gusta CodeCombat en Facebook"
social_twitter: "Sigue a CodeCombat en Twitter"
social_gplus: "Únete a CodeCombat con Google+"
# social_slack: "Chat with us in the public CodeCombat Slack channel"
# social_slack: "Chat con nosotros en el public CodeCombat Slack canal"
contribute_to_the_project: "Contribuir al proyecto"
clans:
@ -1080,8 +1080,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
buy_course1: "Comprar este curso"
select_all_courses: "Seleccione 'Todos los cursos' para un 50% de descuento!"
all_courses: "Todos los Cursos"
# number_programming_students: "Number of Programming Students"
# number_total_students: "Total Students in School/District"
# number_programming_students: "Número de Programming Students"
# number_total_students: "Total Students en School/District"
enter_number_students: "Introducir el número de estudiantes que necesita para este grupo."
name_class: "Nombre de su grupo"
displayed_course_page: "Se mostrará en la página de curso para usted y sus estudiantes. Puede cambiarse después."
@ -1234,8 +1234,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
additional_resources: "Recursos Adicionales"
additional_resources_1_pref: "Descargar/imprimir nuestra"
additional_resources_1_mid: "Guía para maestros: Curso 1"
# additional_resources_1_mid2: "and"
# additional_resources_1_mid3: "Course 2"
additional_resources_1_mid2: "y"
additional_resources_1_mid3: "Curso 2"
additional_resources_1_suff: "explicaciones y soluciones para cada nivel." # {change}
additional_resources_2_pref: "Complete nuestro"
additional_resources_2_suff: "para obtener dos matrículas gratuitas para el resto de nuestros cursos pagos."
@ -1264,9 +1264,9 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
title: "Título" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
select_language: "Seleccione lenguaje"
select_level: "Seleccione nivel"
# play_level: "Play Nivel"
concepts_covered: "Conceptos Cubiertos"
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
@ -1294,15 +1294,15 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# class_name: "Class Name"
# teacher_account_restricted: "Your account is a teacher account, and so cannot access student content."
# teacher:
teacher:
# teacher_dashboard: "Teacher Dashboard" # Navbar
# my_classes: "My Classes"
# courses: "Courses"
# enrollments: "Enrollments"
# resources: "Resources"
# help: "Help"
help: "Ayuda"
# students: "Students" # Shared
# language: "Language"
language: "Lenguaje"
# edit_class_settings: "edit class settings"
# complete: "Complete"
# access_restricted: "Account Update Required"
@ -1368,8 +1368,8 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
# total_enrolled_students: "Total Enrolled Students"
# unenrolled_students: "Unenrolled Students"
# add_enrollment_credits: "Add Enrollment Credits"
# purchasing: "Purchasing..."
# purchased: "Purchased!"
purchasing: "Adquiriendo..."
purchased: "Adquirido!"
# purchase_now: "Purchase Now"
# how_to_enroll: "How to Enroll Students"
# how_to_enroll_blurb_1: "If a student is not enrolled yet, there will be an \"Enroll\" button next to their course progress in your class."
@ -1398,7 +1398,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
ambassador_title: "Embajador"
ambassador_title_description: "(Soporte)"
ambassador_summary: "Ayuda a responder las preguntas de los usuarios del foro. Nuestros Embajadores representan CodeCombat en todo el mundo."
# teacher_title: "Teacher"
teacher_title: "Maestro"
editor:
main_title: "Editor de CodeCombat"
@ -1511,7 +1511,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
join_desc_3: ", o encuéntranos en "
join_desc_4: "y ahí empezaremos!"
join_url_email: "Escríbenos"
# join_url_slack: "public Slack channel"
# join_url_slack: "public Slack canal"
archmage_subscribe_desc: "Obten correos de nuevas oportunidades y anuncios."
artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente ruega por más contenido, y podemos hacer tanto por nosotros mismos. De momento tu estación de trabajo es nivel 1 ; Nuestro editor de niveles es apenas útil incluso para sus creadores, así que sea cauteloso. Si tuviera visiones de campañas apareciendo para ciclos for"
artisan_introduction_suf: ", entonces esta lase es ideal para ti."
@ -1555,7 +1555,7 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
ambassador_join_note_strong: "Nota"
ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!"
ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador."
# teacher_subscribe_desc: "Get emails on updates and announcements for teachers."
# teacher_subscribe_desc: "Get emails on updates and announcements para maestros."
changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación."
diligent_scribes: "Nuestros diligentes Escribas:"
powerful_archmages: "Nuestros poderosos Archimagos:"
@ -1711,16 +1711,16 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
you_can2: "comprar un código prepagado"
you_can3: "que puede ser aplicado a tu propia cuenta o regalado a otros."
# coppa_deny:
# text1: "Cant wait to learn programming?"
# text2: "Ask your parents to create an account for you!"
# close: "Close Window"
coppa_deny:
text1: "¿No puedes esperar para aprender a programar?"
# text2: "Ask your parents que creen una cuenta for you!"
close: "Cerrar ventana"
loading_error:
could_not_load: "Error cargando del servidor"
connection_failure: "Fallo de conexión."
# connection_failure_desc: "It doesnt look like youre connected to the internet! Check your network connection and then reload this page."
# login_required: "Login Required"
login_required: "Login Requerido"
# login_required_desc: "You need to be logged in to access this page."
unauthorized: "Necesitas acceder. ¿Tienes desabilitadas las cookies?"
forbidden: "No tienes los permisos."
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
license: "licencia"
oreilly: "ebook de su elección"
# calendar:
# year: "Year"
# day: "Day"
# month: "Month"
calendar:
year: "Año"
day: "Día"
month: "Mes"
# january: "January"
# february: "February"
# march: "March"
# april: "April"
# may: "May"
# june: "June"
# july: "July"
june: "Junio"
july: "Julio"
# august: "August"
# september: "September"
# october: "October"
# november: "November"
# december: "December"
december: "Diciembre"

View file

@ -15,8 +15,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
or_ipad: "O descargalo para iPad"
new_home:
# slogan: "The most engaging game for learning programming."
# classroom_edition: "Classroom Edition:"
slogan: "El juego más atractivo para aprender a programar."
classroom_edition: "Edición para aulas:"
learn_to_code: "Aprende a programar:"
teacher: "Profesor"
student: "Alumno"
@ -31,24 +31,24 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
designed_with: "Diseñado pensando en los profesores"
real_code: "Real, escribe código"
from_the_first_level: "desde el primer nivel"
# getting_students: "Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure."
# educator_resources: "Educator resources"
# course_guides: "and course guides"
# teaching_computer_science: "Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds."
getting_students: "Involucrar a los alumnos en la programación por sentencias tan rápido como sea posible es fundamental para aprender la sintaxis de la programación con una estructura apropiada."
educator_resources: "Recursos para educadores"
course_guides: "y guías de cursos"
teaching_computer_science: "Enseñar ciencias computación no requiere de un costoso título, porque nosotros proveemos las herramientas para apoyar educadores con cualquier nivel de conocimientos."
accessible_to: "Accesible para"
everyone: "todo el mundo"
# democratizing: "Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code."
# forgot_learning: "I think they actually forgot that they were actually learning something."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school."
# why_games: "Why is learning through games important?"
# games_reward: "Games reward the productive struggle."
# encourage: "Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn."
# excel: "Games excel at rewarding"
# struggle: "productive struggle"
# kind_of_struggle: "the kind of struggle that results in learning thats engaging and"
# motivating: "motivating"
# not_tedious: "not tedious."
# gaming_is_good: "Studies suggest gaming is good for childrens brains. (its true!)"
democratizing: "La democratización del proceso de aprendizaje es el nucleo de nuestra filosofía. Todo mundo debe ser capaz de aprender a programar."
forgot_learning: "En realidad creo que que ellos olvidaron que en realidad están aprendiendo algo."
wanted_to_do: " Programar es algo que siempre he querido hacer, nunca pensé que sería capáz de aprenderlo en la escuela."
why_games: "¿Por qué aprender usando juegos es importante?"
games_reward: "Los juegos premian el esfuerzo productivo"
encourage: "Jugar es un excelente medio que promueve la interacción, descubrimiento, y aprendizaje a través de prueba-error. Un buen juego reta al jugador a dominar habilidades al pasar el tiempo, éste el el mismo proceso critico por el que pasan los estudiantes al aprender."
excel: "Los juegos son excelentes premiando"
struggle: "el esfuerzo productivo"
kind_of_struggle: "el tipo de esfuerzo que resulta en aprendizaje learning que es atractivo y"
motivating: "motivante"
not_tedious: "no tedioso."
gaming_is_good: "Estudios sugieren que el jugar es bueno para el cerebro de los niños. (¡Es verdad!)"
# game_based: "When game-based learning systems are"
# compared: "compared"
# conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and"
@ -61,11 +61,11 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# request_demo_subtitle: "Request a demo and get your students started in less than an hour."
# get_started_title: "Set up your class today"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science."
# request_demo: "Request a Demo"
request_demo: "Pide una demostración"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
have_an_account: "¿Tienes una cuenta?"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
view_my_classes: "Ver mis clases"
# computer_science: "Computer science courses for all ages"
# show_me_lesson_time: "Show me lesson time estimates for:"
# curriculum: "Total curriculum hours:"
@ -905,17 +905,17 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
wrong_password: "Contraseña incorrecta"
upload_picture: "Sube una imagen"
delete_this_account: "Eliminar esta cuenta de forma permanente"
# reset_progress_tab: "Reset All Progress"
# reset_your_progress: "Clear all your progress and start over"
reset_progress_tab: "Reestablecer progreso"
reset_your_progress: "Elimina tu progreso y empieza de nuevo"
god_mode: "Modo Dios"
password_tab: "Contraseña"
emails_tab: "Correos electrónicos"
admin: "Admin"
# manage_subscription: "Click here to manage your subscription."
manage_subscription: "Clic aquí para modificar tu suscripción."
new_password: "Nueva contraseña"
new_password_verify: "Verificar"
type_in_email: "Introduce tu email para confirmar el borrado de esta cuenta"
# type_in_email_progress: "Type in your email to confirm deleting your progress."
type_in_email: "Introduce tu correo para confirmar el borrado de esta cuenta"
type_in_email_progress: "TypeIntroduce tu correo para confirmar el borrado de tu progreso."
type_in_password: "Además, introduce tu contraseña."
email_subscriptions: "Suscripciones de correo electrónico"
email_subscriptions_none: "Sin suscripciones de correo electrónico."
@ -1398,7 +1398,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
ambassador_title: "Embajador"
ambassador_title_description: "(Soporte)"
ambassador_summary: "Amansa a los usuarios de nuestro foro y guía a aquellos que tengan preguntas. Nuestros Embajadores representan a CodeCombat frente al mundo."
# teacher_title: "Teacher"
teacher_title: "Profesor"
editor:
main_title: "Editores de CodeCombat"
@ -1406,7 +1406,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
thang_title: "Editor de Objetos"
level_title: "Editor de Niveles"
achievement_title: "Editor de Logros"
# poll_title: "Poll Editor"
poll_title: "Editor de Encuestas"
back: "Volver"
revert: "Revertir"
revert_models: "Revertir Modelos"
@ -1471,7 +1471,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
new_achievement_title: "Crea un nuevo Logro"
new_achievement_title_login: "Inicia sesión para Crear un Nuevo Logro"
new_poll_title: "Crear una nueva Encuesta"
# new_poll_title_login: "Log In to Create a New Poll"
new_poll_title_login: "Inicia sesión para Crear una Nueva Encuesta"
article_search_title: "Buscar artículos aquí"
thang_search_title: "Busca tipos de objetos aquí"
level_search_title: "Buscar niveles aquí"
@ -1511,7 +1511,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
join_desc_3: ", o encuéntranos en nuestro "
join_desc_4: "¡y partiremos desde ese punto!"
join_url_email: "Escríbenos un correo electrónico"
# join_url_slack: "public Slack channel"
join_url_slack: "canal público de Slack"
archmage_subscribe_desc: "Recibe correos sobre nuevos anuncios y oportunidades de codificar."
artisan_introduction_pref: "¡Debemos construir niveles adicionales! La gente clama por más contenido y solo podemos crear unos cuantos. Ahora mismo tu estación de trabajo es el nivel uno; nuestro editor de niveles es apenas usable por sus creadores, así que ten cuidado. Si tienes visiones de campañas que alcanzan el infinito"
artisan_introduction_suf: ", entonces esta Clase es ideal para ti."
@ -1554,8 +1554,8 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
ambassador_join_desc: "cuéntanos más sobre ti, que has hecho y qué estarías interesado en hacer. ¡Y continuaremos a partir de ahí!"
ambassador_join_note_strong: "Nota"
ambassador_join_note_desc: "Una de nuestras principales prioridades es construir un modo multijugador donde los jugadores con mayores dificultades a la hora de resolver un nivel, puedan invocar a los magos más avanzados para que les ayuden. Será una buena manera de que los Embajadores puedan hacer su trabajo. ¡Te mantendremos informado!"
ambassador_subscribe_desc: "Recibe correos sobre actualizaciones de soporte y desarrollo del multijugador."
# teacher_subscribe_desc: "Get emails on updates and announcements for teachers."
ambassador_subscribe_desc: "Recibe correos acerca de actualizaciones de soporte y desarrollo del multijugador."
teacher_subscribe_desc: "Recibe acerca de actualizaciones y anuncios para profesores."
changes_auto_save: "Los cambios son guardados automáticamente cuando marcas las casillas de verificación."
diligent_scribes: "Nuestros diligentes Escribas:"
powerful_archmages: "Nuestros poderosos Archimagos:"
@ -1610,7 +1610,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
fight: "¡Pelea!"
watch_victory: "Ver tu victoria"
defeat_the: "Vence a"
# watch_battle: "Watch the battle"
watch_battle: "Observa la batalla"
tournament_started: ", iniciado"
tournament_ends: "El torneo termina"
tournament_ended: "El torneo ha terminado"
@ -1659,7 +1659,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
account:
payments: "Pagos"
# prepaid_codes: "Prepaid Codes"
prepaid_codes: "Código prepagados"
purchased: "Adquirido"
subscription: "Suscripción"
invoices: "Facturas"
@ -1711,10 +1711,10 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
# you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others."
# coppa_deny:
# text1: "Cant wait to learn programming?"
# text2: "Ask your parents to create an account for you!"
# close: "Close Window"
coppa_deny:
text1: "¿No puedes esperar para empezar a programar?"
text2: "¡Pide a tus padres que hagan una cuenta para ti!"
close: "Cerrar ventana"
loading_error:
could_not_load: "Error al cargar desde el servidor."
@ -1860,7 +1860,7 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
prizes: "Premios"
total_value: "Valor Total"
in_cash: "en dinero"
custom_wizard: "Personaliza tu Mago de CodeCombat"
custom_wizard: "Personaliza tu Hechicero de CodeCombat"
custom_avatar: "Personaliza tu avatar de CoceCombat"
heap: "Por seis meses de acceso \"Startup\""
credits: "creditos"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
license: "licencia"
oreilly: "ebook de tu eleccion"
# calendar:
# year: "Year"
# day: "Day"
# month: "Month"
# january: "January"
# february: "February"
# march: "March"
# april: "April"
# may: "May"
# june: "June"
# july: "July"
# august: "August"
# september: "September"
# october: "October"
# november: "November"
# december: "December"
calendar:
year: "Año"
day: "Día"
month: "Mes"
january: "Enero"
february: "Febrero"
march: "Marzo"
april: "Abril"
may: "Mayo"
june: "Junio"
july: "Julio"
august: "Agosto"
september: "Septiembre"
october: "Octubre"
november: "Noviembre"
december: "Diciembre"

View file

@ -14,85 +14,85 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
for_developers: "Pour développeurs" # Not currently shown on home page.
or_ipad: "Ou télécharger pour iPad"
# new_home:
# slogan: "The most engaging game for learning programming."
# classroom_edition: "Classroom Edition:"
# learn_to_code: "Learn to code:"
# teacher: "Teacher"
# student: "Student"
# play_now: "Play Now"
# im_a_teacher: "I'm a Teacher"
# im_a_student: "I'm a Student"
# learn_more: "Learn more"
# classroom_in_a_box: "A classroom in-a-box for teaching computer science."
# codecombat_is: "CodeCombat is a platform <strong>for students</strong> to learn computer science while playing through a real game."
# our_courses: "Our courses have been specifically playtested to <strong>excel in the classroom</strong>, even by teachers with little to no prior programming experience."
# top_screenshots_hint: "Students write code and see their changes update in real-time"
# designed_with: "Designed with teachers in mind"
# real_code: "Real, typed code"
# from_the_first_level: "from the first level"
# getting_students: "Getting students to typed code as quickly as possible is critical to learning programming syntax and proper structure."
# educator_resources: "Educator resources"
# course_guides: "and course guides"
# teaching_computer_science: "Teaching computer science does not require a costly degree, because we provide tools to support educators of all backgrounds."
# accessible_to: "Accessible to"
# everyone: "everyone"
# democratizing: "Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code."
# forgot_learning: "I think they actually forgot that they were actually learning something."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school."
# why_games: "Why is learning through games important?"
# games_reward: "Games reward the productive struggle."
# encourage: "Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn."
# excel: "Games excel at rewarding"
# struggle: "productive struggle"
# kind_of_struggle: "the kind of struggle that results in learning thats engaging and"
# motivating: "motivating"
# not_tedious: "not tedious."
# gaming_is_good: "Studies suggest gaming is good for childrens brains. (its true!)"
# game_based: "When game-based learning systems are"
# compared: "compared"
# conventional: "against conventional assessment methods, the difference is clear: games are better at helping students retain knowledge, concentrate and"
# perform_at_higher_level: "perform at a higher level of achievement"
# feedback: "Games also provide real-time feedback that allows students to adjust their solution path and understand concepts more holistically, instead of being limited to just “correct” or “incorrect” answers."
# real_game: "A real game, played with real coding."
# great_game: "A great game is more than just badges and achievements - its about a players journey, well-designed puzzles, and the ability to tackle challenges with agency and confidence."
# agency: "CodeCombat is a game that gives players that agency and confidence with our robust typed code engine, which helps beginner and advanced students alike write proper, valid code."
# request_demo_title: "Get your students started today!"
# request_demo_subtitle: "Request a demo and get your students started in less than an hour."
# get_started_title: "Set up your class today"
# get_started_subtitle: "Set up a class, add your students, and monitor their progress as they learn computer science."
# request_demo: "Request a Demo"
# setup_a_class: "Set Up a Class"
# have_an_account: "Have an account?"
# logged_in_as: "You are currently logged in as"
# view_my_classes: "View my classes"
# computer_science: "Computer science courses for all ages"
# show_me_lesson_time: "Show me lesson time estimates for:"
# curriculum: "Total curriculum hours:"
# ffa: "Free for all students"
# lesson_time: "Lesson time:"
# coming_soon: "Coming soon!"
# courses_available_in: "Courses are available in JavaScript, Python, and Java (coming soon!)"
# boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike."
# winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable."
# run_class: "Everything you need to run a computer science class in your school today, no CS background required."
# teachers: "Teachers!"
# teachers_and_educators: "Teachers & Educators"
# class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum."
new_home:
slogan: "Le jeu le plus engageant pour apprendre la programmation."
classroom_edition: "Édition Classe:"
learn_to_code: "Apprend à programmer:"
teacher: "Enseignant"
student: "Étudiant"
play_now: "Jouez Maintenant"
im_a_teacher: "Je suis un enseignant"
im_a_student: "Je suis un étudiant"
learn_more: "Pour en savoir plus"
classroom_in_a_box: "Une classe tout-inclus pour enseigner l'informatique."
codecombat_is: "CodeCombat est une plateforme <strong>pour les étudiants</strong> afin d'apprendre l'informatique tout en jouant."
our_courses: "Nos cours ont été testés spécifiquement pour <strong>excellé en classe</strong>, même si les enseignants ont peu ou pas d'expérience en programmation."
top_screenshots_hint: "Les étudiants écrivent du code et voient leurs changements s'appliqués en temps-réel"
designed_with: "Concu en pensant aux enseignants"
real_code: "Vrai code entré au clavier"
from_the_first_level: "à partir du premier niveau"
getting_students: "Encourager les étudiants à écrire du code aussi rapidement que possible est primordial afin qu'ils apprennent comment bien structurer et écrire un programme."
educator_resources: "Resources pour les enseignants"
course_guides: "et les guides de cours"
teaching_computer_science: "Enseigner l'informatique ne nécessite pas un diplôme dispendieux, parce que nous fournissons des outils afin d'aider les enseignants, peu importe leurs curriculums."
accessible_to: "Accessible à"
everyone: "tout le monde"
democratizing: "Démocratiser le processus d'apprendre à programmer est au coeur de notre philosophie. Tout le monde devrait être capable d'apprendre la programmation."
forgot_learning: "Je crois qu'ils ont oublié qu'ils étaient en train d'apprendre quelquechose."
wanted_to_do: " Programmer est quelquechose que j'ai toujours voulu faire, et je n'ai jamais pensé que je pourrais l'apprendre à l'école."
why_games: "Pourquoi est-ce qu'apprendre en jouant est important?"
games_reward: "Les jeux récompensent l'effort productif."
encourage: "Le jeu est une plateforme qui encourage l'interaction, la découverte et l'essaie et erreur. Un bon jeu défit le joeur d'apprendre à maîtriser de nouvelles habiletés au fil du temps, ce qui correspond au même processus critique que l'on retrouve au niveau de l'éducation."
excel: "Les jeux sont excellents afin de récompenser"
struggle: "l'effort productif"
kind_of_struggle: "le type d'effort qui permet d'apprendre, qui nous engage et"
motivating: "qui nous motive"
not_tedious: "non pas fastidieux."
gaming_is_good: "Des études suggèrent que jouer est bon pour le cerveau des enfants. (C'est vrai!)"
game_based: "Quand les systèmes d'apprentissage basés sur le jeu sont"
compared: "comparés"
conventional: "aux méthodes d'évaluation conventionnelles, la différence est claire: les jeux sont meilleurs afin d'aider les enfants à retenir ce qu'ils apprennent, à se concentrer et"
perform_at_higher_level: "à performer à un niveau supérieur d'accomplissement"
feedback: "Les jeux procurent aussi des résultats en temps réel qui permettent aux étudiants d'ajuster leur solution et de comprendre des concepts de façon plus holistique, au lieu d'être limité aux simples réponses “correct” ou “incorrect”."
real_game: "Un vrai jeu, joué en programmant pour de vrai."
great_game: "Un bon jeu c'est plus qu'une série d'insignes et d'accomplissements - c'est à propos de l'aventure d'un joueur, des énigmes bien conçues et la capacité d'entreprendre des défis avec confiance et détermination."
agency: "CodeCombat est un jeu qui donne aux joueurs cette confiance et détermination à l'aide de notre interpretteur de lignes de code, qui aide les étudiants débutants ainsi qu'avancés à concevoir des programmes bien écrits et valides."
request_demo_title: "Débutez avec vos étudiants aujourd'hui!"
request_demo_subtitle: "Demandez une démonstration et permettez à vos étudiants de démarrer en moins d'une heure."
get_started_title: "Mettez en place votre classe aujourd'hui"
get_started_subtitle: "Mettez en place une classe, ajoutez vos étudiants et surveillez leurs progrès au fur et à mesure qu'ils apprennent l'informatique."
request_demo: "Demandez une Démonstration"
setup_a_class: "Mettre en place une classe"
have_an_account: "Avez-vous un compte?"
logged_in_as: "Vous êtes présentement enregistré en tant que"
view_my_classes: "Voir Mes Classes"
computer_science: "Des cours d'informatique pour tous âges"
show_me_lesson_time: "Montrez-moi des estimés de temps de cours pour:"
curriculum: "Total des heures du curriculum:"
ffa: "Gratuis pour tous les étudiants"
lesson_time: "Temps de cours:"
coming_soon: "Bientôt disponible!"
courses_available_in: "Les cours sont disponibles en JavaScript, Python et Java (bientôt disponible!)"
boast: "Comprend des énigmes assez complexes pour fasciner autant les joueurs que les programmeurs."
winning: "Une combinaison gagnante d'élément de jeux de rôles et programmation qui permet aux enfants d'apprendre de façon légitimement plaisante."
run_class: "Tous ce dont vous avez besoin pour enseigner l'informaique dans votre classe aujourd'hui, sans expérience préalable en informatique."
teachers: "Enseignants!"
teachers_and_educators: "Enseignants et éducateurs"
class_in_box: "Apprenez comment notre plateforme classe-tout-inclus s'adapte à votre curriculum."
# get_started: "Get Started"
# students: "Students:"
# join_class: "Join Class"
# role: "Your role:"
# student_count: "Number of students:"
# start_playing_for_free: "Start Playing for Free!"
# students_and_players: "Students & Players"
# goto_classes: "Go to My Classes"
# view_profile: "View My Profile"
# view_progress: "View Progress"
# check_out_wiki: "Check out our new Educator Wiki"
# want_coco: "Want CodeCombat at your school?"
# form_select_role: "Select primary role"
# form_select_range: "Select class size"
students: "Étudiants:"
join_class: "Joindre une classe"
role: "Votre rôle:"
student_count: "Nombre d'étudiants:"
start_playing_for_free: "Commencez à jouer gratuitement!"
students_and_players: "Étudiants et joueurs"
goto_classes: "Aller à Mes Classes"
view_profile: "Voir Mon Profil"
view_progress: "Voir Progrès"
check_out_wiki: "Visionner notre nouveau Wiki pour Éducateurs"
want_coco: "Voulez-vous CodeCombat à votre école?"
form_select_role: "Sélectionnez votre rôle principale"
form_select_range: "Sélectionnez la taille de votre classe"
nav:
play: "Jouer" # The top nav bar entry where players choose which levels to play
@ -102,7 +102,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
blog: "Blog"
forum: "Forum"
account: "Compte"
# my_account: "My Account"
my_account: "Mon compte"
profile: "Profil"
stats: "Stats"
code: "Code"
@ -112,24 +112,24 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
about: "À propos"
contact: "Contact"
twitter_follow: "Suivre"
# students: "Students"
students: "Étudiants"
teachers: "Enseignants"
careers: "Emplois"
# facebook: "Facebook"
# twitter: "Twitter"
# create_a_class: "Create a Class"
# other: "Other"
# learn_to_code: "Learn to Code!"
# toggle_nav: "Toggle navigation"
# jobs: "Jobs"
# schools: "Schools"
# educator_wiki: "Educator Wiki"
# get_involved: "Get Involved"
# open_source: "Open source (GitHub)"
# support: "Support"
# faqs: "FAQs"
# help_pref: "Need help? Email"
# help_suff: "and we'll get in touch!"
facebook: "Facebook"
twitter: "Twitter"
create_a_class: "Créer une classe"
other: "Autre"
learn_to_code: "Apprenez à programmer!"
toggle_nav: "Basculer la navigation"
jobs: "Emplois"
schools: "Écoles"
educator_wiki: "Wiki pour les éducateurs"
get_involved: "Devenez impliqué"
open_source: "Code libre (GitHub)"
support: "Support"
faqs: "FAQs"
help_pref: "Besoin d'aide? Email"
help_suff: "et nous entrerons en contact!"
modal:
close: "Fermer"
@ -182,55 +182,55 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
campaign_old_multiplayer: "(Obsolète) Ancienne arènes multijoueurs"
campaign_old_multiplayer_description: "Reliques d'un âge plus civilisé. Il n'y a aucune simulation pour ces vielles arènes multijoueur vides de tout héros."
# code:
code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "else if"
# while: "while"
# loop: "loop"
# for: "for"
# break: "break"
# continue: "continue"
# pass: "pass"
# return: "return"
# then: "then"
# do: "do"
# end: "end"
# function: "function"
# def: "define"
# var: "variable"
# self: "self"
# hero: "hero"
# this: "this"
# or: "or"
# "||": "or"
# and: "and"
# "&&": "and"
# not: "not"
# "!": "not"
# "=": "assign"
# "==": "equals"
# "===": "strictly equals"
# "!=": "does not equal"
# "!==": "does not strictly equal"
# ">": "is greater than"
# ">=": "is greater than or equal"
# "<": "is less than"
# "<=": "is less than or equal"
# "*": "multiplied by"
# "/": "divided by"
# "+": "plus"
# "-": "minus"
# "+=": "add and assign"
# "-=": "subtract and assign"
# True: "True"
# true: "true"
# False: "False"
# false: "false"
# undefined: "undefined"
# null: "null"
# nil: "nil"
# None: "None"
else: "Sinon"
elif: "et sinon"
while: "tant que"
loop: "boucle"
for: "pour"
break: "break"
continue: "continue"
pass: "passe"
return: "retourne"
then: "alors"
do: "fait"
end: "fin"
function: "fonction"
def: "definit"
var: "variable"
self: "soi-même"
hero: "héros"
this: "ceci"
or: "or"
"||": "ou"
and: "et"
"&&": "et"
not: "n'est pas"
"!": "n'est pas"
"=": "assigner"
"==": "équivalent à"
"===": "strictement équivalent à"
"!=": "n'est pas équivalent à"
"!==": "n'est pas strictement équivalent à"
">": "est plus grand que"
">=": "est plus grand que ou équivalent à"
"<": "is less than"
"<=": "est plus petit ou équivalent à"
"*": "multiplié par"
"/": "divisé par"
"+": "plus"
"-": "moins"
"+=": "ajoute et assigne"
"-=": "soustrait et assigne"
True: "Vrai"
true: "vrai"
False: "Faux"
false: "faux"
undefined: "non défini"
null: "nul"
nil: "nil"
None: "Aucune valeur"
share_progress_modal:
blurb: "Vous faites beaucoup de progrès ! Partagez ce que vous avez appris grâce à CodeCombat avec vos amis !" # {change}
@ -263,15 +263,15 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
school_name: "Nom et ville de votre école"
optional: "facultatif"
school_name_placeholder: "Exemple : Lycée Champollion, Figeac"
# or_sign_up_with: "or sign up with"
# connected_gplus_header: "You've successfully connected with Google+!"
# connected_gplus_p: "Finish signing up so you can log in with your Google+ account."
# gplus_exists: "You already have an account associated with Google+!"
# connected_facebook_header: "You've successfully connected with Facebook!"
# connected_facebook_p: "Finish signing up so you can log in with your Facebook account."
# facebook_exists: "You already have an account associated with Facebook!"
# hey_students: "Students, enter the class code from your teacher."
# birthday: "Birthday"
or_sign_up_with: "ou abonnez-vous avec"
connected_gplus_header: "Vous avez réussi à vous connecter avec votre compte Google+!"
connected_gplus_p: "Finissez de vous abonnez pour pouvoir vous connecter avec votre compte Google+."
gplus_exists: "Vous avez déjà un compte associé à Google+!"
connected_facebook_header: "Vous avez réussi à vous connecter avec votre compte Facebook!"
connected_facebook_p: "Finissez de vous abonnez pour pouvoir vous connecter avec votre compte Facebook."
facebook_exists: "Vous avez réussi à vous connecter avec votre compte Facebook!"
hey_students: "Étudiants, entrez le code de cours de votre enseignant."
birthday: "Anniversaire"
recover:
recover_account_title: "Récupérer son compte"
@ -308,7 +308,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
submit_patch: "Soumettre un correctif"
submit_changes: "Soumettre des Changements"
save_changes: "Sauvegarder les modifications"
# required_field: "Required field"
required_field: "Champ requis"
general:
and: "et"
@ -341,7 +341,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
subject: "Sujet"
email: "E-mail"
password: "Mot de passe"
# confirm_password: "Confirm Password"
confirm_password: "Confirmez votre mot de passe"
message: "Message"
code: "Code"
ladder: "Companion"
@ -360,9 +360,9 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
warrior: "Guerrier"
ranger: "Ranger"
wizard: "Magicien"
# first_name: "First Name"
# last_name: "Last Name"
# username: "Username"
first_name: "Prénom"
last_name: "Nom de famille"
username: "Nom d'utilisateur"
units:
second: "seconde"
@ -381,7 +381,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
years: "années"
play_level:
# level_complete: "Level Complete"
level_complete: "Niveau complété"
completed_level: "Niveau terminé:"
course: "Cours:"
done: "Fait"
@ -425,7 +425,7 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
victory_new_item: "Nouvel item"
victory_viking_code_school: "Par la barbe d'Odin, c'est un niveau difficile que tu viens de compléter! Si tu n'est pas un développeur de logiciel, tu devrais l'être ! Ceci vient de te propulser dans l'école de Code Vikings où tu pourras amener tes habilités au prochain niveau et devenir un développer web profesionnel en deux semaines."
victory_become_a_viking: "Devenez un viking"
# victory_no_progress_for_teachers: "Progress is not saved for teachers. But, you can add a student account to your classroom for yourself."
victory_no_progress_for_teachers: "La progression n'est pas sauvegardé pour les enseignants. Mais vous pouvez ajouter un compte étudiant à votre salle de cours pour vous."
guide_title: "Guide"
tome_cast_button_run: "Exécuter"
tome_cast_button_running: "En cours d'exécution"
@ -505,15 +505,15 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
tip_strong_opponents: "Même les ennemis les plus puissant ont une faiblesse. - Itachi Uchiha"
tip_paper_and_pen: "Avant de commencer à coder, vous pouvez plannifier les choses sur papier."
tip_solve_then_write: "D'abord, résolvez le problème. Ensuite, écrivez le code. - John Johnson"
# tip_compiler_ignores_comments: "Sometimes I think that the compiler ignores my comments."
# tip_understand_recursion: "The only way to understand recursion is to understand recursion."
# tip_life_and_polymorphism: "Open Source is like a totally polymorphic heterogeneous structure: All types are welcome."
# tip_mistakes_proof_of_trying: "Mistakes in your code are just proof that you are trying."
# tip_adding_orgres: "Rounding up ogres."
# tip_sharpening_swords: "Sharpening the swords."
# tip_ratatouille: "You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
# tip_nemo: "When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
# tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
tip_compiler_ignores_comments: "Des fois, je pense que le compilateur ignore mes commentaires."
tip_understand_recursion: "La seule manière de comprendre la récursion est de comprendre la récursion."
tip_life_and_polymorphism: "Le code libre est une structure hétérogène polymorphique. Tous les types sont les bienvenues."
tip_mistakes_proof_of_trying: "Les erreurs dans votre code sont la preuve que vous essayez."
tip_adding_orgres: "Rassembler les ogres."
tip_sharpening_swords: "Aiguiser les épées."
tip_ratatouille: "Tu ne dois laisser personne définir où se trouvent tes limites. La seule vraie limite est c'est ton âme. - Gusteau, Ratatouille"
tip_nemo: "Quand la vie vous rabaisse, vous savez ce que vous devenez faire ? Juste continuer de nager, juste continuer de nager. - Dory, Finding Nemo"
tip_internet_weather: "Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
# tip_nerds: "Nerds are allowed to love stuff, like jump-up-and-down-in-the-chair-can't-control-yourself love it. - John Green"
# tip_self_taught: "I taught myself 90% of what I've learned. And that's normal! - Hank Green"
# tip_luna_lovegood: "Don't worry, you're just as sane as I am. - Luna Lovegood"
@ -1689,27 +1689,27 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
retrying: "Erreur interne, réessayez"
success: "Paiement accepté, merci !"
# account_prepaid:
# purchase_code: "Purchase a Subscription Code"
# purchase_code1: "Subscription Codes can be redeemed to add premium subscription time to one or more CodeCombat accounts."
account_prepaid:
purchase_code: "Acheter un code d'abonnement"
purchase_code1: "Les codes d'abonnement peuvent seulement être racheter pour ajouter des comptes prenium à un ou plusieurs comptes de CodeCombat"
# purchase_code2: "Each CodeCombat account can only redeem a particular Subscription Code once."
# purchase_code3: "Subscription Code months will be added to the end of any existing subscription on the account."
# users: "Users"
# months: "Months"
# purchase_total: "Total"
users: "Utilisateurs"
months: "Mois"
purchase_total: "Total"
# purchase_button: "Submit Purchase"
# your_codes: "Your Codes"
your_codes: "Vos codes"
# redeem_codes: "Redeem a Subscription Code"
# prepaid_code: "Prepaid Code"
# lookup_code: "Lookup prepaid code"
# apply_account: "Apply to your account"
# copy_link: "You can copy the code's link and send it to someone."
# quantity: "Quantity"
quantity: "Quantité"
# redeemed: "Redeemed"
# no_codes: "No codes yet!"
# you_can1: "You can"
# you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others."
no_codes: "Pas de code soumis"
you_can1: "Vous pouvez"
you_can2: "achetez un code pré-payé"
you_can3: "qui pourra être appliqué à votre compte ou donné à un autre."
# coppa_deny:
# text1: "Cant wait to learn programming?"
@ -1869,19 +1869,19 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
license: "Licence"
oreilly: "ebook de votre choix"
# calendar:
# year: "Year"
# day: "Day"
# month: "Month"
# january: "January"
# february: "February"
# march: "March"
# april: "April"
# may: "May"
# june: "June"
# july: "July"
# august: "August"
# september: "September"
# october: "October"
# november: "November"
# december: "December"
calendar:
year: "Année"
day: "Jour"
month: "Mois"
january: "Janvier"
february: "Février"
march: "Mars"
april: "Avril"
may: "Mai"
june: "Juin"
july: "Juillet"
august: "Août"
september: "Septembre"
october: "Octobre"
november: "Novembre"
december: "Décembre"

View file

@ -5,8 +5,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
no_mobile: "CodeCombat is niet gemaakt voor mobiele apparaten en werkt misschien niet!" # Warning that shows up on mobile devices
play: "Speel" # The big play button that opens up the campaign view.
play_campaign_version: "Speel de Verhaallijn" # Shows up under big play button if you only play /courses
old_browser: "Oh oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Je kan toch proberen, maar het zal waarschijnlijk niet werken!"
old_browser: "uh-oh, jouw browser is te oud om CodeCombat te kunnen spelen, Sorry!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Je kan alsnog proberen, maar het zal waarschijnlijk niet werken!"
ipad_browser: "Slecht nieuws: CodeCombat draait niet in je browser op de iPad. Goed nieuws: onze iPad-app wordt op het moment beoordeeld door Apple."
campaign: "Verhaallijn"
for_beginners: "Voor Beginners"
@ -24,25 +24,25 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
im_a_teacher: "Ik ben een leraar"
im_a_student: "Ik ben een leerling"
learn_more: "Lees verder"
classroom_in_a_box: "Een kant-en-klare digitale klas voor programmeerlessen."
classroom_in_a_box: "Kant-en-klare programmeerlessen."
codecombat_is: "CodeCombat is een platform waarmee leerlingen leren programmeren door het spelen van een spel." # {change}
our_courses: "Onze lessen zijn specifiek ontwikkeld voor een klasomgeving, zelfs voor leraren zonder programmeerervaring." # {change}
top_screenshots_hint: "Leerlingen schrijven code en zien direct het resultaat van de verandering."
top_screenshots_hint: "Leerlingen schrijven code en zien direct resultaat."
designed_with: "Gemaakt voor leraren"
real_code: "Echte, getypte code"
from_the_first_level: "vanaf het eerste level"
getting_students: "Leerlingen zo snel mogelijk echte code laten schrijven is noodzakelijk voor het leren van programmeer syntax en correcte structuur."
getting_students: "Doordat leerlingen code schrijven in 'echte programmeertaal', leren ze niet alleen hoe computers denken, maar kunnen ze het ook echt toepassen."
educator_resources: "Lesbrieven voor docenten"
course_guides: "en ondersteuningsmateriaal"
teaching_computer_science: "Je hebt geen informatica diploma nodig om te kunnen programmeren, wij verschaffen de materialen waarmee elke docent programmeerles kan geven."
accessible_to: "Bereikbaar voor"
accessible_to: "Toegankelijk voor"
everyone: "iedereen"
democratizing: "Programmeerles toegankelijk maken is onze filosofie. Iedereen moet de kans krijgen om te leren programmeren."
forgot_learning: "Volgens mij hadden ze niet meer door dat ze eigenlijk bezig waren met leren."
wanted_to_do: " Ik wilde altijd al leren programmeren, maar op school was hier nooit aandacht voor."
why_games: "Waarom is spelenderwijs leren belangrijk?"
games_reward: "Games vergroten de productiviteit."
encourage: "Gaming is een middel dat interactie, nieuwschierigheid, en trial-and-error aanmoedigt. Een goed spel daagt de speler uit zijn vaardigheden te perfectioneren, wat hetzelfde noodzakelijke proces is waar leerlingen doorheen gaan wanneer zij iets leren."
encourage: "Iedereen wordt geboren als klein onderzoekertje dat de wereld ontdekt door vallen en opstaan. Deze intrinsieke motivatie om te leren ziet men ook terug in een spelomgeving. Voor de speler wordt 'leren' een middel om het spel te winnen, in plaats van een doel op zich."
excel: "Games helpen bij de"
struggle: "productiviteit-strijd"
kind_of_struggle: "het soort worsteling dat uitmondt in een leerproces dat uitdagend is en "
@ -58,7 +58,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
great_game: "Een goed spel is meer dan alleen medailles en prestaties - het gaat om een reis, nauwkeurig ontworpen puzzels, en de mogelijkheid om uitdagingen vol zelfvertrouwen aan te pakken."
agency: "CodeCombat is een game die de mogelijkheid en het zelfvertrouwen geeft om met echte code te werken, wat zowel beginners als gevorderde helpt bij het schrijven van goede, valide code."
request_demo_title: "Laat je leerlingen vandaag nog starten!"
request_demo_subtitle: "Vraag een demo aan en start binnen een uur met programmeerlessen."
request_demo_subtitle: "Vraag een demo aan en start met programmeerlessen."
get_started_title: "Maak vandaag nog een klas aan!"
get_started_subtitle: "Maak een klas aan, voeg je leerlingen toe, en monitor hun vooruitgang."
request_demo: "Vraag een demo aan"
@ -74,7 +74,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
coming_soon: "Binnenkort beschikbaar!"
courses_available_in: "Lessen zijn beschikbaar in JavaScript, Python, en Java (Java is binnenkort beschikbaar!)"
boast: "Uitdagende raadsels die zowel gamers als fanatieke programmeurs weten te prikkelen."
winning: "Een gouden combinatie van spel-elementen en programmeerhuiswerk, dat samen zorgt voor kind-vriendelijk en oprecht aangenaam onderwijs."
winning: "Een gouden combinatie van spel-elementen en programmeerhuiswerk, dat samen zorgt voor kindvriendelijk en oprecht aangenaam onderwijs."
run_class: "Alles wat je nodig hebt om vandaag nog programmeerlessen in jouw klas te geven, geen voorkennis vereist."
teachers: "Docenten!"
teachers_and_educators: "Docenten & Mentoren"
@ -92,7 +92,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
check_out_wiki: "Bekijk onze nieuwe leraren Wiki"
want_coco: "Wil je CodeCombat op jouw school?"
form_select_role: "Selecteer je rol"
form_select_range: "Selecteer klassengrootte"
form_select_range: "Selecteer klasomvang"
nav:
play: "Levels" # The top nav bar entry where players choose which levels to play
@ -221,19 +221,19 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
"/": "gedeeld door"
"+": "plus"
"-": "min"
# "+=": "add and assign"
# "-=": "subtract and assign"
"+=": "tel op en wijs toe"
"-=": "trek af en wijs toe"
True: "Waar"
true: "waar"
False: "onwaar"
false: "onwaar"
undefined: "ongedefinieerd"
# null: "null"
# nil: "nil"
null: "nul"
nil: "nihil"
None: "Geen"
share_progress_modal:
blurb: "Je gaat snel vooruit! Vertel aan je ouders hoeveel je geleerd hebt van CodeCombat."
blurb: "Je gaat snel vooruit! Vertel je ouders hoeveel je geleerd hebt van CodeCombat."
email_invalid: "E-mailadres klopt niet."
form_blurb: "Vul het e-mailadres van je ouders hieronder in en we zullen het ze laten zien!"
form_label: "E-mailadres"
@ -472,19 +472,19 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
tip_reticulating: "Paden aan het verknopen."
tip_harry: "Je bent een tovenaar, "
tip_great_responsibility: "Met een groots talent voor programmeren komt een grootse debug verantwoordelijkheid."
tip_munchkin: "Als je je groentjes niet opeet zal een munchkin je ontvoeren terwijl je slaapt."
tip_munchkin: "Als je je groenten niet opeet zal een munchkin je ontvoeren terwijl je slaapt."
tip_binary: "Er zijn 10 soorten mensen in de wereld: Mensen die binair kunnen tellen en mensen die dat niet kunnen."
tip_commitment_yoda: "Een programmeur moet de grootste inzet hebben, een meest serieuze geest. ~ Yoda"
tip_no_try: "Doe het. Of doe het niet. Je kunt niet proberen. - Yoda"
tip_patience: "Geduld moet je hebben, jonge Padawan. - Yoda"
tip_documented_bug: "Een gedocumenteerde fout is geen fout; het is deel van het programma."
tip_impossible: "Het lijkt altijd onmogelijk tot het gedaan wordt. - Nelson Mandela"
tip_impossible: "Het lijkt altijd onmogelijk totdat iemand het doet. - Nelson Mandela"
tip_talk_is_cheap: "Je kunt het goed uitleggen, maar toon me de code. - Linus Torvalds"
tip_first_language: "Het ergste dat je kan leren is je eerste programmeertaal. - Alan Kay"
tip_hardware_problem: "Q: Hoeveel programmeurs heb je nodig om een lampje te vervangen? A: Nul, het is een a hardware probleem."
tip_hofstadters_law: "De Wet van Hofstadter: Het duurt altijd langer dan je verwacht, zelfs wanneer je rekening houdt met de Wet van Hofstadter."
tip_premature_optimization: "vroegtijdig optimaliseren is de wortel van al het kwaad. - Donald Knuth"
tip_brute_force: "Wanneer je twijfelt, gebruik brute force. - Ken Thompson"
tip_brute_force: "Wanneer je twijfelt, gebruik dan brute force. - Ken Thompson"
tip_extrapolation: "Er zijn twee soorten mensen: Zij die iets kunnen afleiden van onvolledige gegevens..."
tip_superpower: "Van alle dingen komt programmeren het dichtst in de buurt van een superkracht."
tip_control_destiny: "In echte open source, hebt je het recht om je eigen toekomst te bepalen. - Linus Torvalds"
@ -818,51 +818,51 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
more_info_3: "Het is een goede plek om contact te leggen met andere leerkrachten, die CodeCombat gebruiken."
teachers_quote:
name: "Offerte Formulier" # {change}
title: "Offerte aanvragen" # {change}
subtitle: "Haal CodeCombat jouw klaslokaal, club, school of wijk in!"
email_exists: "Er bestaat al een gebruiker met dit email adres."
name: "Demo Formulier"
title: "Demo aanvragen"
subtitle: "Gebruik CodeCombat voor jouw klas of programmeerclub!"
email_exists: "Er bestaat al een gebruiker met dit emailadres."
phone_number: "Telefoonnummer"
phone_number_help: "Waar kunnen we je bereiken tijdens de werkdag?"
primary_role_label: "Uw Primaire Rol"
role_default: "Selecteer Rol"
primary_role_default: "Selecteer Primaire Rol"
purchaser_role_default: "Selecteer Aanschaf Rol"
phone_number_help: "Waarop kunnen we je bereiken tijdens kantooruren?"
primary_role_label: "Uw primaire rol"
role_default: "Selecteer primaire rol"
primary_role_default: "Selecteer rol"
purchaser_role_default: "Selecteer rol in besluitvorming"
tech_coordinator: "IT coördinator"
advisor: "Adviseur"
principal: "Schoolhoofd"
superintendent: "Leidinggevende"
parent: "Ouder/verzorger"
purchaser_role_label: "Uw aanschaf Rol"
purchaser_role_label: "Uw rol in besluitvorming"
influence_advocate: "Promoten"
evaluate_recommend: "Evalueren/Aanbevelen"
approve_funds: "Budget toewijzen"
no_purchaser_role: "Geen rol in aanschaf keuze"
no_purchaser_role: "Geen rol in besluitvorming"
organization_label: "Schoolnaam"
city: "Stad"
state: "Provincie"
country: "Land"
num_students_help: "Hoeveel leerlingen verwacht u in te schrijven voor CodeCombat?"
num_students_help: "Voor hoeveel leerlingen zou je CodeCombat willen gebruiken?"
num_students_default: "Selecteer bereik"
education_level_label: "Opleidingsniveau van de leerlingen"
education_level_help: "Kies hoeveel van toepassing is."
education_level_label: "Opleidingsniveau van leerlingen"
education_level_help: "Selecteer toepasbare niveau(s)."
elementary_school: "Basisschool"
high_school: "Middelbare school"
please_explain: "(licht a.u.b. toe)"
middle_school: "Brugklas"
high_school: "Middelbare school (bovenbouw)"
please_explain: "(licht toe a.u.b.)"
middle_school: "Middelbare school (onderbouw)"
college_plus: "Hoger Onderwijs"
anything_else: "Is er verder nog iets dat we moeten weten?"
thanks_header: "Bedankt voor het aanvragen van een citaat!" # {change}
thanks_sub_header: "Bedankt voor je interesse in CodeCombat voor jouw school."
thanks_header: "Bedankt voor je demo-aanvraag!"
thanks_sub_header: "Bedankt voor je interesse in CodeCombat."
thanks_p: "Wij zullen spoedig contact met u opnemen. Vragen? Mail ons:" # {change}
# back_to_classes: "Back to Classes"
finish_signup: "Voltooi aanmaken van jouw docenten-account:"
back_to_classes: "Terug naar Klassen"
finish_signup: "Voltooi je docenten-account:"
finish_signup_p: "Maak een account om een klas op te zetten, voeg leerlingen toe en bekijk hun voortgang terwijl ze leren programmeren"
signup_with: "Schrijf je in met:"
connect_with: "Koppel met:"
conversion_warning: "WAARSCHUWING: Je huidige account is een <em>Leerling Account</em>. Wanneer je dit formulier indient zal dit account gewijzigt worden naar een Docenten Account."
learn_more_modal: "Docenten Accounts op CodeCombat hebben de mogelijkheid om de voortgang van studenten te bekijken, inschrijvingen regelen en klaslokalen beheren. Docenten Accounts kunnen niet in een klaslokaal ingeschreven staan - als je ingeschreven staat in een klas met dit account zul je niet langer toegang hebben tot die klas wanneer je jouw account veranderd in een Docenten Account."
create_account: "Maak een docenten-account"
conversion_warning: "WAARSCHUWING: Je huidige account is een <em>Leerling Account</em>. Wanneer je dit formulier indient zal dit account worden omgezet naar een Docenten Account."
learn_more_modal: "Docenten Accounts kunnen de voortgang van leerlingen te zien, inschrijvingen regelen en klaslokalen beheren. Docenten Accounts kunnen niet in een klaslokaal ingeschreven staan - als je ingeschreven staat in een klas met dit account zul je niet langer als leerling toegang hebben tot die klas."
create_account: "Maak een docenten-account aan"
create_account_subtitle: "Krijg toegang tot exclusieve hulpmiddelen voor docenten door CodeCombat in de klas te gebruiken. <strong>Maak een klas aan</strong>, voeg leerlingen toe, en <strong>bekijk hun vooruitgang</strong>!"
convert_account_title: "Verander in een docenten-account"
not: "niet"
@ -871,7 +871,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
versions:
save_version_title: "Nieuwe versie opslaan"
new_major_version: "Nieuwe hoofdversie"
submitting_patch: "Aanpassing wordt Ingediend..."
submitting_patch: "Aanpassing wordt ingediend..."
cla_prefix: "Om bewerkingen op te slaan, moet je eerst akkoord gaan met onze"
cla_url: "CLA"
cla_suffix: "."
@ -1069,10 +1069,10 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
completed: "voltooid:"
invite_students: "Nodig leerlingen uit voor deze klas."
invite_link_header: "Link om aan cursus deel te nemen"
invite_link_p_1: "Geef deze link aan leerlingen waarvan u wilt dat zij de cursus volgen."
invite_link_p_1: "Geef deze link aan leerlingen waarvan je wil dat zij de cursus volgen."
invite_link_p_2: "Of laat ons hun direct een e-mail sturen:"
capacity_used: "Cursus stoelen gebruikt:"
enter_emails: "Voer e-mailadressen van leerlingen in om uit te nodigen, één per regel"
capacity_used: "Cursusplekken gebruikt:"
enter_emails: "Voer e-mailadressen van leerlingen in om hen uit te nodigen, één per regel"
send_invites: "Verstuur uitnodigingen"
creating_class: "Aanmaken klas..."
purchasing_course: "Aanschaffen cursus..."
@ -1080,7 +1080,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
buy_course1: "Koop deze cursus"
select_all_courses: "Selecteer 'Alle cursussen' voor 50% korting!"
all_courses: "Alle cursussen"
number_programming_students: "Aantal informatica leerlingen"
number_programming_students: "Aantal doelgroepleerlingen"
number_total_students: "Totaal aan leerlingen op school"
enter_number_students: "Voer het aantal leerlingen in dat je voor de klas nodig hebt."
name_class: "Geef je klas een naam"
@ -1089,25 +1089,25 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
purchasing_for: "U koopt een licentie voor"
creating_for: "U maakt een klas voor"
for: "voor" # Like in 'for 30 students'
receive_code: "Naderhand ontvangt u een ontgrendelcode om uw leerlingen, waarmee zij zich kunnen inschrijven in uw klas."
receive_code: "Naderhand ontvangt u een ontgrendelcode vooor uw leerlingen, waarmee zij zich kunnen inschrijven in uw klas."
free_trial: "Gratis uitproberen voor leerkrachten!"
get_access: "Individueel toegang krijgen voor evaluatiedoeleinden."
questions: "Vragen?"
teachers_click: "Leerkrachten klik hier"
students_click: "Leerlingen klik hier"
courses_on_coco: "Cursussen van CodeCombat"
designed_to: "Cursussen zijn ontwikkeld ter introductie van ICT-concepten met CodeCombats leuke en leerzame omgevingen. CodeCombat-levels zijn gesturctureerd rond belangrijke concepten om vooruitstrevend leren te bemoedigen, gedurende 5 uur."
designed_to: "Cursussen zijn ontwikkeld ter introductie van ICT-concepten met CodeCombat's leuke en leerzame omgevingen. CodeCombat-levels zijn gesturctureerd rond belangrijke concepten om vooruitstrevend leren te stimuleren, gedurende 5 uur."
more_in_less: "Leer meer in minder tijd"
no_experience: "Geen programmeerervaring nodig"
easy_monitor: "voortgang leerlingen gemakkelijk te bekijken"
purchase_for_class: "Koop een cursus voor de hele klas. Het is makkelijk je leerlingen in te schrijven!"
purchase_for_class: "Koop een cursus voor de hele klas. Schrijf je leerlingen eenvoudig in!"
see_the: "Bekijk de"
more_info: "voor meer informatie."
choose_course: "Kies uw cursus:"
enter_code: "voer een ontgrendelcode in" # {change}
enter_code1: "Voer ontgrendelcode in"
enroll: "Inschrijven"
pick_from_classes: "Kies uit je huidige klas"
pick_from_classes: "Kies uit je huidige klassen"
enter: "Treed toe"
or: "Of"
topics: "Onderwerpen"
@ -1233,10 +1233,10 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
getting_started_3: "Je ziet dan de voortgang van de leerlingen, wanneer ze zich inschrijven en aanmelden voor uw klas."
additional_resources: "Extra bronnen"
additional_resources_1_pref: "Download/print onze"
additional_resources_1_mid: "Cursus 1 Leerkrachtengids" # {change}
additional_resources_1_mid: "Cursus 1 docentenhandleiding"
additional_resources_1_mid2: "en"
additional_resources_1_mid3: "Cursus 2"
additional_resources_1_suff: "uitleg en oplossingen voor elke level." # {change}
additional_resources_1_suff: "uitleg en oplossingen voor elk level."
additional_resources_2_pref: "Maak onze af"
additional_resources_2_suff: "Om twee gratis inschrijvingen te krijgen voor onze overige betaalde cursussen."
additional_resources_3_pref: "Bezoek onze"
@ -1601,7 +1601,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
tutorial_skip: "Sla Tutorial over"
tutorial_not_sure: "Niet zeker wat er aan de hand is?"
tutorial_play_first: "Speel eerst de Tutorial."
simple_ai: "Simpele AI" # {change}
simple_ai: "Simpele K.I."
warmup: "Opwarming"
friends_playing: "Spelende Vrienden"
log_in_for_friends: "Log in om met je vrienden te spelen!"
@ -1623,8 +1623,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
rules: "Regels"
winners: "Winnaars"
league: "Competitie"
red_ai: "KI rood" # "Red AI Wins", at end of multiplayer match playback
blue_ai: "KI blauw" # {change}
red_ai: "K.I. rood" # "Red AI Wins", at end of multiplayer match playback
blue_ai: "K.I. blauw"
wins: "Wint" # At end of multiplayer match playback
humans: "Rood" # Ladder page display team name
ogres: "Blauw"
@ -1698,7 +1698,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
months: "Maanden"
purchase_total: "Totaal"
purchase_button: "Verzend betaling"
your_codes: "Je codes:" # {change}
your_codes: "Jouw codes:"
redeem_codes: "Prepaidcode inwisselen"
prepaid_code: "Prepaidcode"
lookup_code: "Prepaidcode opzoeken"

View file

@ -182,55 +182,55 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
campaign_old_multiplayer: "(Depreciado) Velhas Arenas Multijogador"
campaign_old_multiplayer_description: "Reliquias de uma era mais civilizada.Nenhuma simulação roda nessa antiguidade ,arenas multijogador sem heróis."
# code:
# if: "if" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
# else: "else"
# elif: "else if"
# while: "while"
# loop: "loop"
# for: "for"
# break: "break"
# continue: "continue"
# pass: "pass"
# return: "return"
# then: "then"
# do: "do"
# end: "end"
# function: "function"
# def: "define"
# var: "variable"
# self: "self"
# hero: "hero"
# this: "this"
# or: "or"
# "||": "or"
# and: "and"
# "&&": "and"
# not: "not"
# "!": "not"
# "=": "assign"
# "==": "equals"
# "===": "strictly equals"
# "!=": "does not equal"
# "!==": "does not strictly equal"
# ">": "is greater than"
# ">=": "is greater than or equal"
# "<": "is less than"
# "<=": "is less than or equal"
# "*": "multiplied by"
# "/": "divided by"
# "+": "plus"
# "-": "minus"
# "+=": "add and assign"
# "-=": "subtract and assign"
# True: "True"
# true: "true"
# False: "False"
# false: "false"
# undefined: "undefined"
# null: "null"
# nil: "nil"
# None: "None"
code:
if: "se" # Keywords--these translations show up on hover, so please translate them all, even if it's kind of long. (In the code editor, they will still be in English.)
else: "senão"
elif: "senão se"
while: "enquanto"
loop: "repetir"
for: "para"
break: "parar"
continue: "continuar"
pass: "passar"
return: "devolver"
then: "então"
do: "fazer"
end: "fim"
function: "função"
def: "definir"
var: "variável"
self: "próprio"
hero: "herói"
this: "isto"
or: "ou"
"||": "ou"
and: "e"
"&&": "e"
not: "não"
"!": "não"
"=": "atribuir"
"==": "é igual a"
"===": "é estritamente igual a"
"!=": "não é igual a"
"!==": "não é estritamente igual a"
">": "é maior do que"
">=": "é maior do que ou igual a"
"<": "é menor do que"
"<=": "é menor do que ou igual a"
"*": "multiplicado por"
"/": "dividido por"
"+": "mais"
"-": "menos"
"+=": "adicionar e atribuir"
"-=": "subtrair e atribuir"
True: "Verdadeiro"
true: "verdadeiro"
False: "Falso"
false: "falso"
undefined: "não definido"
null: "nulo"
nil: "nada"
None: "Nenhum"
share_progress_modal:
blurb: "Você está fazendo bastante progresso! Compartilhe com alguém o quanto você já aprendeu com o CodeCombat!" # {change}

View file

@ -187,7 +187,7 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
else: "senão"
elif: "senão se"
while: "enquanto"
loop: "circular"
loop: "repetir"
for: "para"
break: "parar"
continue: "continuar"

View file

@ -37,9 +37,9 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
teaching_computer_science: "Подучавање компјутерских наука не захтева скупу димплому, јер ми пружамо алатке да подржимо едукаторе из свих позадина."
accessible_to: "Доступно"
everyone: "свима"
democratizing: "Демократизација процеса учења кодирања је у средишту наше филозофије. Свако би требало да има прилику да научи кодирање"
democratizing: "Демократизација процеса учења кодирања је у средишту наше филозофије. Свако би требало да има прилику да научи кодирање."
forgot_learning: "Мислим да су већ заборавили да су заправо учили нешто."
wanted_to_do: " Кодирање је нешто што сам одувек желео да радим, и никад нисам мислио да ћу моћи да га научим у школи."
wanted_to_do: " Кодирање је нешто што сам одувек желео да радим и никад нисам мислио да ћу моћи то да научим у школи."
why_games: "Зашто је учење кроз игре важно?"
games_reward: "Игре награђују продуктивну борбу."
encourage: "Гејминг је медиј који подстиче интеракцију, откривање и учење путем покушаја и грешке. Добра игра изазива играча да савлада вештине током времена, што је исти есенцијални процес кроз који ученици пролазе док уче."
@ -297,7 +297,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
save: "Сачувај"
publish: "Објави"
create: "Направи"
# fork: "Fork"
fork: "Форкуј"
play: "Играј" # When used as an action verb, like "Play next level"
retry: "Покушај поново"
actions: "Радње"
@ -675,32 +675,32 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
level_to_unlock: "Ниво који треба откључати:" # Label for which level you have to beat to unlock a particular hero (click a locked hero in the store to see)
restricted_to_certain_heroes: "Само одређени хероји могу да играју овај ниво."
# skill_docs:
# function: "function" # skill types
# method: "method"
# snippet: "snippet"
# number: "number"
# array: "array"
# object: "object"
# string: "string"
skill_docs:
function: "функција" # skill types
method: "метод"
snippet: "исечак"
number: "број"
array: "низ"
object: "објекат"
string: "стринг"
# writable: "writable" # Hover over "attack" in Your Skills while playing a level to see most of this
# read_only: "read-only"
# action: "Action"
# spell: "Spell"
# action_name: "name"
# action_cooldown: "Takes"
# action_specific_cooldown: "Cooldown"
# action_damage: "Damage"
# action_range: "Range"
# action_radius: "Radius"
# action_duration: "Duration"
# example: "Example"
# ex: "ex" # Abbreviation of "example"
# current_value: "Current Value"
# default_value: "Default value"
# parameters: "Parameters"
# returns: "Returns"
# granted_by: "Granted by"
action: "Aкција"
spell: "Магија"
action_name: "име"
action_cooldown: "Потребно"
action_specific_cooldown: "Хлађење"
action_damage: "Штета"
action_range: "Домет"
action_radius: "Опсег"
action_duration: "Трајање"
example: "Пример"
ex: "нпр" # Abbreviation of "example"
current_value: "Тренутна вредност"
default_value: "Подразумевана вредност"
parameters: "Параметри"
returns: "Враћа"
granted_by: "Додељено од"
save_load:
granularity_saved_games: "Сачувано"
@ -732,7 +732,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
story_link: "Прича"
press_link: "Прес"
mission_title: "Наша мисија: да учинимо програмирање доступним сваком ученику на планети."
mission_description_1: "<strong>Програмирање је магично</strong>. То је могућност да створиш ствари из чисте имагинације. Ми смо покренули CodeCombat да бисмо дали ученицима осећај чаробњачке моћи на дохват руке користећи<strong>куцани код</strong>."
mission_description_1: "<strong>Програмирање је магично</strong>. То је могућност да створиш ствари из чисте имагинације. Ми смо покренули CodeCombat да бисмо дали ученицима осећај чаробњачке моћи на дохват руке користећи <strong>куцани код</strong>."
mission_description_2: "Како се испоставља, то им омогућава да такође уче брже. МНОГО брже. То је као конверзација уместо коришћења упутства. Желимо да донесему ту конверзацију у сваку школу и <strong>сваком ученику</strong>, јер би свако требало да добије шансу да научи магију програмирања."
team_title: "Упознај CodeCombat тим"
team_values: "Ми ценимо отворен дијалог пун поштовања, где најбоља идеја побеђује. Наше одлуке су засноване на истраживању потрошача и наш процес је фокусиран на достављање опипљивих резултата за њих. Свако је практичан, од нашег генералног директора до наших Github сарадника, јер ми ценимо раст и учење у нашем тиму."
@ -768,7 +768,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
number_contributors: "Преко 450 сарадника је дало своју подршку и време овом пројекту."
story_title: "Наша прича до сад"
story_subtitle: "Од 2013, CodeCombat је израстао из обичних скупова скица у праву успешну игру."
story_statistic_1a: "Више од 5 000 000"
story_statistic_1a: "Више од 5.000.000"
story_statistic_1b: "играча укупно"
story_statistic_1c: "је започело њихово програмерско путовање кроз CodeCombat"
story_statistic_2a: "Преведени смо на преко 50 језика — наши играчи долазе из"
@ -784,7 +784,7 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
jobs_benefits: "Бенефиције за запослене"
jobs_benefit_4: "Неограничен одмор"
jobs_benefit_5: "Професионални развој и континуирана подршка образовања - бесплатне књиге и игре!"
# jobs_benefit_6: "Медицинско (gold), зубно, очно"
jobs_benefit_6: "Медицинско (gold), дентално, очно осигурање"
jobs_benefit_7: "Sit-stand радни столови за свакога"
# jobs_benefit_9: "10-year option exercise window"
jobs_benefit_10: "Породиљско одсуство: 10 плаћених недеља, наредних 6 недеља 55% плате"
@ -860,12 +860,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
finish_signup_p: "Направи налог да оснујеш разред, додаш своје ученике и пратиш њихов напредак док уче компјутерске науке."
signup_with: "Пријави се са:"
connect_with: "Повежи се са:"
# conversion_warning: "WARNING: Your current account is a <em>Student Account</em>. Once you submit this form, your account will be updated to a Teacher Account."
# learn_more_modal: "Teacher accounts on CodeCombat have the ability to monitor student progress, assign enrollments and manage classrooms. Teacher accounts cannot be a part of a classroom - if you are currently enrolled in a class using this account, you will no longer be able to access it once you update to a Teacher Account."
conversion_warning: "УПОЗОРЕЊЕ: Твој тренутни налог је <em>Студентски Налог</em>. Након што пошаљеш овај формулар, твој налог ће бити надограђен у Учитељски Налог."
learn_more_modal: "Учитељски налози на CodeCombat-у имају могућност посматрања напретка ученика, додељивања уписа и управљања учионицама. Учитељски налози не могу бити део учионице - ако си тренутно уписан у разред преко овог налога, нећеш више моћи да му приступиш кад ажурираш у Учитељски Налог."
create_account: "Направи учитељски налог"
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!"
# convert_account_title: "Update to Teacher Account"
# not: "Not"
create_account_subtitle: "Добиј приступ алатима само за учитеље за коришћење CodeCombat-а у учионици. <strong>Подеси разред</strong>, додај своје ученике, и <strong>посматрај њихов напредак</strong>!"
convert_account_title: "Ажурирај у Учитељски Налог"
not: "Није"
setup_a_class: "Подеси разред"
versions:
@ -880,18 +880,18 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
contact:
contact_us: "Контактирај CodeCombat"
welcome: "Драго нам је што нас контактираш! Искористи ову форму да нам пошаљеш мејл. "
welcome: "Драго нам је што нас контактираш! Искористи овај формулар да нам пошаљеш мејл. "
forum_prefix: "За било шта јавно, посети "
forum_page: "наш форум."
# forum_suffix: " instead."
# faq_prefix: "There's also a"
# faq: "FAQ"
# subscribe_prefix: "If you need help figuring out a level, please"
# subscribe: "buy a CodeCombat subscription"
# subscribe_suffix: "and we'll be happy to help you with your code."
# subscriber_support: "Since you're a CodeCombat subscriber, your email will get our priority support."
# screenshot_included: "Screenshot included."
# where_reply: "Where should we reply?"
forum_page: "наш форум"
forum_suffix: " уместо тога."
faq_prefix: "Такође, ту је"
faq: "FAQ"
subscribe_prefix: "Ако ти треба помоћ да разумеш ниво, молимо да"
subscribe: "купиш CodeCombat претплату"
subscribe_suffix: "и радо ћемо ти помоћи у твом коду."
subscriber_support: "Пошто си CodeCombat претплатник, твој мејл ће имати приоритет у нашој подршци."
screenshot_included: "Снимак екрана укључен."
where_reply: "Где треба да одговоримо?"
send: "Пошаљи повратну информацију"
account_settings:
@ -910,24 +910,24 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# god_mode: "God Mode"
password_tab: "Шифра"
emails_tab: "Мејлови"
# admin: "Admin"
admin: "Администратор"
manage_subscription: "Кликни овде да би управљао својом претплатом."
new_password: "Нова Шифра"
new_password_verify: "Потврди"
# type_in_email: "Type in your email to confirm account deletion."
# type_in_email_progress: "Type in your email to confirm deleting your progress."
# type_in_password: "Also, type in your password."
type_in_email: "Упиши свој мејл да потврдиш брисање налога."
type_in_email_progress: "Упиши свој мејл да потврдиш брисање свог напретка."
type_in_password: "Такође, упиши своју шифру."
email_subscriptions: "Мејл претплате"
# email_subscriptions_none: "No Email Subscriptions."
email_subscriptions_none: "Без мејл претплата."
email_announcements: "Обавештења"
email_announcements_description: "Прими мејл за најновије вести и достигнућа на CodeCombat-у"
# email_notifications: "Notifications"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
# email_any_notes: "Any Notifications"
# email_any_notes_description: "Disable to stop all activity notification emails."
email_notifications: "Обавештења"
email_notifications_summary: "Контроле за персонализована, аутоматска мејл обавештења вазана за твоју CodeCombat активност."
email_any_notes: "Сва обавештења"
email_any_notes_description: "Онемогући да би прекинуо сва мејл обавештења о активности."
email_news: "Вести"
email_recruit_notes: "Пословне могућности"
# email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
email_recruit_notes_description: "Ако играш јако добро, можда ћемо те контактирати о томе да добијеш (бољи) посао."
contributor_emails: "Мејлови реда сарадника"
contribute_prefix: "Тражимо људе који би нам се придружили! Погледај "
contribute_page: "страницу за сарадњу"
@ -938,15 +938,15 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
password_mismatch: "Шифре се не слажу."
password_repeat: "Понови своју шифру."
# keyboard_shortcuts:
# keyboard_shortcuts: "Keyboard Shortcuts"
# space: "Space"
# enter: "Enter"
# press_enter: "press enter"
# escape: "Escape"
# shift: "Shift"
# run_code: "Run current code."
# run_real_time: "Run in real time."
keyboard_shortcuts:
keyboard_shortcuts: "Пречице за тастатуру"
space: "Space"
enter: "Enter"
press_enter: "притисни enter"
escape: "Escape"
shift: "Shift"
run_code: "Покрени тренутни код."
run_real_time: "Покрени у реалном времену."
# continue_script: "Continue past current script."
# skip_scripts: "Skip past all skippable scripts."
# toggle_playback: "Toggle play/pause."
@ -959,142 +959,142 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# beautify: "Beautify your code by standardizing its formatting."
# maximize_editor: "Maximize/minimize code editor."
# community:
# main_title: "CodeCombat Community"
# introduction: "Check out the ways you can get involved below and decide what sounds the most fun. We look forward to working with you!"
# level_editor_prefix: "Use the CodeCombat"
# level_editor_suffix: "to create and edit levels. Users have created levels for their classes, friends, hackathons, students, and siblings. If create a new level sounds intimidating you can start by forking one of ours!"
# thang_editor_prefix: "We call units within the game 'thangs'. Use the"
# thang_editor_suffix: "to modify the CodeCombat source artwork. Allow units to throw projectiles, alter the direction of an animation, change a unit's hit points, or upload your own vector sprites."
# article_editor_prefix: "See a mistake in some of our docs? Want to make some instructions for your own creations? Check out the"
# article_editor_suffix: "and help CodeCombat players get the most out of their playtime."
# find_us: "Find us on these sites"
# social_github: "Check out all our code on GitHub"
# social_blog: "Read the CodeCombat blog on Sett"
# social_discource: "Join the discussion on our Discourse forum"
# social_facebook: "Like CodeCombat on Facebook"
# social_twitter: "Follow CodeCombat on Twitter"
# social_gplus: "Join CodeCombat on Google+"
# social_slack: "Chat with us in the public CodeCombat Slack channel"
# contribute_to_the_project: "Contribute to the project"
community:
main_title: "CodeCombat Заједница"
introduction: "Погледај испод како можеш да се укључиш и одлучи шта звучи најзанимљивије. Радујемо се прилици да радимо са тобом!"
level_editor_prefix: "Користи CodeCombat"
level_editor_suffix: "да правиш и уређујеш нивое. Корисници су направили нивое за њихове разреде, пријатеље, хакатоне, ученике и браћу и сестре. Ако прављење новог нивоа звучи застрашујуће, можеш да почнеш форковањем једног од наших!"
thang_editor_prefix: "Ми зовемо јединице у игри 'thangs'. Користи"
thang_editor_suffix: "да модификујеш CodeCombat изворне илустрације. Дозволи јединицама да бацају пројектиле, измени дирекцију анимације, промени хит поене јединице или отпреми сопствене векторске спрајтове."
article_editor_prefix: "Видиш грешку у неком од наших докумената? Желиш да направиш инструкције за сопствене креације? Погледај"
article_editor_suffix: "и помози CodeCombat играчима да добију највише од свог играња."
find_us: "Нађи нас на овим сајтовима"
social_github: "Погледај цео наш код на GitHub-у"
social_blog: "Читај CodeCombat блог на Sett-у"
social_discource: "Придружи се дискусији на нашем Discourse форуму"
social_facebook: "Лајкуј CodeCombat на Фејсбуку"
social_twitter: "Запрати CodeCombat на Твитеру"
social_gplus: "Придружи се CodeCombat-у на Гугл+"
social_slack: "Ћаскај са нама на јавном CodeCombat Slack каналу"
contribute_to_the_project: "Допринеси пројекту"
# clans:
# clan: "Clan"
# clans: "Clans"
# new_name: "New clan name"
# new_description: "New clan description"
# make_private: "Make clan private"
# subs_only: "subscribers only"
# create_clan: "Create New Clan"
# private_preview: "Preview"
# private_clans: "Private Clans"
# public_clans: "Public Clans"
# my_clans: "My Clans"
# clan_name: "Clan Name"
# name: "Name"
# chieftain: "Chieftain"
# type: "Type"
# edit_clan_name: "Edit Clan Name"
# edit_clan_description: "Edit Clan Description"
# edit_name: "edit name"
# edit_description: "edit description"
# private: "(private)"
# summary: "Summary"
# average_level: "Average Level"
# average_achievements: "Average Achievements"
# delete_clan: "Delete Clan"
# leave_clan: "Leave Clan"
# join_clan: "Join Clan"
# invite_1: "Invite:"
# invite_2: "*Invite players to this Clan by sending them this link."
# members: "Members"
# progress: "Progress"
# not_started_1: "not started"
# started_1: "started"
# complete_1: "complete"
# exp_levels: "Expand levels"
# rem_hero: "Remove Hero"
# status: "Status"
# complete_2: "Complete"
# started_2: "Started"
# not_started_2: "Not Started"
# view_solution: "Click to view solution."
# view_attempt: "Click to view attempt."
# latest_achievement: "Latest Achievement"
# playtime: "Playtime"
# last_played: "Last played"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances."
# track_concepts1: "Track concepts"
# track_concepts2a: "learned by each student"
# track_concepts2b: "learned by each member"
# track_concepts3a: "Track levels completed for each student"
# track_concepts3b: "Track levels completed for each member"
# track_concepts4a: "See your students'"
# track_concepts4b: "See your members'"
# track_concepts5: "solutions"
# track_concepts6a: "Sort students by name or progress"
# track_concepts6b: "Sort members by name or progress"
# track_concepts7: "Requires invitation"
# track_concepts8: "to join"
# private_require_sub: "Private clans require a subscription to create or join."
clans:
clan: "Клан"
clans: "Кланови"
new_name: "Име новог клана"
new_description: "Опис новог клана"
make_private: "Направи клан приватним"
subs_only: "само за претплатнике"
create_clan: "Направи нови клан"
private_preview: "Приказ"
private_clans: "Приватни кланови"
public_clans: "Јавни кланови"
my_clans: "Моји кланови"
clan_name: "Име клана"
name: "Име"
chieftain: "Поглавица"
type: "Врста"
edit_clan_name: "Измени име клана"
edit_clan_description: "Измени опис клана"
edit_name: "измени име"
edit_description: "измени опис"
private: "(приватан)"
summary: "Преглед"
average_level: "Просечни ниво"
average_achievements: "Просечна достигнућа"
delete_clan: "Избриши клан"
leave_clan: "Напусти клан"
join_clan: "Придружи се клану"
invite_1: "Позови:"
invite_2: "*Позови играче у овај Клан тако што ћеш им послати овај линк."
members: "Чланови"
progress: "Напредак"
not_started_1: "није започето"
started_1: "започето"
complete_1: "заврши"
exp_levels: "Прошири нивое"
rem_hero: "Уклони Хероја"
status: "Статус"
complete_2: "Заврши"
started_2: "Започето"
not_started_2: "Није започето"
view_solution: "Кликни да видиш решење."
view_attempt: "Кликни да видиш покушај."
latest_achievement: "Последње достигнуће"
playtime: "Време игања"
last_played: "Последњи пут играно"
leagues_explanation: "Играј у лиги против других чланова клана у овим мултиплејер инстанцама арене."
track_concepts1: "Прати концепте"
track_concepts2a: "научене од сваког ученика"
track_concepts2b: "научене од сваког члана"
track_concepts3a: "Прати завршене нивое за сваког ученика"
track_concepts3b: "Прати завршене нивое за сваког члана"
track_concepts4a: "Види од својих ученика"
track_concepts4b: "Види од својих чланова"
track_concepts5: "решења"
track_concepts6a: "Сортирај ученике према имену или напретку"
track_concepts6b: "Сортирај чланове према имену или напретку"
track_concepts7: "Захтева позив"
track_concepts8: "за придруживање"
private_require_sub: "Приватни кланови захтевају претплату да би могао да их направиш или да им се придружиш."
# courses:
# course: "Course"
# courses: "courses"
# create_new_class: "Create New Class"
# not_enrolled: "You are not enrolled in this course."
# visit_pref: "Please visit the"
# visit_suf: "page to enroll."
# select_class: "Select one of your classes"
# unnamed: "*unnamed*"
# select: "Select"
# unnamed_class: "Unnamed Class"
# edit_settings: "edit class settings"
# edit_settings1: "Edit Class Settings"
# progress: "Class Progress"
# add_students: "Add Students"
# stats: "Statistics"
# total_students: "Total students:"
# average_time: "Average level play time:"
# total_time: "Total play time:"
# average_levels: "Average levels completed:"
# total_levels: "Total levels completed:"
# furthest_level: "Furthest level completed:"
# students: "Students"
# students1: "students"
# concepts: "Concepts"
# levels: "levels"
# played: "Played"
# play_time: "Play time:"
# completed: "Completed:"
# invite_students: "Invite students to join this class."
# invite_link_header: "Link to join course"
# invite_link_p_1: "Give this link to students you would like to have join the course."
# invite_link_p_2: "Or have us email them directly:"
courses:
course: "Курс"
courses: "курсеви"
create_new_class: "Направи нови разред"
not_enrolled: "Ниси уписан на овај курс."
visit_pref: "Молимо да посетиш"
visit_suf: "страницу да би се уписао."
select_class: "Изабери један од својих разреда"
unnamed: "*неименован*"
select: "Изабери"
unnamed_class: "Неименован разред"
edit_settings: "измени подешавања разреда"
edit_settings1: "Измени подешавања разреда"
progress: "Напредак разреда"
add_students: "Додај ученике"
stats: "Статистика"
total_students: "Укупно ученика:"
average_time: "Просечно време играња нивоа:"
total_time: "Укупно време играња:"
average_levels: "Просечан број завршених нивоа:"
total_levels: "Укупно завршених нивоа:"
furthest_level: "Најдаљи завршен ниво:"
students: "Ученици"
students1: "ученици"
concepts: "Концепти"
levels: "нивои"
played: "Одиграно"
play_time: "Време играња:"
completed: "Завршено:"
invite_students: "Позови ученике да се придруже овом разреду."
invite_link_header: "Линк за придруживање курсу"
invite_link_p_1: "Дај овај линк ученицима за које желиш да се придруже курсу."
invite_link_p_2: "Или дај нама да им директно пошаљемо мејл:"
# capacity_used: "Course slots used:"
# enter_emails: "Enter student emails to invite, one per line"
# send_invites: "Send Invites"
# creating_class: "Creating class..."
# purchasing_course: "Purchasing course..."
# buy_course: "Buy Course"
# buy_course1: "Buy this course"
# select_all_courses: "Select 'All Courses' for a 50% discount!"
# all_courses: "All Courses"
# number_programming_students: "Number of Programming Students"
# number_total_students: "Total Students in School/District"
# enter_number_students: "Enter the number of students you need for this class."
# name_class: "Name your class"
enter_emails: "Упиши мејлове ученика, један по линији"
send_invites: "Пошаљи позиве"
creating_class: "Креирање разреда..."
purchasing_course: "Куповина курса..."
buy_course: "Купи курс"
buy_course1: "Купи овај курс"
select_all_courses: "Изабери 'Сви курсеви' за 50% попуста!"
all_courses: "Сви курсеви"
number_programming_students: "Број ученика који програмирају"
number_total_students: "Укупан број ученика у школи/округу"
enter_number_students: "Унеси број ученика који ти треба за овај разред."
name_class: "Именуј свој разред"
# displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later."
# buy: "Buy"
# purchasing_for: "You are purchasing a license for"
# creating_for: "You are creating a class for"
# for: "for" # Like in 'for 30 students'
buy: "Купи"
purchasing_for: "Купујеш лиценцу за"
creating_for: "Правиш разред за"
for: "за" # Like in 'for 30 students'
# receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class."
# free_trial: "Free trial for teachers!"
free_trial: "Бесплатна пробна верзија за учитеље!"
# get_access: "to get individual access to all courses for evalutaion purposes."
# questions: "Questions?"
# teachers_click: "Teachers Click Here"
# students_click: "Students Click Here"
questions: "Питања?"
teachers_click: "Учитељи кликните овде"
students_click: "Ученици кликните овде"
# courses_on_coco: "Courses on CodeCombat"
# designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours."
# more_in_less: "Learn more in less time"
@ -1488,12 +1488,12 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# add_system_title: "Add Systems to Level"
# done_adding: "Done Adding"
# article:
# edit_btn_preview: "Preview"
# edit_article_title: "Edit Article"
article:
edit_btn_preview: "Приказ"
edit_article_title: "Измени Чланак"
# polls:
# priority: "Priority"
polls:
priority: "Приоритет"
# contribute:
# page_title: "Contributing"
@ -1629,33 +1629,33 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# humans: "Red" # Ladder page display team name
# ogres: "Blue"
# user:
# stats: "Stats"
# singleplayer_title: "Singleplayer Levels"
# multiplayer_title: "Multiplayer Levels"
# achievements_title: "Achievements"
# last_played: "Last Played"
# status: "Status"
# status_completed: "Completed"
# status_unfinished: "Unfinished"
user:
stats: "Статистика"
singleplayer_title: "Нивои за једног играча"
multiplayer_title: "Нивои за више играча"
achievements_title: "Достигнућа"
last_played: "Последњи игран"
status: "Статус"
status_completed: "Завршен"
status_unfinished: "Незавршен"
# no_singleplayer: "No Singleplayer games played yet."
# no_multiplayer: "No Multiplayer games played yet."
# no_achievements: "No Achievements earned yet."
# favorite_prefix: "Favorite language is "
# favorite_postfix: "."
# not_member_of_clans: "Not a member of any clans yet."
no_achievements: "Још увек нема стечених достигнућа."
favorite_prefix: "Омиљени језик је "
favorite_postfix: "."
not_member_of_clans: "Ниси члан ниједног клана још увек."
# achievements:
# last_earned: "Last Earned"
# amount_achieved: "Amount"
# achievement: "Achievement"
# current_xp_prefix: ""
# current_xp_postfix: " in total"
# new_xp_prefix: ""
# new_xp_postfix: " earned"
# left_xp_prefix: ""
# left_xp_infix: " until level "
# left_xp_postfix: ""
achievements:
last_earned: "Последње стечено"
amount_achieved: "Количина"
achievement: "Достигнуће"
current_xp_prefix: ""
current_xp_postfix: " укупно"
new_xp_prefix: ""
new_xp_postfix: " стечено"
left_xp_prefix: ""
left_xp_infix: " до нивоа "
left_xp_postfix: ""
account:
payments: "Уплате"
@ -1711,10 +1711,10 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# you_can2: "purchase a prepaid code"
# you_can3: "that can be applied to your own account or given to others."
# coppa_deny:
# text1: "Cant wait to learn programming?"
# text2: "Ask your parents to create an account for you!"
# close: "Close Window"
coppa_deny:
text1: "Не можеш да дочекаш да научиш програмирање?"
text2: "Питај своје родитеље да направе налог за тебе!"
close: "Затвори прозор"
# loading_error:
# could_not_load: "Error loading from server"
@ -1747,50 +1747,50 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
hero: "Херој"
campaigns: "Кампање"
# concepts:
# advanced_strings: "Advanced Strings"
# algorithms: "Algorithms"
# arguments: "Arguments"
# arithmetic: "Arithmetic"
# arrays: "Arrays"
# basic_syntax: "Basic Syntax"
# boolean_logic: "Boolean Logic"
# break_statements: "Break Statements"
# classes: "Classes"
# continue_statements: "Continue Statements"
# for_loops: "For Loops"
# functions: "Functions"
# graphics: "Graphics"
# if_statements: "If Statements"
# input_handling: "Input Handling"
# math_operations: "Math Operations"
# object_literals: "Object Literals"
# parameters: "Parameters"
# strings: "Strings"
# variables: "Variables"
# vectors: "Vectors"
# while_loops: "While Loops"
# recursion: "Recursion"
concepts:
advanced_strings: "Напредни стрингови"
algorithms: "Алгоритми"
arguments: "Аргументи"
arithmetic: "Аритметика"
arrays: "Низови"
basic_syntax: "Основна синтакса"
boolean_logic: "Булова логика"
break_statements: "Break искази"
classes: "Класе"
continue_statements: "Continue искази"
for_loops: "For петље"
functions: "Функције"
graphics: "Графика"
if_statements: "If искази"
input_handling: "Руковање инпутом"
math_operations: "Математичке операције"
object_literals: "Објекат литерали"
parameters: "Параметри"
strings: "Стрингови"
variables: "Променљиве"
vectors: "Вектори"
while_loops: "While петље"
recursion: "Рекурзије"
# delta:
# added: "Added"
# modified: "Modified"
# not_modified: "Not Modified"
# deleted: "Deleted"
# moved_index: "Moved Index"
delta:
added: "Додато"
modified: "Измењено"
not_modified: "Није измењено"
deleted: "Избрисано"
moved_index: "Померен индекс"
# text_diff: "Text Diff"
# merge_conflict_with: "MERGE CONFLICT WITH"
# no_changes: "No Changes"
multiplayer:
multiplayer_title: "Подешавање мода за више играча" # We'll be changing this around significantly soon. Until then, it's not important to translate.
# multiplayer_toggle: "Enable multiplayer"
# multiplayer_toggle_description: "Allow others to join your game."
multiplayer_toggle: "Омогући мултиплејер"
multiplayer_toggle_description: "Дозволи другима да се придруже твојој игри."
multiplayer_link_description: "Дај овај линк онима које желиш да ти се придруже."
multiplayer_hint_label: "Мала помоћ"
multiplayer_hint: " Кликни на линк да обележиш све, затим притисни Apple-C или Ctrl-C да копираш линк."
multiplayer_coming_soon: "Стиже још нових карактеристика!"
# multiplayer_sign_in_leaderboard: "Sign in or create an account and get your solution on the leaderboard."
multiplayer_sign_in_leaderboard: "Пријави се или направи налог и стави своје решење на ранг листу."
# legal:
# page_title: "Legal"
@ -1873,15 +1873,15 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
year: "Година"
day: "Дан"
month: "Месец"
january: "Јануар"
february: "Фебруар"
march: "Март"
april: "Април"
may: "Мај"
june: "Јун"
july: "Јул"
august: "Август"
september: "Септембар"
october: "Октобар"
november: "Новембар"
december: "Децембар"
january: "јануар"
february: "фебруар"
march: "март"
april: "април"
may: "мај"
june: "јун"
july: "јул"
august: "август"
september: "септембар"
october: "октобар"
november: "новембар"
december: "децембар"

View file

@ -38,10 +38,10 @@ module.exports = nativeDescription: "Українська", englishDescription:
accessible_to: "Доступно" # Accessible to
everyone: "кожному" # everyone
democratizing: "Навчання, доступне кожному, — наша головна мета. Кожен повинен мати можливість навчитись програмувати." # Democratizing the process of learning coding is at the core of our philosophy. Everyone should be able to learn to code.
# forgot_learning: "I think they actually forgot that they were actually learning something."
# wanted_to_do: " Coding is something I've always wanted to do, and I never thought I would be able to learn it in school."
# why_games: "Why is learning through games important?"
# games_reward: "Games reward the productive struggle."
forgot_learning: "Таке враження, що, граючи, вони забули, що це навчання."
wanted_to_do: " Програмування — те, чим я завжди хотів займатись, ніколи не думав, що буду вчити це в школі."
why_games: "Чому навчання через гру важливе?"
games_reward: "Гра — винагорода за зусилля."
encourage: "Гра заохочує спілкуватись, відкривати щось нове і вчитись на помилках. Хороша гра змушує гравця весь час покращувати власні навички, що подібно до процесу роботи учнів під час навчання." # Gaming is a medium that encourages interaction, discovery, and trial-and-error. A good game challenges the player to master skills over time, which is the same critical process students go through as they learn.
# excel: "Games excel at rewarding"
# struggle: "productive struggle"

View file

@ -15,7 +15,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
or_ipad: "Hoặc tải phiên bản dành cho iPad"
new_home:
slogan: "Tựa game hấp dẫn nhất để học lập trình."
slogan: "Trò chơi hấp dẫn nhất để học lập trình."
classroom_edition: "Phiên bản Lớp học:"
learn_to_code: "Học lập trình:"
teacher: "Giáo viên"
@ -24,28 +24,28 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
im_a_teacher: "Tôi là Giáo viên"
im_a_student: "Tôi là Học viên"
learn_more: "Tìm hiểu thêm"
classroom_in_a_box: "Một lớp học đặc biệt cho bộ môn công nghệ thông tin."
codecombat_is: "CodeCombat là nền tảng <strong>cho học sinh</strong> tiếp cận với bộ môn công nghệ thông tin bằng cách chơi game."
our_courses: "Các khóa học của chúng tôi đã được thử nghiệm để <strong>triển khai trong lớp học</strong>, thậm chí được yêu thích bởi các giáo viên có ít hoặc không có kinh nghiệm lập trình."
top_screenshots_hint: "Học viên viết code và có thể cập nhật kết quả ngay lập tức"
classroom_in_a_box: "Một lớp học đặc biệt dành cho bộ môn công nghệ thông tin."
codecombat_is: "CodeCombat là nền tảng <strong>giúp cho học sinh</strong> tiếp cận với bộ môn công nghệ thông tin bằng cách chơi game."
our_courses: "Các khóa học của chúng tôi đã được thử nghiệm để <strong>triển khai trong các lớp học</strong>, thậm chí được sử dụng bởi các giáo viên có ít hoặc không có kinh nghiệm lập trình."
top_screenshots_hint: "Học viên viết code và cập nhật kết quả ngay lập tức"
designed_with: "Được thiết kế để dạy học"
real_code: "Thực tế, tự viết code"
from_the_first_level: "ngay từ trình độ đầu tiên"
getting_students: "Cho phép học viên viết code ngay từ đầu là vô cùng quan trọng trong việc làm quen cú pháp và học cấu trúc lập trình."
educator_resources: "Xây dựng bài giảng"
course_guides: "và các khóa học"
teaching_computer_science: "Việc dạy bộ môn công nghệ thông tin không nhất thiết yêu cầu một tấm bằng đắt tiền, bởi vì chúng tôi cung cấp sẵn công cụ dành cho người giảng dạy dù cho bạn là ai."
teaching_computer_science: "Việc giảng dạy bộ môn công nghệ thông tin không nhất thiết yêu cầu một tấm bằng đắt tiền, bởi vì chúng tôi cung cấp sẵn công cụ dành cho các giảng viên."
accessible_to: "Tiếp cận dễ dàng"
everyone: "cho mọi người"
democratizing: "Xã hội hóa quá trình học lập trình là tôn chỉ của chúng tôi. Mọi người đều có thể học code."
forgot_learning: "Tôi nghĩ học viên không để ý rằng họ thực sự đang học."
wanted_to_do: "Lập trình là điều mà em luôn muốn làm, em không thể nghĩ rằng em có thể học nó ngay trường."
wanted_to_do: "Lập trình là điều mà em luôn muốn làm, em không thể nghĩ rằng em có thể học nó ngay tại trường."
why_games: "Tại sao học thông qua chơi game lại quan trọng?"
games_reward: "Game cổ vũ một cách tích cực."
encourage: "Game là môi trường khuyến khích sự tương tác, khám phá, và tinh thần không sợ thất bại. Một tựa game hay sẽ thử thách người chơi giúp họ dần dần hoàn thiện kĩ năng, điều này cũng giống như quá trình học tập của một học viên trong lớp học vậy."
encourage: "Game là môi trường khuyến khích sự tương tác, khám phá, và tinh thần không sợ thất bại. Một tựa game hay sẽ thử thách người chơi giúp họ dần dần hoàn thiện kĩ năng, điều này cũng giống như quá trình học tập của một học sinh trong lớp học vậy."
excel: "Game cổ vũ"
struggle: "những cố gắng tích cục"
kind_of_struggle: "những sự cố gắng trong học tập mà thực sự dem lại sự cuốn hút"
kind_of_struggle: "những sự cố gắng trong học tập mà thực sự dem lại sự cuốn hút, "
motivating: "tạo động lực"
not_tedious: "mà không hề buồn chán."
gaming_is_good: "Nghiên cứu chứng minh chơi game tốt cho não bộ của trẻ. (đúng vậy đấy!)"
@ -56,7 +56,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
feedback: "Việc chơi game cũng giúp học sinh tương tác để có thể phát triển tư duy một cách toàn diện hơn, thay vì chỉ biết đến đáp án “đúng” hoặc “sai”."
real_game: "Game thật, code thật."
great_game: "Một tựa game hay không chỉ cần những huy chương hay thành tích hào nhoáng - quan trọng hơn hết là trải nghiệm của người chơi, những thử thách tinh tế, đồng thời là khả năng đối đầu và vượt qua thử thách."
agency: "CodeCombat là game đưa ra cho người chơi những thử thách buộc họ phải vượt qua bằng cách viết code, điều này giúp cho cả những người mới bắt đầu và những học viên trình độ nâng cao luyện tập khả năng lập trình thành thạo."
agency: "CodeCombat là trò chơi đưa ra cho người chơi những thử thách buộc họ phải vượt qua bằng cách viết code, điều này giúp cho cả những người mới bắt đầu và những học viên trình độ nâng cao luyện tập khả năng lập trình thành thạo."
request_demo_title: "Bắt đầu giảng dạy ngay hôm nay!"
request_demo_subtitle: "Yêu cầu demo và chuẩn bị sẵn sàng cho học viên của bạn chỉ trong vòng một tiếng đồng hồ."
get_started_title: "Xây dựng lớp học của bạn ngay hôm nay"
@ -73,7 +73,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
lesson_time: "Thời gian học:"
coming_soon: "Sắp ra mắt!"
courses_available_in: "Các khóa học giảng dạy JavaScript, Python, và Java (sắp ra mắt!)"
boast: "Đưa ra những câu đố đủ khó để hấp dẫn cả game thủ và coder."
boast: "Đưa ra những câu đố đủ khó để hấp dẫn cả các game thủ và coder."
winning: "Một sự kết hợp hoàn hảo giữa game RPG và bài tập lập trình, giúp việc giáo dục trẻ thú vị hơn bao giờ hết."
run_class: "Mọi thứ bạn cần để tổ chức một lớp học công nghệ thông tin ngay hôm nay, không yêu cầu kinh nghiệm lập trình."
teachers: "Giáo viên!"
@ -84,7 +84,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
join_class: "Tham gia Lớp học"
role: "Vai trò của bạn:"
student_count: "Số học viên:"
start_playing_for_free: "Bắt đầu Chơi Miễn phí!"
start_playing_for_free: "Bắt Đầu Chơi Miễn Phí!"
students_and_players: "Học viên và Người chơi"
goto_classes: "Tới Lớp học của tôi" # {change}
view_profile: "Xem hồ sơ của tôi"
@ -259,7 +259,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
sign_up: "Đăng Ký"
log_in: "đăng nhập với mật khẩu"
required: "Bạn cần phải đăng nhập trước khi muốn tiếp tục."
login_switch: "Bạn đã có tài khoản rồi?"
login_switch: "Bạn đã có tài khoản?"
school_name: "Tên Trường và Thành phố"
optional: "không bắt buộc"
school_name_placeholder: "Ví dụ tên Trường, Thành phố, (Tiểu bang nếu đang ở Mỹ)"
@ -735,7 +735,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
mission_description_1: "<strong>Lập trình thật kì diệu</strong>. Bạn có thể tạo ra một thứ gì đó chỉ từ trí tưởng tượng. Chúng tôi bắt đầu CodeCombat để đem tới cho học viên những trải nghiệm nhiệm màu khi <strong>viết code</strong> thực tế."
mission_description_2: "Trên thực tế, việc này giúp cho bạn học nhanh hơn. Nhanh hơn RẤT NHIỀU. Bạn được thực hành thay vì chỉ đọc lý thuyết. Chúng tôi muốn đưa môi trường thực hành này đến với trường học và đến tay <strong>mọi học sinh</strong>, bởi vì mọi người đều cần có cơ hội biết đến sự nhiệm màu của lập trình."
team_title: "Đội ngũ của CodeCombat"
# team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team."
team_values: "Chúng tôi chân trọng những cuộc đối thoại mở và có sự tôn trọng lẫn nhau, nơi mà những ý tưởng tốt nhất giành chiến thắng. Những quyết định của chúng tôi được đưa ra hoàn toàn dựa trên những báo cáo nghiên cứu ý kiến khách hàng và quy trình của chúng tôi chú trọng vào mục tiêu đưa đến những giá trị hữu hình cho cho khách hàng. Mọi người đều có vai trò của mình, từ CEO của chúng tôi cho đến những người tham gia công đồng trên Github, bởi vì chúng tôi chân trọng sự phát triển và học hỏi của từng thành viên trong nhóm."
nick_title: "Đồng Sáng Lập, CEO" # {change}
nick_blurb: "Người truyền cảm hứng"
matt_title: "Đồng Sáng Lập, CTO" # {change}
@ -853,10 +853,10 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
college_plus: "Cao đẳng/Đại học hoặc cao hơn"
anything_else: "Còn điều gì chúng tôi nên biết thêm nữa không?"
thanks_header: "Đã nhận yêu cầu!"
# thanks_sub_header: "Thanks for expressing interest in CodeCombat for your school."
thanks_sub_header: "Cảm ơn vì đã bày tỏ sự quan tâm của trường bạn với CodeCombat."
thanks_p: "Chúng tôi sẽ sớm trả lời lại! Nếu bạn cần liên hệ, hãy liên lạc với chúng tôi tại:"
# back_to_classes: "Back to Classes"
# finish_signup: "Finish creating your teacher account:"
back_to_classes: "Quay lại Lớp học"
finish_signup: "Hoàn thiện tài khoản giáo viên:"
# finish_signup_p: "Create an account to set up a class, add your students, and monitor their progress as they learn computer science."
signup_with: "Đăng ký bằng:"
connect_with: "Kết nối với:"
@ -866,7 +866,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# create_account_subtitle: "Get access to teacher-only tools for using CodeCombat in the classroom. <strong>Set up a class</strong>, add your students, and <strong>monitor their progress</strong>!"
convert_account_title: "Năng cấp lên tài khoản Giáo Viên"
not: "Không phải"
# setup_a_class: "Set Up a Class"
setup_a_class: "Thiết lập một Lớp học"
versions:
save_version_title: "Lưu phiên bản mới"
@ -922,10 +922,10 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
email_announcements: "Thông báo"
email_announcements_description: "Nhận email về tin tức mới nhất và sự phát triển của Codecombat."
email_notifications: "Thông báo"
# email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
# email_any_notes: "Any Notifications"
# email_any_notes_description: "Disable to stop all activity notification emails."
# email_news: "News"
email_notifications_summary: "Kiểm soát các thông báo cá nhân tự động liên quan đến các hoạt động của CodeCombat."
email_any_notes: "Bất kỳ thông báo nào"
email_any_notes_description: "Vô hiệu hóa để ngừng mọi thông báo qua email."
email_news: "Tin tức"
email_recruit_notes: "Cơ hội việc làm"
email_recruit_notes_description: "Nếu bạn chơi trò này rất giỏi, chúng tôi có thể sẽ liên lạc với bạn về cơ hội nghề nghiệp."
contributor_emails: "Email tham gia đóng góp"
@ -957,7 +957,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# toggle_grid: "Toggle grid overlay."
# toggle_pathfinding: "Toggle pathfinding overlay."
# beautify: "Beautify your code by standardizing its formatting."
# maximize_editor: "Maximize/minimize code editor."
maximize_editor: "Phong to/thu nhỏ trình soạn thảo code."
community:
main_title: "Cộng đồng CodeCombat"
@ -1000,8 +1000,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
edit_description: "sửa mô tả"
private: "(kín)"
summary: "Tóm tắt"
average_level: "Cấp độ trng bình"
# average_achievements: "Average Achievements"
average_level: "Cấp độ trung bình"
average_achievements: "Thành tựu trung bình"
delete_clan: "Xóa Clan"
leave_clan: "Rời Clan"
join_clan: "Tham gia Clan"
@ -1013,29 +1013,29 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
started_1: "đã bắt đầu"
complete_1: "hoàn thành"
# exp_levels: "Expand levels"
# rem_hero: "Remove Hero"
# status: "Status"
rem_hero: "Xóa Tướng"
status: "Trạng thái"
complete_2: "Hoàn thành"
started_2: "Đã bắt đầu"
not_started_2: "Chưa bắt đầu"
view_solution: "Click để xem lời giải."
# view_attempt: "Click to view attempt."
# latest_achievement: "Latest Achievement"
view_attempt: "Click để xem thử."
latest_achievement: "Thành tựu mới nhất"
playtime: "Thời gian chơi"
last_played: "Lần chơi cuối"
# leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances."
# track_concepts1: "Track concepts"
# track_concepts2a: "learned by each student"
# track_concepts2b: "learned by each member"
# track_concepts3a: "Track levels completed for each student"
# track_concepts3b: "Track levels completed for each member"
track_concepts3a: "Theo dõi các màn chơi được hoàn thành bởi mỗi học viên"
track_concepts3b: "Theo dõi các màn chơi được hoàn thành bởi mỗi thành viên"
track_concepts4a: "Xem các học viên của bạn'"
track_concepts4b: "Xem các thành viên của bạn'"
track_concepts5: "lời giải"
track_concepts6a: "Sắp xếp học viên theo tên hoặc tiến trình"
track_concepts6b: "Sắp xếp thành viên theo tên hoặc tiến trình"
# track_concepts7: "Requires invitation"
# track_concepts8: "to join"
track_concepts7: "Yêu cầu lời mời"
track_concepts8: "để tham gia"
private_require_sub: "Các Clan kín cần mua subscription để tạo hoặc tham gia."
courses:
@ -1047,7 +1047,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
visit_suf: "để tham gia."
select_class: "Chọn một trong các lớp học của bạn"
unnamed: "*unnamed*"
# select: "Select"
select: "Lựa chọn"
unnamed_class: "Lớp học chưa đặt tên"
edit_settings: "thay đổi tùy chỉnh lớp học"
edit_settings1: "Thay đổi tùy chỉnh lớp học"
@ -1055,24 +1055,24 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
add_students: "Thêm học sinh"
stats: "Thống kê"
total_students: "Tổng số học sinh:"
# average_time: "Average level play time:"
average_time: "Thời gian chơi trung bình:"
total_time: "Tổng thời gian chơi:"
average_levels: "Lượng cấp độ trung bình đã hoàn thành:"
total_levels: "Tổng số cấp độ đã hoàn thành"
# furthest_level: "Furthest level completed:"
# students: "Students"
# students1: "students"
# concepts: "Concepts"
# levels: "levels"
# played: "Played"
# play_time: "Play time:"
# completed: "Completed:"
# invite_students: "Invite students to join this class."
# invite_link_header: "Link to join course"
furthest_level: "Màn chơi xa nhất đã hoàn thành:"
students: "Học viên"
students1: "học viên"
concepts: "Các khái niệm"
levels: "màn chơi"
played: "Đã chơi"
play_time: "Thời gian chơi:"
completed: "Đã hoàn thành:"
invite_students: "Mời các học viên tham gia lớp học này."
invite_link_header: "Đường link để tham gia khóa học"
# invite_link_p_1: "Give this link to students you would like to have join the course."
# invite_link_p_2: "Or have us email them directly:"
# capacity_used: "Course slots used:"
# enter_emails: "Enter student emails to invite, one per line"
capacity_used: "Số chỗ đã đăng ký:"
enter_emails: "Nhập email học viên để gửi lời mời, mỗi email một dòng"
send_invites: "Gửi lời mời"
creating_class: "Đang tạo lớp..."
purchasing_course: "Đang mua khóa học..."
@ -1086,15 +1086,15 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
name_class: "Đặt tên lớp của bạn"
# displayed_course_page: "This will be displayed on the course page for you and your students. It can be changed later."
buy: "Mua"
# purchasing_for: "You are purchasing a license for"
# creating_for: "You are creating a class for"
# for: "for" # Like in 'for 30 students'
purchasing_for: "Bạn đang muc giấy phép cho"
creating_for: "Bạn đang tạo một lớp cho"
for: "dành cho" # Like in 'for 30 students'
# receive_code: "Afterwards you will receive an unlock code to distribute to your students, which they can use to enroll in your class."
# free_trial: "Free trial for teachers!"
# get_access: "to get individual access to all courses for evalutaion purposes."
# questions: "Questions?"
# teachers_click: "Teachers Click Here"
# students_click: "Students Click Here"
questions: "Có câu hỏi?"
teachers_click: "Giáo viên click vào đây"
students_click: "Học viên click vào đây"
courses_on_coco: "Những khóa học trên CodeCombat"
# designed_to: "Courses are designed to introduce computer science concepts using CodeCombat's fun and engaging environment. CodeCombat levels are organized around key topics to encourage progressive learning, over the course of 5 hours."
# more_in_less: "Learn more in less time"
@ -1261,16 +1261,16 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# students_enrolled: "students enrolled"
# students_assigned: "students assigned"
# length: "Length:"
title: "Tiêu đề" # Flat style redesign
# subtitle: "Review course guidelines, solutions, and levels"
# changelog: "View latest changes to course levels."
# select_language: "Select language"
# select_level: "Select level"
# play_level: "Play Level"
# concepts_covered: "Concepts covered"
# print_guide: "Print Guide (PDF)"
# view_guide_online: "View Guide Online (PDF)"
# last_updated: "Last updated:"
title: "Các khóa học" # Flat style redesign
subtitle: "Xem giáo án của các khóa học, lời giải và các màn chơi"
changelog: "Xem những thay đổi mới nhất về các khóa học."
select_language: "Chọn ngôn ngữ"
select_level: "Chọn màn chơi"
play_level: "Chơi Màn Chơi"
concepts_covered: "Bao gồm các khái niệm"
print_guide: "In Hướng Dẫn (PDF)"
view_guide_online: "Xem Hướng Dẫn Online (PDF)"
last_updated: "Cập nhật lần cuối:"
# grants_lifetime_access: "Grants access to all Courses."
# enrollment_credits_available: "Enrollment Credits Available:"
description: "Mô tả" # ClassroomSettingsModal
@ -1292,7 +1292,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
student_age_range_to: "tới"
create_class: "Tạo Lớp"
class_name: "Tên lớp"
# teacher_account_restricted: "Your account is a teacher account, and so cannot access student content."
teacher_account_restricted: "Tài khoản của bạn là tài khoản Giáo Viên, vì thế bạn không thể truy cập nội dung dành cho học viên."
teacher:
teacher_dashboard: "Bảng Điều Khiển Giáo Viên" # Navbar
@ -1406,7 +1406,7 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# level_title: "Level Editor"
# achievement_title: "Achievement Editor"
# poll_title: "Poll Editor"
# back: "Back"
back: "Quay lại"
# revert: "Revert"
# revert_models: "Revert Models"
pick_a_terrain: "Chọn Địa Hình"
@ -1418,8 +1418,8 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
glacier: "Núi băng"
small: ""
large: "Lớn"
# fork_title: "Fork New Version"
# fork_creating: "Creating Fork..."
fork_title: "Fork phiên bản mới"
fork_creating: "Đang tạo Fork..."
# generate_terrain: "Generate Terrain"
more: "Thêm"
wiki: "Wiki"

View file

@ -279,8 +279,8 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
recovery_sent: "密碼重置的信件已寄出"
items:
primary: "要武器"
secondary: "次要武器"
primary: "手裝備"
secondary: "副手裝備"
armor: "裝甲"
accessories: "飾品"
misc: "輔助"
@ -344,10 +344,10 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
confirm_password: "確認密碼"
message: "訊息"
code: "程式碼"
ladder: "升級比賽"
when: ""
ladder: "天梯"
when: "何時"
opponent: "對手"
rank: "階級"
rank: "排名"
score: "分數"
win: "獲勝"
loss: "失敗"
@ -472,7 +472,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
tip_reticulating: "網格狀鋸齒(指卡頓現象)"
tip_harry: "巫師,"
tip_great_responsibility: "隨著擁有強大的編程技巧,除錯的責任將越大。"
tip_munchkin: "如果您不吃掉您的蔬菜,那小矮人將在您沉睡時找到您。"
tip_munchkin: "如果您不吃掉您的蔬菜,那些矮人將在您睡覺時找到您。"
tip_binary: "只有2種人在這世上那些懂2進位的和那些不懂的。"
tip_commitment_yoda: "一個程式員必須擁有強烈的責任感和一顆認真的心。 ~ Yoda《星際大戰》"
tip_no_try: "做,或者不做。這邊不存在嘗試的選項。 - Yoda《星際大戰》"
@ -510,7 +510,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
tip_life_and_polymorphism: "開放源碼就像是一個完全多樣異質的結構:海納百川。"#"Open Source is like a totally polymorphic heterogeneous structure: All types are welcome."
tip_mistakes_proof_of_trying: "程式碼中的錯誤證明了你曾經嘗試過。"#"Mistakes in your code are just proof that you are trying."
tip_adding_orgres: "包圍敵人!"#"Rounding up ogres."
tip_sharpening_swords: "煉造就寶劍"#"Sharpening the swords."
tip_sharpening_swords: "利劍鋒"#"Sharpening the swords."
tip_ratatouille: "你不需要讓任何人以你的出身決定你的極限你唯一的限制就是你的心靈。廚神Gusteau《料理鼠王》 "#"You must not let anyone define your limits because of where you come from. Your only limit is your soul. - Gusteau, Ratatouille"
tip_nemo: "想知道當生活使你消沉時,你必須做甚麼嗎?一直游,一直游就對了。多莉《海底總動員》"#"When life gets you down, want to know what you've gotta do? Just keep swimming, just keep swimming. - Dory, Finding Nemo"
tip_internet_weather: "搬來網路世界吧,這裡十分不錯。我們住的地方天氣總是很好。 - John Green"#"Just move to the internet, it's great here. We get to live inside where the weather is always awesome. - John Green"
@ -725,37 +725,37 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
editor_config_behaviors_description: "自動填入小括號、大括號以及引號。"
about:
# main_title: "If you want to learn to program, you need to write (a lot of) code."
# main_description: "At CodeCombat, our job is to make sure you're doing that with a smile on your face."
# mission_link: "Mission"
# team_link: "Team"
# story_link: "Story"
# press_link: "Press"
# mission_title: "Our mission: make programming accessible to every student on Earth."
# mission_description_1: "<strong>Programming is magic</strong>. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using <strong>typed code</strong>."
# mission_description_2: "As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming."
# team_title: "Meet the CodeCombat team"
# team_values: "We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team."
main_title: "如果您想要學編程,你需要寫(一大堆)程式碼。"#"If you want to learn to program, you need to write (a lot of) code."
main_description: "在CodeCombat中我們的職責是確保您笑著玩遊戲。" #"At CodeCombat, our job is to make sure you're doing that with a smile on your face."
mission_link: "任務"#"Mission"
team_link: "隊伍"#"Team"
story_link: "故事"#"Story"
press_link: ""#"Press"
mission_title: "我們的任務為:讓世上每個學生都有機會能學會編程。" #"Our mission: make programming accessible to every student on Earth."
mission_description_1: "<strong>編程是一種魔法</strong>。它是一種從純粹的想像中創造東西的能力。我們營運CodeCombat來讓學習者可以透過<strong>鍵入程式碼</strong>在指尖感覺到巫師般的力量。" #"<strong>Programming is magic</strong>. It's the ability to create things from pure imagination. We started CodeCombat to give learners the feeling of wizardly power at their fingertips by using <strong>typed code</strong>."
mission_description_2: "它的出現也讓使用者學得更快,就像是與它對話而不是閱讀手冊一般。我們想將這種對話帶給每一個學校以及<strong>每一位學生</strong>,因為每個人都應該要有機會體會編程的魔力。 " #"As it turns out, that enables them to learn faster too. WAY faster. It's like having a conversation instead of reading a manual. We want to bring that conversation to every school and to <strong>every student</strong>, because everyone should have the chance to learn the magic of programming."
team_title: "認識CodeCombat團隊。"#"Meet the CodeCombat team"
team_values: "我們重視開放且互相尊重的對話好的想法才會勝出。我們的抉擇建立於客戶調查上且過程注重於將具體的結果交給客戶。從我們的CEO到我們的Github貢獻者每一個人都會動手參與因為我們傾向在團隊中學習成長。" #" We value open and respectful dialog, where the best idea wins. Our decisions are grounded in customer research and our process is focused on delivering tangible results for them. Everyone is hands-on, from our CEO to our Github contributors, because we value growth and learning in our team."
nick_title: "程式員" # {change}
nick_blurb: "亢奮的Guru"
nick_blurb: "亢奮的咕嚕"
matt_title: "共同創辦人" # {change}
cat_title: "首席開卡設計師" # {change}
cat_blurb: "氣宗"
scott_title: "共同創辦人" # {change}
scott_blurb: "理性至上"
# maka_title: "Customer Advocate"
maka_title: "客戶代言人" #"Customer Advocate"
maka_blurb: "說書人"
rob_title: "編譯工程師" # {change}
rob_blurb: "編寫一些的程式碼"
josh_c_title: "遊戲設計師"
josh_c_blurb: "設計遊戲"
# robin_title: "UX Design & Research"
# robin_blurb: "Scaffolding"
robin_title: "使用者體驗研究與設計"#"UX Design & Research"
robin_blurb: "鷹架"#"Scaffolding"
josh_title: "遊戲設計師"
josh_blurb: "地面是熔岩"
# phoenix_title: "Software Engineer"
# nolan_title: "Territory Manager"
# elliot_title: "Partnership Manager"
phoenix_title: "軟體工程師"#"Software Engineer"
nolan_title: "區域經理"#"Territory Manager"
elliot_title: "合作經裡"#"Partnership Manager"
retrostyle_title: "插畫師"
retrostyle_blurb: "復古風格的遊戲"
jose_title: "音樂"
@ -1566,41 +1566,41 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
ladder:
please_login: "在參與對戰前請先登入。"
my_matches: "我的對"
my_matches: "我的對"
simulate: "模擬"
simulation_explanation: "通過模擬遊戲,您可以使您的遊戲更快得到評"
simulation_explanation: "通過模擬遊戲,您可以使您的遊戲更快得到評定排名"
simulation_explanation_leagues: "你主要會為你的部落或者課程的同伴幫忙模擬遊戲。"
simulate_games: "模擬遊戲!"
games_simulated_by: "您模擬過的次數:"
games_simulated_for: "替您模擬的次數:"
games_in_queue: "遊戲正在列隊中:"
games_simulated: "遊戲模擬"
games_simulated: "遊戲模擬次數"
games_played: "玩過的遊戲"
ratio: "通過"
ratio: ""
leaderboard: "排行榜"
battle_as: "我要扮演 "
summary_your: "您的 "
summary_matches: "對手 - "
summary_wins: " 勝利,"
summary_losses: " 失敗"
rank_no_code: "沒有新程式碼可評"
rank_my_game: "對我的遊戲評"
rank_no_code: "沒有新程式碼可評定排名"
rank_my_game: "對我的遊戲評定排名"
rank_submitting: "上傳中…"
rank_submitted: "已上傳以求評"
rank_failed: "失敗"
rank_being_ranked: "已評"
rank_submitted: "已上傳以求評定排名"
rank_failed: "失敗"
rank_being_ranked: "已評"
rank_last_submitted: "已上傳 "
help_simulate: "幫我們模擬遊戲?"
code_being_simulated: "您的新程式碼正在被其他人模擬評中。分數將隨每次新的配對而更新。"
code_being_simulated: "您的新程式碼正在被其他人模擬評中。分數將隨每次新的配對而更新。"
no_ranked_matches_pre: "對這個隊伍尚未有評分過的配對!"
no_ranked_matches_post: " 在別人的戰場上扮演對手並且回到這使您的程式碼接受評"
no_ranked_matches_post: " 在別人的戰場上扮演對手並且回到這使您的程式碼接受評定排名"
choose_opponent: "選擇對手"
select_your_language: "選擇您的語言!"
tutorial_play: "教學"
tutorial_recommended: "如果您尚未玩過,建議先嘗試教學"
tutorial_skip: "略過教學"
tutorial_not_sure: "不確定發生啥事?"
tutorial_play_first: "試教學"
tutorial_play_first: "試教學"
simple_ai: "簡單人工智慧" # {change}
warmup: "熱身"
friends_playing: "與朋友連線"
@ -1609,7 +1609,7 @@ module.exports = nativeDescription: "繁體中文", englishDescription: "Chinese
invite_friends_to_battle: "邀請您的朋友加入此戰鬥!"
fight: "戰鬥!"
watch_victory: "觀看您的勝利"
defeat_the: ""
defeat_the: ""
watch_battle: "觀看戰役"
tournament_started: ",錦標賽已開始"
tournament_ends: "錦標賽結束"

View file

@ -8,7 +8,6 @@ module.exports = class Campaign extends CocoModel
@className: 'Campaign'
@schema: schema
urlRoot: '/db/campaign'
saveBackups: true
@denormalizedLevelProperties: _.keys(_.omit(schema.properties.levels.additionalProperties.properties, ['unlocks', 'position', 'rewards']))
@denormalizedCampaignProperties: ['name', 'i18n', 'slug']

View file

@ -121,3 +121,10 @@ module.exports = class Classroom extends CocoModel
url: _.result(courseInstance, 'url') + '/classroom'
})
@fetch(options)
inviteMembers: (emails, options={}) ->
options.data ?= {}
options.data.emails = emails
options.url = @url() + '/invite-members'
options.type = 'POST'
@fetch(options)

View file

@ -368,6 +368,7 @@ class CocoModel extends Backbone.Model
return if _.isString @url then @url else @url()
@pollAchievements: ->
return if application.testing
CocoCollection = require 'collections/CocoCollection'
EarnedAchievement = require 'models/EarnedAchievement'

View file

@ -58,12 +58,14 @@ module.exports = class Level extends CocoModel
denormalize: (supermodel, session, otherSession) ->
o = $.extend true, {}, @attributes
if o.thangs and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder']
if o.thangs and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev']
thangTypesWithComponents = (tt for tt in supermodel.getModels(ThangType) when tt.get('components')?)
thangTypesByOriginal = _.indexBy thangTypesWithComponents, (tt) -> tt.get('original') # Optimization
for levelThang in o.thangs
@denormalizeThang(levelThang, supermodel, session, otherSession)
@denormalizeThang(levelThang, supermodel, session, otherSession, thangTypesByOriginal)
o
denormalizeThang: (levelThang, supermodel, session, otherSession) ->
denormalizeThang: (levelThang, supermodel, session, otherSession, thangTypesByOriginal) ->
levelThang.components ?= []
isHero = /Hero Placeholder/.test(levelThang.id) and @get('type', true) in ['hero', 'hero-ladder', 'hero-coop']
if isHero and otherSession
@ -79,7 +81,7 @@ module.exports = class Level extends CocoModel
if isHero
placeholders = {}
placeholdersUsed = {}
placeholderThangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType)
placeholderThangType = thangTypesByOriginal[levelThang.thangType]
unless placeholderThangType
console.error "Couldn't find placeholder ThangType for the hero!"
isHero = false
@ -92,7 +94,7 @@ module.exports = class Level extends CocoModel
heroThangType = session?.get('heroConfig')?.thangType
levelThang.thangType = heroThangType if heroThangType
thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType, (m) -> m.get('components')?)
thangType = thangTypesByOriginal[levelThang.thangType]
configs = {}
for thangComponent in levelThang.components
@ -143,6 +145,11 @@ module.exports = class Level extends CocoModel
for original, placeholderComponent of placeholders when not placeholdersUsed[original]
levelThang.components.push placeholderComponent
# Load the user's chosen hero AFTER getting stats from default char
if /Hero Placeholder/.test(levelThang.id) and @get('type', true) in ['course']
heroThangType = me.get('heroConfig')?.thangType
levelThang.thangType = heroThangType if heroThangType
sortSystems: (levelSystems, systemModels) ->
[sorted, originalsSeen] = [[], {}]
visit = (system) ->
@ -168,11 +175,16 @@ module.exports = class Level extends CocoModel
# Decision? Just special case the sort logic in here until we have more examples than these two and decide how best to handle most of the cases then, since we don't really know the whole of the problem yet.
# TODO: anything that depends on Programmable will break right now.
originalsToComponents = _.indexBy levelComponents, 'original' # Optimization for speed
alliedComponent = _.find levelComponents, name: 'Allied'
actsComponent = _.find levelComponents, name: 'Acts'
for thang in thangs ? []
originalsToThangComponents = _.indexBy thang.components, 'original'
sorted = []
visit = (c, namesToIgnore) ->
return if c in sorted
lc = _.find levelComponents, {original: c.original}
lc = originalsToComponents[c.original]
console.error thang.id or thang.name, 'couldn\'t find lc for', c, 'of', levelComponents unless lc
return unless lc
return if namesToIgnore and lc.name in namesToIgnore
@ -184,20 +196,18 @@ module.exports = class Level extends CocoModel
visit c2, [lc.name] for c2 in thang.components
else
for d in lc.dependencies or []
c2 = _.find thang.components, {original: d.original}
c2 = originalsToThangComponents[d.original]
unless c2
dependent = _.find levelComponents, {original: d.original}
dependent = originalsToComponents[d.original]
dependent = dependent?.name or d.original
console.error parentType, thang.id or thang.name, 'does not have dependent Component', dependent, 'from', lc.name
visit c2 if c2
if lc.name is 'Collides'
if allied = _.find levelComponents, {name: 'Allied'}
allied = _.find(thang.components, {original: allied.original})
visit allied if allied
if lc.name is 'Moves'
if acts = _.find levelComponents, {name: 'Acts'}
acts = _.find(thang.components, {original: acts.original})
visit acts if acts
if lc.name is 'Collides' and alliedComponent
if allied = originalsToThangComponents[alliedComponent.original]
visit allied
if lc.name is 'Moves' and actsComponent
if acts = originalsToThangComponents[actsComponent.original]
visit acts
#console.log thang.id, 'sorted comps adding', lc.name
sorted.push c
for comp in thang.components
@ -258,3 +268,14 @@ module.exports = class Level extends CocoModel
else
options.url = "/db/course/#{courseID}/levels/#{levelOriginalID}/next"
@fetch(options)
getSolutions: ->
return [] unless hero = _.find (@get("thangs") ? []), id: 'Hero Placeholder'
return [] unless config = _.find(hero.components ? [], (x) -> x.config?.programmableMethods?.plan)?.config
solutions = _.cloneDeep config.programmableMethods.plan.solutions ? []
for solution in solutions
try
solution.source = _.template(solution.source)(config?.programmableMethods?.plan.context)
catch e
console.error "Problem with template and solution comments for", @get('slug'), e
solutions

View file

@ -16,12 +16,12 @@ module.exports = class ThangType extends CocoModel
samurai: '53e12be0d042f23505c3023b'
raider: '55527eb0b8abf4ba1fe9a107'
goliath: '55e1a6e876cb0948c96af9f8'
guardian: ''
guardian: '566a058620de41290036a745'
ninja: '52fc0ed77e01835453bd8f6c'
'forest-archer': '5466d4f2417c8b48a9811e87'
trapper: '5466d449417c8b48a9811e83'
pixie: ''
assassin: ''
assassin: '566a2202e132c81f00f38c81'
librarian: '52fbf74b7e01835453bd8d8e'
'potion-master': '52e9adf7427172ae56002172'
sorcerer: '52fd1524c7e6cf99160e7bc9'
@ -239,6 +239,27 @@ module.exports = class ThangType extends CocoModel
portraitOnly = !!options.portraitOnly
"#{@get('name')} - #{options.resolutionFactor} - #{colorConfigs} - #{portraitOnly}"
getHeroShortName: ->
map = {
"Assassin": "Ritic"
"Captain": "Anya"
"Forest Archer": "Naria"
"Goliath": "Okar"
"Guardian": "Illia"
"Knight": "Tharin"
"Librarian": "Hushbaum"
"Necromancer": "Nalfar"
"Ninja": "Amara"
"Potion Master": "Omarn"
"Raider": "Arryn"
"Samurai": "Hattori"
"Sorcerer": "Pender"
"Trapper": "Senick"
"Champion": "Ida"
"Duelist": "Alejandro"
}
map[@get('name')]
getPortraitImage: (spriteOptionsOrKey, size=100) ->
src = @getPortraitSource(spriteOptionsOrKey, size)
return null unless src

View file

@ -25,7 +25,7 @@ module.exports = class User extends CocoModel
return name if name
[emailName, emailDomain] = @get('email')?.split('@') or []
return emailName if emailName
return 'Anoner'
return 'Anonymous'
getPhotoURL: (size=80, useJobProfilePhoto=false, useEmployerPageAvatar=false) ->
photoURL = if useJobProfilePhoto then @get('jobProfile')?.photoURL else null
@ -165,21 +165,6 @@ module.exports = class User extends CocoModel
application.tracker.identify campaignAdsGroup: @campaignAdsGroup unless me.isAdmin()
@campaignAdsGroup
getHomepageGroup: ->
# Only testing on en-US so localization issues are not a factor
return 'home-legacy' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en')
return @homepageGroup if @homepageGroup
group = parseInt(util.getQueryVariable('variation'))
group ?= me.get('testGroupNumber') % 5
@homepageGroup = switch group
when 0 then 'home-legacy'
when 1 then 'home-teachers'
when 2 then 'home-legacy-left'
when 3 then 'home-dropdowns'
when 4 then 'home-play-for-free'
application.tracker.identify homepageGroup: @homepageGroup unless me.isAdmin()
return @homepageGroup
# Signs and Portents was receiving updates after test started, and also had a big bug on March 4, so just look at test from March 5 on.
# ... and stopped working well until another update on March 10, so maybe March 11+...
# ... and another round, and then basically it just isn't completing well, so we pause the test until we can fix it.
@ -194,6 +179,18 @@ module.exports = class User extends CocoModel
application.tracker.identify fourthLevelGroup: @fourthLevelGroup unless me.isAdmin()
@fourthLevelGroup
getHintsGroup: ->
# A/B testing two styles of hints
return @hintsGroup if @hintsGroup
group = me.get('testGroupNumber') % 3
@hintsGroup = switch group
when 0 then 'no-hints'
when 1 then 'hints'
when 2 then 'hintsB'
@hintsGroup = 'hints' if me.isAdmin()
application.tracker.identify hintsGroup: @hintsGroup unless me.isAdmin()
@hintsGroup
getVideoTutorialStylesIndex: (numVideos=0)->
# A/B Testing video tutorial styles
# Not a constant number of videos available (e.g. could be 0, 1, 3, or 4 currently)
@ -290,6 +287,13 @@ module.exports = class User extends CocoModel
options.data.facebookAccessToken = application.facebookHandler.token()
@fetch(options)
loginPasswordUser: (usernameOrEmail, password, options={}) ->
options.url = '/auth/login'
options.type = 'POST'
options.data ?= {}
_.extend(options.data, { username: usernameOrEmail, password })
@fetch(options)
makeCoursePrepaid: ->
coursePrepaid = @get('coursePrepaid')
return null unless coursePrepaid

View file

@ -61,7 +61,7 @@ _.extend CampaignSchema.properties, {
i18n: { type: 'object', format: 'hidden' }
requiresSubscription: { type: 'boolean' }
replayable: { type: 'boolean' }
type: {'enum': ['ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder']}
type: {'enum': ['ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev']}
slug: { type: 'string', format: 'hidden' }
original: { type: 'string', format: 'hidden' }
adventurer: { type: 'boolean' }

View file

@ -276,9 +276,23 @@ c.extendNamedProperties LevelSchema # let's have the name be the first property
_.extend LevelSchema.properties,
description: {title: 'Description', description: 'A short explanation of what this level is about.', type: 'string', maxLength: 65536, format: 'markdown'}
loadingTip: { type: 'string', title: 'Loading Tip', description: 'What to show for this level while it\'s loading.' }
documentation: c.object {title: 'Documentation', description: 'Documentation articles relating to this level.', required: ['specificArticles', 'generalArticles'], 'default': {specificArticles: [], generalArticles: []}},
documentation: c.object {title: 'Documentation', description: 'Documentation articles relating to this level.', 'default': {specificArticles: [], generalArticles: []}},
specificArticles: c.array {title: 'Specific Articles', description: 'Specific documentation articles that live only in this level.', uniqueItems: true }, SpecificArticleSchema
generalArticles: c.array {title: 'General Articles', description: 'General documentation articles that can be linked from multiple levels.', uniqueItems: true}, GeneralArticleSchema
hints: c.array {title: 'Hints', description: 'Tips and tricks to help unstick a player for the level.', uniqueItems: true }, {
type: 'object'
properties: {
body: {type: 'string', title: 'Content', description: 'The body content of the article, in Markdown.', format: 'markdown'}
i18n: {type: 'object', format: 'i18n', props: ['body'], description: 'Help translate this hint'}
}
}
hintsB: c.array {title: 'HintsB', description: '2nd style of hints for a/b testing significant variations', uniqueItems: true }, {
type: 'object'
properties: {
body: {type: 'string', title: 'Content', description: 'The body content of the article, in Markdown.', format: 'markdown'}
i18n: {type: 'object', format: 'i18n', props: ['body'], description: 'Help translate this hint'}
}
}
background: c.objectId({format: 'hidden'})
nextLevel: {
type: 'object',
@ -299,7 +313,7 @@ _.extend LevelSchema.properties,
icon: {type: 'string', format: 'image-file', title: 'Icon'}
banner: {type: 'string', format: 'image-file', title: 'Banner'}
goals: c.array {title: 'Goals', description: 'An array of goals which are visible to the player and can trigger scripts.'}, GoalSchema
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder'])
type: c.shortString(title: 'Type', description: 'What kind of level this is.', 'enum': ['campaign', 'ladder', 'ladder-tutorial', 'hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder', 'game-dev'])
terrain: c.terrainString
showsGuide: c.shortString(title: 'Shows Guide', description: 'If the guide is shown at the beginning of the level.', 'enum': ['first-time', 'always'])
requiresSubscription: {title: 'Requires Subscription', description: 'Whether this level is available to subscribers only.', type: 'boolean'}

View file

@ -10,7 +10,7 @@ class AttacksSelf extends Component
systems = [
'action', 'ai', 'alliance', 'collision', 'combat', 'display', 'event', 'existence', 'hearing',
'inventory', 'movement', 'programming', 'targeting', 'ui', 'vision', 'misc', 'physics', 'effect',
'magic'
'magic', 'game'
]
PropertyDocumentationSchema = c.object {

View file

@ -18,21 +18,6 @@ class Jitter extends System
return hash
"""
PropertyDocumentationSchema = c.object {
title: 'Property Documentation'
description: 'Documentation entry for a property this System will add to its Thang which other Systems might want to also use.'
default:
name: 'foo'
type: 'object'
description: 'This System provides a "foo" property to satisfy all one\'s foobar needs. Use it wisely.'
required: ['name', 'type', 'description']
},
name: {type: 'string', pattern: c.identifierPattern, title: 'Name', description: 'Name of the property.'}
# not actual JS types, just whatever they describe...
type: c.shortString(title: 'Type', description: 'Intended type of the property.')
description: {type: 'string', description: 'Description of the property.', maxLength: 1000}
args: c.array {title: 'Arguments', description: 'If this property has type "function", then provide documentation for any function arguments.'}, c.FunctionArgumentSchema
DependencySchema = c.object {
title: 'System Dependency'
description: 'A System upon which this System depends.'
@ -50,14 +35,14 @@ DependencySchema = c.object {
LevelSystemSchema = c.object {
title: 'System'
description: 'A System which can affect Level behavior.'
required: ['name', 'description', 'code', 'dependencies', 'propertyDocumentation', 'codeLanguage']
required: ['name', 'code']
default:
name: 'JitterSystem'
description: 'This System makes all idle, movable Thangs jitter around.'
code: jitterSystemCode
codeLanguage: 'coffeescript'
dependencies: [] # TODO: should depend on something by default
propertyDocumentation: []
configSchema: {}
}
c.extendNamedProperties LevelSystemSchema # let's have the name be the first property
LevelSystemSchema.properties.name.pattern = c.classNamePattern
@ -83,7 +68,6 @@ _.extend LevelSystemSchema.properties,
type: 'string'
format: 'hidden'
dependencies: c.array {title: 'Dependencies', description: 'An array of Systems upon which this System depends.', uniqueItems: true}, DependencySchema
propertyDocumentation: c.array {title: 'Property Documentation', description: 'An array of documentation entries for each notable property this System will add to its Level which other Systems might want to also use.'}, PropertyDocumentationSchema
configSchema: _.extend metaschema, {title: 'Configuration Schema', description: 'A schema for validating the arguments that can be passed to this System as configuration.', default: {type: 'object', additionalProperties: false}}
official:
type: 'boolean'

View file

@ -6,7 +6,7 @@ UserSchema = c.object
default:
visa: 'Authorized to work in the US'
music: true
name: 'Anoner'
name: 'Anonymous'
autocastDelay: 5000
emails: {}
permissions: []
@ -121,7 +121,7 @@ _.extend UserSchema.properties,
aceConfig: c.object { default: { language: 'python', keyBindings: 'default', invisibles: false, indentGuides: false, behaviors: false, liveCompletion: true }},
language: {type: 'string', 'enum': ['python', 'javascript', 'coffeescript', 'clojure', 'lua', 'java', 'io']}
keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']}
keyBindings: {type: 'string', 'enum': ['default', 'vim', 'emacs']} # Deprecated 2016-05-30; now we just always give them 'default'.
invisibles: {type: 'boolean' }
indentGuides: {type: 'boolean' }
behaviors: {type: 'boolean' }
@ -337,7 +337,7 @@ _.extend UserSchema.properties,
}
}
enrollmentRequestSent: { type: 'boolean' }
schoolName: {type: 'string'}
role: {type: 'string', enum: ["God", "advisor", "parent", "principal", "student", "superintendent", "teacher", "technology coordinator"]}
birthday: c.stringDate({title: "Birthday"})

View file

@ -41,3 +41,22 @@
#join-class-form
.alert, .progress
margin-top: 20px
// Hero display
.current-hero-container
display: flex
justify-content: center
.current-hero-text
font-size: 16pt
.hero-avatar
background-color: #f8f8f8
box-shadow: 0 0 0 1px gray
margin-right: 25px
.current-hero-right-col
display: flex
flex-direction: column
justify-content: space-between
align-items: flex-start

View file

@ -0,0 +1,40 @@
@import "app/styles/style-flat-variables"
#hero-select-modal
.modal-dialog
width: auto
max-width: 900px
.modal-header, .modal-body:not(.secret), .modal-footer
display: flex
flex-direction: column
align-items: center
.modal-footer
margin: 30px
h4
max-width: 500px
.hero-list
display: flex
flex-wrap: wrap
justify-content: center
margin-bottom: -50px
.hero-option
display: flex
flex-direction: column
align-items: center
margin: 0 50px 50px
.hero-avatar
margin: 6px
background-color: #f8f8f8
box-shadow: 0 0 0 1px gray
.current .hero-avatar
box-shadow: 0 0 0 6px gray
.selected .hero-avatar
box-shadow: 0 0 0 6px $gold

View file

@ -1,19 +0,0 @@
#hour-of-code-view
hr
border-top: 1px solid grey
margin: 30px 20px
#site-content-area
padding: 20px 300px
h1
margin-bottom: 40px
p
margin: 20px
h3
margin-top: 50px
ul
margin-bottom: 50px

View file

@ -1,7 +0,0 @@
#student-log-in-modal
#log-in-btn
min-width: 30%
margin-bottom: 10px
.form
margin: 0 25%

View file

@ -1,10 +0,0 @@
#student-sign-up-modal
#sign-up-btn
min-width: 30%
margin-bottom: 10px
.form
margin: 0 25%
.modal-dialog
margin-top: 0

View file

@ -104,6 +104,12 @@
vertical-align: bottom
td
height: 66px
.select-all
padding-top: 5px
.checkbox-flat
margin-top: 3px
.enroll-student-button
margin-left: 33%

View file

@ -0,0 +1,21 @@
#verifier-view
.verifier-row
margin-top: 20px
.alert
padding: 5px
.campaign-mix, .code-language-mix
padding: 5px 20px 5px 5px
input
margin-right: 8px
.test-running
color: orange
.test-success
color: green
.test-failed
color: red

View file

@ -143,7 +143,7 @@
//- Primary auth button
#login-button
#login-btn
position: absolute
top: 186px
height: 70px

View file

@ -204,6 +204,7 @@ $gameControlMargin: 30px
.tooltip
z-index: 2
pointer-events: none
.tooltip-arrow
display: none

View file

@ -0,0 +1,41 @@
@import "app/styles/mixins"
.hints-view
position: relative
width: 500px // TODO: should be in sync with surface min-width
padding: 10px 20px
border-style: solid
border-image: url(/images/level/popover_border_background.png) 16 12 fill round
border-width: 16px 12px
@include box-shadow(0 0 0 #000)
.close-hint-btn
position: absolute
right: 5px
top: 5px
.glyphicon-remove
position: relative
top: 4px
h1
margin-bottom: 30px
.btn-area
margin-top: 20px
.hint-title
font-size: 18px
text-transform: uppercase
.hint-body
height: 390px
overflow-y: auto
img
width: 100%
.hint-pagination
font-size: 18px
margin-top: 0px
text-transform: uppercase

View file

@ -157,7 +157,7 @@ $UNVEIL_TIME: 1.2s
font-variant: small-caps
text-transform: none
.subscription-required, .course-membership-required
.subscription-required, .course-membership-required, .could-not-load
display: none
margin-top: -160px
color: black

View file

@ -78,9 +78,6 @@
@include flex-column()
@include flex-align-content-start()
&.no-help
margin-top: 3%
.property-entry-item-group
display: inline-block
min-height: 38px

View file

@ -29,7 +29,7 @@
span.code-background
border-width: 124px 76px 64px 40px
border-image: url(/images/level/code_editor_background_border.png) 124 76 64 40 fill round
border-image: url(/images/level/code_editor_background_border.png) 124 76 64 40 fill stretch
img.code-background
display: none

View file

@ -85,27 +85,18 @@
.glyphicon-fullscreen
display: none
.hints-button
float: right
border-style: solid
border-image: url(/images/common/button-background-primary-active.png) 14 20 20 20 fill round
border-width: 7px 10px 10px 10px
color: white
&:hover, &:active
border-image: url(/images/common/button-background-primary-pressed.png) 14 20 20 20 fill round
.thang-avatar-wrapper
border-width: 0
.method-name-area
margin-left: 10px
margin-top: 10px
text-transform: uppercase
display: inline-block
font-family: $headings-font-family
font-weight: bold
.method-label
font-size: 12px
color: rgb(243, 211, 59)
margin-bottom: -5px
.method-signature
color: white
font-size: 18px
padding: 0
.spell-list-entry-view:not(.spell-tab)
cursor: pointer
@include opacity(0.90)

View file

@ -264,6 +264,13 @@ $level-resize-transition-time: 0.5s
width: 100%
height: 90px
text-align: center
.hints-view
position: absolute
top: 10px
bottom: 10px
right: 45%
z-index: 1000000
html.fullscreen-editor
#level-view

View file

@ -444,7 +444,7 @@ body[lang='ru'], body[lang='uk'], body[lang='bg'], body[lang^='mk'], body[lang='
#footer
background-image: url("/images/pages/home/footer_background.png")
height: 229px
margin: -22px auto 0
margin: 65px auto 0
color: white
@media (max-width: $screen-sm-min)

View file

@ -7,3 +7,7 @@
font-family: Arial, Geneva, sans-serif
padding: 20px
font-weight: bold
.alert-report
font-size: 20px

View file

@ -139,6 +139,13 @@ block content
small(data-i18n="about.elliot_title")
br
li
img(src="/images/pages/about/lisa_small.png").img-thumbnail
.team-bio
h6.label.team-name Lisa Wu
small Marketing Development Rep
br
// Part time / contract
li
a(href="http://floor.is/lava/" rel="external")

View file

@ -18,7 +18,7 @@ mixin accountLinks
.style-flat
block header
nav#main-nav.navbar.navbar-default
.container-fluid
.container-fluid.container
.row
.col-lg-12
.navbar-header
@ -81,8 +81,6 @@ mixin accountLinks
p If this is showing, you dun goofed
block footer
#character-lineup.text-center.m-t-3
img(src="/images/pages/home/character_lineup.png")
.container-fluid
#footer.small
.container

View file

@ -123,7 +123,7 @@ block content
if memberLanguageMap && memberLanguageMap[member.id]
span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id])
div
a(href="/user/#{member.id}")= member.get('name') || 'Anoner'
a(href="/user/#{member.id}")= member.get('name') || 'Anonymous'
div Level #{member.level()}
if isOwner && member.id !== clan.get('ownerID')
button.btn.btn-xs.btn-warning.remove-member-btn(data-id="#{member.id}", data-i18n="clans.rem_hero") Remove Hero
@ -220,7 +220,7 @@ block content
if memberLanguageMap && memberLanguageMap[member.id]
span.code-language-cell(style="background-image: url(/images/common/code_languages/#{memberLanguageMap[member.id]}_small.png)", title=memberLanguageMap[member.id])
td.name-cell
a(href="/user/#{member.id}")= member.get('name') || 'Anoner'
a(href="/user/#{member.id}")= member.get('name') || 'Anonymous'
td.level-cell= member.level()
td.achievements-cell
if memberAchievementsMap && memberAchievementsMap[member.id]

View file

@ -45,7 +45,7 @@ block content
if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else
a(href="/user/#{clan.get('ownerID')}") Anoner
a(href="/user/#{clan.get('ownerID')}") Anonymous
td
if view.myClanIDs.indexOf(clan.id) < 0
button.btn.btn-success.join-clan-btn(data-id="#{clan.id}", data-i18n="clans.join_clan") Join Clan
@ -75,7 +75,7 @@ block content
if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else
a(href="/user/#{clan.get('ownerID')}") Anoner
a(href="/user/#{clan.get('ownerID')}") Anonymous
td= clan.get('type')
td
if clan.get('ownerID') !== me.id

View file

@ -3,11 +3,11 @@ extends /templates/base
// User pages might have some user page specific header, if not remove this
block content
.clearfix
if user && viewName
if view.userData && view.viewName
ol.breadcrumb
li
a(href="/user/#{user.getSlugOrID()}") #{user.displayName()}
a(href="/user/#{view.userData.getSlugOrID()}") #{view.userData.displayName()}
li.active
| #{viewName}
if !user || user.loading
| #{view.viewName}
if !view.userData || view.userData.loading
| LOADING

View file

@ -1,13 +1,14 @@
.row
for contributor in contributors
.col-xs-6.col-md-3
.thumbnail
- var src = "/images/pages/contribute/" + contributorClassName + ".png";
- if(contributor.avatar)
- src = src.replace(contributorClassName, contributorClassName + "/" + contributor.avatar + "_small");
- if(contributor.id)
- src = "/db/user/" + contributor.id + "/avatar?s=100&fallback=" + src;
a(href=contributor.github ? "https://github.com/codecombat/codecombat/commits?author=" + contributor.github : null, class=contributor.github ? 'has-github' : '')
img.img-responsive(src=src, alt=contributor.name)
.caption
h4= contributor.name
if contributors
for contributor in contributors
.col-xs-6.col-md-3
.thumbnail
- var src = "/images/pages/contribute/" + contributorClassName + ".png";
- if(contributor.avatar)
- src = src.replace(contributorClassName, contributorClassName + "/" + contributor.avatar + "_small");
- if(contributor.id)
- src = "/db/user/" + contributor.id + "/avatar?s=100&fallback=" + src;
a(href=contributor.github ? "https://github.com/codecombat/codecombat/commits?author=" + contributor.github : null, class=contributor.github ? 'has-github' : '')
img.img-responsive(src=src, alt=contributor.name)
.caption
h4= contributor.name

View file

@ -3,7 +3,7 @@
img(src="/images/pages/modal/auth/login-background.png", draggable="false").auth-modal-background
h1(data-i18n="login.log_in")
div#close-modal
#close-modal
span.glyphicon.glyphicon-remove
.auth-form-content
@ -11,24 +11,40 @@
if showRequiredError
.alert.alert-success
span(data-i18n="signup.required")
#unknown-error-alert.alert.alert-danger.hide(data-i18n="loading_error.unknown")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
label.control-label(for="username-or-email-input")
span(data-i18n="login.email_or_username")
| :
.input-border
input#email.input-large.form-control(name="email", type="email", value=formValues.email)
input#username-or-email-input.input-large.form-control(
name="emailOrUsername"
value=view.previousFormInputs.email
)
.form-group
div#recover-account-wrapper
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password")#link-to-recover
#recover-account-wrapper
a#link-to-recover(
data-toggle="coco-modal"
data-target="core/RecoverModal"
data-i18n="login.forgot_password"
)
label.control-label(for="password")
span(data-i18n="general.password")
| :
.input-border
input#password.input-large.form-control(name="password", type="password", value=formValues.password)
input#password-input.input-large.form-control(
name="password"
type="password"
value=view.previousFormInputs.password
)
input.btn.btn-lg.btn-illustrated.btn-block.btn-success#login-button(value=translate("login.log_in"), type="submit")
input#login-btn.btn.btn-lg.btn-illustrated.btn-block.btn-success(
value=translate("login.log_in")
type="submit"
)
.wait.secret
h3(data-i18n="login.logging_in")
@ -39,10 +55,10 @@
// btn.btn.btn-sm.github-login-button#github-login-button
// img(src="/images/pages/modal/auth/github_icon.png")
// | GitHub
#facebook-login-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login
button#facebook-login-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_facebook")
#gplus-login-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login
button#gplus-login-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_gplus")
.gplus-login-wrapper

View file

@ -33,10 +33,10 @@
.col-md-6
.auth-network-logins.text-center
strong(data-i18n="signup.or_sign_up_with")
#facebook-signup-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login
button#facebook-signup-btn.btn.btn-primary.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_facebook.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_facebook")
#gplus-signup-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login
button#gplus-signup-btn.btn.btn-danger.btn-lg.btn-illustrated.network-login(disabled=true)
img.network-logo(src="/images/pages/community/logo_g+.png", draggable="false")
span.sign-in-blurb(data-i18n="login.sign_in_with_gplus")
.gplus-login-wrapper

View file

@ -2,7 +2,7 @@ extends /templates/base
block content
if !me.isAnonymous() && (me.isTeacher() || view.ownedClassrooms.size())
if !me.isAnonymous() && me.isTeacher()
.alert.alert-danger.text-center
// DNT: Temporary
h3 ATTENTION TEACHERS:

View file

@ -2,7 +2,7 @@ extends /templates/base
block content
if me.isTeacher() || view.ownedClassrooms.size()
if me.isTeacher()
.alert.alert-danger.text-center
// DNT: Temporary
h3 ATTENTION TEACHERS:

View file

@ -4,7 +4,7 @@ block content
.container
.row.m-y-3
.col-xs-12
if me.isTeacher() || view.ownedClassrooms.size()
if me.isTeacher()
.alert.alert-danger.text-center
// DNT: Temporary
h3 ATTENTION TEACHERS:
@ -39,6 +39,18 @@ block content
.text-center
h1(data-i18n="courses.welcome_to_page") Welcome to your Courses page!
.current-hero-container.text-center.row
.hero-avatar
img(src=view.hero.getPortraitURL())
.current-hero-right-col
.semibold.current-hero-text
span.spr(data-i18n="TODO")
| Current Hero:
span.current-hero-name= view.hero.getHeroShortName()
button.change-hero-btn.btn.btn-lg.btn-forest
span(data-i18n="TODO")
| Change Hero
if view.classrooms.size()
h3.text-uppercase(data-i18n="courses.my_classes")
@ -55,7 +67,7 @@ block content
h5
span.spr= classroom.get('name')
span.spr (#{(classroom.get('aceConfig') || {}).language === 'javascript' ? 'JavaScript' : 'Python'})
a(href="/courses/"+classroom.id, data-i18n="courses.view_class")
a.view-class-btn(data-classroom-id=classroom.id, data-i18n="courses.view_class")
- var courseInstances = view.courseInstances.where({classroomID: classroom.id});
for courseInstance in courseInstances
@ -65,7 +77,7 @@ block content
h6
span.spr= course.get('name')
small
a(href="/courses/"+courseInstance.get('courseID')+'/'+courseInstance.id, data-i18n="courses.view_levels")
a.view-levels-btn(data-course-id=courseInstance.get('courseID'), data-courseinstance-id=courseInstance.id, data-i18n="courses.view_levels")
+course-instance-body(courseInstance, classroom)
.clearfix
@ -100,19 +112,19 @@ mixin course-instance-body(courseInstance, classroom)
- var arenaLevel = stats.levels.arena;
if arenaLevel
- var arenaURL = "/play/ladder/"+arenaLevel.get('slug')+"/course/"+courseInstance.id;
a.btn.btn-burgandy.btn-lg.m-b-1(href=arenaURL)
a.play-btn.btn.btn-burgandy.btn-lg.m-b-1(data-href=arenaURL, data-level-slug=arenaLevel.get('slug'), data-event-action="Students Play Arena")
span(data-i18n="courses.play_arena")
else
a.btn.btn-default.btn-lg.m-b-1(disabled=true, data-i18n="courses.course_complete")
else if stats.levels.next != stats.levels.first
- var next = stats.levels.next;
- var levelURL = "/play/level/"+next.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-forest.btn-lg.m-b-1(href=levelURL)
a.play-btn.btn.btn-forest.btn-lg.m-b-1(data-href=levelURL, data-level-slug=next.get('slug'), data-event-action="Students Continue Course")
span(data-i18n="common.continue")
else
- var firstLevel = stats.levels.first;
- var levelURL = "/play/level/"+firstLevel.get('slug')+"?course="+courseInstance.get('courseID')+"&course-instance="+courseInstance.id;
a.btn.btn-navy.btn-lg.m-b-1(href=levelURL)
a.play-btn.btn.btn-navy.btn-lg.m-b-1(data-href=levelURL, data-level-slug=firstLevel.get('slug'), data-event-action="Students Start Course")
span(data-i18n="courses.start")
div

View file

@ -5,19 +5,21 @@ block page_nav
block content
if me.isAnonymous() || (!me.isTeacher() && !view.classrooms.size())
.access-restricted.container.text-center.m-y-3
h5(data-i18n='teacher.access_restricted')
p(data-i18n='teacher.teacher_account_required')
if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
a.btn.btn-lg.btn-primary-alt(href="/teachers/signup" data-i18n='teacher.create_teacher_account')
else
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.container
.access-restricted.container.text-center.m-y-3
h5(data-i18n='teacher.access_restricted')
p(data-i18n='teacher.teacher_account_required')
if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
a.btn.btn-lg.btn-primary-alt(href="/teachers/signup" data-i18n='teacher.create_teacher_account')
else
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
else
if !me.isTeacher()

View file

@ -0,0 +1,27 @@
extends /templates/core/modal-base-flat
block modal-header-content
.text-center
h3(data-i18n="courses.select_your_hero")
h4(data-i18n="courses.select_your_hero_description")
block modal-body-content
.hero-list
if view.heroes.loaded
each hero in view.heroes.models
if hero.get('heroClass') === 'Warrior'
+heroOption(hero)
mixin heroOption(hero)
- var heroID = hero.id
- var selectedState = (state.get('selectedHeroID') === heroID ? 'selected' : (state.get('currentHeroID') === heroID ? 'current' : ''))
.hero-option(data-hero-id=heroID class=selectedState)
.hero-avatar
img(src=hero.getPortraitURL())
.text-h5.hero-name
span= hero.getHeroShortName()
block modal-footer-content
.select-hero-btn.btn.btn-lg.btn-forest
span(data-i18n="courses.select_this_hero")

View file

@ -1,74 +0,0 @@
extends /templates/base
block content
.pull-right
if me.isAnonymous()
a(href="/teachers")
span(data-i18n="courses.teachers_click")
span !
else
a(href="/teachers/classes")
span(data-i18n="courses.teachers_click")
span !
br
h1.text-center(data-i18n="courses.welcome_to_hoc")
#main-content
.well.text-center
if !me.isAnonymous()
p
strong.spr(data-i18n="courses.logged_in_as")
strong= me.get('name') || me.get('email')
p
span.spr(data-i18n="courses.not_you")
a#log-out-link(data-i18n="login.logout")
hr
if !view.lastLevel
p
strong(data-i18n="courses.ready_to_play")
p
button#start-new-game-btn.btn.btn-success.btn-lg(data-i18n="courses.start_new_game")
else
p
strong(data-i18n="courses.welcome_back")
p
button#continue-playing-btn.btn.btn-success.btn-lg(data-i18n="courses.continue_playing")
p
em.spr
span(data-i18n="clans.last_played")
span.spr :
span= view.lastLevel.get('name').replace('Course :', '')
if me.isAnonymous()
p
strong(data-i18n="courses.more_options")
p
button#start-new-game-btn.btn.btn-default.btn-lg(data-i18n="courses.start_new_game")
if me.isAnonymous()
p
span.spr -
span.text-uppercase(data-i18n="general.or")
span.spl -
p
button#log-in-btn.btn.btn-default.btn-lg(data-i18n="login.log_in")
#begin-hoc-area.hide
h2.text-center(data-i18n="common.loading")
.progress.progress-striped.active
.progress-bar(style="width: 100%")
h3.text-center.text-uppercase(data-i18n="courses.play_now_learn_header")
ul
li(data-i18n="courses.play_now_learn_1")
li(data-i18n="courses.play_now_learn_2")
li(data-i18n="courses.play_now_learn_3")
li(data-i18n="courses.play_now_learn_4")

View file

@ -4,6 +4,7 @@ block modal-header-content
.text-center
h1.modal-title(data-i18n="courses.remove_student1")
span.glyphicon.glyphicon-warning-sign.text-danger
p= view.user.get('name', true) + ' - ' + view.user.get('email')
h2(data-i18n="courses.are_you_sure")
block modal-body-content

View file

@ -3,10 +3,21 @@ extends /templates/base-flat
block content
.access-restricted.container.text-center.m-y-3
h5(data-i18n='teacher.access_restricted')
p(data-i18n='courses.teacher_account_restricted')
a.btn.btn-lg.btn-primary(href="/teachers/classes" data-i18n="new_home.goto_classes")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
if me.isTeacher()
p(data-i18n='courses.teacher_account_restricted')
a.btn.btn-lg.btn-primary(href="/teachers/classes" data-i18n="new_home.goto_classes")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
else
p(data-i18n='courses.account_restricted')
if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
.signup-button.btn.btn-lg.btn-primary-alt(data-i18n="login.sign_up")
else
a.btn.btn-lg.btn-primary(href="/courses/update-account" data-i18n="courses.update_account_update_student")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
if me.isTeacher()
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')

View file

@ -1,30 +0,0 @@
extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="login.log_in")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
input#email.input-large.form-control(name="email", type="email")
.form-group
label.control-label(for="password")
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
#errors-alert.alert.alert-danger.hide
.text-center
input#log-in-btn.btn.btn-default(data-i18n="[value]login.log_in", type="submit")
p
a#create-new-account-link(data-i18n="login.signup_switch")
p
a(data-toggle="coco-modal", data-target="core/RecoverModal", data-i18n="login.forgot_password")
block modal-footer-content

View file

@ -1,46 +0,0 @@
extends /templates/core/modal-base
block modal-header-content
.clearfix
block modal-body-content
.text-center
h2.modal-title(data-i18n="signup.sign_up")
form.form
.form-group
label.control-label(for="email")
span(data-i18n="general.email")
input#email.input-large.form-control(name="email", type="email")
.help-block(data-i18n="courses.use_school_email")
.form-group
label.control-label(for="name")
span(data-i18n="general.name")
if me.get('name')
input#name.input-large.form-control(name="name", type="text", value="#{me.get('name')}")
else
input#name.input-large.form-control(name="name", type="text", value="", placeholder="e.g. Alex W the Skater")
.help-block(data-i18n="courses.unique_name")
.form-group
label.control-label(for="password")
span(data-i18n="general.password")
input#password.input-large.form-control(name="password", type="password")
.help-block(data-i18n="courses.pick_something")
.form-group
label.control-label(for="class-code-input")
span(data-i18n="courses.class_code")
input#class-code-input.input-large.form-control(name="classCode", value=view.classCode)
.help-block(data-i18n="courses.optional_ask")
.form-group
label.control-label(for="school-input")
span(data-i18n="signup.school_name")
input#school-input.input-large.form-control(name="schoolName", data-i18n="[placeholder]signup.school_name_placeholder")
.help-block(data-i18n="courses.optional_school")
#errors-alert.alert.alert-danger.hide
.text-center
input#sign-up-btn.btn.btn-default(data-i18n="[value]signup.sign_up", type="submit")
block modal-footer-content

View file

@ -108,28 +108,36 @@ block content
+copyCodes
+addStudentsButton
ul.nav.nav-tabs.m-t-5(role='tablist')
- var activeTab = state.get('activeTab');
li(class=(activeTab === "#students-tab" ? 'active' : ''))
a.students-tab-btn(href='#students-tab')
.small-details.text-center(data-i18n='teacher.students')
.tab-spacer
li(class=(activeTab === "#course-progress-tab" ? 'active' : ''))
a.course-progress-tab-btn(href='#course-progress-tab')
.small-details.text-center(data-i18n='teacher.course_progress')
.tab-spacer
li(class=(activeTab === "#enrollment-status-tab" ? 'active' : ''))
a.course-progress-tab-btn(href='#enrollment-status-tab')
.small-details.text-center(data-i18n='teacher.enrollment_status')
.tab-filler
if view.students.length > 0
ul.nav.nav-tabs.m-t-5(role='tablist')
- var activeTab = state.get('activeTab');
li(class=(activeTab === "#students-tab" ? 'active' : ''))
a.students-tab-btn(href='#students-tab')
.small-details.text-center(data-i18n='teacher.students')
.tab-spacer
li(class=(activeTab === "#course-progress-tab" ? 'active' : ''))
a.course-progress-tab-btn(href='#course-progress-tab')
.small-details.text-center(data-i18n='teacher.course_progress')
.tab-spacer
li(class=(activeTab === "#enrollment-status-tab" ? 'active' : ''))
a.course-progress-tab-btn(href='#enrollment-status-tab')
.small-details.text-center(data-i18n='teacher.enrollment_status')
.tab-filler
.tab-content
if activeTab === '#students-tab'
+studentsTab
else if activeTab === '#course-progress-tab'
+courseProgressTab
else
+enrollmentStatusTab
.tab-content
if activeTab === '#students-tab'
+studentsTab
else if activeTab === '#course-progress-tab'
+courseProgressTab
else
+enrollmentStatusTab
else
.text-center.m-t-5.m-b-5
.text-h2
span(data-i18n="teacher.no_students_yet")
.text-h4
span(data-i18n="teacher.try_refreshing")
mixin breadcrumbs
.breadcrumbs
@ -171,8 +179,8 @@ mixin studentsTab
+bulkAssignControls
table.students-table
thead
th.checkbox-col.select-all
span Select All
th.checkbox-col.select-all.small.text-center
span(data-i18n="teacher.select_all")
.checkbox-flat
input(type='checkbox' id='checkbox-all-students')
label.checkmark(for='checkbox-all-students')
@ -236,7 +244,7 @@ mixin studentRow(student)
div(data-i18n='teacher.remove')
mixin enrollStudentButton(student)
a.enroll-student-button.btn.btn-lg.btn-primary(data-classroom-id=view.classroom.id data-user-id=student.id)
a.enroll-student-button.btn.btn-lg.btn-primary(data-classroom-id=view.classroom.id data-user-id=student.id data-event-action="Teachers Class Students Enroll Student")
span(data-i18n='teacher.enroll_student')
mixin courseProgressTab
@ -286,7 +294,7 @@ mixin courseProgressTab
span(data-i18n='TODO')
| Assign Course
else
.enroll-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id)
.enroll-student-button.btn.btn-md.btn-navy.pull-right(data-user-id=student.id data-event-action="Teachers Class Course Enroll Student")
span(data-i18n='TODO')
| Enroll Student
@ -313,7 +321,7 @@ mixin studentLevelsRow(student)
- var levels = view.classroom.getLevels({courseID: course.id, withoutLadderLevels: true}).models
each level, index in levels
- var progress = state.get('progressData').get({ classroom: view.classroom, course: course, level: level, user: student })
+studentLevelProgressDot(progress, level, index+1)
+studentLevelProgressDot(progress, level, index+1, session)
mixin studentCourseProgressDot(progress, levelsTotal, level, label)
//- TODO: Refactor with TeacherClassesView jade
@ -334,7 +342,7 @@ mixin studentLevelProgressDot(progress, level, levelNumber)
//- TODO: Refactor with TeacherClassesView jade
- dotClass = progress.completed ? 'forest' : (progress.started ? 'gold' : '');
- levelName = level.get('name')
- context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber })
- context = _.merge(progress, { levelName: levelName, levelNumber: levelNumber, moment: moment })
.progress-dot.level-progress-dot(class=dotClass, data-html='true', data-title=view.singleStudentLevelProgressDotTemplate(context))
+progressDotLabel(levelNumber)
@ -418,4 +426,4 @@ mixin enrollmentStatusTab
strong(class= status === 'expired' ? 'text-danger' : '')= view.studentStatusString(student)
td.enroll-col
if status !== 'enrolled'
button.enroll-student-button.btn.btn-navy(data-i18n="teacher.enroll_student", data-user-id=student.id)
button.enroll-student-button.btn.btn-navy(data-i18n="teacher.enroll_student", data-user-id=student.id, data-event-action="Teachers Class Enrollment Enroll Student")

View file

@ -10,15 +10,16 @@ block content
p(data-i18n='teacher.teacher_account_required')
if me.isAnonymous()
.login-button.btn.btn-lg.btn-primary(data-i18n='login.log_in')
a.btn.btn-lg.btn-primary-alt(href="/teachers/signup" data-i18n='teacher.create_teacher_account')
button.btn.btn-lg.btn-primary-alt.create-teacher-btn(data-event-action="Teachers Classes Create Teacher Account", data-i18n='teacher.create_teacher_account')
else
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button.btn.btn-lg.btn-primary.update-teacher-btn(data-event-action="Teachers Classes Convert Teacher Account", data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
else
if !me.isTeacher()
.alert.alert-danger.text-center
@ -27,30 +28,30 @@ block content
h3 ATTENTION: Please upgrade your account to a Teacher Account.
p
| We are transitioning to a new improved classroom management system for instructors.
| Please convert your account to ensure you retain access to your classrooms.
a.btn.btn-primary.btn-lg(href="/teachers/update-account") Upgrade to teacher account
| Please convert your account to ensure you retain access to your classrooms.
button.btn.btn-primary.btn-lg.update-teacher-btn(data-event-action="Teachers Classes Convert Teacher Account Temp") Upgrade to teacher account
.container
h3(data-i18n='teacher.current_classes')
.classes.container
// Loop each class
each classroom in view.classrooms.models
unless classroom.get('archived')
+classRow(classroom)
+createClassButton
- var archivedClassrooms = view.classrooms.where({archived: true});
if _.size(archivedClassrooms)
.container
h3(data-i18n='teacher.archived_classes')
p(data-i18n='teacher.archived_classes_blurb')
.classes.container
each classroom in archivedClassrooms
+archivedClassRow(classroom)
mixin classRow(classroom)
.class.row
.col-xs-6
@ -67,9 +68,9 @@ mixin classRow(classroom)
span
= classroom.get('members').length
.class-links
a.text-h6(data-i18n='teacher.view_class' href=('/teachers/classes/' + classroom.id))
a.edit-classroom.text-h6(data-i18n='teacher.edit_class_settings' data-classroom-id=classroom.id)
a.archive-classroom.text-h6(data-i18n='teacher.archive_class' data-classroom-id=classroom.id)
a.view-class-btn.text-h6(data-i18n='teacher.view_class' data-classroom-id=classroom.id data-event-action="Teachers Classes View Class Link")
a.edit-classroom.text-h6(data-i18n='teacher.edit_class_settings' data-classroom-id=classroom.id data-event-action="Teachers Classes Edit Class Started")
a.archive-classroom.text-h6(data-i18n='teacher.archive_class' data-classroom-id=classroom.id data-event-action="Teachers Classes Archive Class")
.progress-col.col-xs-5
if classroom.get('members').length == 0
@ -77,9 +78,10 @@ mixin classRow(classroom)
else
each trimCourse, index in classroom.get('courses') || []
- var course = view.courses.get(trimCourse._id);
+progressDot(classroom, course, index)
if view.courseInstances.findWhere({ classroomID: classroom.id, courseID: course.id })
+progressDot(classroom, course, index)
.view-class-arrow.col-xs-1
a.view-class-arrow-inner.glyphicon.glyphicon-chevron-right(data-classroom-id=classroom.id, href=('/teachers/classes/' + classroom.id))
a.view-class-arrow-inner.glyphicon.glyphicon-chevron-right.view-class-btn(data-classroom-id=classroom.id data-event-action="Teachers Classes View Class Chevron")
mixin addStudentsButton(classroom)
@ -90,7 +92,7 @@ mixin addStudentsButton(classroom)
a.add-students-btn.btn.btn-lg.btn-primary(data-classroom-id=classroom.id )
span(data-i18n='teacher.add_students')
| Add Students
mixin createClassButton
.create-class
.text-center
@ -109,7 +111,7 @@ mixin progressDot(classroom, course, index)
- complete = courseInstance.numCompleted
- started = courseInstance.started
- dotClass = complete === total ? 'forest' : started ? 'gold' : '';
- var progressDotContext = {total: total, complete: complete};
- var progressDotContext = {total: total, complete: complete};
.progress-dot(class=dotClass, data-title=view.progressDotTemplate(progressDotContext))
+progressDotLabel(index)

View file

@ -63,7 +63,7 @@ block content
span.spr
| .
span
= level.get('name')
= level.get('name').replace('Course: ', '')
a.play-level-button.btn.btn-lg.btn-primary
span(data-i18n="courses.play_level")
.clearfix
@ -86,10 +86,10 @@ mixin course-info(course)
if view.guideLinks[course.id]
//- a.btn.btn-primary(href=view.guideLinks[course.id] class=(me.isTeacher() ? '': 'disabled'))
//- span(data-i18n="courses.print_guide")
a.btn.btn-primary(href=view.guideLinks[course.id].python class=(me.isTeacher() ? '': 'disabled'))
a.guide-btn.btn.btn-primary(href=view.guideLinks[course.id].python data-course-id=course.id data-course-name=course.get('name') data-event-action="Classes Guides Guide Python" class=(me.isTeacher() ? '': 'disabled'))
span(data-i18n="courses.view_guide_online")
| &mdash; Python
a.btn.btn-primary(href=view.guideLinks[course.id].javascript class=(me.isTeacher() ? '': 'disabled'))
a.guide-btn.btn.btn-primary(href=view.guideLinks[course.id].javascript data-course-id=course.id data-course-name=course.get('name') data-event-action="Classes Guides Guide JavaScript" class=(me.isTeacher() ? '': 'disabled'))
span(data-i18n="courses.view_guide_online")
| &mdash; JavaScript
else

View file

@ -11,7 +11,7 @@ ul.user-feedback-list.list-group
em= moment(new Date(feedback.created)).fromNow()
span.spl.spr -
a(href="/user/#{feedback.creator}")
strong= feedback.creatorName || 'Anoner'
strong= feedback.creatorName || 'Anonymous'
if feedback.review
span.spr :
span= feedback.review

View file

@ -2,80 +2,101 @@ extends /templates/base-flat
block content
.container
div.row(style="margin-top: 20px")
div.row.verifier-row
div.col-sm-3
p.alert.alert-success(style="padding: 5px")
p.alert.alert-success
| Passed: #{view.passed}
div.col-sm-3
p.alert.alert-warning(style="padding: 5px")
p.alert.alert-warning
| Test Problem: #{view.problem}
div.col-sm-3
p.alert.alert-danger(style="padding: 5px")
p.alert.alert-danger
| Failed: #{view.failed}
div.col-sm-3
p.alert.alert-info(style="padding: 5px")
p.alert.alert-info
| To Run: #{view.testCount - view.passed - view.problem - view.failed}
if view.levelIDs
if view.levelsByCampaign
.form.form-inline
.row
each campaignInfo, campaign in view.levelsByCampaign
.form-group.campaign-mix
- var campaignID = "campaign-" + campaign + "-checkbox";
input(id=campaignID, type="checkbox", checked=campaignInfo.checked, disabled=!!view.tests)
label(for=campaignID)= campaign + ': ' + campaignInfo.levels.length
.row
each codeLanguage in view.codeLanguages
.form-group.code-language-mix
- var codeLanguageID = "code-language-" + codeLanguage.id + "-checkbox";
input(id=codeLanguageID, type="checkbox", checked=codeLanguage.checked, disabled=!!view.tests)
label(for=codeLanguageID)= codeLanguage.id
.pull-right
button.btn.btn-primary#go-button(disabled=!!view.tests) Start Tests
if view.levelsToLoad && !view.tests
.progress
.progress-bar.progress-bar-success(role="progressbar" style="width: #{100*view.passed/view.testCount}%")
.progress-bar.progress-bar-warning(role="progressbar" style="width: #{100*view.problem/view.testCount}%")
.progress-bar.progress-bar-danger(role="progressbar" style="width: #{100*view.failed/view.testCount}%")
.progress-bar.progress-bar-success(role="progressbar" style="width: #{100*(1 - view.levelsToLoad/view.initialLevelsToLoad)}%")
if view.tests
if view.levelIDs
.progress
.progress-bar.progress-bar-success(role="progressbar" style="width: #{100*view.passed/view.testCount}%")
.progress-bar.progress-bar-warning(role="progressbar" style="width: #{100*view.problem/view.testCount}%")
.progress-bar.progress-bar-danger(role="progressbar" style="width: #{100*view.failed/view.testCount}%")
each test, id in view.tests
- if (test.state == 'no-solution')
- continue;
if test.level
.pull-right
- var last = test.level.get('slug') + view.linksQueryString
a.btn.btn-primary(href="/editor/verifier/" + last) Focus
a.btn.btn-success(href="/play/level/" + last) Play
a.btn.btn-warning(href="/editor/level/" + last) Edit
a.btn.btn-default(data-target='#verifier-test-' + id, data-toggle="collapse") Toggle
each test, id in view.tests
- if (test.state == 'no-solution')
- continue;
if test.level
.pull-right
- var last = test.level.get('slug') + view.linksQueryString
a.btn.btn-primary(href="/editor/verifier/" + last) Focus
a.btn.btn-success(href="/play/level/" + last) Play
a.btn.btn-warning(href="/editor/level/" + last) Edit
a.btn.btn-default(data-target='#verifier-test-' + id, data-toggle="collapse") Toggle
if !test.goals
h2(style='color: orange')= test.level.get('name')
small= ' in ' + test.language + ''
else if test.isSuccessful()
h2(style='color: green')= test.level.get('name')
small= ' in ' + test.language + ''
else
h2(style='color: red')= test.level.get('name')
small= ' in ' + test.language + ''
if !test.goals
h2.test-running= test.level.get('name')
small= ' in ' + test.language + ''
else if test.isSuccessful()
h2.test-success= test.level.get('name')
small= ' in ' + test.language + ''
else
h2.test-failed= test.level.get('name')
small= ' in ' + test.language + ''
div.row(class=(test.isSuccessful() && id > 1 ? 'collapse' : 'collapse in'), id='verifier-test-' + id)
div.col-xs-8
if test.solution
pre #{test.solution.source}
else
h4 Error Loading Test
pre #{test.error}
div.col-xs-4.well
if test.goals
if test.frames == test.solution.frameCount
div(style='color: green') ✓ Frames: #{test.frames}
div.row(class=(test.isSuccessful() && id > 1 ? 'collapse' : 'collapse in'), id='verifier-test-' + id)
div.col-xs-8
if test.solution
pre #{test.solution.source}
else
div(style='color: red') ✘ Frames: #{test.frames} vs #{test.solution.frameCount}
each v,k in test.goals || []
if !test.solution.goals
div(style='color: orange') ? #{k} (#{v.status})
else if v.status == test.solution.goals[k]
div(style='color: green') ✓ #{k} (#{v.status})
h4 Error Loading Test
pre #{test.error}
div.col-xs-4.well
if test.goals
if test.frames == test.solution.frameCount
div.test-success ✓ Frames: #{test.frames}
else
div(style='color: red') ✘ #{k} (#{v.status} vs #{test.solution.goals[k]})
else
h3 Pending....
div.test-failed ✘ Frames: #{test.frames} vs #{test.solution.frameCount}
if test.error
pre(style="color: red") #{test.error}
if test.userCodeProblems.length
h4(style="color: red") User Code Problems
pre(style="color: red") #{JSON.stringify(test.userCodeProblems, null, 2)}
each v,k in test.goals || []
if !test.solution.goals
div.test-running ? #{k} (#{v.status})
else if v.status == test.solution.goals[k]
div.test-success ✓ #{k} (#{v.status})
else
div.test-failed ✘ #{k} (#{v.status} vs #{test.solution.goals[k]})
else
h3 Pending....
else
h1 Loading Level...
if test.error
pre.test-faile #{test.error}
// TODO: show last frame hash
if test.userCodeProblems.length
h4.test-failed User Code Problems
pre.test-failed #{JSON.stringify(test.userCodeProblems, null, 2)}
else
h1 Loading Level...
// TODO: show last frame hash

View file

@ -3,98 +3,38 @@ extends /templates/base-flat
mixin box
.well.text-center
if me.isAnonymous() == true
if ['home-legacy','home-legacy-left'].indexOf(view.variation) != -1
h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
div
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.im_a_teacher")
div
a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.im_a_student")
h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
a.btn.btn-gold.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
else if ['home-teachers','home-dropdowns'].indexOf(view.variation) != -1
h5#educator-header(data-i18n="new_home.teachers")
p.small(data-i18n="new_home.class_in_box")
h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
div
a.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-event-action="Homepage Click Teacher Button CTA", data-i18n="new_home.im_a_teacher")
div
a.student-btn.btn.btn-forest.btn-lg.btn-block(href="/courses", data-event-action="Homepage Click Student Button CTA", data-i18n="new_home.im_a_student")
h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
a.btn.btn-gold.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Play Now CTA", data-i18n="new_home.play_now")
if view.variation == 'home-dropdowns'
div.form-group
h6.control-label(data-i18n="new_home.role")
select.form-control#request-form-role
option(value="", data-i18n="new_home.form_select_role")
option(data-i18n="courses.teacher", value="Teacher")
option(data-i18n="teachers_quote.tech_coordinator", value="Technology coordinator")
option(data-i18n="teachers_quote.advisor", value="Advisor")
option(data-i18n="teachers_quote.principal", value="Principal")
option(data-i18n="teachers_quote.superintendent", value="Superintendent")
option(data-i18n="teachers_quote.parent", value="Parent")
div.form-group
h6.control-label(data-i18n="new_home.student_count")
select.form-control#request-form-range
option(value="", data-i18n="new_home.form_select_range")
option 1-10
option 11-50
option 51-100
option 101-200
option 201-500
option 501-1000
option 1000+
div
button.btn.btn-forest.btn-lg.btn-block.request-demo(href="#",data-i18n="new_home.get_started")
else
div
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.get_started")
if view.variation == 'home-teachers'
h5#students-header(data-i18n="new_home.students")
div
button.join-class.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
div
a.btn.btn-default.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
else
h6#students-header(data-i18n="new_home.students_and_players")
div
a.btn.btn-primary.btn-lg.play-btn.btn-block(href=view.playURL, data-i18n="new_home.play_now")
else
h5#educator-header(data-i18n="new_home.start_playing_for_free")
div
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
div
button.join-class.btn.btn-default.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
h6#classroom-edition-header(style="padding-top: 20px",data-i18n="new_home.teachers_and_educators")
p.small(data-i18n="new_home.class_in_box")
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.get_started")
if ['home-teachers','home-dropdowns','home-play-for-free'].indexOf(view.variation) != -1
p.small
span(data-i18n="new_home.have_an_account")
span &nbsp;
a.login-button(data-i18n="login.log_in", href="#")
else
h6#classroom-edition-header(data-i18n="new_home.logged_in_as")
p.small #{me.get("email")}
if me.isTeacher()
div
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.goto_classes")
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-event-action="Homepage Click My Classes CTA", data-i18n="new_home.goto_classes")
div
if view.isTeacherWithDemo
h6(data-i18n="new_home.check_out_wiki")
a.btn.btn-primary.btn-lg.btn-block(href="https://sites.google.com/a/codecombat.com/teacher-guides/course-guides", data-i18n="nav.educator_wiki")
button.wiki-btn.btn.btn-primary.btn-lg.btn-block(data-event-action="Homepage Click Educator Wiki CTA", data-i18n="nav.educator_wiki")
else
h6(data-i18n="new_home.want_coco")
a.btn.btn-primary.btn-lg.btn-block(href=view.demoRequestURL, data-i18n="new_home.get_started")
button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo CTA", data-i18n="new_home.request_demo")
else if me.justPlaysCourses()
div
a.btn.btn-forest.btn-lg.btn-block(href=view.playURL, data-i18n="courses.continue_playing")
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Classroom Continue Playing CTA", data-i18n="courses.continue_playing")
div
a.btn.btn-primary.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.view_progress")
a.btn.btn-primary.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage View Progress CTA", data-i18n="new_home.view_progress")
else
div
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="courses.continue_playing")
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-event-action="Homepage Campaign Continue Playing CTA", data-i18n="courses.continue_playing")
div
a.btn.btn-primary.btn-lg.btn-block(href="/user/#{me.getSlugOrID()}", data-i18n="new_home.view_profile")
a.btn.btn-primary.btn-lg.btn-block.profile-btn(href=view.playURL, data-event-action="Homepage View Profile CTA", data-i18n="new_home.view_profile")
p.small
@ -113,24 +53,16 @@ block content
.container
.row.hidden-xs.top-spacer(style="height: 160px")
.row.hidden-sm.hidden-xs
case view.variation
when 'home-legacy-left'
.col-lg-3.col-md-4
+box
.col-lg-7.col-lg-offset-2.col-md-8
h1(data-i18n="new_home.slogan")
default
.col-lg-7.col-md-8
h1(data-i18n="new_home.slogan")
.col-lg-3.col-lg-offset-2.col-md-4
+box
.col-lg-7.col-md-8
h1(data-i18n="new_home.slogan")
.col-lg-3.col-lg-offset-2.col-md-4
+box
.row.hidden-lg.hidden-md
.col-lg-7.col-md-8
h1(data-i18n="new_home.slogan")
.col
div(style="margin: auto; max-width: 300px")
+box
.row#learn-more-row
.col-xs-12.text-center
a#learn-more-link
@ -281,11 +213,11 @@ block content
if view.isTeacherWithDemo
h4(data-i18n="new_home.get_started_subtitle")
div
a.btn.btn-primary.btn-lg(href="/teachers/classes", data-i18n="new_home.setup_a_class")
button.btn.btn-primary.btn-lg.setup-class-btn(data-event-action="Homepage Setup Class", data-i18n="new_home.setup_a_class")
else
h4(data-i18n="new_home.request_demo_subtitle")
div
a.btn.btn-primary.btn-lg(href=view.demoRequestURL, data-i18n="new_home.request_demo")
button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo", data-i18n="new_home.request_demo")
if me.isAnonymous()
.have-an-account
span.spr(data-i18n="new_home.have_an_account")
@ -374,10 +306,10 @@ block content
h3(data-i18n="new_home.run_class")
if view.isTeacherWithDemo
div
a.btn.btn-primary.btn-lg(href="/teachers/classes", data-i18n="new_home.setup_a_class")
button.btn.btn-primary.btn-lg.setup-class-btn(data-event-action="Homepage Setup Class Page Bottom", data-i18n="new_home.setup_a_class")
else
div
a.btn.btn-primary.btn-lg(href=view.demoRequestURL, data-i18n="new_home.request_demo")
button.btn.btn-primary.btn-lg.request-demo(data-event-action="Homepage Request Demo Page Bottom", data-i18n="new_home.request_demo")
if me.isAnonymous()
.have-an-account
span.spr(data-i18n="new_home.have_an_account")

View file

@ -1,16 +1,21 @@
- var league = view.options.league
.row
for team, teamIndex in teams
for team, teamIndex in view.teams
div.column.col-md-6
div(id="histogram-display-#{team.name}", class="histogram-display", data-team-name=team.name)
table.table.table-bordered.table-condensed.table-hover.ladder-table(data-team=team.id)
- var levelType = view.level.get('type', true)
- var topSessions = team.leaderboard.topPlayers.models;
- var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous');
- if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10);
thead
tr
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2)
th(colspan=levelType == 'hero-ladder' ? 3 : 2)
th(colspan=4, style="color: #{team.primaryColor}")
span= team.displayName
span.spl(data-i18n="ladder.leaderboard") Leaderboard
tr
th(colspan=level.get('type', true) == 'hero-ladder' ? 3 : 2)
th(colspan=levelType == 'hero-ladder' ? 3 : 2)
th(data-i18n="general.score") Score
th(data-i18n="general.name").name-col-cell Name
th(data-i18n="general.when") When
@ -18,23 +23,20 @@
th.iconic-cell
.glyphicon.glyphicon-eye-open
tbody
- var topSessions = team.leaderboard.topPlayers.models;
- var showJustTop = team.leaderboard.inTopSessions() || me.get('anonymous');
- if(!showJustTop && topSessions.length == 20) topSessions = topSessions.slice(0, 10);
tbody
for session, rank in topSessions
- var myRow = session.get('creator') == me.id
- var sessionStats = league ? (_.find(session.get('leagues') || [], {leagueID: league.id}) || {}).stats || {} : session.attributes;
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=capitalize(session.get('submittedCodeLanguage')))
if level.get('type', true) == 'hero-ladder'
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)" title=view.capitalize(session.get('submittedCodeLanguage')))
if levelType == 'hero-ladder'
td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)")
td.rank-cell= rank + 1
td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100)
td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight!
td.spectate-cell.iconic-cell
.glyphicon.glyphicon-eye-open
@ -47,14 +49,14 @@
- var sessionStats = league ? (_.find(session.get('leagues'), {leagueID: league.id}) || {}).stats || {} : session.attributes;
tr(class=myRow ? "success" : "", data-player-id=session.get('creator'), data-session-id=session.id)
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + session.get('submittedCodeLanguage') + "_icon.png)")
if level.get('type', true) == 'hero-ladder'
if levelType == 'hero-ladder'
td.hero-portrait-cell(style="background-image: url(/file/db/thang.type/#{(session.get('heroConfig') || {}).thangType || '529ffbf1cf1818f2be000001'}/portrait.png)")
td.rank-cell= session.rank
td.score-cell= Math.round((sessionStats.totalScore || session.get('totalScore') / 2) * 100)
td(class='name-col-cell' + ((new RegExp('(Simple|Shaman|Brawler|Chieftain|Thoktar) CPU')).test(session.get('creatorName')) ? ' ai' : ''))= session.get('creatorName') || "Anonymous"
td.age-cell= moment(session.get('submitDate')).fromNow().replace('a few ', '')
td.fight-cell
a(href="/play/level/#{level.get('slug') || level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
a(href="/play/level/#{view.level.get('slug') || view.level.id}?team=#{team.otherTeam}&opponent=#{session.id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight!
td.spectate-cell.iconic-cell
.glyphicon.glyphicon-eye-open
@ -77,8 +79,8 @@
if !onGPlus
button.btn.btn-sm.connect-google-plus(data-i18n="community.gplus") Google+
if friends.length
for friend in friends
if view.friends
for friend in view.friends
p.friend-entry
img(src=friend.imageSource).img-thumbnail
span= friend.creatorName + ' (' + friend.name + ')'
@ -87,7 +89,7 @@
span :
span= friend.team
br
a(href="/play/level/#{level.get('slug') || level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : ""))
a(href="/play/level/#{view.level.get('slug') || view.level.id}/?team=#{friend.otherTeam}&opponent=#{friend._id}" + (league ? "&league=" + league.id : ""))
span(data-i18n="ladder.fight") Fight!
else if onFacebook || onGPlus

View file

@ -4,10 +4,10 @@ block content
div#ladder-top
if leagueType == 'course' && view.course.id
if view.leagueType === 'course' && view.course
#course-header
#course-details-link
a(href="/courses/"+view.course.id+"/"+view.league.id)
a(href="/courses/{#view.course.id}/{#view.league.id}")
span.glyphicon.glyphicon-arrow-left
span.spl Levels
@ -15,22 +15,21 @@ block content
span#course-name
span= view.course.get('name')
span.spl - Arena
div#level-column
if levelDescription
div!= levelDescription
if view.levelDescription
div!= view.levelDescription
if leagueType === 'clan'
if view.leagueType === 'clan'
h1.league-header
a(href="/clans/#{league.id}")= league.get('name')
a(href="/clans/#{view.league.id}")= view.league.get('name')
span.spl(data-i18n="ladder.league") League
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
.tournament-blurb
h2
span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft}
| #{view.tournamentTimeLeft}
p
span(data-i18n="ladder.tournament_blurb") Write code, collect gold, build armies, crush foes, win prizes, and upgrade your career in our $40,000 Greed tournament! Check out the details
|
@ -63,11 +62,11 @@ block content
a(href="http://aws.amazon.com/")
img(src=base + "aws.png")
if level.get('name') == 'Criss-Cross'
if view.level.get('name') == 'Criss-Cross'
.tournament-blurb
h2
span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft}
| #{view.tournamentTimeLeft}
p
span(data-i18n="ladder.tournament_blurb_criss_cross") Win bids, construct paths, outwit opponents, grab gems, and upgrade your career in our Criss-Cross tournament! Check out the details
|
@ -86,13 +85,13 @@ block content
a(href="http://discourse.codecombat.com/") the forum
| and discuss your strategies, your triumphs, and your turmoils.
if level.get('name') == 'Zero Sum' && !league
if view.level.get('name') == 'Zero Sum' && !view.league
.tournament-blurb
h2
span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft}
| #{view.tournamentTimeLeft}
//span(data-i18n="ladder.tournament_started") , started
//| #{tournamentTimeElapsed}
//| #{view.tournamentTimeElapsed}
p
span(data-i18n="ladder.tournament_blurb_zero_sum") Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer. The tournament began on Friday, March 27 and will run until Monday, April 6 at 5PM PDT. Compete for fun and glory! Check out the details
|
@ -109,14 +108,14 @@ block content
a(href="http://discourse.codecombat.com/") the forum
| and discuss your strategies, your triumphs, and your turmoils.
if level.get('name') == 'Ace of Coders'
if view.level.get('name') == 'Ace of Coders'
.tournament-blurb
h2
//span(data-i18n="ladder.tournament_ends") Tournament ends
span(data-i18n="ladder.tournament_ended") Tournament ended
| #{tournamentTimeLeft}
| #{view.tournamentTimeLeft}
span(data-i18n="ladder.tournament_started") , started
| #{tournamentTimeElapsed}
| #{view.tournamentTimeElapsed}
p
span(data-i18n="ladder.tournament_blurb_ace_of_coders") Battle it out in the frozen glacier in this domination-style mirror match! The tournament began on Wednesday, September 16 and will run until Wednesday, October 14 at 5PM PDT. Check out the details
|
@ -135,17 +134,18 @@ block content
div#columns.row
div.column.col-md-2
for team in teams
div.column.col-md-4
a(class="play-button btn btn-illustrated btn-block btn-lg " + (team.id == 'ogres' ? 'btn-primary' : 'btn-danger'), data-team=team.id)
span(data-i18n="play.play_as") Play As
|
span= team.displayName
if view.teams
for team in view.teams
div.column.col-md-4
a(class="play-button btn btn-illustrated btn-block btn-lg " + (team.id == 'ogres' ? 'btn-primary' : 'btn-danger'), data-team=team.id)
span(data-i18n="play.play_as") Play As
|
span= team.displayName
div.column.col-md-2
if leagueType !== 'course'
if view.leagueType !== 'course'
.spectate-button-container
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
a(href="/play/spectate/#{view.level.get('slug')}" + (view.league ? "?league=" + view.league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
span(data-i18n="play.spectate") Spectate
ul.nav.nav-pills
@ -154,16 +154,16 @@ block content
if !me.get('anonymous')
li
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
if leagueType !== 'course'
if view.leagueType !== 'course'
li
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
li
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
li
a(href="#rules", data-toggle="tab", data-i18n="ladder.rules") Rules
if level.get('name') == 'Greed' || level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum' || level.get('name') == 'Ace of Coders'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum' || view.level.get('name') == 'Ace of Coders'
li
a(href="#winners", data-toggle="tab", data-i18n="ladder.winners") Winners
@ -174,7 +174,7 @@ block content
#my-matches-tab-view
.tab-pane.well#simulate
#simulate-tab-view
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
.tab-pane.well#prizes
h1(data-i18n="ladder_prizes.title") Tournament Prizes
p
@ -740,7 +740,7 @@ block content
| - $50
td $50
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
.tab-pane.well#rules
h1(data-i18n="ladder.tournament_rules") Tournament Rules
h2 General
@ -802,7 +802,7 @@ block content
a(href="http://discourse.codecombat.com/") Discourse forum
| .
if level.get('name') == 'Greed' || level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
.tab-pane.well#winners
h1(data-i18n="ladder.winners") Winners
@ -810,71 +810,71 @@ block content
thead
tr
th(data-i18n="ladder_prizes.rank") Rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
th
th Human
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
th Human wins/losses/ties
else
th Human score
if level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Zero Sum'
th
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
th
th Ogre
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
th Ogre wins/losses/ties
else
th Ogre score
th(data-i18n="play.spectate") Spectate
tbody
each human, index in winners.humans
- var ogre = winners.ogres[index]
each human, index in view.winners.humans
- var ogre = view.winners.ogres[index]
tr
td= human.rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + human.codeLanguage + "_icon.png)" title=_.string.capitalize(human.codeLanguage))
td= human.name
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
td
span.win= human.wins
| -
span.loss= human.losses
| -
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
span.tie= 377 - human.wins - human.losses
else if level.get('name') == 'Zero Sum'
else if view.level.get('name') == 'Zero Sum'
span.tie= 108 - human.wins - human.losses
else
td
span= Math.round(100 * human.score)
if ogre
if level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Zero Sum'
td= ogre.rank
if level.get('name') == 'Criss-Cross' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Criss-Cross' || view.level.get('name') == 'Zero Sum'
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + ogre.codeLanguage + "_icon.png)" title=_.string.capitalize(ogre.codeLanguage))
td= ogre.name
if level.get('name') == 'Greed' || level.get('name') == 'Zero Sum'
if view.level.get('name') == 'Greed' || view.level.get('name') == 'Zero Sum'
td
span.win= ogre.wins
| -
span.loss= ogre.losses
| -
if level.get('name') == 'Greed'
if view.level.get('name') == 'Greed'
span.tie= 407 - ogre.wins - ogre.losses
else if level.get('name') == 'Zero Sum'
else if view.level.get('name') == 'Zero Sum'
span.tie= Math.max(0, 163 - ogre.wins - ogre.losses)
else
td
span= Math.round(100 * ogre.score)
td
a(href="/play/spectate/" + level.get('slug') + "?session-one=" + human.sessionID + "&session-two=" + ogre.sessionID, data-i18n="ladder.watch_battle") Watch the battle
a(href="/play/spectate/" + view.level.get('slug') + "?session-one=" + human.sessionID + "&session-two=" + ogre.sessionID, data-i18n="ladder.watch_battle") Watch the battle
else
td
td
td
if level.get('name') == 'Ace of Coders'
if view.level.get('name') == 'Ace of Coders'
.tab-pane.well#winners
h1(data-i18n="ladder.winners") Winners
@ -888,7 +888,7 @@ block content
th Losses
th(data-i18n="play.spectate") Spectate
tbody
each player in winners.humans
each player in view.winners.humans
tr
td= player.rank
td.code-language-cell(style="background-image: url(/images/common/code_languages/" + player.codeLanguage + "_icon.png)" title=_.string.capitalize(player.codeLanguage))
@ -899,6 +899,6 @@ block content
span.loss= player.losses
td
if player.team == "ogres"
a(href="/play/spectate/" + level.get('slug') + "?session-one=55df8c9207d920b7e4262f33" + "&session-two=" + player.sessionID, data-i18n="ladder.watch_battle") Watch the battle
a(href="/play/spectate/" + view.level.get('slug') + "?session-one=55df8c9207d920b7e4262f33" + "&session-two=" + player.sessionID, data-i18n="ladder.watch_battle") Watch the battle
else
a(href="/play/spectate/" + level.get('slug') + "?session-one=" + player.sessionID + "&session-two=55e1d23686c019bc47b640fe", data-i18n="ladder.watch_battle") Watch the battle
a(href="/play/spectate/" + view.level.get('slug') + "?session-one=" + player.sessionID + "&session-two=55e1d23686c019bc47b640fe", data-i18n="ladder.watch_battle") Watch the battle

View file

@ -9,81 +9,81 @@ block modal-body-content
h4.language-selection(data-i18n="ladder.select_your_language") Select your language!
.form-group.select-group
select#tome-language(name="language")
for option in languages
option(value=option.id selected=(language === option.id))= option.name
for option in view.languages
option(value=option.id selected=(view.language === option.id))= option.name
div#noob-view.secret
a(href="/play/level/#{levelID}-tutorial" + (league ? "?league=" + league.id : "")).btn.btn-success.btn-block.btn-lg
a(href="/play/level/#{view.levelID}-tutorial" + (view.options.league ? "?league=" + view.options.league.id : "")).btn.btn-success.btn-block.btn-lg
p
strong(data-i18n="ladder.tutorial_play") Play Tutorial
span(data-i18n="ladder.tutorial_recommended") Recommended if you've never played before
span.btn.btn-primary.btn-block.btn-lg#skip-tutorial-button(data-i18n="ladder.tutorial_skip") Skip Tutorial
div#normal-view
if tutorialLevelExists
if view.tutorialLevelExists
p.tutorial-suggestion
strong(data-i18n="ladder.tutorial_not_sure") Not sure what's going on?
|
a(href="/play/level/#{levelID}-tutorial" + (league ? "?league=" + league.id : ""), data-i18n="ladder.tutorial_play_first") Play the tutorial first.
a(href="/play/level/#{levelID}?team=#{teamID}" + (league ? "&league=" + league.id : ""))
a(href="/play/level/#{view.levelID}-tutorial" + (view.options.league ? "?league=" + view.options.league.id : ""), data-i18n="ladder.tutorial_play_first") Play the tutorial first.
a(href="/play/level/#{view.levelID}?team=#{view.team}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option
img(src=myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_tutorial.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_tutorial.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle
img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/#{view.team}_ladder_tutorial.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_tutorial.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one
span= myName
span= view.myName
div.opponent-name.name-label
span(data-i18n="ladder.simple_ai")
//span.code-language(style="background-image: url(/images/common/code_languages/javascript_small.png)")
div.difficulty
span(data-i18n="ladder.warmup") Warmup
if challengers.easy
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.easy.sessionID}" + (league ? "&league=" + league.id : ""))
if view.challengers && view.challengers.easy
a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.easy.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.easy-option
img(src=myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_easy.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.easy.opponentImageSource||genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_easy.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle
img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/#{view.team}_ladder_easy.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=view.challengers.easy.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_easy.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one
span= myName
span= view.myName
div.opponent-name.name-label
span= challengers.easy.opponentName
if challengers.easy.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.easy.codeLanguage + "_small.png)")
span= view.challengers.easy.opponentName
if view.challengers.easy.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.easy.codeLanguage}_small.png)")
div.difficulty
span(data-i18n="general.easy") Easy
if challengers.medium
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.medium.sessionID}" + (league ? "&league=" + league.id : ""))
if view.challengers && view.challengers.medium
a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.medium.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.medium-option
img(src=myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_medium.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.medium.opponentImageSource||genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_medium.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle
img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/#{view.team}_ladder_medium.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=view.challengers.medium.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_medium.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one
span= myName
span= view.myName
div.opponent-name.name-label
span= challengers.medium.opponentName
if challengers.medium.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.medium.codeLanguage + "_small.png)")
span= view.challengers.medium.opponentName
if view.challengers.medium.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.medium.codeLanguage}_small.png)")
div.difficulty
span(data-i18n="general.medium") Medium
if challengers.hard
a(href="/play/level/#{levelID}?team=#{teamID}&opponent=#{challengers.hard.sessionID}" + (league ? "&league=" + league.id : ""))
if view.challengers && view.challengers.hard
a(href="/play/level/#{view.levelID}?team=#{view.team}&opponent=#{view.challengers.hard.sessionID}" + (view.options.league ? "&league=" + view.options.league.id : ""))
div.play-option.hard-option
img(src=myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/"+teamID+"_ladder_hard.png", style="border: 1px solid #{teamColor}; background: #{teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=challengers.hard.opponentImageSource||genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/"+otherTeamID+"_ladder_hard.png", style="border: 1px solid #{opponentTeamColor}; background: #{opponentTeamBackgroundColor}").opponent-team-icon.img-circle
img(src=view.myPortrait).my-icon.only-one
img(src="/images/pages/play/ladder/#{view.team}_ladder_hard.png", style="border: 1px solid #{view.teamColor}; background: #{view.teamBackgroundColor}").my-team-icon.img-circle.only-one
img(src=view.challengers.hard.opponentImageSource||view.genericPortrait).opponent-icon
img(src="/images/pages/play/ladder/#{view.otherTeam}_ladder_hard.png", style="border: 1px solid #{view.opponentTeamColor}; background: #{view.opponentTeamBackgroundColor}").opponent-team-icon.img-circle
div.my-name.name-label.only-one
span= myName
span= view.myName
div.opponent-name.name-label
span= challengers.hard.opponentName
if challengers.hard.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/" + challengers.hard.codeLanguage + "_small.png)")
span= view.challengers.hard.opponentName
if view.challengers.hard.codeLanguage
span.code-language(style="background-image: url(/images/common/code_languages/#{view.challengers.hard.codeLanguage}_small.png)")
div.difficulty
span(data-i18n="general.hard") Hard

View file

@ -12,7 +12,7 @@ for player in view.players
.player-gold
.gold-icon
.gold-value
.player-name= player.name || 'Anoner'
.player-name= player.name || 'Anonymous'
.player-health
.health-icon
.health-bar-container

View file

@ -0,0 +1,21 @@
button.close-hint-btn.btn.btn-illustrated.btn-danger
span.glyphicon.glyphicon-remove
h1.text-center.hint-title
span= view.state.get('hintsTitle')
.hint-body
!= view.getProcessedHint()
.row.btn-area
.col-md-4
if view.state.get('hintIndex') > 0
button.previous-btn.btn.btn-illustrated.pull-left(data-i18n="about.previous")
.col-md-4
h2.text-center.hint-pagination #{view.state.get('hintIndex')+1} / #{view.hintsState.get('total')}
.col-md-4
if view.state.get('hintIndex') < view.hintsState.get('total') - 1
button.next-btn.btn.btn-illustrated.pull-right(data-i18n="about.next")
.clearfix

View file

@ -25,6 +25,9 @@
.progress-bar.progress-bar-success
.rim
.could-not-load
span(data-i18n="loading_error.could_not_load") Error loading from server
.subscription-required
span(data-i18n="subscribe.subscription_required_to_play") You'll need a subscription to play this level.
button.start-subscription-button.btn.btn-lg.btn-warning(data-i18n="subscribe.subscribe") Subscribe

View file

@ -1,5 +1,5 @@
.modal-header
#close-modal.well.well-sm.well-parchment(data-dismiss="modal")
#close-modal.btn.well.well-sm.well-parchment(data-dismiss="modal")
span.glyphicon.glyphicon-remove
.well.well-sm.well-parchment
h1(data-i18n="play_level.victory_new_item")

View file

@ -1,5 +1,5 @@
.modal-header
#close-modal.well.well-sm.well-parchment(data-dismiss="modal")
#close-modal.btn.well.well-sm.well-parchment(data-dismiss="modal")
span.glyphicon.glyphicon-remove
.well.well-sm.well-parchment
h1(data-i18n='play_level.level_complete')
@ -36,9 +36,9 @@
h3.text-uppercase
span(data-i18n='play_level.next_level')
span :
h2.text-uppercase= i18n(view.nextLevel.attributes, 'name')
h2.text-uppercase= i18n(view.nextLevel.attributes, 'name').replace('Course: ', '')
p= i18n(view.nextLevel.attributes, 'description')
div!= view.nextLevelDescription
.row
.col-sm-5.col-sm-offset-2

View file

@ -0,0 +1,36 @@
div
span.code-palette-background
if view.entryGroupSlugs
// Non-hero; group by entry groups, or maybe nothing.
ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : ''))
each slug, group in view.entryGroupSlugs
li(class=group == "this" || slug == "available-spells" ? "active" : "")
a(data-toggle="pill", data-target='#palette-tab-' + slug)
h4= view.entryGroupNames[group]
.tab-content
each slug, group in view.entryGroupSlugs
div(id="palette-tab-" + slug, class="tab-pane nano" + (group == "this" || slug == view.defaultGroupSlug ? " active" : ""))
div(class="properties properties-" + slug + " nano-content")
else if view.tabs
// Hero; group by items, but also include tabs
ul(class="nav nav-pills multiple-tabs")
li.active
a(data-toggle="pill", data-target="#palette-tab-this")
h4= view.thisName
each entries, tab in view.tabs
li
a(data-toggle="pill", data-target='#palette-tab-' + _.string.slugify(tab))
h4= tab
.tab-content
div#palette-tab-this.tab-pane.active
.properties.properties-this
each entries, tab in tabs
div(id="palette-tab-" + _.string.slugify(tab), class="tab-pane")
div(class="properties properties-" + _.string.slugify(tab))
else
// Hero; group by items, no tabs.
br
.properties.properties-this

View file

@ -9,22 +9,22 @@ if includeSpellList
.thang-avatar-placeholder
.method-name-area
.method-label(data-i18n="play_level.tome_current_method") Current Method
.method-signature #{methodSignature}
.spell-tool-buttons
.btn.btn-small.btn-illustrated.btn-warning.reload-code(data-i18n="[title]play_level.tome_reload_method", title="Reload original code for this method")
.glyphicon.glyphicon-repeat
span.spl(data-i18n="play_level.reload") Reload
if me.level() >= 15
.btn.btn-small.btn-illustrated.fullscreen-code(title=maximizeShortcutVerbose)
.glyphicon.glyphicon-fullscreen
.glyphicon.glyphicon-resize-small
if codeLanguage === 'javascript' && me.level() >= 15
.btn.btn-small.btn-illustrated.beautify-code(title=beautifyShortcutVerbose)
.glyphicon.glyphicon-magnet
.clearfix
if view.hintsState && view.hintsState.get('total') > 0
.btn.btn-small.btn-illustrated.hints-button
span(data-i18n="play_level.hints")
.clearfix

View file

@ -1,37 +0,0 @@
span.code-palette-background
if entryGroupSlugs
// Non-hero; group by entry groups, or maybe nothing.
ul(class="nav nav-pills" + (tabbed ? ' multiple-tabs' : ''))
each slug, group in entryGroupSlugs
li(class=group == "this" || slug == "available-spells" ? "active" : "")
a(data-toggle="pill", data-target='#palette-tab-' + slug)
h4= entryGroupNames[group]
.tab-content
each slug, group in entryGroupSlugs
div(id="palette-tab-" + slug, class="tab-pane nano" + (group == "this" || slug == defaultGroupSlug ? " active" : ""))
div(class="properties properties-" + slug + " nano-content")
else if tabs
// Hero; group by items, but also include tabs
ul(class="nav nav-pills multiple-tabs")
li.active
a(data-toggle="pill", data-target="#palette-tab-this")
h4= thisName
each entries, tab in tabs
li
a(data-toggle="pill", data-target='#palette-tab-' + _.string.slugify(tab))
h4= tab
.tab-content
div#palette-tab-this.tab-pane.active
.properties.properties-this
each entries, tab in tabs
div(id="palette-tab-" + _.string.slugify(tab), class="tab-pane")
div(class="properties properties-" + _.string.slugify(tab))
else
// Hero; group by items, no tabs.
if showsHelp
button.btn.btn-sm.btn-info.banner#spell-palette-help-button(data-i18n="common.help")
.properties.properties-this
else
.properties.properties-this.no-help

View file

@ -26,14 +26,6 @@
h3(data-i18n="options.editor_config_title") Editor Configuration
.form-group.select-group
label.control-label(for="option-key-bindings", data-i18n="options.editor_config_keybindings_label") Key Bindings
select#option-key-bindings.form-control(name="keyBindings")
option(value="default", selected=(aceConfig.keyBindings === "default"), data-i18n="options.editor_config_keybindings_default") Default (Ace)
option(value="vim", selected=(aceConfig.keyBindings === "vim")) Vim
option(value="emacs", selected=(aceConfig.keyBindings === "emacs")) Emacs
span.help-block(data-i18n="options.editor_config_keybindings_description") Adds additional shortcuts known from the common editors.
.form-group.checkbox
label(for="option-live-completion")
input#option-live-completion(name="liveCompletion", type="checkbox", checked=aceConfig.liveCompletion)

View file

@ -49,6 +49,8 @@ if view.showAds()
button.btn.btn-lg.btn-warning.banner.header-font#stop-real-time-playback-button(title="Stop real-time playback", data-i18n="play_level.skip") Skip
.hints-view.hide
#level-footer-shadow
#level-footer-background

View file

@ -1,3 +1,10 @@
mixin timePlayed()
if session.get('playtime') > 0
.small-details.nowrap
span.spr(data-i18n='teacher.time_played')
| Played for
span= moment.duration({ seconds: session.get('playtime') }).humanize()
if completed
.small-details.nowrap
span= levelNumber
@ -7,6 +14,7 @@ if completed
span.spr(data-i18n='teacher.completed')
| Completed
span= new Date(dateFirstCompleted).toLocaleString()
+timePlayed
//- .small-details
//- i(data-i18n='teacher.click_to_view_solution')
//- | click to view solution
@ -19,6 +27,7 @@ else if started
span.spr(data-i18n='teacher.last_played')
| Last played
span= new Date(lastPlayed).toLocaleString()
+timePlayed
//- .small-details
//- i(data-i18n='teacher.click_to_view_progress')
//- | click to view progress

View file

@ -14,6 +14,7 @@ block content
a.btn.btn-lg.btn-primary(href="/teachers/update-account" data-i18n="teachers_quote.convert_account_title")
button#logout-button.btn.btn-lg.btn-primary-alt(data-i18n="login.log_out")
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')
.container
.teacher-account-blurb.text-center.col-xs-6.col-xs-offset-3.m-y-3
h5(data-i18n='teacher.what_is_a_teacher_account')
p(data-i18n='teacher.teacher_account_explanation')

View file

@ -11,6 +11,20 @@ ol.breadcrumb
.container-fluid
.row
.col-md-8
#failure-reports
for report in view.failureReports
.alert.alert-danger.alert-report
ul.suite-list
for description in report.suiteDescriptions
li= description
li
strong ... #{report.testDescription}
hr
ol.error-list
for message in report.failMessages
li
strong= message
#test-wrapper.well
#testing-area

View file

@ -9,24 +9,25 @@ block append content
a(href="/account", data-i18n="nav.account")
li.active(data-i18n="nav.profile")
if user
if view.user
- var playerLevel = view.user.level()
- var emails = view.user.getEnabledEmails()
.vertical-buffer
.row
.left-column
.profile-wrapper
img.picture(src="#{user.getPhotoURL(150)}" alt="")
img.picture(src="#{view.user.getPhotoURL(150)}" alt="")
div.profile-info
h3.name= user.get('name')
if favoriteLanguage
h3.name= view.user.get('name')
if view.favoriteLanguage
div.extra-info
span(data-i18n="user.favorite_prefix") Favorite language is
strong.favorite-language= favoriteLanguage
span(data-i18n="user.favorite_postfix") .
strong.favorite-language= view.favoriteLanguage
span(data-i18n="user.favorite_postfix") .
if playerLevel
div.extra-info
span.spr(data-i18n="general.player_level") Level
strong= playerLevel
- var emails = user.getEnabledEmails()
strong= playerLevel
// TODO: fix this, use some other method for finding contributor classes other than email settings, since they're private... Maybe achievements?
if emails
ul.contributor-categories
@ -64,24 +65,24 @@ block append content
.panel.panel-default
.panel-heading
h3.panel-title(data-i18n="clans.clans") Clans
if (!clans)
if (!view.clanModels)
.panel-body
p(data-i18n="common.loading")
else if (clans.length)
else if (view.clanModels.length)
table.table
tr
th.col-xs-4(data-i18n="clans.name") Name
th.col-xs-4(data-i18n="clans.chieftain") Chieftain
th.col-xs-4(data-i18n="play.heroes") Heroes
each clan in clans
each clan in view.clanModels
tr
td
a(href="/clans/#{clan.id}")= clan.get('name')
td
if idNameMap && idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= idNameMap[clan.get('ownerID')]
if view.idNameMap && view.idNameMap[clan.get('ownerID')]
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
else
a(href="/user/#{clan.get('ownerID')}") Anoner
a(href="/user/#{clan.get('ownerID')}") Anonymous
td= clan.get('members').length
else
.panel-body
@ -90,17 +91,17 @@ block append content
.panel.panel-default
.panel-heading
h3.panel-title(data-i18n="user.singleplayer_title") Singleplayer Levels
if (!singlePlayerSessions)
if (!view.singlePlayerSessions)
.panel-body
p(data-i18n="common.loading") Loading...
else if (singlePlayerSessions.length)
else if (view.singlePlayerSessions.length)
table.table
tr
th.col-xs-4(data-i18n="resources.level") Level
th.col-xs-4(data-i18n="user.last_played") Last Played
th.col-xs-4(data-i18n="user.status") Status
- var count = 0
each session, index in singlePlayerSessions
each session, index in view.singlePlayerSessions
if session.get('levelName')
tr(class=count > 4 ? 'hide' : '')
- count++;
@ -120,16 +121,16 @@ block append content
.panel.panel-default
.panel-heading
h3.panel-title(data-i18n="user.multiplayer_title") Multiplayer Levels
if (!multiPlayerSessions)
if (!view.multiPlayerSessions)
.panel-body
p(data-i18n="common.loading") Loading...
else if (multiPlayerSessions.length)
else if (view.multiPlayerSessions.length)
table.table
tr
th.col-xs-4(data-i18n="resources.level") Level
th.col-xs-4(data-i18n="user.last_played") Last Played
th.col-xs-4(data-i18n="general.score") Score
each session, index in multiPlayerSessions
each session, index in view.multiPlayerSessions
tr(class=index > 4 ? 'hide' : '')
td
- var posturl = ''
@ -140,7 +141,7 @@ block append content
td= parseInt(session.get('totalScore') * 100)
else
td(data-i18n="user.status_unfinished") Unfinished
if multiPlayerSessions.length > 4
if view.multiPlayerSessions.length > 4
.panel-footer
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")
else
@ -149,10 +150,10 @@ block append content
.panel.panel-default
.panel-heading
h3.panel-title(data-i18n="user.achievements_title") Achievements
if ! earnedAchievements
if ! view.earnedAchievements
.panel-body
p(data-i18n="common.loading") Loading...
else if ! earnedAchievements.length
else if ! view.earnedAchievements.length
.panel-body
p(data-i18n="user.no_achievements") No achievements earned so far.
else
@ -161,7 +162,7 @@ block append content
th.col-xs-4(data-i18n="achievements.achievement") Achievement
th.col-xs-4(data-i18n="achievements.last_earned") Last Earned
th.col-xs-4(data-i18n="achievements.amount_achieved") Amount
each achievement, index in earnedAchievements.models
each achievement, index in view.earnedAchievements.models
tr(class=index > 4 ? 'hide' : '')
td= achievement.get('achievementName')
td= moment(achievement.get('changed')).format("MMMM Do YYYY")
@ -169,6 +170,6 @@ block append content
td= achievement.get('achievedAmount')
else
td
if earnedAchievements.length > 4
if view.earnedAchievements.length > 4
.panel-footer
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")

View file

@ -8,12 +8,7 @@ module.exports = class AboutView extends RootView
logoutRedirectURL: false
events:
'click #mission-link': 'onClickMissionLink'
'click #team-link': 'onClickTeamLink'
'click #community-link': 'onClickCommunityLink'
'click #story-link': 'onClickStoryLink'
'click #jobs-link': 'onClickJobsLink'
'click #contact-link': 'onClickContactLink'
'click #fixed-nav a': 'onClickFixedNavLink'
'click .screen-thumbnail': 'onClickScreenThumbnail'
'click #carousel-left': 'onLeftPressed'
'click #carousel-right': 'onRightPressed'
@ -23,6 +18,8 @@ module.exports = class AboutView extends RootView
'left': 'onLeftPressed'
'esc': 'onEscapePressed'
getTitle: -> return $.i18n.t('nav.about')
afterRender: ->
super(arguments...)
@$('#fixed-nav').affix({
@ -42,29 +39,21 @@ module.exports = class AboutView extends RootView
keyboard: false
})
onClickMissionLink: (event) ->
event.preventDefault()
@scrollToLink('#mission')
afterInsert: ->
# scroll to the current hash, once everything in the browser is set up
f = =>
return if @destroyed
link = $(document.location.hash)
if link.length
@scrollToLink(document.location.hash, 0)
_.delay(f, 100)
onClickTeamLink: (event) ->
event.preventDefault()
@scrollToLink('#team')
onClickCommunityLink: (event) ->
event.preventDefault()
@scrollToLink('#community')
onClickStoryLink: (event) ->
event.preventDefault()
@scrollToLink('#story')
onClickJobsLink: (event) ->
event.preventDefault()
@scrollToLink('#jobs')
onClickContactLink: (event) ->
event.preventDefault()
@scrollToLink('#contact')
onClickFixedNavLink: (event) ->
event.preventDefault() # prevent default page scroll
link = $(event.target).closest('a')
target = link.attr('href')
history.replaceState(null, null, "about#{target}") # update hash without triggering page scroll
@scrollToLink(target)
onRightPressed: (event) ->
# Special handling, otherwise after you click the control, keyboard presses move the slide twice

Some files were not shown because too many files have changed in this diff Show more