Fixed . I just put it on the home page for now, but later we can put it somewhere where it makes sense.

This commit is contained in:
Nick Winter 2014-08-29 23:09:38 -07:00
parent 40aa95ba16
commit e5cf6c340b
6 changed files with 84 additions and 3 deletions

View file

@ -97,6 +97,12 @@
.code-wizard
opacity: 0.5
.language-play-count
text-transform: lowercase
position: absolute
left: 0
top: 0
.code-language
cursor: pointer
text-align: center
@ -145,6 +151,8 @@
background: transparent url(/images/pages/home/language_js.png) no-repeat
padding-right: 150px
.language-play-count
right: -100px
.code-wizard
left: 120px
@ -152,6 +160,8 @@
background: transparent url(/images/pages/home/language_python.png) no-repeat
padding-left: 150px
.language-play-count
left: 125px
.code-wizard
right: 120px
@ -177,6 +187,10 @@
.col-md-3
padding: 0px
.language-play-count
left: 15px
top: -15px
.code-language
background: transparent url(/images/pages/home/language_background_small.png) no-repeat
width: 250px

View file

@ -46,7 +46,7 @@ block header
span.glyphicon-arrow-left.glyphicon
li#redo-button(title="Redo (Ctrl+Shift+Z)")
a
span.glyphicon-repeat.glyphicon
span.glyphicon-arrow-right.glyphicon
if authorized
li#commit-level-start-button
a

View file

@ -11,6 +11,11 @@ block content
.code-wizard
h2 JavaScript
p(data-i18n="home.javascript_blurb") The language of the web. Great for writing websites, web apps, HTML5 games, and servers.
- var playCount = codeLanguageCountMap.javascript
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-md-6
.code-language.beta#python(data-code-language='python')
@ -18,6 +23,11 @@ block content
.code-language-beta
h2 Python
p(data-i18n="home.python_blurb") Simple yet powerful, Python is a great general purpose programming language.
- var playCount = codeLanguageCountMap.python
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.secondary-code-languages.row
.col-md-3
@ -27,6 +37,11 @@ block content
.code-language-beta
h3 CoffeeScript
p(data-i18n="home.coffeescript_blurb") Nicer JavaScript syntax.
- var playCount = codeLanguageCountMap.coffeescript
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-md-3
.code-language.beta#clojure(data-code-language='clojure')
@ -35,6 +50,11 @@ block content
.code-language-beta
h3 Clojure
p(data-i18n="home.clojure_blurb") A modern Lisp.
- var playCount = codeLanguageCountMap.clojure
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-md-3
.code-language.beta#lua(data-code-language='lua')
@ -43,6 +63,11 @@ block content
.code-language-beta
h3 Lua
p(data-i18n="home.lua_blurb") Game scripting language.
- var playCount = codeLanguageCountMap.lua
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.col-md-3
.code-language.beta#io(data-code-language='io', title="Careful: Io is still quite buggy")
@ -51,6 +76,11 @@ block content
.code-language-beta
h3 Io
p(data-i18n="home.io_blurb") Simple but obscure.
- var playCount = codeLanguageCountMap.io
if playCount
div.language-play-count
span.spr= playCount
span(data-i18n="resources.sessions") sessions
.alert.alert-danger.lt-ie10
strong(data-i18n="home.no_ie") CodeCombat does not run in Internet Explorer 9 or older. Sorry!

View file

@ -15,6 +15,7 @@ module.exports = class HomeView extends RootView
constructor: ->
super(arguments...)
ThangType.loadUniversalWizard()
@getCodeLanguageCounts()
getRenderData: ->
c = super()
@ -28,6 +29,7 @@ module.exports = class HomeView extends RootView
c.isEnglish = (me.get('preferredLanguage') or 'en').startsWith 'en'
c.languageName = me.get('preferredLanguage')
c.codeLanguage = (me.get('aceConfig') ? {}).language or 'javascript'
c.codeLanguageCountMap = @codeLanguageCountMap
c
afterRender: ->
@ -68,3 +70,19 @@ module.exports = class HomeView extends RootView
lastButton = @$el.find('#multiplayer .game-mode-wrapper').delay(1000).addClass('hovered', 500).delay(500).removeClass('hovered', 500)
$('#page-container').animate {scrollTop: firstButton.offset().top - 100, easing: 'easeInOutCubic'}, 500
@updateLanguageLogos codeLanguage
getCodeLanguageCounts: ->
@codeLanguageCountMap = {}
success = (codeLanguageCounts) =>
return if @destroyed
for codeLanguage in codeLanguageCounts
@codeLanguageCountMap[codeLanguage._id] = codeLanguage.sessions
@codeLanguageCountMap.javascript += @codeLanguageCountMap[null]
@render() if @supermodel.finished()
codeLanguageCountsRequest = @supermodel.addRequestResource 'play_counts', {
url: '/db/level.session/-/code_language_counts'
method: 'POST'
success: success
}, 0
codeLanguageCountsRequest.load()

View file

@ -292,8 +292,8 @@ LevelHandler = class LevelHandler extends Handler
if playCounts = @playCountCache[cacheKey]
return @sendSuccess res, playCounts
query = Session.aggregate [
{$match: {levelID: {$in: levelIDs}}},
{$group: {_id: "$levelID", playtime: {$sum: "$playtime"}, sessions: {$sum: 1}}},
{$match: {levelID: {$in: levelIDs}}}
{$group: {_id: "$levelID", playtime: {$sum: "$playtime"}, sessions: {$sum: 1}}}
{$sort: {sessions: -1}}
]
query.exec (err, data) =>

View file

@ -9,6 +9,7 @@ class LevelSessionHandler extends Handler
getByRelationship: (req, res, args...) ->
return @getActiveSessions req, res if args.length is 2 and args[1] is 'active'
return @getCodeLanguageCounts req, res if args[1] is 'code_language_counts'
super(arguments...)
formatEntity: (req, document) ->
@ -33,4 +34,22 @@ class LevelSessionHandler extends Handler
return true if ('employer' in req.user.get('permissions')) and (method ? req.method).toLowerCase() is 'get'
super(arguments...)
getCodeLanguageCounts: (req, res) ->
if @codeLanguageCache and (new Date()) - @codeLanguageCountCachedSince > 86400 * 1000 # Dumb cache expiration
@codeLanguageCountCache = null
@codeLanguageCountCacheSince = null
if @codeLanguageCountCache
return @sendSuccess res, @codeLanguageCountCache
query = LevelSession.aggregate [
#{$match: {codeLanguage: {$exists: true}}} # actually slows it down
{$group: {_id: "$codeLanguage", sessions: {$sum: 1}}}
{$sort: {sessions: -1}}
]
query.exec (err, data) =>
if err? then return @sendDatabaseError res, err
@codeLanguageCountCache = data
@codeLanguageCountCachedSince = new Date()
@sendSuccess res, data
module.exports = new LevelSessionHandler()