mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-25 14:04:54 -05:00
New homepage variations.
This commit is contained in:
parent
914e7eb487
commit
9da65cdcff
6 changed files with 203 additions and 52 deletions
|
@ -12,10 +12,6 @@ module.exports = class CocoRouter extends Backbone.Router
|
||||||
'': ->
|
'': ->
|
||||||
if window.serverConfig.picoCTF
|
if window.serverConfig.picoCTF
|
||||||
return @routeDirectly 'play/CampaignView', ['picoctf'], {}
|
return @routeDirectly 'play/CampaignView', ['picoctf'], {}
|
||||||
# Testing new home page
|
|
||||||
# group = me.getHomepageGroup()
|
|
||||||
# return @routeDirectly('NewHomeView', [], { jumbotron: 'student' }) if group is 'new-home-student'
|
|
||||||
# return @routeDirectly('NewHomeView', [], { jumbotron: 'characters' }) if group is 'new-home-characters'
|
|
||||||
return @routeDirectly('NewHomeView', [])
|
return @routeDirectly('NewHomeView', [])
|
||||||
|
|
||||||
'about': go('AboutView')
|
'about': go('AboutView')
|
||||||
|
|
|
@ -81,6 +81,24 @@
|
||||||
boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike."
|
boast: "Boasts riddles that are complex enough to fascinate gamers and coders alike."
|
||||||
winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable."
|
winning: "A winning combination of RPG gameplay and programming homework that pulls off making kid-friendly education legitimately enjoyable."
|
||||||
run_class:"Everything you need to run a computer science class in your school today, no CS background required."
|
run_class:"Everything you need to run a computer science class in your school today, no CS background required."
|
||||||
|
teachers: "Teachers!"
|
||||||
|
teachers_and_educators: "Teachers & Educators"
|
||||||
|
class_in_box: "Learn how our classroom-in-a-box platform fits into your curriculum."
|
||||||
|
get_started: "Get Started"
|
||||||
|
students: "Students:"
|
||||||
|
join_class: "Join Class"
|
||||||
|
role: "Your role:"
|
||||||
|
student_count: "Number of students:"
|
||||||
|
start_playing_for_free: "Start Playing for Free!"
|
||||||
|
students_and_players: "Students & Players"
|
||||||
|
goto_classes: "Go to my Classes"
|
||||||
|
educator_wiki: "Educator wiki"
|
||||||
|
view_profile: "View My Profile"
|
||||||
|
login_switch: "Have an account?"
|
||||||
|
check_out_wiki: "Check out our new educator Wiki"
|
||||||
|
want_coco: "Want CodeCombat at your school?"
|
||||||
|
form_select_role: "Select primary role"
|
||||||
|
form_select_range: "Select class size"
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
play: "Levels" # The top nav bar entry where players choose which levels to play
|
play: "Levels" # The top nav bar entry where players choose which levels to play
|
||||||
|
|
|
@ -150,13 +150,17 @@ module.exports = class User extends CocoModel
|
||||||
|
|
||||||
getHomepageGroup: ->
|
getHomepageGroup: ->
|
||||||
# Only testing on en-US so localization issues are not a factor
|
# 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')
|
return 'home-legacy' unless _.string.startsWith(me.get('preferredLanguage', true) or 'en-US', 'en')
|
||||||
return @homepageGroup if @homepageGroup
|
return @homepageGroup if @homepageGroup
|
||||||
group = me.get('testGroupNumber') % 4
|
group = parseInt(util.getQueryVariable('variation'))
|
||||||
|
group ?= me.get('testGroupNumber') % 5
|
||||||
@homepageGroup = switch group
|
@homepageGroup = switch group
|
||||||
when 0, 1 then 'new-home-characters'
|
when 0 then 'home-legacy'
|
||||||
when 2, 3 then 'new-home-student'
|
when 1 then 'home-teachers'
|
||||||
application.tracker.identify newHomepageGroup: @homepageGroup unless me.isAdmin()
|
when 2 then 'home-legacy-left'
|
||||||
|
when 3 then 'home-dropdowns'
|
||||||
|
when 4 then 'home-play-for-free'
|
||||||
|
application.tracker.identify homepageGroup: @homepageGroup unless me.isAdmin()
|
||||||
return @homepageGroup
|
return @homepageGroup
|
||||||
|
|
||||||
# Signs and Portents was receiving updates after test started, and also had a big bug on March 4, so just look at test from March 5 on.
|
# Signs and Portents was receiving updates after test started, and also had a big bug on March 4, so just look at test from March 5 on.
|
||||||
|
|
|
@ -38,10 +38,21 @@
|
||||||
margin-top: 170px
|
margin-top: 170px
|
||||||
#classroom-edition-header
|
#classroom-edition-header
|
||||||
margin-top: 10px
|
margin-top: 10px
|
||||||
|
#educator-header
|
||||||
|
white-space: nowrap
|
||||||
|
#students-header
|
||||||
|
line-height: 25px
|
||||||
|
margin-top: 40px
|
||||||
|
margin-bottom: -5px
|
||||||
#learn-to-code-header
|
#learn-to-code-header
|
||||||
margin-top: 80px
|
margin-top: 80px
|
||||||
&#ideal-tickets-well
|
&#ideal-tickets-well
|
||||||
margin-top: 20px
|
margin-top: 20px
|
||||||
|
.form-group
|
||||||
|
text-align: left
|
||||||
|
label
|
||||||
|
line-height: 14px
|
||||||
|
font-size: 12px
|
||||||
@media (max-width: $screen-md-min)
|
@media (max-width: $screen-md-min)
|
||||||
margin-top: 320px
|
margin-top: 320px
|
||||||
|
|
||||||
|
|
|
@ -1,52 +1,141 @@
|
||||||
extends /templates/base-flat
|
extends /templates/base-flat
|
||||||
|
|
||||||
|
mixin box
|
||||||
|
.well.text-center
|
||||||
|
if me.isAnonymous() == true
|
||||||
|
if ['home-legacy','home-legacy-left'].indexOf(view.variation) != -1
|
||||||
|
h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
|
||||||
|
div
|
||||||
|
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.im_a_teacher")
|
||||||
|
div
|
||||||
|
a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.im_a_student")
|
||||||
|
h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
|
||||||
|
a.btn.btn-gold.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
|
||||||
|
else if ['home-teachers','home-dropdowns'].indexOf(view.variation) != -1
|
||||||
|
h5#educator-header(data-i18n="new_home.teachers")
|
||||||
|
p.small(data-i18n="new_home.class_in_box")
|
||||||
|
|
||||||
|
if view.variation == 'home-dropdowns'
|
||||||
|
div.form-group
|
||||||
|
h6.control-label(data-i18n="new_home.role")
|
||||||
|
select.form-control#request-form-role
|
||||||
|
option(value="", data-i18n="new_home.form_select_role")
|
||||||
|
option(data-i18n="courses.teacher", value="Teacher")
|
||||||
|
option(data-i18n="teachers_quote.tech_coordinator", value="Technology coordinator")
|
||||||
|
option(data-i18n="teachers_quote.advisor", value="Advisor")
|
||||||
|
option(data-i18n="teachers_quote.principal", value="Principal")
|
||||||
|
option(data-i18n="teachers_quote.superintendent", value="Superintendent")
|
||||||
|
option(data-i18n="teachers_quote.parent", value="Parent")
|
||||||
|
div.form-group
|
||||||
|
h6.control-label(data-i18n="new_home.student_count")
|
||||||
|
select.form-control#request-form-range
|
||||||
|
option(value="", data-i18n="new_home.form_select_range")
|
||||||
|
option 1-10
|
||||||
|
option 11-50
|
||||||
|
option 51-100
|
||||||
|
option 101-200
|
||||||
|
option 201-500
|
||||||
|
option 501-1000
|
||||||
|
option 1000+
|
||||||
|
div
|
||||||
|
button.btn.btn-forest.btn-lg.btn-block.request-demo(href="#",data-i18n="new_home.get_started")
|
||||||
|
else
|
||||||
|
div
|
||||||
|
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.get_started")
|
||||||
|
|
||||||
|
if view.variation == 'home-teachers'
|
||||||
|
h5#students-header(data-i18n="new_home.students")
|
||||||
|
div
|
||||||
|
button.join-class.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
|
||||||
|
div
|
||||||
|
a.btn.btn-default.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
|
||||||
|
else
|
||||||
|
h6#students-header(data-i18n="new_home.students_and_players")
|
||||||
|
div
|
||||||
|
a.btn.btn-primary.btn-lg.play-btn.btn-block(href=view.playURL, data-i18n="new_home.play_now")
|
||||||
|
else
|
||||||
|
h5#educator-header(data-i18n="new_home.start_playing_for_free")
|
||||||
|
div
|
||||||
|
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="new_home.play_now")
|
||||||
|
div
|
||||||
|
button.join-class.btn.btn-default.btn-lg.btn-block(data-i18n="new_home.join_class", href="/courses")
|
||||||
|
|
||||||
|
|
||||||
|
h6#classroom-edition-header(style="padding-top: 20px",data-i18n="new_home.teachers_and_educators")
|
||||||
|
p.small(data-i18n="new_home.class_in_box")
|
||||||
|
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.get_started")
|
||||||
|
|
||||||
|
|
||||||
|
if ['home-teachers','home-dropdowns','home-play-for-free'].indexOf(view.variation) != -1
|
||||||
|
p.small
|
||||||
|
span(data-i18n="new_home.login_switch")
|
||||||
|
span
|
||||||
|
a.login-button(data-i18n="login.log_in", href="#")
|
||||||
|
else
|
||||||
|
h6#classroom-edition-header(data-i18n="new_home.logged_in_as")
|
||||||
|
p.small #{me.get("email")}
|
||||||
|
if me.isTeacher()
|
||||||
|
div
|
||||||
|
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.goto_classes")
|
||||||
|
div
|
||||||
|
if false
|
||||||
|
h6(data-i18n="new_home.check_out_wiki")
|
||||||
|
a.btn.btn-primary.btn-lg.btn-block(href="https://sites.google.com/a/codecombat.com/teacher-guides/course-guides", data-i18n="new_home.educator_wiki")
|
||||||
|
else
|
||||||
|
h6(data-i18n="new_home.want_coco")
|
||||||
|
button.teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.get_started")
|
||||||
|
|
||||||
|
else if view.justPlaysCourses()
|
||||||
|
div
|
||||||
|
button.teacher-btn.btn.btn-forest.btn-lg.btn-block(data-i18n="new_home.goto_classes")
|
||||||
|
div
|
||||||
|
a.btn.btn-primary.btn-lg.btn-block(href="https://sites.google.com/a/codecombat.com/teacher-guides/course-guides", data-i18n="new_home.educator_wiki")
|
||||||
|
|
||||||
|
else
|
||||||
|
div
|
||||||
|
a.btn.btn-forest.btn-lg.btn-block.play-btn(href=view.playURL, data-i18n="courses.continue_playing")
|
||||||
|
div
|
||||||
|
a.btn.btn-primary.btn-lg.btn-block(href="/user/#{me.getSlugOrID()}", data-i18n="new_home.view_profile")
|
||||||
|
|
||||||
|
p.small
|
||||||
|
span(data-i18n="courses.not_you")
|
||||||
|
span
|
||||||
|
a.logout-btn(data-i18n="login.log_out", href="#")
|
||||||
|
|
||||||
|
if (me.get('preferredLanguage', true) || 'en-US').split('-')[0] == 'nl'
|
||||||
|
.well#ideal-tickets-well.text-center.hidden-xs.hidden-sm
|
||||||
|
h6 Thuis versie:
|
||||||
|
a.btn.btn-purple.btn-lg.btn-block(href="http://codecombat.nl/kopen") Prepaid codes (iDeal)
|
||||||
|
|
||||||
|
|
||||||
block content
|
block content
|
||||||
.container-fluid#jumbotron-container-fluid(class=view.jumbotron === 'student' ? 'alt-image' : '')
|
.container-fluid#jumbotron-container-fluid.alt-image
|
||||||
.container
|
.container
|
||||||
.row
|
.row.hidden-sm.hidden-xs
|
||||||
|
case view.variation
|
||||||
|
when 'home-legacy-left'
|
||||||
|
.col-lg-3.col-md-4
|
||||||
|
+box
|
||||||
|
.col-lg-7.col-lg-offset-2.col-md-8
|
||||||
|
h1(data-i18n="new_home.slogan")
|
||||||
|
default
|
||||||
|
.col-lg-7.col-md-8
|
||||||
|
h1(data-i18n="new_home.slogan")
|
||||||
|
.col-lg-3.col-lg-offset-2.col-md-4
|
||||||
|
+box
|
||||||
|
.row.hidden-lg.hidden-md
|
||||||
.col-lg-7.col-md-8
|
.col-lg-7.col-md-8
|
||||||
h1(data-i18n="new_home.slogan")
|
h1(data-i18n="new_home.slogan",style="margin-top: 200px")
|
||||||
|
.col
|
||||||
.col-lg-3.col-lg-offset-2.col-md-4
|
div(style="margin: auto; max-width: 300px")
|
||||||
.well.text-center.hidden-md.hidden-lg
|
+box
|
||||||
.row
|
|
||||||
.col-xs-8
|
|
||||||
h6(data-i18n="new_home.classroom_edition")
|
|
||||||
.col-xs-4
|
|
||||||
h6(data-i18n="new_home.learn_to_code")
|
|
||||||
.row
|
|
||||||
.col-xs-4
|
|
||||||
button#teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.teacher")
|
|
||||||
.col-xs-4
|
|
||||||
a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.student")
|
|
||||||
.col-xs-4
|
|
||||||
a.btn.btn-gold.btn-lg.btn-block(href=view.playURL, data-i18n="new_home.play_now")
|
|
||||||
if (me.get('preferredLanguage', true) || 'en-US').split('-')[0] == 'nl'
|
|
||||||
.row
|
|
||||||
.col-xs-12
|
|
||||||
a.btn.btn-purple.btn-lg.btn-block(href="http://codecombat.nl/kopen") Koop prepaid codes (iDeal)
|
|
||||||
|
|
||||||
.well.text-center.hidden-xs.hidden-sm
|
|
||||||
h6#classroom-edition-header(data-i18n="new_home.classroom_edition")
|
|
||||||
div
|
|
||||||
button#teacher-btn.btn.btn-primary.btn-lg.btn-block(data-i18n="new_home.im_a_teacher")
|
|
||||||
div
|
|
||||||
a.btn.btn-forest.btn-lg.btn-block(href="/courses", data-i18n="new_home.im_a_student")
|
|
||||||
|
|
||||||
h6#learn-to-code-header(data-i18n="new_home.learn_to_code")
|
|
||||||
a.btn.btn-gold.btn-lg.btn-block(href=view.playURL, data-i18n="new_home.play_now")
|
|
||||||
|
|
||||||
if (me.get('preferredLanguage', true) || 'en-US').split('-')[0] == 'nl'
|
|
||||||
.well#ideal-tickets-well.text-center.hidden-xs.hidden-sm
|
|
||||||
h6 Thuis versie:
|
|
||||||
a.btn.btn-purple.btn-lg.btn-block(href="http://codecombat.nl/kopen") Prepaid codes (iDeal)
|
|
||||||
|
|
||||||
.row#learn-more-row
|
.row#learn-more-row
|
||||||
.col-xs-12.text-center
|
.col-xs-12.text-center
|
||||||
a#learn-more-link
|
a#learn-more-link
|
||||||
h6(data-i18n="new_home.learn_more")
|
h6(data-i18n="new_home.learn_more")
|
||||||
h2
|
h2
|
||||||
span.glyphicon.glyphicon-chevron-down
|
span.glyphicon.glyphicon-chevron-down
|
||||||
|
|
||||||
|
|
||||||
.container#classroom-in-box-container
|
.container#classroom-in-box-container
|
||||||
|
|
|
@ -3,6 +3,8 @@ template = require 'templates/new-home-view'
|
||||||
CocoCollection = require 'collections/CocoCollection'
|
CocoCollection = require 'collections/CocoCollection'
|
||||||
Course = require 'models/Course'
|
Course = require 'models/Course'
|
||||||
utils = require 'core/utils'
|
utils = require 'core/utils'
|
||||||
|
storage = require 'core/storage'
|
||||||
|
{logoutUser, me} = require('core/auth')
|
||||||
|
|
||||||
# TODO: auto margin feature paragraphs
|
# TODO: auto margin feature paragraphs
|
||||||
|
|
||||||
|
@ -12,13 +14,16 @@ module.exports = class NewHomeView extends RootView
|
||||||
template: template
|
template: template
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'click #play-btn': 'onClickPlayButton'
|
'click .play-btn': 'onClickPlayButton'
|
||||||
'change #school-level-dropdown': 'onChangeSchoolLevelDropdown'
|
'change #school-level-dropdown': 'onChangeSchoolLevelDropdown'
|
||||||
'click #teacher-btn': 'onClickTeacherButton'
|
'click .teacher-btn': 'onClickTeacherButton'
|
||||||
'click #learn-more-link': 'onClickLearnMoreLink'
|
'click #learn-more-link': 'onClickLearnMoreLink'
|
||||||
'click .screen-thumbnail': 'onClickScreenThumbnail'
|
'click .screen-thumbnail': 'onClickScreenThumbnail'
|
||||||
'click #carousel-left': 'onLeftPressed'
|
'click #carousel-left': 'onLeftPressed'
|
||||||
'click #carousel-right': 'onRightPressed'
|
'click #carousel-right': 'onRightPressed'
|
||||||
|
'click .request-demo': 'onClickRequestDemo'
|
||||||
|
'click .join-class': 'onClickJoinClass'
|
||||||
|
'click .logout-btn': 'logoutAccount'
|
||||||
|
|
||||||
shortcuts:
|
shortcuts:
|
||||||
'right': 'onRightPressed'
|
'right': 'onRightPressed'
|
||||||
|
@ -26,9 +31,9 @@ module.exports = class NewHomeView extends RootView
|
||||||
'esc': 'onEscapePressed'
|
'esc': 'onEscapePressed'
|
||||||
|
|
||||||
initialize: (options) ->
|
initialize: (options) ->
|
||||||
@jumbotron = options.jumbotron or utils.getQueryVariable('jumbotron') or 'student'
|
|
||||||
@courses = new CocoCollection [], {url: "/db/course", model: Course}
|
@courses = new CocoCollection [], {url: "/db/course", model: Course}
|
||||||
@supermodel.loadCollection(@courses, 'courses')
|
@supermodel.loadCollection(@courses, 'courses')
|
||||||
|
@variation ?= me.getHomepageGroup()
|
||||||
|
|
||||||
window.tracker?.trackEvent 'Homepage Loaded', category: 'Homepage'
|
window.tracker?.trackEvent 'Homepage Loaded', category: 'Homepage'
|
||||||
if @getQueryVariable 'hour_of_code'
|
if @getQueryVariable 'hour_of_code'
|
||||||
|
@ -50,8 +55,30 @@ module.exports = class NewHomeView extends RootView
|
||||||
|
|
||||||
onClickPlayButton: (e) ->
|
onClickPlayButton: (e) ->
|
||||||
@playSound 'menu-button-click'
|
@playSound 'menu-button-click'
|
||||||
return if @playURL isnt '/play'
|
e.preventDefault()
|
||||||
window.tracker?.trackEvent 'Click Play', category: 'Homepage'
|
e.stopImmediatePropagation()
|
||||||
|
window.tracker?.trackEvent 'Homepage Click Play', category: 'Homepage'
|
||||||
|
application.router.navigate @playURL, trigger: true
|
||||||
|
#window.open @playURL, '_blank'
|
||||||
|
|
||||||
|
onClickRequestDemo: (e) ->
|
||||||
|
@playSound 'menu-button-click'
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopImmediatePropagation()
|
||||||
|
window.tracker?.trackEvent 'Homepage Submit Jumbo Form', category: 'Homepage'
|
||||||
|
obj = storage.load('request-quote-form')
|
||||||
|
obj ?= {}
|
||||||
|
obj.role = @$('#request-form-role').val()
|
||||||
|
obj.numStudents = @$('#request-form-range').val()
|
||||||
|
storage.save('request-quote-form', obj)
|
||||||
|
application.router.navigate "/teachers/demo", trigger: true
|
||||||
|
|
||||||
|
onClickJoinClass: (e) ->
|
||||||
|
@playSound 'menu-button-click'
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopImmediatePropagation()
|
||||||
|
window.tracker?.trackEvent 'Homepage Click Join Class', category: 'Homepage'
|
||||||
|
application.router.navigate "/courses", trigger: true
|
||||||
|
|
||||||
afterRender: ->
|
afterRender: ->
|
||||||
@onChangeSchoolLevelDropdown()
|
@onChangeSchoolLevelDropdown()
|
||||||
|
@ -62,6 +89,10 @@ module.exports = class NewHomeView extends RootView
|
||||||
})
|
})
|
||||||
super()
|
super()
|
||||||
|
|
||||||
|
logoutAccount: ->
|
||||||
|
Backbone.Mediator.publish("auth:logging-out", {})
|
||||||
|
logoutUser()
|
||||||
|
|
||||||
onChangeSchoolLevelDropdown: (e) ->
|
onChangeSchoolLevelDropdown: (e) ->
|
||||||
levels =
|
levels =
|
||||||
elementary: {'introduction-to-computer-science': '2-4', 'computer-science-5': '15-20', default: '10-15', total: '50-70 hours (about one year)'}
|
elementary: {'introduction-to-computer-science': '2-4', 'computer-science-5': '15-20', default: '10-15', total: '50-70 hours (about one year)'}
|
||||||
|
@ -83,9 +114,11 @@ module.exports = class NewHomeView extends RootView
|
||||||
not me.get('stats')?.gamesCompleted and not me.get('heroConfig')
|
not me.get('stats')?.gamesCompleted and not me.get('heroConfig')
|
||||||
|
|
||||||
onClickLearnMoreLink: ->
|
onClickLearnMoreLink: ->
|
||||||
|
window.tracker?.trackEvent 'Homepage Click Learn More', category: 'Homepage'
|
||||||
@scrollToLink('#classroom-in-box-container')
|
@scrollToLink('#classroom-in-box-container')
|
||||||
|
|
||||||
onClickTeacherButton: ->
|
onClickTeacherButton: ->
|
||||||
|
window.tracker?.trackEvent 'Homepage Click Teacher Button', category: 'Homepage'
|
||||||
@scrollToLink('.request-demo-row', 600)
|
@scrollToLink('.request-demo-row', 600)
|
||||||
|
|
||||||
onRightPressed: (event) ->
|
onRightPressed: (event) ->
|
||||||
|
|
Loading…
Reference in a new issue