mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 17:45:40 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
4ca476713e
7 changed files with 55 additions and 11 deletions
BIN
app/assets/images/pages/courses/coco_complab.png
Normal file
BIN
app/assets/images/pages/courses/coco_complab.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 603 KiB |
|
@ -12,6 +12,9 @@
|
||||||
.course-panel
|
.course-panel
|
||||||
margin: 20px
|
margin: 20px
|
||||||
|
|
||||||
|
.faq-blurb
|
||||||
|
font-size: 14px
|
||||||
|
|
||||||
.row-pick-class
|
.row-pick-class
|
||||||
display: none
|
display: none
|
||||||
|
|
||||||
|
@ -31,9 +34,6 @@
|
||||||
.center
|
.center
|
||||||
text-align: center
|
text-align: center
|
||||||
|
|
||||||
.caption-text
|
|
||||||
font-size: 14px
|
|
||||||
|
|
||||||
.concepts-container
|
.concepts-container
|
||||||
width: 200px
|
width: 200px
|
||||||
|
|
||||||
|
@ -48,9 +48,24 @@
|
||||||
.monitoring-img-container
|
.monitoring-img-container
|
||||||
margin-top: 10px
|
margin-top: 10px
|
||||||
|
|
||||||
|
.praise-caption
|
||||||
|
font-size: 14px
|
||||||
|
|
||||||
.praise-quote
|
.praise-quote
|
||||||
font-size: 24px
|
font-size: 20px
|
||||||
font-style: italic
|
font-style: italic
|
||||||
|
|
||||||
.progress-container
|
.progress-container
|
||||||
font-size: 20px
|
font-size: 20px
|
||||||
|
|
||||||
|
.img-quote
|
||||||
|
height: 160px
|
||||||
|
|
||||||
|
.popover
|
||||||
|
z-index: 1050
|
||||||
|
min-width: 400px
|
||||||
|
|
||||||
|
h3
|
||||||
|
background: transparent
|
||||||
|
border: 0
|
||||||
|
font-size: 30px
|
||||||
|
|
|
@ -15,7 +15,8 @@
|
||||||
|
|
||||||
width: 500px
|
width: 500px
|
||||||
height: 60px
|
height: 60px
|
||||||
display: flex
|
display: none
|
||||||
|
//display: flex // set if present
|
||||||
flex-direction: row
|
flex-direction: row
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
|
|
|
@ -68,11 +68,17 @@ block content
|
||||||
li No coding experience necesssary
|
li No coding experience necesssary
|
||||||
li Easily monitor student progress
|
li Easily monitor student progress
|
||||||
|
|
||||||
div Purchase a course for your entire class. It's easy to sign up your students!
|
p Purchase a course for your entire class. It's easy to sign up your students!
|
||||||
|
p.faq-blurb
|
||||||
|
span.spr See the courses
|
||||||
|
a.spr.courses-faq FAQ
|
||||||
|
span for more information.
|
||||||
.col-md-6
|
.col-md-6
|
||||||
.well.well-sm
|
img.img-quote(src="/images/pages/courses/coco_complab.png")
|
||||||
div.praise-quote "#{praise.quote}"
|
p
|
||||||
div.caption-text - #{praise.source}
|
.well.well-sm
|
||||||
|
div.praise-quote "#{praise.quote}"
|
||||||
|
div.praise-caption - #{praise.source}
|
||||||
|
|
||||||
h2.center Choose Your Course:
|
h2.center Choose Your Course:
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,10 @@ module.exports = class CoursesView extends RootView
|
||||||
context.studentMode = @studentMode
|
context.studentMode = @studentMode
|
||||||
context
|
context
|
||||||
|
|
||||||
|
afterRender: ->
|
||||||
|
super()
|
||||||
|
@setupCoursesFAQPopover()
|
||||||
|
|
||||||
initData: ->
|
initData: ->
|
||||||
mockData = require 'views/courses/mock1/CoursesMockData'
|
mockData = require 'views/courses/mock1/CoursesMockData'
|
||||||
@courses = mockData.courses
|
@courses = mockData.courses
|
||||||
|
@ -39,6 +43,23 @@ module.exports = class CoursesView extends RootView
|
||||||
@instances = mockData.instances
|
@instances = mockData.instances
|
||||||
@praise = mockData.praise[_.random(0, mockData.praise.length - 1)]
|
@praise = mockData.praise[_.random(0, mockData.praise.length - 1)]
|
||||||
|
|
||||||
|
setupCoursesFAQPopover: ->
|
||||||
|
popoverTitle = "<h3>Courses FAQ<button type='button' class='close' onclick='$('.courses-faq').popover('hide');'>×</button></h3>"
|
||||||
|
popoverContent = "<p><strong>Q:</strong> What's the difference between these courses and the single player game?</p>"
|
||||||
|
popoverContent += "<p><strong>A:</strong> The single player game is designed for individuals, while the courses are designed for classes.</p>"
|
||||||
|
popoverContent += "<p>The single player game has items, gems, hero selection, leveling up, and in-app purchases. Courses have classroom management features and streamlined student-focused level pacing.</p>"
|
||||||
|
@$el.find('.courses-faq').popover(
|
||||||
|
animation: true
|
||||||
|
html: true
|
||||||
|
placement: 'top'
|
||||||
|
trigger: 'click'
|
||||||
|
title: popoverTitle
|
||||||
|
content: popoverContent
|
||||||
|
container: @$el
|
||||||
|
).on 'shown.bs.popover', =>
|
||||||
|
application.tracker?.trackEvent 'Subscription payment methods hover'
|
||||||
|
|
||||||
|
|
||||||
onClickBuy: (e) ->
|
onClickBuy: (e) ->
|
||||||
courseID = $(e.target).data('course-id') ? 0
|
courseID = $(e.target).data('course-id') ? 0
|
||||||
app.router.navigate("/courses/mock1/enroll/#{courseID}")
|
app.router.navigate("/courses/mock1/enroll/#{courseID}")
|
||||||
|
|
|
@ -49,6 +49,7 @@ module.exports = class DuelStatsView extends CocoView
|
||||||
super()
|
super()
|
||||||
for player in @players
|
for player in @players
|
||||||
@buildAvatar player.heroID, player.team
|
@buildAvatar player.heroID, player.team
|
||||||
|
@$el.css 'display', 'flex' # Show it
|
||||||
|
|
||||||
buildAvatar: (heroID, team) ->
|
buildAvatar: (heroID, team) ->
|
||||||
@avatars ?= {}
|
@avatars ?= {}
|
||||||
|
|
|
@ -37,8 +37,8 @@ getRandomSessions = (user, callback) ->
|
||||||
# Determine whether to play a random match, an internal league match, or an external league match.
|
# Determine whether to play a random match, an internal league match, or an external league match.
|
||||||
# Only people in a league will end up simulating internal league matches (for leagues they're in) except by dumb chance.
|
# Only people in a league will end up simulating internal league matches (for leagues they're in) except by dumb chance.
|
||||||
# If we don't like that, we can rework sampleByLevel to have an opportunity to switch to internal leagues if the first session had a league affiliation.
|
# If we don't like that, we can rework sampleByLevel to have an opportunity to switch to internal leagues if the first session had a league affiliation.
|
||||||
leagueIDs = user.get('clans') or []
|
leagueIDs = user?.get('clans') or []
|
||||||
#leagueIDs = leagueIDs.concat user.get('courseInstances') or []
|
#leagueIDs = leagueIDs.concat user?.get('courseInstances') or []
|
||||||
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to fetch them as strings.
|
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to fetch them as strings.
|
||||||
return sampleByLevel callback unless leagueIDs.length and Math.random() > 1 / leagueIDs.length
|
return sampleByLevel callback unless leagueIDs.length and Math.random() > 1 / leagueIDs.length
|
||||||
leagueID = _.sample leagueIDs
|
leagueID = _.sample leagueIDs
|
||||||
|
|
Loading…
Reference in a new issue