From ba63dcde2cb5e56fb00d23282848727e7f207ec2 Mon Sep 17 00:00:00 2001 From: Cat Sync Date: Mon, 1 Feb 2016 10:53:50 -0500 Subject: [PATCH 1/5] Rearrange level editor task order --- app/schemas/models/level.coffee | 39 +++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/app/schemas/models/level.coffee b/app/schemas/models/level.coffee index 5712e7442..8e237af86 100644 --- a/app/schemas/models/level.coffee +++ b/app/schemas/models/level.coffee @@ -4,44 +4,49 @@ ThangComponentSchema = require './thang_component' defaultTasks = [ 'Name the level.' 'Create a Referee stub, if needed.' + 'Do basic set decoration.' + 'Publish.' + 'Build the level.' 'Set up goals.' + 'Write the sample code.' + 'Make sure the level ends promptly on success and failure.' + 'Choose the Existence System lifespan and frame rate.' 'Choose the UI System paths and coordinate hover if needed.' 'Choose the AI System pathfinding and Vision System line of sight.' - 'Write the sample code.' - 'Do basic set decoration.' 'Adjust script camera bounds.' 'Choose music file in Introduction script.' 'Choose autoplay in Introduction script.' - 'Add to a campaign.' - 'Publish.' - 'Choose level options like required/restricted gear.' - 'Create achievements, including unlocking next level.' + 'Add Clojure/Lua/CoffeeScript.' + + 'Write the description.' + 'Write the guide.' + + 'Write a loading tip, if needed.' + 'Add programming concepts covered.' + 'Mark whether it requires a subscription.' 'Choose leaderboard score types.' + 'Do thorough set decoration.' 'Playtest with a slow/tough hero.' 'Playtest with a fast/weak hero.' 'Playtest with a couple random seeds.' - 'Make sure the level ends promptly on success and failure.' 'Remove/simplify unnecessary doodad collision.' + + 'Add to a campaign.' + 'Choose level options like required/restricted gear.' + 'Create achievements, including unlocking next level.' + + 'Click the Populate i18n button.' + 'Add i18n field for the sample code comments.' 'Release to adventurers via MailChimp.' - 'Write the description.' - 'Add i18n field for the sample code comments.' - 'Add Clojure/Lua/CoffeeScript.' - 'Write the guide.' - 'Write a loading tip, if needed.' - 'Click the Populate i18n button.' - 'Add programming concepts covered.' - - 'Mark whether it requires a subscription.' 'Release to everyone via MailChimp.' 'Check completion/engagement/problem analytics.' - 'Do thorough set decoration.' 'Add a walkthrough video.' ] From 5fffb2eefb80f6fb11a8dfcb9bb227eae611cb9f Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Mon, 1 Feb 2016 10:40:22 -0800 Subject: [PATCH 2/5] Remove TeachersFreeTrialView --- app/locale/en.coffee | 31 --------- app/styles/teachers-free-trial.sass | 23 ------- app/templates/courses/course-enroll.jade | 2 +- app/templates/teachers-free-trial.jade | 79 --------------------- app/views/TeachersFreeTrialView.coffee | 88 ------------------------ 5 files changed, 1 insertion(+), 222 deletions(-) delete mode 100644 app/styles/teachers-free-trial.sass delete mode 100644 app/templates/teachers-free-trial.jade delete mode 100644 app/views/TeachersFreeTrialView.coffee diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 1b6ce98ef..557efa739 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -591,37 +591,6 @@ more_info_1: "Our" more_info_2: "teachers forum" more_info_3: "is a good place to connect with fellow educators who are using CodeCombat." - - teachers_survey: - title: "Teacher Survey" - must_be_logged: "You must be logged in first. Please create an account or log in from the menu above." - retrieving: "Retrieving information..." - being_reviewed_1: "Your application for a free trial is being" - being_reviewed_2: "reviewed." - approved_1: "Your application for a free trial was" - approved_2: "approved!" - approved_4: "You can now enroll your students on the" - approved_5: "courses" - approved_6: "page." - denied_1: "Your application for a free trial has been" - denied_2: "denied." - contact_1: "Please contact" - contact_2: "if you have further questions." - description_1: "We offer free trials to teachers. You will be given 2 free enrollments which can be used to enroll students in paid courses." - description_1b: "You can find more information on our" - description_2: "teachers" - description_3: "page." - description_4: "Please fill out this quick survey and we’ll email you setup instructions." - email: "Email Address" - school: "Name of School" - location: "Name of City" - age_students: "How old are your students?" - under: "Under" - other: "Other:" - amount_students: "How many students do you teach?" - hear_about: "How did you hear about CodeCombat?" - fill_fields: "Please fill out all fields." - thanks: "Thanks! We'll send you setup instructions shortly." teachers_quote: name: "Quote Form" diff --git a/app/styles/teachers-free-trial.sass b/app/styles/teachers-free-trial.sass deleted file mode 100644 index f0a7de775..000000000 --- a/app/styles/teachers-free-trial.sass +++ /dev/null @@ -1,23 +0,0 @@ -#teachers-free-trial-view - - .input-school - width: 40% - - .input-location - width: 40% - - .input-heard-about - width: 100% - - .logged-out-blurb - font-size: 18px - - .thanks-submit - display: none - - .email-address - margin-right: 12px - - .error-message - display: none - color: red diff --git a/app/templates/courses/course-enroll.jade b/app/templates/courses/course-enroll.jade index 00af1b6cc..d3f8eb346 100644 --- a/app/templates/courses/course-enroll.jade +++ b/app/templates/courses/course-enroll.jade @@ -89,5 +89,5 @@ block content mixin trial-and-questions h3(data-i18n="courses.questions") p - span.spr(data-i18n="teachers_survey.contact_1") + span.spr Please contact a(href='mailto:team@codecombat.com') team@codecombat.com diff --git a/app/templates/teachers-free-trial.jade b/app/templates/teachers-free-trial.jade deleted file mode 100644 index 0dbb89113..000000000 --- a/app/templates/teachers-free-trial.jade +++ /dev/null @@ -1,79 +0,0 @@ -extends /templates/base - -block content - - h2(data-i18n="teachers_survey.title") - - - var existingRequest = view.existingRequests.at(0) - if me.isAnonymous() - p.logged-out-blurb(data-i18n="teachers_survey.must_be_logged") - else if view.fetchingData - h4(data-i18n="teachers_survey.retrieving") - else if existingRequest - if existingRequest.get('status') === 'submitted' - p - span.spr(data-i18n="teachers_survey.being_reviewed_1") - strong(data-i18n="teachers_survey.being_reviewed_2") - else if existingRequest.get('status') === 'approved' - p - span.spr(data-i18n="teachers_survey.approved_1") - strong.spr(data-i18n="teachers_survey.approved_2") - span.spr(data-i18n="teachers_survey.approved_4") - a(href='/courses/teachers', data-i18n="teachers_survey.approved_5") - span.spl(data-i18n="teachers_survey.approved_6") - else - p - span.spr(data-i18n="teachers_survey.denied_1") - strong(data-i18n="teachers_survey.denied_2") - p - span.spr(data-i18n="teachers_survey.contact_1") - a(href='mailto:team@codecombat.com') team@codecombat.com - span.spl(data-i18n="teachers_survey.contact_2") - else - p(data-i18n="teachers_survey.description_1") - p - span.spr(data-i18n="teachers_survey.description_1b") - a(href='/teachers', data-i18n="teachers_survey.description_2") - span.spl(data-i18n="teachers_survey.description_3") - p(data-i18n="teachers_survey.description_4") - p.container-email-address - label.control-label(data-i18n="teachers_survey.email") - br - span.email-address= view.email - a(href='/account/settings') Change - p.container-school - label.control-label(data-i18n="teachers_survey.school") - br - input.control-label.input-school(type='text') - p.container-location - label.control-label(data-i18n="teachers_survey.location") - br - input.control-label.input-location(type='text') - p.container-age - label.control-label(data-i18n="teachers_survey.age_students") - div - input(type="radio", name="age", value="Under 14") - span.spl(data-i18n="teachers_survey.under") - span.spl 14 - div - input(type="radio", name="age", value="14-17") - span.spl 14-17 - div - input(type="radio", name="age", value="18+") - span.spl 18+ - div - input.radio-other(type="radio", name="age", value='other') - span.spl.spr(data-i18n="teachers_survey.other") - input.spr.input-age-other(type='text') - p.container-num-students - label.control-label(data-i18n="teachers_survey.amount_students") - br - input.control-label.input-num-students(type='text') - p.container-heard-about - label.control-label(data-i18n="teachers_survey.hear_about") - br - textarea.control-label.input-heard-about(rows=4) - p.error-message(data-i18n="teachers_survey.fill_fields") - p - button.btn.btn-default.submit-button(data-i18n="play_level.tome_submit_button") - p.thanks-submit(data-i18n="teachers_survey.thanks") diff --git a/app/views/TeachersFreeTrialView.coffee b/app/views/TeachersFreeTrialView.coffee deleted file mode 100644 index 8d389f1b4..000000000 --- a/app/views/TeachersFreeTrialView.coffee +++ /dev/null @@ -1,88 +0,0 @@ -RootView = require 'views/core/RootView' -template = require 'templates/teachers-free-trial' -CocoCollection = require 'collections/CocoCollection' -TrialRequest = require 'models/TrialRequest' - -# TODO: distinguish between this type of existing trial requests and others - -module.exports = class TeachersFreeTrialView extends RootView - id: 'teachers-free-trial-view' - template: template - logoutRedirectURL: false - - events: - 'click .submit-button': 'onClickSubmit' - 'click .input-age-other': 'onClickTextBox' - - constructor: (options) -> - super options - @email = me.get('email') - @refreshData() - - refreshData: -> - @fetchingData = true - @existingRequests = new CocoCollection([], { url: '/db/trial.request/-/own', model: TrialRequest, comparator: '_id' }) - @listenToOnce @existingRequests, 'sync', => - @fetchingData = false - @render?() - existingRequest = @existingRequests.at(0) - if existingRequest?.get('status') isnt 'submitted' and existingRequest?.get('status') isnt 'approved' - window.tracker?.trackEvent 'View Trial Request', category: 'Teachers', label: 'View Trial Request', ['Mixpanel'] - @supermodel.loadCollection(@existingRequests, 'own_trial_requests', {cache: false}) - - onClickTextBox: (e) -> - $('.radio-other').prop("checked", true) - - onClickSubmit: (e) -> - school = $('.input-school').val() - location = $('.input-location').val() - age = $('input[name=age]:checked').val() - age = $('.input-age-other').val() if age is 'other' - numStudents = $('.input-num-students').val() - heardAbout = $('.input-heard-about').val() - - # Validate input - $('.container-email-address').removeClass('has-error') - $('.container-school').removeClass('has-error') - $('.container-location').removeClass('has-error') - $('.container-age').removeClass('has-error') - $('.container-num-students').removeClass('has-error') - $('.container-heard-about').removeClass('has-error') - $('.error-message').hide() - unless school - $('.container-school').addClass('has-error') - $('.error-message').show() - return - unless location - $('.container-location').addClass('has-error') - $('.error-message').show() - return - unless age - $('.container-age').addClass('has-error') - $('.error-message').show() - return - unless numStudents - $('.container-num-students').addClass('has-error') - $('.error-message').show() - return - unless heardAbout - $('.container-heard-about').addClass('has-error') - $('.error-message').show() - return - - # Save trial request - trialRequest = new TrialRequest - type: 'course' - properties: - email: @email - school: school - location: location - age: age - numStudents: numStudents - heardAbout: heardAbout - trialRequest.save {}, - error: (model, response, options) => - console.error 'Error saving trial request', response - success: (model, response, options) => - @refreshData() - window.tracker?.trackEvent 'Submit Trial Request', category: 'Teachers', label: 'Trial Request', ['Mixpanel'] From 3a05c9ed6f15f16dde0a72037f70259b19f58e3c Mon Sep 17 00:00:00 2001 From: Thijs de Haan Date: Mon, 1 Feb 2016 22:07:48 +0100 Subject: [PATCH 3/5] Update nl-NL.coffee --- app/locale/nl-NL.coffee | 360 ++++++++++++++++++++-------------------- 1 file changed, 180 insertions(+), 180 deletions(-) diff --git a/app/locale/nl-NL.coffee b/app/locale/nl-NL.coffee index 976141b5e..b7d1476a9 100644 --- a/app/locale/nl-NL.coffee +++ b/app/locale/nl-NL.coffee @@ -396,7 +396,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription prompt_title: "Niet genoeg edelstenen" prompt_body: "Wil je meer krijgen?" prompt_button: "Naar de winkel" -# recovered: "Previous gems purchase recovered. Please refresh the page." + recovered: "Edelstenen aankoop hersteld. Ververs de pagina alstublieft." # price: "x{{gems}} / mo" subscribe: @@ -445,13 +445,13 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription subscription_required_to_play: "Je hebt een abonnement nodig om dit level te spelen." unlock_help_videos: "Abonneer om toegang te krijgen tot alle instructievideos." personal_sub: "Persoonlijk Abonnement" # Accounts Subscription View below -# loading_info: "Loading subscription information..." -# managed_by: "Managed by" -# will_be_cancelled: "Will be cancelled on" + loading_info: "Inschrijvingsinformatie laden..." + managed_by: "beheert door" + will_be_cancelled: "Wordt gestopt op" currently_free: "Je hebt momenteel een gratis account" -# currently_free_until: "You currently have a subscription until" -# was_free_until: "You had a free subscription until" -# managed_subs: "Managed Subscriptions" + currently_free_until: "Je inschrijving loopt tot" + was_free_until: "Je hebt een gratis inschrijving tot" + managed_subs: "beheerde inschrijving" subscribing: "Inschrijven..." current_recipients: "Huidige ontvangers" unsubscribing: "Uitschrijven..." # {change} @@ -699,8 +699,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription continue_script: "Sla huidige script over." skip_scripts: "Sla alle scripts over die overgeslagen kunnen worden." toggle_playback: "switch speel/pause." -# scrub_playback: "Scrub back and forward through time." -# single_scrub_playback: "Scrub back and forward through time by a single frame." + scrub_playback: "reis door de tijd." + single_scrub_playback: "reis per frame door de tijd." # scrub_execution: "Scrub through current spell execution." toggle_debug: "Toggle debug display." toggle_grid: "Toggle rooster weergave." @@ -774,8 +774,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription last_played: "Laatst gespeeld" # leagues_explanation: "Play in a league against other clan members in these multiplayer arena instances." track_concepts1: "Traject concepten" -# track_concepts2a: "learned by each student" -# track_concepts2b: "learned by each member" + track_concepts2a: "geleerd door elke leerling" + track_concepts2b: "geleerd door elk lid" # track_concepts3a: "Track levels completed for each student" # track_concepts3b: "Track levels completed for each member" track_concepts4a: "Zie jouw leerlingen'" @@ -865,152 +865,152 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription topics: "Onderwerpen" hours_content: "uren inhoud:" get_free: "Ontvang een GRATIS cursus" -# enroll_paid: "Enroll Students in Paid Courses" + enroll_paid: "Schrijf leerlingen in voor bepaalde cursussen" you_have1: "U heeft" -# you_have2: "unused paid enrollments" -# 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" -# greetings: "Greetings!" -# learn_p: "Learn Python" -# learn_j: "Learn JavaScript" -# language_cannot_change: "Language cannot be changed once students join a class." -# back_classrooms: "Back to my classrooms" -# back_courses: "Back to my courses" -# edit_details: "Edit class details" -# enrolled_courses: "enrolled in paid courses:" -# purchase_enrollments: "Purchase Enrollments" -# remove_student: "remove student" -# assign: "Assign" -# to_assign: "to assign paid courses." -# teacher: "Teacher" -# complete: "Complete" -# none: "None" -# save: "Save" -# play_campaign_title: "Play the Campaign" -# 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." -# arena: "Arena" -# arena_soon_title: "Arena Coming Soon" -# 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." -# next_course: "Next Course" -# 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!" -# ready_to_play: "Ready to play?" -# start_new_game: "Start New Game" -# play_now_learn_header: "Play now to learn" -# play_now_learn_1: "basic syntax to control your character" + you_have2: "ongebruikte betaalde inschrijvingen" + use_one: "gebruik een reeds betaalde inschrijving voor" + use_multiple: "gebruik reeds betaalde inschrijvingen voor:" + already_enrolled: "al ingeschreven" + licenses_remaining: "licenties over:" + insufficient_enrollments: "onvoldoende betaalde inschrijvingen" + enroll_students: "schrijf leerlingen in" + get_enrollments: "krijg meer inschrijvingen" + change_language: "Verander cursustaal" + keep_using: "Blijf Gebruiken" + switch_to: "Verander naar" + greetings: "Groeten" + learn_p: "Leer Python" + learn_j: "Leer JavaScript" + language_cannot_change: "Taal kan niet worden veranderd als leerlingen zijn ingeschreven voor de klas." + back_classrooms: "terug naar mijn klaslokalen" + back_courses: "Terug naar mijn cursussen" + edit_details: "bewerk klasgegevens" + enrolled_courses: "ingeschreven voor betaalde cursussen:" + purchase_enrollments: "Koop inschrijvingen" + remove_student: "verwijder leerling" + assign: "Toewijzen" + to_assign: "betaalde cursussen toewijzen." + teacher: "Leerkracht" + complete: "voltoooien" + none: "Geen" + save: "Opslaan" + play_campaign_title: "Speel de campagne" + play_campaign_description: "Je bent klaar voor de volgende stap! Onderzoek honderden uitdagende levels, leer geavanceerde programmeervaardigheden en neem het op tegen anderen in de arena's!" + create_account_title: "Maak een account" + create_account_description: "Schrijf je in voor een GRATIS CodeCombat account en krijg toegang tot meer levels, meer programmeervaardigheden, en veel plezier!" + preview_campaign_title: "Campagne demo" + preview_campaign_description: "Spiek even naar alles wat CodeCombat aanbied, voor je je inschrijft voor een gratis account." + arena: "Arena" + arena_soon_title: "Arena komt binnenkort" + arena_soon_description: "We werken aan een multiplayer arena voor klaslokalen aan het eind van" + not_enrolled1: "Niet ingeschreven" + not_enrolled2: "Vraag je juf of meester om je in te schrijven voor de volgende cursus." + next_course: "Volgende cursus." + coming_soon1: "Komt binnenkort" + coming_soon2: "We werken hard aan nieuwe cursussen, voor jou!" + available_levels: "Beschikbare Levels" + welcome_to_courses: "Avonturiers, Welkom bij de cursus!" + ready_to_play: "Klaar om te spelen?" + start_new_game: "Start Nieuw spel" + play_now_learn_header: "Speel nu en leer" + play_now_learn_1: "basiszinnen om je karakter te besturen" # 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" -# my_classes: "My Classes" -# 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: "" -# join: "Join" -# joining: "Joining class" -# course_complete: "Course Complete" -# play_arena: "Play Arena" -# start: "Start" -# last_level: "Last 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." -# join_this_class: "Join Class" -# enter_here: "" -# successfully_joined: "Successfully joined" -# click_to_start: "Click here to start taking" -# my_courses: "My Courses" -# classroom: "Classroom" -# 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" -# class_code: "Class Code" -# 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!" -# welcome: "Welcome" -# 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 Teacher's Guide" -# additional_resources_1_suff: "explanations and solutions to 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." -# 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:" + welcome_to_page: "Welkom op jhe cursus-pagina!" + completed_hoc: "Geweldig! Je hebt de Codeuur-cursus af!" + ready_for_more_header: "Wil je meer? Speel de campagne-mode!" + ready_for_more_1: "Gebruik edelstenen om nieuwe items te openen!" + ready_for_more_2: "Speel nieuwe werelden en uitdagingen" + ready_for_more_3: "Leer zelfs meer programmeren!" + saved_games: "Opgeslagen spellen" + hoc: "codeuur" + my_classes: "Mijn klassen" + class_added: "Klas succesvol toegevoegd!" + view_class: "Bekijk klas" + view_levels: "bekijk levels" + join_class: "doe mee met een klas" + ask_teacher_for_code: "Vraag je juf/meester Of je een CodeCombat klassencode hebt! Als dat zo is, vul het hieronder in:" + enter_c_code: "" + join: "Doe mee" + joining: "Doe mee met klas" + course_complete: "Cursus afgerond" + play_arena: "Speel Arena" + start: "Start" + last_level: "Laatste Level" + welcome_to_hoc: "Avonturiers, Welkom bij codeuur!" + logged_in_as: "Ingelogd als:" + not_you: "Ben je dit niet?" + welcome_back: "Hallo avonturier, welkom terug!" + continue_playing: "Doorgaan met spelen" + more_options: "Meer opties:" + option1_header: "Optie 1: Nodig leerlingen uit via mail" + option1_body: "Leerlingen krijgen automatisch een uitnodiging om met de klas mee te doen, en de leerlingen moeten een account maken met gebruikersnaam en wachtwoord." + option2_header: "Optie 2: Stuur leerlingen een link" + option2_body: "Leerlingen wordt gevraagd een account te maken met hun e-mailadres, gebruikersnaam en een wachtwoord." + option3_header: "Optie 3: Stuur leerlingen naar codecombat.com/courses" + option3_body: "Geef leerlingen de volgende pincode welke ze samen met een emailadres, gebruikersnaam en wachtwoord moeten invullen, bij het aanmaken van een account." + thank_you_pref: "Bedankt voor je aankoop! Je kunt nu meer leerlingen" + thank_you_suff: "aan betaalde cursussen toevoegen." + return_to_class: "Terug naar het klaslokaal" + return_to_course_man: "Terug naar cusrsubeheer." + students_not_enrolled: "leerlingen niet ingeschreven" + total_all_classes: "Totaal over alle klassen" + how_many_enrollments: "Hoeveel extra inschrijvingen heb je nodig?" + each_student_access: "Wanneer een leerling is ingechreven voor een betaalde cursus krijgen ze toegang tot cursus 2-4. Je kunt elke cursus apart toewijzen aan elke student." + purchase_now: "Koop nu" + enrollments: "inschrijvingen" + remove_student1: "Verwijder leerling" + are_you_sure: "Weet je zeker dat je de leerling uit de klas wil halen?" + remove_description1: "De toegang tot dit klaslokaalen de toegewezen klassen wordt geblokkeerd. Voortgang wordt NIET verwijderd, en de leerling kan altijd weer worden toegevoegd." + remove_description2: "De geactiveerde betaalde licenties worden niet teruggegeven." + keep_student: "bewaar leerling" + removing_user: "Verwijder gebruiker" + to_join_ask: "Om met de klas mee te doen, Moet je je juf/meester om de code vragen." + join_this_class: "Doe mee met de klas" + enter_here: "" + successfully_joined: "Je doet nu mee" + click_to_start: "Klik hier om te beginnen met" + my_courses: "Mijn cursussen" + classroom: "klaslokaal" + use_school_email: "Gebruik je schoolmail, als je er een hebt" + unique_name: "een unieke naam die nog niemand heeft genomen" + pick_something: "kies iets dat je kunt onthouden" + class_code: "Klassencode" + optional_ask: "Als je wilt - Vraag je juf/meester om je een te geven!" + optional_school: "Als je wilt - Naar welke school ga je?" + start_playing: "Start met spelen" + skip_this: "Sla dit over! Ik maak later een account" + welcome: "Welkom" + getting_started: "Introductie voor de cursussen" + download_getting_started: "Download de introductiehandleiding [PDF]" + getting_started_1: "Maak een nieuwe kjlas door te drukken op de groune 'Maak nieuwe klas'-klop hieronder." + getting_started_2: "Wanneer je een klas hebt gemaakt, klik dan op de 'Voeg leerlingen toe'-knop." + getting_started_3: "Je ziet dan de voortgang van de leerlingen, wanneer ze zich inschrijven en aanmelden voor uw klas." + additional_resources: "Extra bronnen" + additional_resources_1_pref: "Download/print onze" + additional_resources_1_mid: "Cursus 1 Leerkrachtengids" + additional_resources_1_suff: "uitleg en oplossingen voor elke level." + additional_resources_2_pref: "Finish onze" + additional_resources_2_suff: "Om twee gratis inschrijvingen te krijgen voor onze overige betaalde cursussen." + additional_resources_3_pref: "Bezoek onze" + additional_resources_3_mid: "Leerkrachtforums" + additional_resources_3_suff: "Om contact te leggen met andere leerkrachten die CodeCombat gebruiken." + additional_resources_4_pref: "Bekijk onze" + additional_resources_4_mid: "Scholenpagina" + additional_resources_4_suff: "Om meer te leren over CodeCombat's klaslokaalaanbiedingen." + your_classes: "Uw klassen" + no_classes: "Nog geen klassen!" + create_new_class1: "Maak nieuwe klas" + available_courses: "Beschikbare cursussen" + unused_enrollments: "Ongebruikte inschrijvingen beschikbaar:" + students_access: "Elke leerling krijgt gratis toegang tot de introductie op informatica. Een inschrijving per student is nodig om ze toegang te geven tot betaalde cursussen. een leerling heeft niet meerdere inschrijvingen nodig voor meerdere betaalde cursussen." + active_courses: "actieve cursussen" + no_students: "Nog geen leerlingen!" + add_students1: "leerlingen toevoegen" + view_edit: "bekijk/bewerk" + students_enrolled: "ingeschreven leerlingen" + length: "Lengte:" classes: archmage_title: "Tovenaar" @@ -1241,7 +1241,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription fight: "Aanvallen!" watch_victory: "Aanschouw je overwinning!" defeat_the: "Versla de" -# watch_battle: "Watch the battle" + watch_battle: "Bekijk het gevecht" tournament_started: ", begonnen" tournament_ends: "Toernooi eindigt" tournament_ended: "Toernooi geeindigd" @@ -1290,7 +1290,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription account: payments: "Betalingen" -# prepaid_codes: "Prepaid Codes" + prepaid_codes: "Prepaidcodes" purchased: "Gekocht" subscription: "abonnement" invoices: "Facturen" @@ -1299,7 +1299,7 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription paid_on: "Betaald op" service: "Service" price: "Prijs" -# gems: "Gems" + gems: "Edelstenen" active: "Actief" subscribed: "Ingeschreven" unsubscribed: "Uitgeschreven" @@ -1324,23 +1324,23 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription purchase_code: "koop een prepaidcode" # 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_code3: "Subscription Code months will be added to the end of any existing subscription on the account."0 + users: "Gebruikers" + months: "Maanden" purchase_total: "Totaal" purchase_button: "Verzend betaling" your_codes: "Je codes:" # {change} redeem_codes: "Prepaidcode inwisselen" -# prepaid_code: "Prepaid Code" -# lookup_code: "Lookup prepaid code" + prepaid_code: "Prepaidcode" + lookup_code: "Prepaidcode opzoeken" # apply_account: "Apply to your account" -# copy_link: "You can copy the code's link and send it to someone." -# quantity: "Quantity" + copy_link: "je kunt de link van de code kopieren en naar iemand verzenden." + quantity: "Hoeveelheid" # redeemed: "Redeemed" -# no_codes: "No codes yet!" -# you_can1: "You can" -# you_can2: "purchase a prepaid code" -# you_can3: "that can be applied to your own account or given to others." + no_codes: "Nog geen codes!" + you_can1: "Je kunt" + you_can2: "een prepaidcode kopen" + you_can3: "die je voor jke eigen account kunt gebruiken of aan anderen kunt geven." loading_error: could_not_load: "Fout bij het laden van de server" @@ -1406,16 +1406,16 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription campaigns: "Campagnes" poll: "Stemming" user_polls_record: "Stemgeschiedenis" -# course: "Course" -# courses: "Courses" + course: "Cursus" + courses: "Cursussen" # course_instance: "Course Instance" # course_instances: "Course Instances" -# classroom: "Classroom" -# classrooms: "Classrooms" + classroom: "Klaslokaal" + classrooms: "Klaslokalen" # clan: "Clan" # clans: "Clans" -# members: "Members" -# users: "Users" + members: "Leden" + users: "Gebruikers" concepts: advanced_strings: "geavanceerde Strings" @@ -1516,8 +1516,8 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription nutshell_title: "In een notendop" nutshell_description: "Alle middelen die wij aanbieden in de Level Editor zijn gratis te gebruiken om levels aan te maken. Wij behouden ons echter het recht voor om levels die gemaakt zijn op codecombat.com te beperken, en hier in de toekomst geld voor te vragen, moest dat ooit gebeuren." canonical: "De Engelse versie van dit document is de definitieve en kanonieke versie. Bij verschillen tussen vertalingen heeft de Engelse versie voorrang." -# third_party_title: "Third Party Services" -# third_party_description: "CodeCombat uses the following third party services (among others):" + third_party_title: "Derde partijen" + third_party_description: "CodeCombat gebruikt onder andere de volgende diensten van derden:" ladder_prizes: title: "Tournamentprijzen" # This section was for an old tournament and doesn't need new translations now. @@ -1540,11 +1540,11 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription oreilly: "ebook van je keuze" admin: -# av_espionage: "Espionage" # Really not important to translate /admin controls. -# av_espionage_placeholder: "Email or username" -# av_usersearch: "User Search" -# av_usersearch_placeholder: "Email, username, name, whatever" -# av_usersearch_search: "Search" + av_espionage: "spionage" # Really not important to translate /admin controls. + av_espionage_placeholder: "Email of gebruikersnaam" + av_usersearch: "Zoek gebruiker" + av_usersearch_placeholder: "Email, gebruikersnaam, naam, whatever" + av_usersearch_search: "Zoeken" av_title: "Administrator panels" av_entities_sub_title: "Entiteiten" av_entities_users_url: "Gebruikers" From ab62982bac8b2209945d7b3700862ed88b4f9549 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Mon, 1 Feb 2016 15:51:29 -0800 Subject: [PATCH 4/5] Tweak RequestQuoteView form to better fit best practices * Scroll to errors * Set email input type to 'email' --- app/core/forms.coffee | 5 +++++ app/templates/request-quote-view.jade | 2 +- app/views/RequestQuoteView.coffee | 14 ++++++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/core/forms.coffee b/app/core/forms.coffee index 1e58f3efa..1086283ac 100644 --- a/app/core/forms.coffee +++ b/app/core/forms.coffee @@ -62,6 +62,11 @@ module.exports.setErrorToProperty = setErrorToProperty = (el, property, message, return console.error "#{property} not found in", el, "so couldn't show message:", message setErrorToField input, message, warning + +module.exports.scrollToFirstError = ($el=$('body')) -> + $first = $el.find('.has-error, .alert-danger, .error-help-block, .has-warning, .alert-warning, .warning-help-block').first() + $('body').nanoScroller({scroll: 'top'}) # normalizes offset().top value + $('body').nanoScroller({scrollTop: $first.offset().top - 20}) module.exports.clearFormAlerts = (el) -> $('.has-error', el).removeClass('has-error') diff --git a/app/templates/request-quote-view.jade b/app/templates/request-quote-view.jade index 1592919e2..5d1199e75 100644 --- a/app/templates/request-quote-view.jade +++ b/app/templates/request-quote-view.jade @@ -14,7 +14,7 @@ block content .col-sm-4 .form-group label.control-label(data-i18n="general.email") - input.form-control(name="email") + input.form-control(name="email" type="email") .row .col-sm-offset-2.col-sm-4 diff --git a/app/views/RequestQuoteView.coffee b/app/views/RequestQuoteView.coffee index bdcb92a71..7f39fb966 100644 --- a/app/views/RequestQuoteView.coffee +++ b/app/views/RequestQuoteView.coffee @@ -53,12 +53,18 @@ module.exports = class RequestQuoteView extends RootView attrs.educationLevel.push(@$('#other-education-level-input').val()) forms.clearFormAlerts(form) result = tv4.validateMultiple(attrs, formSchema) + error = true if not result.valid - return forms.applyErrorsToForm(form, result.errors) - if not /^.+@.+\..+$/.test(attrs.email) - return forms.setErrorToProperty(form, 'email', 'Invalid email.') - if not _.size(attrs.educationLevel) + forms.applyErrorsToForm(form, result.errors) + else if not /^.+@.+\..+$/.test(attrs.email) + forms.setErrorToProperty(form, 'email', 'Invalid email.') + else if not _.size(attrs.educationLevel) return forms.setErrorToProperty(form, 'educationLevel', 'Check at least one.') + else + error = false + if error + forms.scrollToFirstError() + return @trialRequest = new TrialRequest({ type: 'course' properties: attrs From da04f9f8a61ded8eed78a3ce6b482be0c362140f Mon Sep 17 00:00:00 2001 From: Nick Winter Date: Tue, 2 Feb 2016 08:16:23 -0800 Subject: [PATCH 5/5] Add VR wall to walls list --- app/lib/surface/LankBoss.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/surface/LankBoss.coffee b/app/lib/surface/LankBoss.coffee index ca8e1c71e..d1187c648 100644 --- a/app/lib/surface/LankBoss.coffee +++ b/app/lib/surface/LankBoss.coffee @@ -82,7 +82,7 @@ module.exports = class LankBoss extends CocoClass console.error 'Lank collision! Already have:', id if @lanks[id] @lanks[id] = lank @lankArray.push lank - layer ?= @layerAdapters['Obstacle'] if lank.thang?.spriteName.search(/(dungeon|indoor|ice|classroom).wall/i) isnt -1 + layer ?= @layerAdapters['Obstacle'] if lank.thang?.spriteName.search(/(dungeon|indoor|ice|classroom|vr).wall/i) isnt -1 layer ?= @layerForChild lank.sprite, lank layer.addLank lank layer.updateLayerOrder() @@ -204,7 +204,7 @@ module.exports = class LankBoss extends CocoClass cacheObstacles: (updatedObstacles=null) -> return if @cachedObstacles and not updatedObstacles lankArray = @lankArray - wallLanks = (lank for lank in lankArray when lank.thangType?.get('name').search(/(dungeon|indoor|ice|classroom).wall/i) isnt -1) + wallLanks = (lank for lank in lankArray when lank.thangType?.get('name').search(/(dungeon|indoor|ice|classroom|vr).wall/i) isnt -1) return if _.any (s.stillLoading for s in wallLanks) walls = (lank.thang for lank in wallLanks) @world.calculateBounds()