mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-29 18:45:48 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
289dd4a445
13 changed files with 80 additions and 21 deletions
BIN
app/assets/images/pages/base/logo_square_250.png
Normal file
BIN
app/assets/images/pages/base/logo_square_250.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
|
@ -10,7 +10,7 @@
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
|
||||||
<title>CodeCombat</title>
|
<title>CodeCombat - Learn how to code by playing a game</title>
|
||||||
<meta name="description" content="Learn programming with a multiplayer live coding strategy game. You're a wizard, and your spells are JavaScript. Free, open source HTML5 game!">
|
<meta name="description" content="Learn programming with a multiplayer live coding strategy game. You're a wizard, and your spells are JavaScript. Free, open source HTML5 game!">
|
||||||
|
|
||||||
<meta property="og:title" content="CodeCombat: Multiplayer Programming">
|
<meta property="og:title" content="CodeCombat: Multiplayer Programming">
|
||||||
|
|
|
@ -249,6 +249,7 @@ module.exports = nativeDescription: "English", englishDescription: "English", tr
|
||||||
av_other_debug_base_url: "Base (for debugging base.jade)"
|
av_other_debug_base_url: "Base (for debugging base.jade)"
|
||||||
u_title: "User List"
|
u_title: "User List"
|
||||||
lg_title: "Latest Games"
|
lg_title: "Latest Games"
|
||||||
|
clas: "CLAs"
|
||||||
|
|
||||||
editor:
|
editor:
|
||||||
main_title: "CodeCombat Editors"
|
main_title: "CodeCombat Editors"
|
||||||
|
|
|
@ -113,7 +113,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P
|
||||||
title: "Definições do Wizard"
|
title: "Definições do Wizard"
|
||||||
customize_avatar: "Altera o teu Avatar"
|
customize_avatar: "Altera o teu Avatar"
|
||||||
clothes: "Roupas"
|
clothes: "Roupas"
|
||||||
# trim: "Trim"
|
trim: "Faixa"
|
||||||
cloud: "Nuvem"
|
cloud: "Nuvem"
|
||||||
spell: "Feitiço"
|
spell: "Feitiço"
|
||||||
boots: "Botas"
|
boots: "Botas"
|
||||||
|
@ -191,7 +191,7 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P
|
||||||
victory_ranking_game: "A submeter..."
|
victory_ranking_game: "A submeter..."
|
||||||
# victory_return_to_ladder: "Return to Ladder"
|
# victory_return_to_ladder: "Return to Ladder"
|
||||||
victory_play_next_level: "Jogar próximo nível"
|
victory_play_next_level: "Jogar próximo nível"
|
||||||
victory_go_home: "Ir para a Home"
|
victory_go_home: "Ir para o Inicio"
|
||||||
victory_review: "Conta-nos mais!"
|
victory_review: "Conta-nos mais!"
|
||||||
victory_hour_of_code_done: "É tudo?"
|
victory_hour_of_code_done: "É tudo?"
|
||||||
victory_hour_of_code_done_yes: "Sim, a minha Hora de Código chegou ao fim!"
|
victory_hour_of_code_done_yes: "Sim, a minha Hora de Código chegou ao fim!"
|
||||||
|
@ -199,19 +199,19 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P
|
||||||
multiplayer_link_description: "Dá este link a alguém para se juntar a ti."
|
multiplayer_link_description: "Dá este link a alguém para se juntar a ti."
|
||||||
multiplayer_hint_label: "Dica:"
|
multiplayer_hint_label: "Dica:"
|
||||||
multiplayer_hint: " Carrega no link para seleccionar tudp, depois pressiona ⌘-C ou Ctrl-C para copiar o link."
|
multiplayer_hint: " Carrega no link para seleccionar tudp, depois pressiona ⌘-C ou Ctrl-C para copiar o link."
|
||||||
multiplayer_coming_soon: "Mais funcionalidades de multiplayer hão de vir!"
|
multiplayer_coming_soon: "Mais funcionalidades de multiplayer brevemente!"
|
||||||
guide_title: "Guia"
|
guide_title: "Guia"
|
||||||
tome_minion_spells: "Feitiços dos teus Minions"
|
tome_minion_spells: "Feitiços dos teus Minions"
|
||||||
tome_read_only_spells: "Feitiços Read-Only"
|
tome_read_only_spells: "Feitiços apenas de leitura"
|
||||||
tome_other_units: "Outras Unidades"
|
tome_other_units: "Outras Unidades"
|
||||||
# tome_cast_button_castable: "Cast Spell"
|
# tome_cast_button_castable: "Cast Spell"
|
||||||
# tome_cast_button_casting: "Casting"
|
tome_cast_button_casting: "A lançar"
|
||||||
tome_cast_button_cast: "Lançar Feitiço"
|
tome_cast_button_cast: "Lançar Feitiço"
|
||||||
# tome_autocast_delay: "Autocast Delay"
|
# tome_autocast_delay: "Autocast Delay"
|
||||||
tome_select_spell: "Escolhe um Feitiço"
|
tome_select_spell: "Escolhe um Feitiço"
|
||||||
tome_select_a_thang: "Escolhe Alguém para "
|
tome_select_a_thang: "Escolhe Alguém para "
|
||||||
tome_available_spells: "Feitiços disponíveis"
|
tome_available_spells: "Feitiços disponíveis"
|
||||||
hud_continue: "Continuar (pressiona shift-space)"
|
hud_continue: "Continuar (shift-espaço)"
|
||||||
spell_saved: "Feitiço Guardado"
|
spell_saved: "Feitiço Guardado"
|
||||||
skip_tutorial: "Saltar (esc)"
|
skip_tutorial: "Saltar (esc)"
|
||||||
# editor_config: "Editor Config"
|
# editor_config: "Editor Config"
|
||||||
|
@ -275,12 +275,12 @@ module.exports = nativeDescription: "Português europeu", englishDescription: "P
|
||||||
create_system_title: "Criar novo Sistema"
|
create_system_title: "Criar novo Sistema"
|
||||||
new_component_title: "Criar novo Componente"
|
new_component_title: "Criar novo Componente"
|
||||||
new_component_field_system: "Sistema"
|
new_component_field_system: "Sistema"
|
||||||
# new_article_title: "Create a New Article"
|
new_article_title: "Criar um Novo Artigo"
|
||||||
# new_thang_title: "Create a New Thang Type"
|
new_thang_title: "Criar um Novo tipo the Thang"
|
||||||
# new_level_title: "Create a New Level"
|
new_level_title: "Criar um Novo Nível"
|
||||||
# article_search_title: "Search Articles Here"
|
article_search_title: "Procura Artigos Aqui"
|
||||||
# thang_search_title: "Search Thang Types Here"
|
thang_search_title: "Procura Tipos de Thang Aqui"
|
||||||
# level_search_title: "Search Levels Here"
|
level_search_title: "Procura Níveis aqui"
|
||||||
|
|
||||||
article:
|
article:
|
||||||
edit_btn_preview: "Visualizar"
|
edit_btn_preview: "Visualizar"
|
||||||
|
|
|
@ -29,3 +29,5 @@ block content
|
||||||
ul
|
ul
|
||||||
li
|
li
|
||||||
a(href="/admin/base", data-i18n="admin.av_other_debug_base_url") Base (for debugging base.jade)
|
a(href="/admin/base", data-i18n="admin.av_other_debug_base_url") Base (for debugging base.jade)
|
||||||
|
li
|
||||||
|
a(href="/admin/clas", data-i18n="admin.clas") CLAs
|
||||||
|
|
15
app/templates/admin/clas.jade
Normal file
15
app/templates/admin/clas.jade
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
extends /templates/base
|
||||||
|
|
||||||
|
block content
|
||||||
|
|
||||||
|
h1(data-i18n="admin.clas") CLAs
|
||||||
|
|
||||||
|
table.table.table-striped.table-bordered.table-condensed#clas
|
||||||
|
tbody
|
||||||
|
each cla in clas
|
||||||
|
tr
|
||||||
|
td #{cla.name}
|
||||||
|
td #{cla.email}
|
||||||
|
td #{cla.githubUsername}
|
||||||
|
td #{cla.created}
|
||||||
|
|
|
@ -5,7 +5,7 @@ body
|
||||||
.content.clearfix
|
.content.clearfix
|
||||||
.navbar-header
|
.navbar-header
|
||||||
a.navbar-brand(href='/')
|
a.navbar-brand(href='/')
|
||||||
img(src="/images/pages/base/logo.png", title="CodeCombat", alt="CodeCombat")
|
img(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
|
||||||
|
|
||||||
select.language-dropdown
|
select.language-dropdown
|
||||||
|
|
||||||
|
|
|
@ -94,8 +94,7 @@
|
||||||
label(for="github-username") Github Username
|
label(for="github-username") Github Username
|
||||||
input(name="github-username", type="text")#github-username.form-control
|
input(name="github-username", type="text")#github-username.form-control
|
||||||
span.help-block Please include if contributing to the
|
span.help-block Please include if contributing to the
|
||||||
p(href="github.com/codecombat/codecombat") Github repository
|
<a href="https://github.com/codecombat/codecombat">Github repository</a>.
|
||||||
| .
|
|
||||||
p
|
p
|
||||||
| Please press I AGREE below to indicate your agreement.
|
| Please press I AGREE below to indicate your agreement.
|
||||||
button.btn#agreement-button I AGREE
|
button.btn#agreement-button I AGREE
|
||||||
|
|
30
app/views/admin/clas_view.coffee
Normal file
30
app/views/admin/clas_view.coffee
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
View = require 'views/kinds/RootView'
|
||||||
|
template = require 'templates/admin/clas'
|
||||||
|
|
||||||
|
module.exports = class CLAsView extends View
|
||||||
|
id: "admin-clas-view"
|
||||||
|
template: template
|
||||||
|
startsLoading: true
|
||||||
|
|
||||||
|
constructor: (options) ->
|
||||||
|
super options
|
||||||
|
@getCLAs()
|
||||||
|
|
||||||
|
getCLAs: ->
|
||||||
|
CLACollection = Backbone.Collection.extend({
|
||||||
|
url: '/db/cla.submissions'
|
||||||
|
})
|
||||||
|
@clas = new CLACollection()
|
||||||
|
@clas.fetch()
|
||||||
|
@clas.on 'sync', @onCLAsLoaded, @
|
||||||
|
|
||||||
|
onCLAsLoaded: ->
|
||||||
|
@startsLoading = false
|
||||||
|
@render()
|
||||||
|
|
||||||
|
getRenderData: ->
|
||||||
|
c = super()
|
||||||
|
c.clas = []
|
||||||
|
unless @startsLoading
|
||||||
|
c.clas = _.uniq (_.sortBy (cla.attributes for cla in @clas.models), (m) -> m.githubUsername?.toLowerCase()), 'githubUsername'
|
||||||
|
c
|
|
@ -32,8 +32,7 @@ module.exports = class CastButtonView extends View
|
||||||
@castOptions = $('.autocast-delays', @$el)
|
@castOptions = $('.autocast-delays', @$el)
|
||||||
@castButton.on 'click', @onCastButtonClick
|
@castButton.on 'click', @onCastButtonClick
|
||||||
@castOptions.find('a').on 'click', @onCastOptionsClick
|
@castOptions.find('a').on 'click', @onCastOptionsClick
|
||||||
# TODO: use a User setting instead of localStorage
|
delay = me.get('autocastDelay')
|
||||||
delay = localStorage.getItem 'autocastDelay'
|
|
||||||
delay ?= 5000
|
delay ?= 5000
|
||||||
if @levelID in ['brawlwood', 'brawlwood-tutorial', 'dungeon-arena', 'dungeon-arena-tutorial']
|
if @levelID in ['brawlwood', 'brawlwood-tutorial', 'dungeon-arena', 'dungeon-arena-tutorial']
|
||||||
delay = 90019001
|
delay = 90019001
|
||||||
|
@ -88,7 +87,8 @@ module.exports = class CastButtonView extends View
|
||||||
#console.log "Set autocast delay to", delay
|
#console.log "Set autocast delay to", delay
|
||||||
return unless delay
|
return unless delay
|
||||||
@autocastDelay = delay = parseInt delay
|
@autocastDelay = delay = parseInt delay
|
||||||
localStorage.setItem 'autocastDelay', delay
|
me.set('autocastDelay', delay)
|
||||||
|
me.save()
|
||||||
spell.view.setAutocastDelay delay for spellKey, spell of @spells
|
spell.view.setAutocastDelay delay for spellKey, spell of @spells
|
||||||
@castOptions.find('a').each ->
|
@castOptions.find('a').each ->
|
||||||
$(@).toggleClass('selected', parseInt($(@).attr('data-delay')) is delay)
|
$(@).toggleClass('selected', parseInt($(@).attr('data-delay')) is delay)
|
||||||
|
|
|
@ -2,8 +2,20 @@ log = require 'winston'
|
||||||
errors = require '../commons/errors'
|
errors = require '../commons/errors'
|
||||||
handlers = require('../commons/mapping').handlers
|
handlers = require('../commons/mapping').handlers
|
||||||
schemas = require('../commons/mapping').schemas
|
schemas = require('../commons/mapping').schemas
|
||||||
|
mongoose = require 'mongoose'
|
||||||
|
|
||||||
module.exports.setup = (app) ->
|
module.exports.setup = (app) ->
|
||||||
|
# This is hacky and should probably get moved somewhere else, I dunno
|
||||||
|
app.get '/db/cla.submissions', (req, res) ->
|
||||||
|
res.setHeader('Content-Type', 'application/json')
|
||||||
|
collection = mongoose.connection.db.collection 'cla.submissions', (err, collection) ->
|
||||||
|
return log.error "Couldn't fetch CLA submissions because #{err}" if err
|
||||||
|
resultCursor = collection.find {}
|
||||||
|
resultCursor.toArray (err, docs) ->
|
||||||
|
return log.error "Couldn't fetch distinct CLA submissions because #{err}" if err
|
||||||
|
res.send docs
|
||||||
|
res.end
|
||||||
|
|
||||||
app.all '/db/*', (req, res) ->
|
app.all '/db/*', (req, res) ->
|
||||||
res.setHeader('Content-Type', 'application/json')
|
res.setHeader('Content-Type', 'application/json')
|
||||||
module = req.path[4..]
|
module = req.path[4..]
|
||||||
|
|
|
@ -18,7 +18,7 @@ UserHandler = class UserHandler extends Handler
|
||||||
'name', 'photoURL', 'password', 'anonymous', 'wizardColor1', 'volume',
|
'name', 'photoURL', 'password', 'anonymous', 'wizardColor1', 'volume',
|
||||||
'firstName', 'lastName', 'gender', 'facebookID', 'emailSubscriptions',
|
'firstName', 'lastName', 'gender', 'facebookID', 'emailSubscriptions',
|
||||||
'testGroupNumber', 'music', 'hourOfCode', 'hourOfCodeComplete', 'preferredLanguage',
|
'testGroupNumber', 'music', 'hourOfCode', 'hourOfCodeComplete', 'preferredLanguage',
|
||||||
'wizard', 'aceConfig', 'simulatedBy', 'simulatedFor'
|
'wizard', 'aceConfig', 'simulatedBy', 'simulatedFor', 'autocastDelay'
|
||||||
]
|
]
|
||||||
|
|
||||||
jsonSchema: schema
|
jsonSchema: schema
|
||||||
|
|
|
@ -17,7 +17,7 @@ UserSchema = c.object {},
|
||||||
wizardColor1: c.pct({title: 'Wizard Clothes Color'})
|
wizardColor1: c.pct({title: 'Wizard Clothes Color'})
|
||||||
volume: c.pct({title: 'Volume'})
|
volume: c.pct({title: 'Volume'})
|
||||||
music: {type: 'boolean', default: true}
|
music: {type: 'boolean', default: true}
|
||||||
#autocastDelay, or more complex autocast options? I guess I'll see what I need when trying to hook up Scott's suggested autocast behavior
|
autocastDelay: {type: 'integer', 'default': 5000 }
|
||||||
|
|
||||||
emailSubscriptions: c.array {uniqueItems: true, 'default': ['announcement', 'notification']}, {'enum': emailSubscriptions}
|
emailSubscriptions: c.array {uniqueItems: true, 'default': ['announcement', 'notification']}, {'enum': emailSubscriptions}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue