mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-31 07:12:49 -04:00
Fixed #1140. 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:
parent
40aa95ba16
commit
e5cf6c340b
6 changed files with 84 additions and 3 deletions
app
server/levels
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) =>
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue