mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-13 09:11:22 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
2091a47801
19 changed files with 614 additions and 452 deletions
|
@ -530,11 +530,20 @@ module.exports = Surface = class Surface extends CocoClass
|
|||
newWidth = 0.55 * pageWidth
|
||||
newHeight = newWidth / aspectRatio
|
||||
return unless newWidth > 0 and newHeight > 0
|
||||
return if newWidth is oldWidth and newHeight is oldHeight and not @options.spectateGame
|
||||
return if newWidth < 200 or newHeight < 200
|
||||
|
||||
#scaleFactor = if application.isIPadApp then 2 else 1 # Retina
|
||||
scaleFactor = 1
|
||||
@normalCanvas.add(@webGLCanvas).attr width: newWidth * scaleFactor, height: newHeight * scaleFactor
|
||||
if @options.stayVisible
|
||||
availableHeight = window.innerHeight
|
||||
availableHeight -= $('.ad-container').outerHeight()
|
||||
availableHeight -= $('#game-area').outerHeight() - $('#canvas-wrapper').outerHeight()
|
||||
scaleFactor = availableHeight / newHeight if availableHeight < newHeight
|
||||
newWidth *= scaleFactor
|
||||
newHeight *= scaleFactor
|
||||
|
||||
return if newWidth is oldWidth and newHeight is oldHeight and not @options.spectateGame
|
||||
return if newWidth < 200 or newHeight < 200
|
||||
@normalCanvas.add(@webGLCanvas).attr width: newWidth, height: newHeight
|
||||
|
||||
# Cannot do this to the webGLStage because it does not use scaleX/Y.
|
||||
# Instead the LayerAdapter scales webGL-enabled layers.
|
||||
|
|
|
@ -27,6 +27,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
classroom_in_a_box: "Ein Klassenraum in-einer-Box um Informatik zu lehren."
|
||||
codecombat_is: "CodeCombat ist eine Plattform für Schüler um Informatik zu lernen während sie ein echtes Spiel spielen."
|
||||
our_courses: "Unsere Kurse wurden genau getestet um im Klassenraum zu bestehen, auch bei Lehrkräften mit wenig bis keiner Programmiererfahrung."
|
||||
top_screenshots_hint: "Schüler schreiben Code und ihre Veränderungen werden in Echtzeit sichtbar"
|
||||
designed_with: "Designed um Lehrkräften zu helfen"
|
||||
real_code: "Real, getipper Code"
|
||||
from_the_first_level: "vom ersten Level an"
|
||||
|
@ -57,10 +58,17 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
great_game: "In einem guten Spiel geht es um mehr als nur Abzeichen und Erfolge - es geht um die Reise eines Spielers, gut-designte Rätsel, und die Fähigkeit Herausforderungen mit Kraft und Selbsvertrauen anzupacken."
|
||||
agency: "CodeCombat ist ein Spiel, das Spielern die Kraft und das Selbstbewusstsein gibt durch unsere robuste Programmiereingabe-Engine, die sowohl Anfänger als auch fortgeschrittenen Schülern dabei hilft richtigen, validen Code zu schreiben."
|
||||
curious: "Neugierig? Fragen Sie nach einer Demo und wir werden Ihnen zeigen wie es geht"
|
||||
request_demo_title: "Fangen Sie noch heute mit ihren Schülern an!"
|
||||
request_demo_subtitle: "Fragen Sie nach einer Demo und lassen Sie ihre Schüler in weniger als einer Stunde anfangen."
|
||||
get_started_title: "Erstellen Sie noch heute ihre Klasse"
|
||||
get_started_subtitle: "Erstellen Sie eine Klasse, fügen Sie Schüler hinzu und verfolgen Sie ihren Fortschritt während sie Informatik lernen."
|
||||
create_class: "Oder erstellen Sie eine Klasse und sehen Sie selbst!"
|
||||
teacher_screenshots_hint: "Schüler schreiben Code und ihre Veränderungen werden in Echtzeit sichtbar"
|
||||
request_demo: "Demo anfragen"
|
||||
create_a_class: "Erstellen Sie eine Klasse"
|
||||
setup_a_class: "Eine Klasse erstellen"
|
||||
have_an_account: "Haben Sie bereits einen Account?"
|
||||
log_in: "Einloggen"
|
||||
logged_in_as: "Sie sind zurzeit eingeloggt als"
|
||||
view_my_classes: "Zeige meine Klassen"
|
||||
computer_science: "Informatikkurse für alle Altersgruppen"
|
||||
|
@ -128,7 +136,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
locked: "Gesperrt"
|
||||
purchasable: "Zu kaufen" # For a hero you unlocked but haven't purchased
|
||||
available: "Verfügbar"
|
||||
skills_granted: "Verfügbare Fähigkeiten" # Property documentation details
|
||||
skills_granted: "Erhaltene" # Property documentation details
|
||||
heroes: "Helden" # Tooltip on hero shop button from /play
|
||||
achievements: "Errungenschaften" # Tooltip on achievement list button from /play
|
||||
account: "Account" # Tooltip on account button from /play
|
||||
|
@ -182,6 +190,14 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
school_name: "Schulname und Stadt"
|
||||
optional: "optional"
|
||||
school_name_placeholder: "Beispiel Gymnasium, Musterdorf, DE"
|
||||
or_sign_up_with: "oder registrieren mit"
|
||||
connected_gplus_header: "Du wurdest erfolgreich mit Google+ verknüpft!"
|
||||
connected_gplus_p: "Schließe das Registrieren ab, so dass du dich mit deinem Google+ Account einloggen."
|
||||
gplus_exists: "Du hast bereits einen Account mit Google+ verknüpft!"
|
||||
connected_facebook_header: "Du wurdest erfolgreich mit Facebook verknüpft!"
|
||||
connected_facebook_p: "Schließe das Registrieren ab, so dass du dich mit deinem Facebook Account einloggen."
|
||||
facebook_exists: "Du hast bereits einen Account mit Facebook verknüpft!"
|
||||
hey_students: "Schüler, gib den Klassencode von deinem Lehrer ein."
|
||||
|
||||
recover:
|
||||
recover_account_title: "Account-Wiederherstellung"
|
||||
|
@ -666,7 +682,7 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
jobs_title: "Komm arbeite mit uns und hilf mit CodeCombat Geschichte zu schreiben!"
|
||||
jobs_subtitle: "Nichts gutes gefunden aber du bist trotzdem interessiert mit uns zu arbeiten? Schau dir unseren \"Kreiere deinen Eigenen\" Eintrag an."
|
||||
jobs_benefits: "Angestellten Vorteile"
|
||||
# jobs_benefit_1: "Competitive salary and options"
|
||||
# jobs_benefit_1: "Competitive salary and options" {I would not translate this because it is only for people who wants to work in the U.S. so they have to speak English, or if they work at home some of these benefits won't fit in Germany because we already have a health insurance...}
|
||||
# jobs_benefit_2: "15 day minimum vacation policy, excluding company holidays"
|
||||
# jobs_benefit_3: "Work from home flexibility"
|
||||
# jobs_benefit_4: "Unlimited sick/personal days"
|
||||
|
@ -701,37 +717,38 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
more_info_3: "ist eine gute Anlaufstelle, um mit anderen Lehrer in Kontakt zu treten, die CodeCombat benutzen."
|
||||
|
||||
teachers_quote:
|
||||
# name: "Quote Form"
|
||||
# title: "Request a Quote"
|
||||
# subtitle: "Get CodeCombat in your classroom, club, school or district!"
|
||||
# email_exists: "User exists with this email."
|
||||
name: "Demo Fragebogen"
|
||||
title: "Eine Demo beantragen"
|
||||
subtitle: "Holen Sie sich CodeCombat in ihren Klassenraum, Club, ihre Schule oder Ortsteil!"
|
||||
email_exists: "Benutzer mit dieser Email existiert bereits."
|
||||
phone_number: "Telephonnummer"
|
||||
# phone_number_help: "Where can we reach you during the workday?"
|
||||
phone_number_help: "Wo können wir Sie wochentags erreichen?"
|
||||
role_label: "Ihre Rolle"
|
||||
role_help: "Wählen Sie ihre primäre Rolle."
|
||||
# tech_coordinator: "Technology coordinator"
|
||||
# advisor: "Advisor"
|
||||
# principal: "Principal"
|
||||
# superintendent: "Superintendent"
|
||||
tech_coordinator: "Technologie-Koordinator"
|
||||
advisor: "Berater"
|
||||
principal: "Direktor"
|
||||
superintendent: "Leiter"
|
||||
parent: "Elternteil"
|
||||
organization_label: "Name der Schule/Bezirk"
|
||||
city: "Stadt"
|
||||
state: "Bundesland"
|
||||
country: "Land"
|
||||
# num_students_help: "How many do you anticipate enrolling in CodeCombat?"
|
||||
# education_level_label: "Education Level of Students"
|
||||
# education_level_help: "Choose as many as apply."
|
||||
num_students_help: "Wie viele beabsichtichen Sie in CodeCombat einzuschreiben?"
|
||||
education_level_label: "Bildungslevel der Schüler"
|
||||
education_level_help: "Wählen Sie so viele wie zutreffen."
|
||||
elementary_school: "Grundschule"
|
||||
high_school: "Gymnasium"
|
||||
please_explain: "(bitte erklären)"
|
||||
middle_school: "Mittelschule"
|
||||
college_plus: "Hochschule oder höher"
|
||||
anything_else: "Weitere Dinge die wir wissen sollten?"
|
||||
# thanks_header: "Thanks for requesting a quote!"
|
||||
thanks_p: "Wir melden uns bald. Fragen? Schreiben Sie uns eine Email :"
|
||||
# thanks_anon: "Login or sign up with your account below to access your two free enrollments (we’ll notify you by email when they have been approved, which usually takes less than 48 hours). As always, the first hour of content is free for an unlimited number of students."
|
||||
# thanks_logged_in: "Your two free enrollments are pending approval. We’ll notify you by email when they have been approved (usually within 48 hours). As always, the first hour of content is free for an unlimited number of students."
|
||||
|
||||
thanks_header: "Danke dass Sie eine Demo beantragen!"
|
||||
thanks_p: "Wir melden uns bald. Fragen? Schreiben Sie uns eine Email:"
|
||||
thanks_anon: "Loggen Sie sich unten ein oder Erstellen Sie einen Account um Zugang zu ihren zwei kostenlosen Einschreibungen zu erhalten (Wir werden Sie per Email benachrichtigen nach der Überprüfung, die normalerweise weniger als 48 Stunden dauert. So wie immer ist die erste Stunde des Inhaltes kostenlos für eine unbegrenzte Anzahl von Schülern."
|
||||
thanks_logged_in: "Ihre zwei kostenlosen Einschreiben werden gerade überprüft. Wir werden Sie per Email nach der Überprüfung benachrichtigen, die normalerweise weniger als 48 Stunden dauert. So wie immer ist die erste Stunde des Inhaltes kostenlos für eine unbegrenzte Anzahl von Schülern."
|
||||
setup_a_class: "Eine Klasse erstellen"
|
||||
|
||||
versions:
|
||||
save_version_title: "Neue Version speichern"
|
||||
new_major_version: "Neue Hauptversion"
|
||||
|
@ -916,28 +933,28 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
edit_settings: "Klasseneinstellungen bearbeiten"
|
||||
edit_settings1: "Klasseneinstellungen bearbeiten"
|
||||
progress: "Klassenfortschritt"
|
||||
add_students: "Studenten hinzufügen"
|
||||
add_students: "Schüler hinzufügen"
|
||||
stats: "Statistiken"
|
||||
total_students: "Anzahl Studenten:"
|
||||
total_students: "Anzahl Schüler:"
|
||||
average_time: "Durchschnittliche Levelspielzeit:"
|
||||
total_time: "Gesamte Spielzeit:"
|
||||
average_levels: "Durchschnittliche abgeschlossene Level:"
|
||||
total_levels: "Anzahl abgeschlossener Level:"
|
||||
furthest_level: "Höchster abgeschlossener Level:"
|
||||
concepts_covered: "Abgedeckte Konzepte"
|
||||
students: "Studenten"
|
||||
students1: "Studenten"
|
||||
students: "Schüler"
|
||||
students1: "Schüler"
|
||||
concepts: "Konzepten"
|
||||
levels: "level"
|
||||
played: "Gespielt"
|
||||
play_time: "Spielzeit:"
|
||||
completed: "Abgeschlossen:"
|
||||
invite_students: "Studenten einladen dieser Klasse beizutreten."
|
||||
invite_students: "Schüler einladen dieser Klasse beizutreten."
|
||||
invite_link_header: "Link um dem Kurs beizutreten"
|
||||
invite_link_p_1: "Gib diesen Link an Schüler weiter, die dem Kurs beitreten sollen."
|
||||
invite_link_p_2: "Oder lass sie durch uns direkt anschreiben:"
|
||||
capacity_used: "Benutzte Kurs-Slots:"
|
||||
enter_emails: "Studenten-Emails eingeben zum hinzufügen, eine per Zeile"
|
||||
enter_emails: "Schüler-Emails eingeben zum hinzufügen, eine Adresse pro Zeile"
|
||||
send_invites: "Einladung senden"
|
||||
title: "Titel"
|
||||
description: "Beschreibung"
|
||||
|
@ -948,189 +965,190 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
create_class: "Klasse erstellen"
|
||||
select_all_courses: "Wählen Sie 'Alle Kurse' für einen 50% Rabatt!"
|
||||
all_courses: "Alle Kurse"
|
||||
number_students: "Anzahl der Studenten"
|
||||
enter_number_students: "Geben Sie die Anzahl der Studenten ein, die Sie für diese Klasse brauchen."
|
||||
number_students: "Anzahl der Schüler"
|
||||
enter_number_students: "Geben Sie die Anzahl der Schüler ein, die Sie für diese Klasse brauchen."
|
||||
name_class: "Benennen Sie ihre Klasse"
|
||||
displayed_course_page: "Diese Seite wird für Sie und ihre Schüler auf der Kursseite angezeigt. Sie kann später verändert werden."
|
||||
buy: "Kaufen"
|
||||
purchasing_for: "Sie sind dabei eine Lizenz für"
|
||||
creating_for: "Sie sind dabei eine Klasse zu erstellen für"
|
||||
for: "für" # 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."
|
||||
receive_code: "Danach werden Sie einen Einschreibecode zum Verteilen an ihre Schüler bekommen, den diese benutzen können um sich in die Klasse einzuschreiben."
|
||||
free_trial: "Kostenloser Testversion für Lehrer!"
|
||||
get_access: "um Zugang zu allen Kursen zur Evaluation zu bekommen."
|
||||
questions: "Fragen?"
|
||||
teachers_click: "Lehrkräfte klicken hier"
|
||||
students_click: "Schüler klicken hier"
|
||||
courses_on_coco: "Kurse auf 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"
|
||||
# no_experience: "No coding experience necesssary"
|
||||
# easy_monitor: "Easily monitor student progress"
|
||||
# purchase_for_class: "Purchase a course for your entire class. It's easy to sign up your students!"
|
||||
# see_the: "See the"
|
||||
designed_to: "Die Kurse sind designt um in Informatikkonzepte einzuführen mit Hilfe von CodeCombat's spaßiger und fesselnder Umgebung. CodeCombat-Level sind um Schlüsselthemen organisiert um ein schrittweises Lernen zu fördern, in einem Kurs von fünf Stunden."
|
||||
more_in_less: "Lernen Sie mehr in weniger Zeit"
|
||||
no_experience: "Keine Programmiererfahrung nötig"
|
||||
easy_monitor: "Verfolgen Sie einfach den Fortschritt ihrer Schüler"
|
||||
purchase_for_class: "Bestellen Sie einen Kurs für die ganze Klasse. Es ist einfach für ihre Studenten sich anzumelden!"
|
||||
see_the: "Sehen Sie"
|
||||
more_info: "für weitere Informationen."
|
||||
# choose_course: "Choose Your Course:"
|
||||
# enter_code: "Enter an unlock code to join an existing class"
|
||||
# enter_code1: "Enter unlock code"
|
||||
# enroll: "Enroll"
|
||||
# pick_from_classes: "Pick from your current classes"
|
||||
# enter: "Enter"
|
||||
choose_course: "Wählen Sie ihren Kurs:"
|
||||
enter_code: "Geben Sie einen Einschreibecode ein um einer existierenden Klasse beizutreten"
|
||||
enter_code1: "Einschreibecode hier eingeben"
|
||||
enroll: "Einschreiben"
|
||||
pick_from_classes: "Wählen Sie von ihrer derzeitigen Klasse"
|
||||
enter: "Eingabe"
|
||||
or: "oder"
|
||||
topics: "Inhalte"
|
||||
# hours_content: "Hours of content:"
|
||||
# get_free: "Get FREE course"
|
||||
# enroll_paid: "Enroll Students in Paid Courses"
|
||||
hours_content: "Stundenanzahl:"
|
||||
get_free: "Bekommen Sie einen kostenlosen Kurs"
|
||||
enroll_paid: "Schreiben Sie Schüler in Bezahlkurse ein"
|
||||
you_have1: "Sie haben"
|
||||
you_have2: "ungenutze bezahlte Einschreibungen"
|
||||
# use_one: "Use 1 paid enrollment for"
|
||||
# use_multiple: "Use paid enrollments for the following students:"
|
||||
# already_enrolled: "already enrolled"
|
||||
# licenses_remaining: "licenses remaining:"
|
||||
# insufficient_enrollments: "insufficient paid enrollments"
|
||||
# enroll_students: "Enroll Students"
|
||||
# get_enrollments: "Get More Enrollments"
|
||||
# change_language: "Change Course Language"
|
||||
# keep_using: "Keep Using"
|
||||
# switch_to: "Switch To"
|
||||
use_one: "Benutzen Sie eine bezahlte Einschreibung für"
|
||||
use_multiple: "Benutzen Sie bezahlte Einschreibungen für folgende Schüler:"
|
||||
already_enrolled: "bereits eingeschrieben"
|
||||
licenses_remaining: "verbleibende Lizenzen:"
|
||||
insufficient_enrollments: "unzureichende bezahlte Einschreibungen"
|
||||
enroll_students: "Schüler einschreiben"
|
||||
get_enrollments: "Mehr Einschreibungen erhalten"
|
||||
change_language: "Kurssprache wechseln"
|
||||
keep_using: "Beibehalten"
|
||||
switch_to: "Wechseln zu"
|
||||
greetings: "Grüße!"
|
||||
learn_p: "Erlerne Python"
|
||||
learn_j: "Erlerne JavaScript"
|
||||
language_cannot_change: "Die Sprache kann nicht geändert werden sobald ein Schüler der Klasse beigetreten ist."
|
||||
back_classrooms: "Zurück zu meinem Klassenraum"
|
||||
back_courses: "Zurück zu meinen Kursen"
|
||||
# edit_details: "Edit class details"
|
||||
# enrolled_courses: "enrolled in paid courses:"
|
||||
# purchase_enrollments: "Purchase Enrollments"
|
||||
edit_details: "Klassendetails bearbeiten"
|
||||
enrolled_courses: "eingeschrieben in bezahlte Kurse:"
|
||||
purchase_enrollments: "Einschreibungen kaufen"
|
||||
remove_student: "Schüler entfernen"
|
||||
# assign: "Assign"
|
||||
# to_assign: "to assign paid courses."
|
||||
assign: "Zuordnen"
|
||||
to_assign: "um bezahlte Kurse zuzuordnen."
|
||||
teacher: "Lehrer"
|
||||
# complete: "Complete"
|
||||
# none: "None"
|
||||
complete: "Abgeschlossen"
|
||||
none: "Keine"
|
||||
save: "Speichern"
|
||||
play_campaign_title: "Spiele die Kampagnen Version"
|
||||
# play_campaign_description: "You’re ready to take the next step! Explore hundreds of challenging levels, learn advanced programming skills, and compete in multiplayer arenas!"
|
||||
# create_account_title: "Create an Account"
|
||||
# create_account_description: "Sign up for a FREE CodeCombat account and gain access to more levels, more programming skills, and more fun!"
|
||||
# preview_campaign_title: "Preview Campaign"
|
||||
# preview_campaign_description: "Take a sneak peek at all that CodeCombat has to offer before signing up for your FREE account."
|
||||
play_campaign_description: "Du bist bereit für den nächsten Schritt! Entdecke hunderte von herausfordernden Leveln, lerne weiterführende Programmierfähigkeiten, und trete in Multiplayer Arenen an!"
|
||||
create_account_title: "Einen Account erstellen"
|
||||
create_account_description: "Registriere dich für einen kostenlosen CodeCombat-Account und bekomme Zugriff zu mehr Leveln, mehr Programmierfähigkeiten, und mehr Spaß!"
|
||||
preview_campaign_title: "Kampagnenvorschau"
|
||||
preview_campaign_description: "Nimm eine kurze Vorschau auf all das was CodeCombat zu bietne hat bevor du dich für einen kostenlosen Account registrierst."
|
||||
arena: "Arena"
|
||||
arena_soon_title: "Die Arena kommt bald"
|
||||
# arena_soon_description: "We are working on a multiplayer arena for classrooms at the end of"
|
||||
# not_enrolled1: "Not enrolled"
|
||||
# not_enrolled2: "Ask your teacher to enroll you in the next course."
|
||||
arena_soon_description: "Wir arbeiten an einer Multiplayerarena für Klassenräume bis zum Ende von"
|
||||
not_enrolled1: "Nicht eingschrieben"
|
||||
not_enrolled2: "Frage deine Lehrkraft ob sie dich in den nächsten Kurs einschreibt."
|
||||
next_course: "Nächster Kurs"
|
||||
coming_soon1: "Coming soon"
|
||||
# coming_soon2: "We are hard at work making more courses for you!"
|
||||
# available_levels: "Available Levels"
|
||||
# welcome_to_courses: "Adventurers, welcome to Courses!"
|
||||
coming_soon2: "Wir sind hart am Arbeiten um mehr Kurse für Sie zu erstellen!"
|
||||
available_levels: "Verfügbare Level"
|
||||
welcome_to_courses: "Abenteurer, willkomen zu den Kursen!"
|
||||
ready_to_play: "Bereit zum Spielen?"
|
||||
start_new_game: "Starten Sie ein neues Spiel"
|
||||
play_now_learn_header: "Jetzt spielen um folgendes zu lernen"
|
||||
# play_now_learn_1: "basic syntax to control your character"
|
||||
# play_now_learn_2: "while loops to solve pesky puzzles"
|
||||
# play_now_learn_3: "strings & variables to customize actions"
|
||||
# play_now_learn_4: "how to defeat an ogre (important life skills!)"
|
||||
# welcome_to_page: "Welcome to your Courses page!"
|
||||
# completed_hoc: "Amazing! You've completed the Hour of Code course!"
|
||||
# ready_for_more_header: "Ready for more? Play the campaign mode!"
|
||||
# ready_for_more_1: "Use gems to unlock new items!"
|
||||
# ready_for_more_2: "Play through brand new worlds and challenges"
|
||||
# ready_for_more_3: "Learn even more programming!"
|
||||
# saved_games: "Saved Games"
|
||||
# hoc: "Hour of Code"
|
||||
play_now_learn_1: "grundlegende Syntax um deinen Character zu kontrollieren"
|
||||
play_now_learn_2: "while-Schleifen um nervtötende Rätsel zu lösen"
|
||||
play_now_learn_3: "Strings & Variablen um Aktionen anzupassen"
|
||||
play_now_learn_4: "Wie man einen Oger besiegt (wichtige Lebensfähigkeit!)"
|
||||
welcome_to_page: "Willkomen auf deine Kurseseite!"
|
||||
completed_hoc: "Beeindruckend! Du hast den Hour of Code Kurs abgeschlossen!"
|
||||
ready_for_more_header: "Bereit für mehr? Spiele den Kampagnenmodus!"
|
||||
ready_for_more_1: "Benutze Edelsteine um neue Items freizuschalten!"
|
||||
ready_for_more_2: "Spiele brandneue Welten und Herausforderungen"
|
||||
ready_for_more_3: "Lerne noch mehr zur Programmierung!"
|
||||
saved_games: "Gespeicherte Spiele"
|
||||
hoc: "Hour of Code"
|
||||
my_classes: "Meine Klassen"
|
||||
# class_added: "Class successfully added!"
|
||||
# view_class: "view class"
|
||||
# view_levels: "view levels"
|
||||
# join_class: "Join A Class"
|
||||
# ask_teacher_for_code: "Ask your teacher if you have a CodeCombat class code! If so, enter it below:"
|
||||
# enter_c_code: "<Enter Class Code>"
|
||||
class_added: "Klasse erfolgreich hinzugefügt!"
|
||||
view_class: "Klasse betrachten"
|
||||
view_levels: "Level betrachten"
|
||||
join_class: "Einer Klasse beitreten"
|
||||
ask_teacher_for_code: "Frag deine Lehrkraft ob ihr einen CodeCombat Klassencode habt! Wenn dem so ist, gib ihn hier ein:"
|
||||
enter_c_code: "<Klassencode hier eingeben>"
|
||||
join: "Beitreten"
|
||||
joining: "Der Klasse beitreten"
|
||||
# course_complete: "Course Complete"
|
||||
# play_arena: "Play Arena"
|
||||
course_complete: "Kurs Abgeschlossen"
|
||||
play_arena: "Arena spielen"
|
||||
start: "Start"
|
||||
last_level: "Letzter Level"
|
||||
# welcome_to_hoc: "Adventurers, welcome to our Hour of Code!"
|
||||
# logged_in_as: "Logged in as:"
|
||||
# not_you: "Not you?"
|
||||
# welcome_back: "Hi adventurer, welcome back!"
|
||||
# continue_playing: "Continue Playing"
|
||||
# more_options: "More options:"
|
||||
# option1_header: "Option 1: Invite students via email"
|
||||
# option1_body: "Students will automatically be sent an invitation to join this class, and will need to create an account with a username and password."
|
||||
# option2_header: "Option 2: Send URL to your students"
|
||||
# option2_body: "Students will be asked to enter an email address, username and password to create an account."
|
||||
# option3_header: "Option 3: Direct students to codecombat.com/courses"
|
||||
# option3_body: "Give students the following passcode to enter along with an email address, username and password when they create an account."
|
||||
# thank_you_pref: "Thank you for your purchase! You can now assign"
|
||||
# thank_you_suff: "more students to paid courses."
|
||||
# return_to_class: "Return to classroom"
|
||||
# return_to_course_man: "Return to course management."
|
||||
# students_not_enrolled: "students not enrolled"
|
||||
# total_all_classes: "Total Across All Classes"
|
||||
# how_many_enrollments: "How many additional paid enrollments do you need?"
|
||||
# each_student_access: "Each student in a class will get access to Courses 2-4 once they are enrolled in paid courses. You may assign each course to each student individually."
|
||||
# purchase_now: "Purchase Now"
|
||||
# enrollments: "enrollments"
|
||||
# remove_student1: "Remove Student"
|
||||
# are_you_sure: "Are you sure you want to remove this student from this class?"
|
||||
# remove_description1: "Student will lose access to this classroom and assigned classes. Progress and gameplay is NOT lost, and the student can be added back to the classroom at any time."
|
||||
# remove_description2: "The activated paid license will not be returned."
|
||||
# keep_student: "Keep Student"
|
||||
# removing_user: "Removing user"
|
||||
# to_join_ask: "To join a class, ask your teacher for an unlock code."
|
||||
welcome_to_hoc: "Abenteurer, willkommen zur Hour of Code!"
|
||||
logged_in_as: "Angemeldet als:"
|
||||
not_you: "Nicht du?"
|
||||
welcome_back: "Hallo Abenteurer, willkommen zurück!"
|
||||
continue_playing: "Weiterspielen"
|
||||
more_options: "Mehr Optionen:"
|
||||
option1_header: "Option 1: Lade Schüler via Email ein"
|
||||
option1_body: "Schülern wird automatisch eine Einladung gesendet, der Klasse beizutreten, dazu müssen sie einen Account mit Benutzernamer und Passwort erstellen."
|
||||
option2_header: "Option 2: Senden Sie diese URL zu ihrern Schülern"
|
||||
option2_body: "Die Schüler werden darum gebeten ihre Emailadresse, einen BNenutzernamen und ein Passwirt einzugeben um einen Account zu erstellen."
|
||||
option3_header: "Option 3: Führen Sie ihre Schüler zu codecombat.com/courses"
|
||||
option3_body: "Geben Sie ihren Schülern den folgenden Klassenschlüssel den Sie mit ihrer Emailadresse, Benutzername und Passwort beim Erstellen eines Accounts angeben."
|
||||
thank_you_pref: "Wir Danken Ihnen für Ihren Kauf! Sie können nun"
|
||||
thank_you_suff: "weitere Schüler zu Bezahlkursen einschreiben."
|
||||
return_to_class: "Zurück zum Klassenraum"
|
||||
return_to_course_man: "Zurück zum Kursmanagement."
|
||||
students_not_enrolled: "Nicht eingeschriebene Schüler"
|
||||
total_all_classes: "Gesamtzahl über alle Klassen"
|
||||
how_many_enrollments: "Wie viele zusätzliche bezahlte Einschreibungen benötigen Sie?"
|
||||
each_student_access: "Jeder Schüler in der Klasse wird Zugang zu den Kursen 2-4 erhalten sobald sie in den Bezahlkursen eingeschrieben sind. Sie können jeden Kurs zu jedem Schüler individuell zuweisen."
|
||||
purchase_now: "Kaufen Sie jetzt"
|
||||
enrollments: "Einschreibungen"
|
||||
remove_student1: "Schüler entfernen"
|
||||
are_you_sure: "Sind Sie sicher, dass sie diesen Schüler von ihrer Klasse entfernen wollen?"
|
||||
remove_description1: "Der Schüler wird den Zugang zu dem Klassenraum und zu den zugewiesenen Klassen verlieren. Der Spielfortschritt geht NICHT verloren, und der Schüler kann zu jeder Zeit wieder in die Klasse eingschrieben werden."
|
||||
remove_description2: "Die acitvierte bezahlte Lizenz wird nicht zurückgenommen."
|
||||
keep_student: "Schüler behalten"
|
||||
removing_user: "Benutzer entfernen"
|
||||
to_join_ask: "Um einer Klasse beizutreten, frage deinen Lehrer nach einem Freischaltcode."
|
||||
join_this_class: "Der Klasse beitreten"
|
||||
# enter_here: "<enter unlock code here>"
|
||||
# successfully_joined: "Successfully joined"
|
||||
# click_to_start: "Click here to start taking"
|
||||
enter_here: "<Freischaltcode hier eingeben>"
|
||||
successfully_joined: "Erfolgreich beigetreten"
|
||||
click_to_start: "Klicke hier um folgenden Kurs zu beginnen"
|
||||
my_courses: "Meine Kurse"
|
||||
classroom: "Klassenraum"
|
||||
# use_school_email: "use your school email if you have one"
|
||||
# unique_name: "a unique name no one has chosen"
|
||||
# pick_something: "pick something you can remember"
|
||||
use_school_email: "benutze deine Schulemail wenn du eine hast"
|
||||
unique_name: "Ein einzigartiger Name, den noch keiner gewählt hat"
|
||||
pick_something: "Wähle etwas aus an das du dich erinnern kannst"
|
||||
class_code: "Klassencode"
|
||||
# optional_ask: "optional - ask your teacher to give you one!"
|
||||
# optional_school: "optional - what school do you go to?"
|
||||
# start_playing: "Start Playing"
|
||||
# skip_this: "Skip this, I'll create an account later!"
|
||||
optional_ask: "optional - Frage deine Lehrkraft ob sie dir einen gibt!"
|
||||
optional_school: "optional - Auf welche Schule gehst du?"
|
||||
start_playing: "Spiel starten"
|
||||
skip_this: "Überspringen, Ich werde später einen Account erstellen!"
|
||||
welcome: "Willkommen"
|
||||
# getting_started: "Getting Started with Courses"
|
||||
# download_getting_started: "Download Getting Started Guide [PDF]"
|
||||
# getting_started_1: "Create a new class by clicking the green 'Create New Class' button below."
|
||||
# getting_started_2: "Once you've created a class, click the blue 'Add Students' button."
|
||||
# getting_started_3: "You'll see student's progress below as they sign up and join your class."
|
||||
# additional_resources: "Additional Resources"
|
||||
# additional_resources_1_pref: "Download/print our"
|
||||
# additional_resources_1_mid: "Course 1"
|
||||
# additional_resources_1_mid2: "and"
|
||||
# additional_resources_1_mid3: "Course 2"
|
||||
# additional_resources_1_suff: "teacher's guides with solutions for each level."
|
||||
# additional_resources_2_pref: "Complete our"
|
||||
# additional_resources_2_suff: "to get two free enrollments for the rest of our paid courses."
|
||||
# additional_resources_3_pref: "Visit our"
|
||||
# additional_resources_3_mid: "Teacher Forums"
|
||||
# additional_resources_3_suff: "to connect to fellow educators who are using CodeCombat."
|
||||
# additional_resources_4_pref: "Check out our"
|
||||
# additional_resources_4_mid: "Schools Page"
|
||||
# additional_resources_4_suff: "to learn more about CodeCombat's classroom offerings."
|
||||
# educator_wiki_pref: "Or check out our new"
|
||||
# educator_wiki_mid: "educator wiki"
|
||||
# educator_wiki_suff: "to browse the guide online."
|
||||
# your_classes: "Your Classes"
|
||||
# no_classes: "No classes yet!"
|
||||
# create_new_class1: "create new class"
|
||||
# available_courses: "Available Courses"
|
||||
# unused_enrollments: "Unused enrollments available:"
|
||||
# students_access: "All students get access to Introduction to Computer Science for free. One enrollment per student is required to assign them to paid CodeCombat courses. A single student does not need multiple enrollments to access all paid courses."
|
||||
# active_courses: "active courses"
|
||||
# no_students: "No students yet!"
|
||||
# add_students1: "add students"
|
||||
# view_edit: "view/edit"
|
||||
# students_enrolled: "students enrolled"
|
||||
# length: "Length:"
|
||||
getting_started: "Eine Einleitung zu Kursen"
|
||||
download_getting_started: "Downloaden Sie den Getting Started Guide [PDF]"
|
||||
getting_started_1: "Erstellen Sie eine neue Klasse indem sie den grünen 'Eine neue Klasse erstellen' Knopf unten drücken."
|
||||
getting_started_2: "Sobald Sie eine Klasse erstellt haben, klicken Sie auf den blauen 'Schüler hinzufügen' Knopf."
|
||||
getting_started_3: "Sie werden den Fortschritt der Schüler unten sehen, wenn Sie sich registrieren und der Klasse beitreten."
|
||||
additional_resources: "Weitere Resourcen"
|
||||
additional_resources_1_pref: "Downloaden/Drucken Sie unseren"
|
||||
additional_resources_1_mid: "Kurs 1"
|
||||
additional_resources_1_mid2: "und"
|
||||
additional_resources_1_mid3: "Kurs 2"
|
||||
additional_resources_1_suff: "Lehrkraftguide mit Lösungen für jeden Level."
|
||||
additional_resources_2_pref: "Füllen Sie unser"
|
||||
additional_resources_2_suff: "aus um Zugang zu zwei kostenlosen Einschreibungen für die restlichen Bezahlkurse zu erhalten."
|
||||
additional_resources_3_pref: "Besuchen Sie unser"
|
||||
additional_resources_3_mid: "Lehrerforum"
|
||||
additional_resources_3_suff: "um sich mit anderen Lehrkräften auszutauschen die CodeCombat benutzen."
|
||||
additional_resources_4_pref: "Schauen Sie auf unserer"
|
||||
additional_resources_4_mid: "Schulseite"
|
||||
additional_resources_4_suff: "vorbei um mehr über CodeCombat's Klassenraum Angebote zu erfahren."
|
||||
educator_wiki_pref: "Oder schauen Sie sich unser neues"
|
||||
educator_wiki_mid: "Lehrkraftwiki"
|
||||
educator_wiki_suff: "an um den Guide online anzuschauen."
|
||||
your_classes: "Deine Klassen"
|
||||
no_classes: "Bisher keine Klassen!"
|
||||
create_new_class1: "neue Klassen erstellen"
|
||||
available_courses: "Verfügbare Kurse"
|
||||
unused_enrollments: "Unbenutzte bezahlte Einschreibungen verfügbar:"
|
||||
students_access: "Alle Schüler erhalten kostenlosen Zugang zu der Informatikeinführung. Eine Einschreibung pro Schüler wird benötigt um ihn in Bezahl-CodeCombat-Kurse einzuschreiben. Ein einzelner Schüler benötigt nicht mehrere Einschreibungen um Zugang zu alle Bezahlkursen zu erhalten."
|
||||
active_courses: "Aktive Kurse"
|
||||
no_students: "Keine Schüler bisher!"
|
||||
add_students1: "Schüler hinzufügen"
|
||||
view_edit: "anschauen/bearbeiten"
|
||||
students_enrolled: "Schüler eingeschrieben"
|
||||
students_assigned: "Schüler zugewiesen"
|
||||
length: "Länge:"
|
||||
|
||||
classes:
|
||||
archmage_title: "Erzmagier"
|
||||
|
@ -1442,39 +1460,39 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
|
|||
retrying: "Serverfehler, versuche es erneut."
|
||||
success: "Erfolgreich bezahlt. Danke!"
|
||||
|
||||
# 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."
|
||||
# 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"
|
||||
# purchase_button: "Submit Purchase"
|
||||
# your_codes: "Your 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"
|
||||
# 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."
|
||||
account_prepaid:
|
||||
purchase_code: "Einen Abocode kaufen"
|
||||
purchase_code1: "Abocodes können eingelöst werden um Premiumabozeit zu einem oder mehreren CodeCombataccounts hinzuzufügen."
|
||||
purchase_code2: "Jeder CodeCombataccount kann nur einen einzigen Abocode auf einmal einlösen."
|
||||
purchase_code3: "Abocodes-Monate werden an das Ende der existierenden Abozeit des Accounts hinzugefügt."
|
||||
users: "Benutzer"
|
||||
months: "Monate"
|
||||
purchase_total: "Gesamt"
|
||||
purchase_button: "Kauf abschließen"
|
||||
your_codes: "Ihre Codes"
|
||||
redeem_codes: "Einen Abocode einlösen"
|
||||
prepaid_code: "Prepaidcode"
|
||||
lookup_code: "Prepaidcode freischalten"
|
||||
apply_account: "Ihrem Account hinzufügen"
|
||||
copy_link: "Sie können den Codelink kopieren und an jemanden senden."
|
||||
quantity: "Quantität"
|
||||
redeemed: "Eingelöst"
|
||||
no_codes: "Keine Codes bisher!"
|
||||
you_can1: "Sie können"
|
||||
you_can2: "einen Prepaidcode kaufen"
|
||||
you_can3: "der ihrem Account hinzugefügt werden kann oder den Sie verschenken können."
|
||||
|
||||
loading_error:
|
||||
could_not_load: "Fehler beim Laden vom Server"
|
||||
connection_failure: "Verbindung fehlgeschlagen." # {change}
|
||||
# connection_failure_desc: "It doesn’t look like you’re connected to the internet! Check your network connection and then reload this page."
|
||||
connection_failure_desc: "Es sieht so aus, als wärest du nicht mit dem Internet verbunden! Überprüfe deine Netzwerkverbindung und lade die Seite neu."
|
||||
login_required: "Login benötigt"
|
||||
login_required_desc: "Du musst eingeloggt sein um auf diese Seite zuzugreifen."
|
||||
unauthorized: "Du musst angemeldet sein. Hast du Cookies ausgeschaltet?"
|
||||
forbidden: "Sie haben nicht die nötigen Berechtigungen." # {change}
|
||||
# forbidden_desc: "Oh no, there’s nothing we can show you here! Make sure you’re logged into the correct account, or visit one of the links below to get back to programming!"
|
||||
forbidden_desc: "Oh nein, hier ist nichts was wir dir zeigen können! Stelle sicher, dass du mit dem korrekten Account angemeldet bist oder besuche einen der folgenden Links um zurück zum Programmieren zu kommen!"
|
||||
not_found: "Nicht gefunden." # {change}
|
||||
# not_found_desc: "Hm, there’s nothing here. Visit one of the following links to get back to programming!"
|
||||
not_found_desc: "Hm, hier ist nichts. Schaue dir einige der folgenden Links an um zurück zum Programmieren zu kommen!"
|
||||
not_allowed: "Methode nicht erlaubt."
|
||||
timeout: "Server timeout." # {change}
|
||||
conflict: "Ressourcen Konflikt."
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
profile: "Profile"
|
||||
stats: "Stats"
|
||||
code: "Code"
|
||||
admin: "Admin" # Only shows up when you are an admin
|
||||
home: "Home"
|
||||
contribute: "Contribute"
|
||||
legal: "Legal"
|
||||
|
@ -107,6 +106,17 @@
|
|||
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"
|
||||
request_quote: "Request a Quote"
|
||||
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!"
|
||||
|
||||
modal:
|
||||
close: "Close"
|
||||
|
@ -485,13 +495,14 @@
|
|||
|
||||
subscribe:
|
||||
comparison_blurb: "Sharpen your skills with a CodeCombat subscription!"
|
||||
feature1: "110+ basic levels across 4 worlds"
|
||||
feature1: "125+ basic levels across 4 worlds" # {change}
|
||||
feature2: "10 powerful <strong>new heroes</strong> with unique skills!"
|
||||
feature3: "80+ bonus levels"
|
||||
feature3: "85+ bonus levels" # {change}
|
||||
feature4: "<strong>{{gems}} bonus gems</strong> every month!"
|
||||
feature5: "Video tutorials"
|
||||
feature6: "Premium email support"
|
||||
feature7: "Private <strong>Clans</strong>"
|
||||
feature8: "<strong>No ads!</strong>"
|
||||
free: "Free"
|
||||
month: "month"
|
||||
must_be_logged: "You must be logged in first. Please create an account or log in from the menu above."
|
||||
|
|
|
@ -28,7 +28,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
codecombat_is: "CodeCombat is een platform waarmee leerlingen leren programmeren door het spelen van een spel."
|
||||
our_courses: "Onze lessen zijn specifiek ontwikkeld voor een klasomgeving, zelfs voor leraren zonder programmeerervaring."
|
||||
designed_with: "Gemaakt voor leraren"
|
||||
real_code: "Echte, getypde code"
|
||||
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."
|
||||
educator_resources: "Lesbrieven voor docenten"
|
||||
|
@ -352,8 +352,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
time_goto: "Ga naar:"
|
||||
non_user_code_problem_title: "Kan level niet laden"
|
||||
infinite_loop_title: "Oneindige Loop gedetecteerd"
|
||||
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know."
|
||||
# check_dev_console: "You can also open the developer console to see what might be going wrong."
|
||||
infinite_loop_description: "De initiele code om de wereld te bouwen is nooit gestopt. De code is waarschijnlijk heel langzaam of er is sprake van een oneindige loop. Of misschien wel een bug. Je kunt proberen je code nogmaals te laten afspelen, of de oorspronkelijke code herladen. Als het dan nog steeds niet is opgelost, neem dan contact met ons op."
|
||||
check_dev_console: "Je kunt ook de ontwikkelaarsconsole openen om te zien wat er mogelijk is misgegaan."
|
||||
check_dev_console_link: "(instructies)"
|
||||
infinite_loop_try_again: "Probeer opnieuw"
|
||||
infinite_loop_reset_level: "Level resetten"
|
||||
|
@ -465,7 +465,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
prompt_body: "Wil je meer krijgen?"
|
||||
prompt_button: "Naar de winkel"
|
||||
recovered: "Edelstenen aankoop hersteld. Ververs de pagina alstublieft."
|
||||
# price: "x{{gems}} / mo"
|
||||
price: "x{{gems}} / maand"
|
||||
|
||||
subscribe:
|
||||
comparison_blurb: "Verbeter je vaardigheden met een abonement op CodeCombat!"
|
||||
|
@ -500,7 +500,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
parents_title: "Uw kind leert programmeren." # {change}
|
||||
parents_blurb1: "Met CodeCombat leert uw kind door echte code te schrijven. Ze beginnen met simpele instructies en naarmate ze verder komen, komen er moeilijkere onderwerpen aan bod."
|
||||
parents_blurb1a: "Programmeren is een essentiële vaardigheid die uw kind als volwassene ongetwijfeld gaat gebruiken. In 2020 is de basis van programmeren nodig bij 77% van de banen en zijn softwareontwikkelaars dringend nodig in de wereld. Wist u dat informatica de hoogstbetaalde universitaire graad is?"
|
||||
# parents_blurb2: "For ${{price}} USD/mo, your child will get new challenges every week and personal email support from professional programmers."
|
||||
parents_blurb2: "Voor ${{price}} USD/maand, ontvangt uw kind wekelijks nieuwe uitdagingen en kan uw kind vragen stellen aan professionele programmeurs."
|
||||
parents_blurb3: "Geen risico's: 100% geld terug garantie, 1-klik uitschrijving."
|
||||
payment_methods: "Betaalmethoden"
|
||||
payment_methods_title: "Geaccepteerde betaalmethoden"
|
||||
|
@ -552,7 +552,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
blocks: "Blokkeert" # As in "this shield blocks this much damage"
|
||||
# backstab: "Backstab" # As in "this dagger does this much backstab damage"
|
||||
skills: "Vaardigheden"
|
||||
# attack_1: "Deals"
|
||||
attack_1: "Veroorzaakt"
|
||||
# attack_2: "of listed"
|
||||
attack_3: "Wapen schade."
|
||||
# health_1: "Gains"
|
||||
|
@ -581,7 +581,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
current_value: "Huidige waarde"
|
||||
default_value: "Standaard waarde"
|
||||
parameters: "Parameters"
|
||||
# returns: "Returns"
|
||||
returns: "Geeft terug" #there's no Dutch word for return, we only have "give back".
|
||||
granted_by: "Verleend door"
|
||||
|
||||
save_load:
|
||||
|
@ -625,7 +625,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
|
|||
matt_title: "Programmeur" # {change}
|
||||
matt_blurb: "Fietser"
|
||||
cat_title: "Hoofd Ambachtsman" # {change}
|
||||
# cat_blurb: "Airbender"
|
||||
cat_blurb: "Airbender" #No good Dutch translation, but children know the word airbender from the Avatar series.
|
||||
scott_title: "Programmeur" # {change}
|
||||
scott_blurb: "de Redelijke"
|
||||
maka_title: "Klanten Ombudsman"
|
||||
|
|
|
@ -77,7 +77,7 @@ module.exports = class User extends CocoModel
|
|||
|
||||
# y = a * ln(1/b * (x + c)) + 1
|
||||
@levelFromExp: (xp) ->
|
||||
if xp > 0 then Math.floor(a * Math.log((1/b) * (xp + c))) + 1 else 1
|
||||
if xp > 0 then Math.floor(a * Math.log((1 / b) * (xp + c))) + 1 else 1
|
||||
|
||||
# x = b * e^((y-1)/a) - c
|
||||
@expForLevel: (level) ->
|
||||
|
@ -137,6 +137,16 @@ module.exports = class User extends CocoModel
|
|||
application.tracker.identify announcesActionAudioGroup: @announcesActionAudioGroup unless me.isAdmin()
|
||||
@announcesActionAudioGroup
|
||||
|
||||
getCampaignAdsGroup: ->
|
||||
return @campaignAdsGroup if @campaignAdsGroup
|
||||
group = me.get('testGroupNumber') % 2
|
||||
@campaignAdsGroup = switch group
|
||||
when 0 then 'no-ads'
|
||||
when 1 then 'leaderboard-ads'
|
||||
@campaignAdsGroup = 'no-ads' if me.isAdmin()
|
||||
application.tracker.identify campaignAdsGroup: @campaignAdsGroup unless me.isAdmin()
|
||||
@campaignAdsGroup
|
||||
|
||||
getHomepageGroup: ->
|
||||
# Only testing on en-US so localization issues are not a factor
|
||||
return 'new-home-student' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en')
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
text-align: center
|
||||
tr
|
||||
td
|
||||
padding: 3px
|
||||
padding: 2px
|
||||
border-width: 0px
|
||||
border-top-width: 1px
|
||||
border-color: rgba(85, 85, 85, 0.1)
|
||||
|
|
|
@ -628,6 +628,14 @@ $gameControlMargin: 30px
|
|||
img
|
||||
height: 30px
|
||||
|
||||
.ad-container
|
||||
width: 100%
|
||||
height: 90px
|
||||
text-align: center
|
||||
|
||||
.gameplay-container
|
||||
position: absolute
|
||||
|
||||
body.ipad #campaign-view
|
||||
// iPad only supports up to Kithgard Gates for now.
|
||||
.campaign-switch
|
||||
|
|
|
@ -66,6 +66,7 @@ $level-resize-transition-time: 0.5s
|
|||
|
||||
.level-content
|
||||
position: relative
|
||||
background-color: black
|
||||
|
||||
#canvas-wrapper
|
||||
top: 50px
|
||||
|
@ -83,14 +84,14 @@ $level-resize-transition-time: 0.5s
|
|||
canvas#webgl-surface
|
||||
background-color: #333
|
||||
z-index: 1
|
||||
|
||||
|
||||
canvas#normal-surface
|
||||
z-index: 1
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
pointer-events: none
|
||||
|
||||
|
||||
canvas#webgl-surface, canvas#normal-surface
|
||||
display: block
|
||||
z-index: 2
|
||||
|
@ -259,6 +260,10 @@ $level-resize-transition-time: 0.5s
|
|||
right: 15px
|
||||
font-size: 30px
|
||||
|
||||
.ad-container
|
||||
width: 100%
|
||||
height: 90px
|
||||
text-align: center
|
||||
|
||||
html.fullscreen-editor
|
||||
#level-view
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
block header
|
||||
.container-fluid.text-center
|
||||
.alert.alert-danger.lt-ie9
|
||||
strong(data-i18n="home.no_ie") The CodeCombat game does not run in Internet Explorer 8 or older. Sorry!
|
||||
strong(data-i18n="home.no_ie")
|
||||
|
||||
if view.isIPadBrowser() || view.isMobile()
|
||||
.alert.alert-danger.mobile
|
||||
strong(data-i18n="home.no_mobile") CodeCombat gameplay was not designed for mobile devices and may not work!
|
||||
strong(data-i18n="home.no_mobile")
|
||||
else if view.isOldBrowser()
|
||||
.alert.alert-danger.old-browser
|
||||
strong(data-i18n="home.old_browser") Uh oh, your browser is too old to play CodeCombat. Sorry!
|
||||
strong(data-i18n="home.old_browser")
|
||||
br
|
||||
span(data-i18n="home.old_browser_suffix") You can try anyway, but it probably won't work.
|
||||
span(data-i18n="home.old_browser_suffix")
|
||||
|
||||
nav.navbar.navbar-default
|
||||
.container
|
||||
|
@ -19,14 +19,14 @@
|
|||
.col-md-3.col-sm-4
|
||||
.navbar-header
|
||||
button.navbar-toggle.collapsed(data-toggle='collapse', data-target='#navbar-collapse' aria-expanded='false')
|
||||
span.sr-only Toggle navigation
|
||||
span.sr-only(data-i18n="home.toggle_nav")
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
a.navbar-brand(href="/")
|
||||
img#logo-img(src="/images/pages/base/logo.png")
|
||||
span.glyphicon.glyphicon-home
|
||||
|
||||
|
||||
.col-md-9.col-sm-8
|
||||
#navbar-collapse.collapse.navbar-collapse
|
||||
ul.nav.navbar-nav.pull-left
|
||||
|
@ -65,11 +65,11 @@
|
|||
a(href="/account/prepaid", data-i18n="account.prepaid_codes")
|
||||
li
|
||||
a#logout-button(data-i18n="login.log_out")
|
||||
|
||||
|
||||
li
|
||||
#language-dropdown-wrapper
|
||||
select.language-dropdown.form-control
|
||||
|
||||
select.language-dropdown.form-control
|
||||
|
||||
|
||||
block outer_content
|
||||
#site-content-area
|
||||
|
@ -88,57 +88,57 @@
|
|||
li
|
||||
strong CodeCombat
|
||||
li
|
||||
a(href="/about") About
|
||||
a(href="/about", data-i18n="nav.about")
|
||||
li
|
||||
a(href="/Careers") Jobs
|
||||
a(href="/Careers", data-i18n="nav.jobs")
|
||||
li
|
||||
a(href="http://blog.codecombat.com/", data-i18n="nav.blog")
|
||||
li
|
||||
a(href="/legal") Legal
|
||||
|
||||
a(href="/legal", data-i18n="nav.legal")
|
||||
|
||||
.col-sm-3
|
||||
ul.list-unstyled
|
||||
li
|
||||
strong Schools
|
||||
strong(data-i18n="nav.schools")
|
||||
li
|
||||
a(href="/courses/teachers") Teachers
|
||||
a(href="/courses/teachers", data-i18n="nav.teachers")
|
||||
li
|
||||
a(href="https://sites.google.com/a/codecombat.com/teacher-guides/") Educator Wiki
|
||||
a(href="https://sites.google.com/a/codecombat.com/teacher-guides/", data-i18n="nav.educator_wiki")
|
||||
li
|
||||
a(href="/teachers/quote") Request a Quote
|
||||
|
||||
a(href="/teachers/quote", data-i18n="nav.request_quote")
|
||||
|
||||
.col-sm-3
|
||||
ul.list-unstyled
|
||||
li
|
||||
strong Get Involved
|
||||
strong(data-i18n="nav.get_involved")
|
||||
li
|
||||
a(href='/community', data-i18n="nav.community")
|
||||
li
|
||||
a(href="/contribute") Contribute
|
||||
a(href="/contribute", data-i18n="nav.contribute")
|
||||
li
|
||||
a(href=view.forumLink(), data-i18n="nav.forum")
|
||||
li
|
||||
a(href="/play/ladder") Multiplayer
|
||||
a(href="/play/ladder", data-i18n="home.multiplayer")
|
||||
li
|
||||
a(href="https://github.com/codecombat/codecombat") Open source (GitHub)
|
||||
a(href="https://github.com/codecombat/codecombat", data-i18n="nav.open_source")
|
||||
.col-sm-3
|
||||
ul.list-unstyled
|
||||
li
|
||||
strong Support
|
||||
strong(data-i18n="nav.support")
|
||||
li
|
||||
a(href="https://discourse.codecombat.com/t/faq-check-before-posting/1027") FAQs
|
||||
a(href="https://discourse.codecombat.com/t/faq-check-before-posting/1027", data-i18n="nav.faqs")
|
||||
li
|
||||
a(tabindex=-1, data-toggle="coco-modal", data-target="core/ContactModal", data-i18n="nav.contact")
|
||||
li
|
||||
a(href="https://www.facebook.com/codecombat", data-i18n="nav.facebook")
|
||||
li
|
||||
a(href="https://twitter.com/codecombat", data-i18n="nav.twitter")
|
||||
|
||||
|
||||
#final-footer.small.text-center
|
||||
| Copyright ©2016 CodeCombat. All Rights Reserved.
|
||||
br.hidden-lg.hidden-md
|
||||
img(src="/images/pages/base/logo.png" alt="CodeCombat")
|
||||
br.hidden-lg.hidden-md
|
||||
span.spr Need help? Email
|
||||
span.spr(data-i18n="nav.help_pref")
|
||||
a(href="mailto:team@codecombat.com") team@codecombat.com
|
||||
span.spl and we'll get in touch!
|
||||
span.spl(data-i18n="nav.help_suff")
|
||||
|
|
|
@ -8,7 +8,7 @@ block header
|
|||
img#small-nav-logo(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
|
||||
a(href="/")
|
||||
span.glyphicon.glyphicon-home
|
||||
a(href='/teachers', data-i18n="nav.teachers") Teachers
|
||||
a(href='/teachers', data-i18n="nav.teachers")
|
||||
a(href='/courses', data-i18n="nav.courses")
|
||||
a(href=view.forumLink(), data-i18n="nav.forum")
|
||||
a(href='/community', data-i18n="nav.community")
|
||||
|
@ -37,7 +37,7 @@ block header
|
|||
li
|
||||
a(href="/account/subscription", data-i18n="account.subscription")
|
||||
li
|
||||
a(href="/account/prepaid", data-i18n="account.prepaid_codes") Prepaid Codes
|
||||
a(href="/account/prepaid", data-i18n="account.prepaid_codes")
|
||||
li
|
||||
a#logout-button(data-i18n="login.log_out")
|
||||
|
||||
|
@ -60,15 +60,15 @@ block footer
|
|||
|
||||
#footer-links
|
||||
a(href="/about", data-i18n="nav.about")
|
||||
a(tabindex=-1, data-toggle="coco-modal", data-target="core/ContactModal", data-i18n="nav.contact") Contact
|
||||
a(tabindex=-1, data-toggle="coco-modal", data-target="core/ContactModal", data-i18n="nav.contact")
|
||||
a(href='http://blog.codecombat.com/', data-i18n="nav.blog")
|
||||
a(href='https://jobs.lever.co/codecombat', tabindex=-1, data-i18n="nav.careers") Careers
|
||||
a(href='/legal', tabindex=-1, data-i18n="nav.legal") Legal
|
||||
a(href='/privacy', tabindex=-1, data-i18n="legal.privacy_title") Privacy
|
||||
a(href='/contribute', tabindex=-1, data-i18n="nav.contribute") Contribute
|
||||
a(href='https://jobs.lever.co/codecombat', tabindex=-1, data-i18n="nav.careers")
|
||||
a(href='/legal', tabindex=-1, data-i18n="nav.legal")
|
||||
a(href='/privacy', tabindex=-1, data-i18n="legal.privacy_title")
|
||||
a(href='/contribute', tabindex=-1, data-i18n="nav.contribute")
|
||||
a(href='/play/ladder', tabindex=-1, data-i18n="home.multiplayer")
|
||||
if me.isAdmin()
|
||||
a(href='/admin', data-i18n="nav.admin") Admin
|
||||
a(href='/admin') Admin
|
||||
|
||||
if usesSocialMedia
|
||||
.share-buttons
|
||||
|
@ -76,7 +76,7 @@ block footer
|
|||
.g-plusone(data-href="http://codecombat.com", data-size="medium")
|
||||
.fb-like(data-href="https://www.facebook.com/codecombat", data-send="false", data-layout="button_count", data-width="350", data-show-faces="true", data-ref="coco_footer_#{fbRef}")
|
||||
if !isIE
|
||||
a.twitter-follow-button(href="https://twitter.com/CodeCombat", data-show-count="true", data-show-screen-name="false", data-dnt="true", data-align="right", data-i18n="nav.twitter_follow") Follow
|
||||
a.twitter-follow-button(href="https://twitter.com/CodeCombat", data-show-count="true", data-show-screen-name="false", data-dnt="true", data-align="right", data-i18n="nav.twitter_follow")
|
||||
iframe.github-star-button(src="https://ghbtns.com/github-btn.html?user=codecombat&repo=codecombat&type=watch&count=true", allowtransparency="true", frameborder="0", scrolling="0", width="110", height="20")
|
||||
|
||||
#footer-credits
|
||||
|
|
|
@ -2,21 +2,21 @@ extends /templates/base
|
|||
|
||||
block content
|
||||
|
||||
h1(data-i18n="community.main_title") Community
|
||||
h1(data-i18n="community.main_title")
|
||||
|
||||
p(data-i18n="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!
|
||||
p(data-i18n="community.introduction")
|
||||
|
||||
div
|
||||
|
||||
.community-columns
|
||||
a(href="/editor/level")
|
||||
img(src="/images/pages/community/level.png")
|
||||
h2
|
||||
h2
|
||||
a(href="/editor/level", data-i18n="editor.level_title")
|
||||
p
|
||||
span.spr(data-i18n="community.level_editor_prefix") Use the CodeCombat
|
||||
span.spr(data-i18n="community.level_editor_prefix")
|
||||
a(href="/editor/level", data-i18n="editor.level_title")
|
||||
span.spl(data-i18n="community.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!
|
||||
span.spl(data-i18n="community.level_editor_suffix")
|
||||
|
||||
.community-columns
|
||||
a(href="/editor/thang")
|
||||
|
@ -24,9 +24,9 @@ block content
|
|||
h2
|
||||
a(href="/editor/thang", data-i18n="editor.thang_title")
|
||||
p
|
||||
span.spr(data-i18n="community.thang_editor_prefix") We call units within the game 'thangs'. Use the
|
||||
span.spr(data-i18n="community.thang_editor_prefix")
|
||||
a(href="/editor/thang", data-i18n="editor.thang_title")
|
||||
span.spl(data-i18n="community.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.
|
||||
span.spl(data-i18n="community.thang_editor_suffix")
|
||||
|
||||
.community-columns
|
||||
a(href="/editor/article")
|
||||
|
@ -34,16 +34,16 @@ block content
|
|||
h2
|
||||
a(href="/editor/article", data-i18n="editor.article_title")
|
||||
p
|
||||
span.spr(data-i18n="community.article_editor_prefix") See a mistake in some of our docs? Want to make some instructions for your own creations? Check out the
|
||||
span.spr(data-i18n="community.article_editor_prefix")
|
||||
a(href="/editor/article", data-i18n="editor.article_title")
|
||||
span.spl(data-i18n="community.article_editor_suffix") and help CodeCombat players get the most out of their playtime.
|
||||
span.spl(data-i18n="community.article_editor_suffix")
|
||||
|
||||
div
|
||||
|
||||
.half-width
|
||||
|
||||
h2.lower-titles
|
||||
a(href="https://www.facebook.com/codecombat", data-i18n="community.find_us") Find us on these sites
|
||||
a(href="https://www.facebook.com/codecombat", data-i18n="community.find_us")
|
||||
|
||||
.logo-row
|
||||
|
||||
|
@ -71,7 +71,7 @@ block content
|
|||
.half-width
|
||||
|
||||
h2.lower-titles
|
||||
a(href="/contribute", data-i18n="community.contribute_to_the_project") Contribute to the project
|
||||
a(href="/contribute", data-i18n="community.contribute_to_the_project")
|
||||
|
||||
.logo-row.contribute-classes
|
||||
|
||||
|
|
|
@ -68,18 +68,26 @@
|
|||
span.glyphicon.glyphicon-ok
|
||||
tr
|
||||
td.feature-description
|
||||
span(data-i18n="subscribe.feature6")
|
||||
span(data-i18n="[html]subscribe.feature7")
|
||||
if !me.isOnPremiumServer()
|
||||
td.free-cell
|
||||
td.center-ok
|
||||
span.glyphicon.glyphicon-ok
|
||||
tr
|
||||
td.feature-description
|
||||
span(data-i18n="[html]subscribe.feature7")
|
||||
span(data-i18n="subscribe.feature6")
|
||||
if !me.isOnPremiumServer()
|
||||
td.free-cell
|
||||
td.center-ok
|
||||
span.glyphicon.glyphicon-ok
|
||||
if me.getCampaignAdsGroup() === 'leaderboard-ads'
|
||||
tr
|
||||
td.feature-description
|
||||
span(data-i18n="[html]subscribe.feature8")
|
||||
if !me.isOnPremiumServer()
|
||||
td.free-cell
|
||||
td.center-ok
|
||||
span.glyphicon.glyphicon-ok
|
||||
#parents-info(data-i18n="subscribe.parents")
|
||||
#payment-methods-info(data-i18n="subscribe.payment_methods")
|
||||
|
||||
|
|
|
@ -1,165 +1,182 @@
|
|||
a(href="/").picoctf-hide
|
||||
img.small-nav-logo(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
|
||||
|
||||
.picoctf-show
|
||||
a(href="http://staging.picoctf.com").picoctf-logo
|
||||
img.small-nav-logo(src="http://picoctf.com/img/2014_logo_blue2.svg", title="picoCTF home", alt="picoCTF home")
|
||||
a(href="http://codecombat.com").picoctf-powered-by
|
||||
em.spr powered by
|
||||
img(src="/images/pages/base/logo.png", title="Powered by CodeCombat - Learn how to code by playing a game ", alt="Powered by CodeCombat")
|
||||
|
||||
if campaign
|
||||
.map
|
||||
.gradient.horizontal-gradient.top-gradient
|
||||
.gradient.vertical-gradient.right-gradient
|
||||
.gradient.horizontal-gradient.bottom-gradient
|
||||
.gradient.vertical-gradient.left-gradient
|
||||
.map-background(alt="", draggable="false")
|
||||
|
||||
each level in levels
|
||||
if !level.hidden
|
||||
div(style="left: #{level.position.x}%; bottom: #{level.position.y}%; background-color: #{level.color}", class="level" + (level.next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + (levelStatusMap[level.slug] || ""), data-level-slug=level.slug, data-level-original=level.original, title=i18n(level, 'name') + (level.disabled ? ' (Coming Soon to Adventurers)' : ''))
|
||||
if level.unlocksHero && (!level.purchasedHero || editorMode)
|
||||
img.hero-portrait(src="/file/db/thang.type/#{level.unlocksHero}/portrait.png")
|
||||
a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.slug}", disabled=level.disabled, data-level-slug=level.slug, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
if level.slug == 'lost-viking'
|
||||
img.star(src="/file/db/thang.type/5441c3144e9aeb727cc97111/portrait.png")
|
||||
else if level.requiresSubscription
|
||||
img.star(src="/images/pages/play/star.png")
|
||||
if levelStatusMap[level.slug] === 'complete'
|
||||
img.banner(src="/images/pages/play/level-banner-complete.png")
|
||||
if levelStatusMap[level.slug] === 'started'
|
||||
img.banner(src="/images/pages/play/level-banner-started.png")
|
||||
if levelDifficultyMap[level.slug]
|
||||
.level-difficulty-banner-text= levelDifficultyMap[level.slug]
|
||||
div(style="left: #{level.position.x}%; bottom: #{level.position.y}%", class="level-shadow" + (level.next ? " next" : "") + " " + (levelStatusMap[level.slug] || ""))
|
||||
.level-info-container(data-level-slug=level.slug, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
- var playCount = levelPlayCountMap[level.slug]
|
||||
.progress.progress-striped.active.hide
|
||||
.progress-bar(style="width: 100%")
|
||||
- var showsLeaderboard = levelStatusMap[level.slug] === 'complete' && ((level.scoreTypes && level.scoreTypes.length) || ['hero-ladder', 'course-ladder'].indexOf(level.type) !== -1);
|
||||
|
||||
div(class="level-info " + (levelStatusMap[level.slug] || "") + (level.requiresSubscription ? " premium" : "") + (showsLeaderboard ? " shows-leaderboard" : ""))
|
||||
.level-status
|
||||
h3= i18n(level, 'name') + (level.disabled ? " (Coming soon!)" : (level.locked ? " (Locked)" : ""))
|
||||
- var description = i18n(level, 'description') || level.description || ""
|
||||
.level-description!= marked(description, {sanitize: !picoCTF})
|
||||
if level.disabled
|
||||
p
|
||||
span.spr(data-i18n="play.awaiting_levels_adventurer_prefix") We release five levels per week.
|
||||
a.spr(href="/contribute/adventurer")
|
||||
strong(data-i18n="play.awaiting_levels_adventurer") Sign up as an Adventurer
|
||||
span.spl(data-i18n="play.awaiting_levels_adventurer_suffix") to be the first to play new levels.
|
||||
if level.displayConcepts && level.displayConcepts.length
|
||||
p
|
||||
for concept in level.displayConcepts
|
||||
kbd(data-i18n="concepts." + concept)
|
||||
|
||||
if !level.disabled && !level.locked
|
||||
if playCount && playCount.sessions
|
||||
.play-counts.hidden
|
||||
span.spl.spr= playCount.sessions
|
||||
span(data-i18n="play.players") players
|
||||
span.spr , #{Math.round(playCount.playtime / 3600)}
|
||||
span(data-i18n="play.hours_played") hours played
|
||||
if showsLeaderboard
|
||||
button.btn.btn-warning.btn.btn-lg.btn-illustrated.view-solutions(data-level-slug=level.slug)
|
||||
span(data-i18n="leaderboard.scores")
|
||||
button.btn.btn-success.btn.btn-lg.btn-illustrated.start-level(data-i18n="common.play") Play
|
||||
if me.get('courseInstances') && me.get('courseInstances').length
|
||||
.course-version.hidden(data-level-original=level.original)
|
||||
em(data-i18n="general.or")
|
||||
| ...
|
||||
br
|
||||
button.btn.btn-primary.btn.btn-lg.btn-illustrated
|
||||
span(data-i18n="play.play_classroom_version") Play Classroom Version
|
||||
else if level.unlocksHero && !level.purchasedHero
|
||||
img.hero-portrait(src="/file/db/thang.type/#{level.unlocksHero}/portrait.png", style="left: #{level.position.x}%; bottom: #{level.position.y}%;")
|
||||
|
||||
for adjacentCampaign in adjacentCampaigns
|
||||
a(href=(editorMode ? "/editor/campaign/" : "/play/") + adjacentCampaign.slug)
|
||||
span.glyphicon.glyphicon-share-alt.campaign-switch(style=adjacentCampaign.style, title=adjacentCampaign.name, data-campaign-id=adjacentCampaign.id)
|
||||
|
||||
else
|
||||
.portal
|
||||
.portals
|
||||
for campaignSlug in ['dungeon', 'forest', 'desert', 'mountain', 'glacier', 'volcano']
|
||||
- var campaign = campaigns[campaignSlug];
|
||||
- var godmode = me.get('permissions', true).indexOf('godmode') != -1;
|
||||
div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked && !godmode ? " locked" : ""), data-campaign-slug=campaignSlug)
|
||||
.campaign-label
|
||||
h2.campaign-name
|
||||
if campaign
|
||||
span= i18n(campaign.attributes, 'fullName')
|
||||
else
|
||||
span ???
|
||||
if campaign && campaign.levelsTotal
|
||||
h3.levels-completed
|
||||
span= campaign.levelsCompleted
|
||||
| /
|
||||
span= campaign.levelsTotal
|
||||
if campaign && campaign.locked && !godmode
|
||||
h3.campaign-locked(data-i18n="play.locked") Locked
|
||||
else if campaign
|
||||
btn(data-i18n="common.play").btn.btn-illustrated.btn-lg.btn-success.play-button
|
||||
if campaign && campaign.get('description')
|
||||
p.campaign-description
|
||||
span= i18n(campaign.attributes, 'description')
|
||||
|
||||
.game-controls.header-font.picoctf-hide
|
||||
button.btn.poll.hidden(data-i18n="[title]play.poll")
|
||||
a.btn.clans(href="/clans", data-i18n="[title]clans.clans")
|
||||
button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items")
|
||||
button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
|
||||
button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
|
||||
if me.get('anonymous') === false || me.get('iosIdentifierForVendor') || isIPadApp
|
||||
button.btn.gems(data-toggle='coco-modal', data-target='play/modal/BuyGemsModal', data-i18n="[title]play.buy_gems")
|
||||
if !me.get('anonymous', true)
|
||||
button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
|
||||
//if me.isAdmin()
|
||||
// button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
|
||||
if me.get('anonymous', true)
|
||||
button.btn.settings(data-toggle='coco-modal', data-target='core/CreateAccountModal', data-i18n="[title]play.settings")
|
||||
|
||||
.user-status.header-font.picoctf-hide
|
||||
.user-status-line
|
||||
span.gem.gem-30
|
||||
span#gems-count.spr= me.gems()
|
||||
span.level-indicator(data-i18n="general.player_level")
|
||||
span.player-level.spr= me.level()
|
||||
span.player-hero-icon
|
||||
if me.get('anonymous')
|
||||
span.player-name.spr(data-i18n="play.anonymous") Anonymous Player
|
||||
button.btn.btn-illustrated.login-button.btn-warning(data-i18n="login.log_in")
|
||||
button.btn.btn-illustrated.signup-button.btn-danger(data-i18n="signup.sign_up")
|
||||
if view.showAds()
|
||||
// TODO: loading this multiple times yields script error:
|
||||
// Uncaught TagError: adsbygoogle.push() error: All ins elements in the DOM with class=adsbygoogle already have ads in them.
|
||||
.ad-container
|
||||
if campaign
|
||||
script(async, src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")
|
||||
ins.adsbygoogle(style="display:inline-block;width:728px;height:90px", data-ad-client="ca-pub-6640930638193614", data-ad-slot="4924994487")
|
||||
script.
|
||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
||||
else
|
||||
a(data-toggle="coco-modal", data-target="play/modal/PlayAccountModal").player-name.spr= me.get('name')
|
||||
button#logout-button.btn.btn-illustrated.btn-warning(data-i18n="login.log_out") Log Out
|
||||
if me.isPremium()
|
||||
button.btn.btn-illustrated.btn-primary(data-i18n="nav.contact", data-toggle="coco-modal", data-target="core/ContactModal") Contact
|
||||
script(async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")
|
||||
ins.adsbygoogle(style="display:inline-block;width:728px;height:90px", data-ad-client="ca-pub-6640930638193614", data-ad-slot="4469166082")
|
||||
script.
|
||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
||||
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button.picoctf-hide#volume-button(data-i18n="[title]play.adjust_volume", title="Adjust volume")
|
||||
.glyphicon.glyphicon-volume-off
|
||||
.glyphicon.glyphicon-volume-down
|
||||
.glyphicon.glyphicon-volume-up
|
||||
// TODO: .gameplay-container causes world map buttons to briefly appear in top left of screen
|
||||
.gameplay-container
|
||||
a(href="/").picoctf-hide
|
||||
img.small-nav-logo(src="/images/pages/base/logo.png", title="CodeCombat - Learn how to code by playing a game", alt="CodeCombat")
|
||||
|
||||
if campaign && !editorMode
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button.picoctf-hide#back-button(data-i18n="[title]resources.campaigns", title="Campaigns")
|
||||
.glyphicon.glyphicon-globe
|
||||
.picoctf-show
|
||||
a(href="http://staging.picoctf.com").picoctf-logo
|
||||
img.small-nav-logo(src="http://picoctf.com/img/2014_logo_blue2.svg", title="picoCTF home", alt="picoCTF home")
|
||||
a(href="http://codecombat.com").picoctf-powered-by
|
||||
em.spr powered by
|
||||
img(src="/images/pages/base/logo.png", title="Powered by CodeCombat - Learn how to code by playing a game ", alt="Powered by CodeCombat")
|
||||
|
||||
if editorMode
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button#clear-storage-button(data-i18n="[title]editor.clear_storage", title="Clear your local changes")
|
||||
.glyphicon.glyphicon-refresh
|
||||
if campaign
|
||||
.map
|
||||
.gradient.horizontal-gradient.top-gradient
|
||||
.gradient.vertical-gradient.right-gradient
|
||||
.gradient.horizontal-gradient.bottom-gradient
|
||||
.gradient.vertical-gradient.left-gradient
|
||||
.map-background(alt="", draggable="false")
|
||||
|
||||
if campaign && campaign.loaded
|
||||
h1#campaign-status.picoctf-hide
|
||||
.campaign-status-background
|
||||
.campaign-name
|
||||
- var fullName = i18n(campaign.attributes, 'fullName')
|
||||
if (me.get('preferredLanguage', true) || 'en-US').split('-')[0] == 'en' || fullName != campaign.get('fullName')
|
||||
// We have a translation.
|
||||
span= fullName
|
||||
.levels-completed
|
||||
span= levelsCompleted
|
||||
| /
|
||||
span= levelsTotal
|
||||
each level in levels
|
||||
if !level.hidden
|
||||
div(style="left: #{level.position.x}%; bottom: #{level.position.y}%; background-color: #{level.color}", class="level" + (level.next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + (levelStatusMap[level.slug] || ""), data-level-slug=level.slug, data-level-original=level.original, title=i18n(level, 'name') + (level.disabled ? ' (Coming Soon to Adventurers)' : ''))
|
||||
if level.unlocksHero && (!level.purchasedHero || editorMode)
|
||||
img.hero-portrait(src="/file/db/thang.type/#{level.unlocksHero}/portrait.png")
|
||||
a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.slug}", disabled=level.disabled, data-level-slug=level.slug, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
if level.slug == 'lost-viking'
|
||||
img.star(src="/file/db/thang.type/5441c3144e9aeb727cc97111/portrait.png")
|
||||
else if level.requiresSubscription
|
||||
img.star(src="/images/pages/play/star.png")
|
||||
if levelStatusMap[level.slug] === 'complete'
|
||||
img.banner(src="/images/pages/play/level-banner-complete.png")
|
||||
if levelStatusMap[level.slug] === 'started'
|
||||
img.banner(src="/images/pages/play/level-banner-started.png")
|
||||
if levelDifficultyMap[level.slug]
|
||||
.level-difficulty-banner-text= levelDifficultyMap[level.slug]
|
||||
div(style="left: #{level.position.x}%; bottom: #{level.position.y}%", class="level-shadow" + (level.next ? " next" : "") + " " + (levelStatusMap[level.slug] || ""))
|
||||
.level-info-container(data-level-slug=level.slug, data-level-path=level.levelPath || 'level', data-level-name=level.name)
|
||||
- var playCount = levelPlayCountMap[level.slug]
|
||||
.progress.progress-striped.active.hide
|
||||
.progress-bar(style="width: 100%")
|
||||
- var showsLeaderboard = levelStatusMap[level.slug] === 'complete' && ((level.scoreTypes && level.scoreTypes.length) || ['hero-ladder', 'course-ladder'].indexOf(level.type) !== -1);
|
||||
|
||||
div(class="level-info " + (levelStatusMap[level.slug] || "") + (level.requiresSubscription ? " premium" : "") + (showsLeaderboard ? " shows-leaderboard" : ""))
|
||||
.level-status
|
||||
h3= i18n(level, 'name') + (level.disabled ? " (Coming soon!)" : (level.locked ? " (Locked)" : ""))
|
||||
- var description = i18n(level, 'description') || level.description || ""
|
||||
.level-description!= marked(description, {sanitize: !picoCTF})
|
||||
if level.disabled
|
||||
p
|
||||
span.spr(data-i18n="play.awaiting_levels_adventurer_prefix") We release five levels per week.
|
||||
a.spr(href="/contribute/adventurer")
|
||||
strong(data-i18n="play.awaiting_levels_adventurer") Sign up as an Adventurer
|
||||
span.spl(data-i18n="play.awaiting_levels_adventurer_suffix") to be the first to play new levels.
|
||||
if level.displayConcepts && level.displayConcepts.length
|
||||
p
|
||||
for concept in level.displayConcepts
|
||||
kbd(data-i18n="concepts." + concept)
|
||||
|
||||
if !level.disabled && !level.locked
|
||||
if playCount && playCount.sessions
|
||||
.play-counts.hidden
|
||||
span.spl.spr= playCount.sessions
|
||||
span(data-i18n="play.players") players
|
||||
span.spr , #{Math.round(playCount.playtime / 3600)}
|
||||
span(data-i18n="play.hours_played") hours played
|
||||
if showsLeaderboard
|
||||
button.btn.btn-warning.btn.btn-lg.btn-illustrated.view-solutions(data-level-slug=level.slug)
|
||||
span(data-i18n="leaderboard.scores")
|
||||
button.btn.btn-success.btn.btn-lg.btn-illustrated.start-level(data-i18n="common.play") Play
|
||||
if me.get('courseInstances') && me.get('courseInstances').length
|
||||
.course-version.hidden(data-level-original=level.original)
|
||||
em(data-i18n="general.or")
|
||||
| ...
|
||||
br
|
||||
button.btn.btn-primary.btn.btn-lg.btn-illustrated
|
||||
span(data-i18n="play.play_classroom_version") Play Classroom Version
|
||||
else if level.unlocksHero && !level.purchasedHero
|
||||
img.hero-portrait(src="/file/db/thang.type/#{level.unlocksHero}/portrait.png", style="left: #{level.position.x}%; bottom: #{level.position.y}%;")
|
||||
|
||||
for adjacentCampaign in adjacentCampaigns
|
||||
a(href=(editorMode ? "/editor/campaign/" : "/play/") + adjacentCampaign.slug)
|
||||
span.glyphicon.glyphicon-share-alt.campaign-switch(style=adjacentCampaign.style, title=adjacentCampaign.name, data-campaign-id=adjacentCampaign.id)
|
||||
|
||||
else
|
||||
.portal
|
||||
.portals
|
||||
for campaignSlug in ['dungeon', 'forest', 'desert', 'mountain', 'glacier', 'volcano']
|
||||
- var campaign = campaigns[campaignSlug];
|
||||
- var godmode = me.get('permissions', true).indexOf('godmode') != -1;
|
||||
div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked && !godmode ? " locked" : ""), data-campaign-slug=campaignSlug)
|
||||
.campaign-label
|
||||
h2.campaign-name
|
||||
if campaign
|
||||
span= i18n(campaign.attributes, 'fullName')
|
||||
else
|
||||
span ???
|
||||
if campaign && campaign.levelsTotal
|
||||
h3.levels-completed
|
||||
span= campaign.levelsCompleted
|
||||
| /
|
||||
span= campaign.levelsTotal
|
||||
if campaign && campaign.locked && !godmode
|
||||
h3.campaign-locked(data-i18n="play.locked") Locked
|
||||
else if campaign
|
||||
btn(data-i18n="common.play").btn.btn-illustrated.btn-lg.btn-success.play-button
|
||||
if campaign && campaign.get('description')
|
||||
p.campaign-description
|
||||
span= i18n(campaign.attributes, 'description')
|
||||
|
||||
.game-controls.header-font.picoctf-hide
|
||||
button.btn.poll.hidden(data-i18n="[title]play.poll")
|
||||
a.btn.clans(href="/clans", data-i18n="[title]clans.clans")
|
||||
button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items")
|
||||
button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
|
||||
button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
|
||||
if me.get('anonymous') === false || me.get('iosIdentifierForVendor') || isIPadApp
|
||||
button.btn.gems(data-toggle='coco-modal', data-target='play/modal/BuyGemsModal', data-i18n="[title]play.buy_gems")
|
||||
if !me.get('anonymous', true)
|
||||
button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
|
||||
//if me.isAdmin()
|
||||
// button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
|
||||
if me.get('anonymous', true)
|
||||
button.btn.settings(data-toggle='coco-modal', data-target='core/CreateAccountModal', data-i18n="[title]play.settings")
|
||||
|
||||
.user-status.header-font.picoctf-hide
|
||||
.user-status-line
|
||||
span.gem.gem-30
|
||||
span#gems-count.spr= me.gems()
|
||||
span.level-indicator(data-i18n="general.player_level")
|
||||
span.player-level.spr= me.level()
|
||||
span.player-hero-icon
|
||||
if me.get('anonymous')
|
||||
span.player-name.spr(data-i18n="play.anonymous") Anonymous Player
|
||||
button.btn.btn-illustrated.login-button.btn-warning(data-i18n="login.log_in")
|
||||
button.btn.btn-illustrated.signup-button.btn-danger(data-i18n="signup.sign_up")
|
||||
else
|
||||
a(data-toggle="coco-modal", data-target="play/modal/PlayAccountModal").player-name.spr= me.get('name')
|
||||
button#logout-button.btn.btn-illustrated.btn-warning(data-i18n="login.log_out") Log Out
|
||||
if me.isPremium()
|
||||
button.btn.btn-illustrated.btn-primary(data-i18n="nav.contact", data-toggle="coco-modal", data-target="core/ContactModal") Contact
|
||||
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button.picoctf-hide#volume-button(data-i18n="[title]play.adjust_volume", title="Adjust volume")
|
||||
.glyphicon.glyphicon-volume-off
|
||||
.glyphicon.glyphicon-volume-down
|
||||
.glyphicon.glyphicon-volume-up
|
||||
|
||||
if campaign && !editorMode
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button.picoctf-hide#back-button(data-i18n="[title]resources.campaigns", title="Campaigns")
|
||||
.glyphicon.glyphicon-globe
|
||||
|
||||
if editorMode
|
||||
button.btn.btn-lg.btn-inverse.campaign-control-button#clear-storage-button(data-i18n="[title]editor.clear_storage", title="Clear your local changes")
|
||||
.glyphicon.glyphicon-refresh
|
||||
|
||||
if campaign && campaign.loaded
|
||||
h1#campaign-status.picoctf-hide
|
||||
.campaign-status-background
|
||||
.campaign-name
|
||||
- var fullName = i18n(campaign.attributes, 'fullName')
|
||||
if (me.get('preferredLanguage', true) || 'en-US').split('-')[0] == 'en' || fullName != campaign.get('fullName')
|
||||
// We have a translation.
|
||||
span= fullName
|
||||
.levels-completed
|
||||
span= levelsCompleted
|
||||
| /
|
||||
span= levelsTotal
|
||||
|
|
|
@ -1,49 +1,59 @@
|
|||
#level-loading-view
|
||||
if view.showAds()
|
||||
// TODO: loading this multiple times yields script error:
|
||||
// Uncaught TagError: adsbygoogle.push() error: All ins elements in the DOM with class=adsbygoogle already have ads in them.
|
||||
.ad-container
|
||||
script(async, src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")
|
||||
ins.adsbygoogle(style="display:inline-block;width:728px;height:90px", data-ad-client="ca-pub-6640930638193614", data-ad-slot="5527096883")
|
||||
script.
|
||||
(adsbygoogle = window.adsbygoogle || []).push({});
|
||||
|
||||
.level-content
|
||||
#control-bar-view
|
||||
.game-container
|
||||
#level-loading-view
|
||||
|
||||
#fullscreen-editor-background-screen(title="Click to minimize the code editor")
|
||||
.level-content
|
||||
#control-bar-view
|
||||
|
||||
#code-area
|
||||
#code-area-gradient.gradient
|
||||
#tome-view
|
||||
#fullscreen-editor-background-screen(title="Click to minimize the code editor")
|
||||
|
||||
#game-area
|
||||
#code-area
|
||||
#code-area-gradient.gradient
|
||||
#tome-view
|
||||
|
||||
#canvas-wrapper
|
||||
canvas(width=924, height=589)#webgl-surface
|
||||
canvas(width=924, height=589)#normal-surface
|
||||
#ascii-surface
|
||||
#canvas-left-gradient.gradient
|
||||
#canvas-top-gradient.gradient
|
||||
#goals-view
|
||||
#game-area
|
||||
|
||||
#level-flags-view
|
||||
#canvas-wrapper
|
||||
canvas(width=924, height=589)#webgl-surface
|
||||
canvas(width=924, height=589)#normal-surface
|
||||
#ascii-surface
|
||||
#canvas-left-gradient.gradient
|
||||
#canvas-top-gradient.gradient
|
||||
#goals-view
|
||||
|
||||
#gold-view
|
||||
#level-flags-view
|
||||
|
||||
#problem-alert-view
|
||||
#gold-view
|
||||
|
||||
#level-chat-view
|
||||
#problem-alert-view
|
||||
|
||||
#multiplayer-status-view
|
||||
#level-chat-view
|
||||
|
||||
#duel-stats-view
|
||||
#multiplayer-status-view
|
||||
|
||||
#playback-view
|
||||
#duel-stats-view
|
||||
|
||||
#thang-hud
|
||||
#playback-view
|
||||
|
||||
#level-dialogue-view
|
||||
#thang-hud
|
||||
|
||||
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
|
||||
#level-dialogue-view
|
||||
|
||||
#level-footer-shadow
|
||||
#level-footer-background
|
||||
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
|
||||
|
||||
if !me.get('anonymous')
|
||||
#play-footer(class=me.isPremium() ? "premium" : "")
|
||||
p(class='footer-link-text').picoctf-hide
|
||||
a.contact-link(title='Send CodeCombat a message', tabindex=-1, data-i18n="nav.contact") Contact
|
||||
#level-footer-shadow
|
||||
#level-footer-background
|
||||
|
||||
if !me.get('anonymous')
|
||||
#play-footer(class=me.isPremium() ? "premium" : "")
|
||||
p(class='footer-link-text').picoctf-hide
|
||||
a.contact-link(title='Send CodeCombat a message', tabindex=-1, data-i18n="nav.contact") Contact
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
.product
|
||||
h4.subscription-gem-amount x{{gems}} / mo
|
||||
h3(data-i18n="account.subscription")
|
||||
if me.isPremium()
|
||||
if me.hasSubscription()
|
||||
button.disabled.start-subscription-button.btn.btn-lg.btn-illustrated.btn-success
|
||||
| ✓
|
||||
span(data-i18n="account.subscribed")
|
||||
|
|
|
@ -266,6 +266,11 @@ module.exports = class CampaignView extends RootView
|
|||
authModal.mode = 'signup'
|
||||
@openModalView authModal
|
||||
|
||||
showAds: ->
|
||||
if application.isProduction() && !me.isPremium() && !me.isTeacher() && !window.serverConfig.picoCTF
|
||||
return me.getCampaignAdsGroup() is 'leaderboard-ads'
|
||||
false
|
||||
|
||||
annotateLevel: (level) ->
|
||||
level.position ?= { x: 10, y: 10 }
|
||||
level.locked = not me.ownsLevel level.original
|
||||
|
@ -554,6 +559,7 @@ module.exports = class CampaignView extends RootView
|
|||
aspectRatio = mapWidth / mapHeight
|
||||
pageWidth = @$el.width()
|
||||
pageHeight = @$el.height()
|
||||
pageHeight -= adContainerHeight if adContainerHeight = $('.ad-container').outerHeight()
|
||||
widthRatio = pageWidth / mapWidth
|
||||
heightRatio = pageHeight / mapHeight
|
||||
# Make sure we can see the whole map, fading to background in one dimension.
|
||||
|
|
|
@ -148,6 +148,13 @@ module.exports = class PlayLevelView extends RootView
|
|||
application.tracker?.trackEvent 'Finished Level Load', category: 'Play Level', label: @levelID, level: @levelID, loadDuration: @loadDuration
|
||||
application.tracker?.trackTiming @loadDuration, 'Level Load Time', @levelID, @levelID
|
||||
|
||||
isCourseMode: -> @courseID and @courseInstanceID
|
||||
|
||||
showAds: ->
|
||||
if application.isProduction() && !me.isPremium() && !me.isTeacher() && !window.serverConfig.picoCTF && !@isCourseMode()
|
||||
return me.getCampaignAdsGroup() is 'leaderboard-ads'
|
||||
false
|
||||
|
||||
# CocoView overridden methods ###############################################
|
||||
|
||||
getRenderData: ->
|
||||
|
@ -326,7 +333,13 @@ module.exports = class PlayLevelView extends RootView
|
|||
initSurface: ->
|
||||
webGLSurface = $('canvas#webgl-surface', @$el)
|
||||
normalSurface = $('canvas#normal-surface', @$el)
|
||||
@surface = new Surface(@world, normalSurface, webGLSurface, thangTypes: @supermodel.getModels(ThangType), observing: @observing, playerNames: @findPlayerNames(), levelType: @level.get('type', true))
|
||||
surfaceOptions =
|
||||
thangTypes: @supermodel.getModels(ThangType)
|
||||
observing: @observing
|
||||
playerNames: @findPlayerNames()
|
||||
levelType: @level.get('type', true)
|
||||
stayVisible: @showAds()
|
||||
@surface = new Surface(@world, normalSurface, webGLSurface, surfaceOptions)
|
||||
worldBounds = @world.getBounds()
|
||||
bounds = [{x: worldBounds.left, y: worldBounds.top}, {x: worldBounds.right, y: worldBounds.bottom}]
|
||||
@surface.camera.setBounds(bounds)
|
||||
|
@ -499,7 +512,8 @@ module.exports = class PlayLevelView extends RootView
|
|||
break
|
||||
Backbone.Mediator.publish 'tome:cast-spell', {}
|
||||
|
||||
onWindowResize: (e) => @endHighlight()
|
||||
onWindowResize: (e) =>
|
||||
@endHighlight()
|
||||
|
||||
onDisableControls: (e) ->
|
||||
return if e.controls and not ('level' in e.controls)
|
||||
|
@ -535,7 +549,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
@endHighlight()
|
||||
options = {level: @level, supermodel: @supermodel, session: @session, hasReceivedMemoryWarning: @hasReceivedMemoryWarning, courseID: @courseID, courseInstanceID: @courseInstanceID, world: @world}
|
||||
ModalClass = if @level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop', 'course', 'course-ladder'] then HeroVictoryModal else VictoryModal
|
||||
ModalClass = CourseVictoryModal if @courseID and @courseInstanceID
|
||||
ModalClass = CourseVictoryModal if @isCourseMode()
|
||||
ModalClass = PicoCTFVictoryModal if window.serverConfig.picoCTF
|
||||
victoryModal = new ModalClass(options)
|
||||
@openModalView(victoryModal)
|
||||
|
|
8
index.js
8
index.js
|
@ -1,3 +1,11 @@
|
|||
var majorVersion = parseInt(process.versions.node.split('.')[0]);
|
||||
if (majorVersion < 4) {
|
||||
console.error('Server requires Node v4 or higher. Your version:', process.version);
|
||||
process.exit(1);
|
||||
}
|
||||
if (majorVersion === 4) {
|
||||
console.warn('WARNING: You are using Node v4. Please upgrade to Node v5. Your version:', process.versions.node);
|
||||
}
|
||||
require('coffee-script');
|
||||
require('coffee-script/register');
|
||||
var server = require('./server');
|
||||
|
|
38
scripts/analytics/mongodb/queries/findClassroomsForSchool.js
Normal file
38
scripts/analytics/mongodb/queries/findClassroomsForSchool.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
// Find classroom data for a specific school
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
// Change school name regex HERE
|
||||
var schoolRegex = /schooldomain\.edu/ig;
|
||||
|
||||
var cursor = db.users.find({emailLower: {$regex: schoolRegex}}, {name: 1, emailLower: 1, schoolName: 1});
|
||||
var userIDs = [];
|
||||
var users = {};
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
userIDs.push(doc._id);
|
||||
users[doc._id.valueOf()] = {
|
||||
email: doc.emailLower,
|
||||
name: doc.name,
|
||||
schoolName: doc.schoolName || '',
|
||||
classrooms: []
|
||||
};
|
||||
}
|
||||
|
||||
var cursor = db.classrooms.find({ownerID: {$in: userIDs}});
|
||||
while (cursor.hasNext()) {
|
||||
var doc = cursor.next();
|
||||
users[doc.ownerID.valueOf()].classrooms.push({id: doc._id.valueOf(), name: doc.name, students: doc.members.length});
|
||||
}
|
||||
|
||||
for (var userID in users) {
|
||||
var user = users[userID];
|
||||
var studentCount = 0;
|
||||
for (var i = 0; i < user.classrooms.length; i++) {
|
||||
studentCount += user.classrooms[i].students;
|
||||
}
|
||||
if (user.classrooms.length > 0 || studentCount > 0 || user.schoolName) {
|
||||
print(userID, '\t', user.email, '\t', user.name, '\t', user.classrooms.length, '\t', studentCount, '\t', user.schoolName);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue