mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
parent
734c51780e
commit
4f369a1e2f
4 changed files with 70 additions and 79 deletions
|
@ -3,11 +3,11 @@ extends /templates/base
|
|||
// User pages might have some user page specific header, if not remove this
|
||||
block content
|
||||
.clearfix
|
||||
if user && viewName
|
||||
if view.userData && view.viewName
|
||||
ol.breadcrumb
|
||||
li
|
||||
a(href="/user/#{user.getSlugOrID()}") #{user.displayName()}
|
||||
a(href="/user/#{view.userData.getSlugOrID()}") #{view.userData.displayName()}
|
||||
li.active
|
||||
| #{viewName}
|
||||
if !user || user.loading
|
||||
| #{view.viewName}
|
||||
if !view.userData || view.userData.loading
|
||||
| LOADING
|
||||
|
|
|
@ -9,24 +9,25 @@ block append content
|
|||
a(href="/account", data-i18n="nav.account")
|
||||
li.active(data-i18n="nav.profile")
|
||||
|
||||
if user
|
||||
if view.user
|
||||
- var playerLevel = view.user.level()
|
||||
- var emails = view.user.getEnabledEmails()
|
||||
.vertical-buffer
|
||||
.row
|
||||
.left-column
|
||||
.profile-wrapper
|
||||
img.picture(src="#{user.getPhotoURL(150)}" alt="")
|
||||
img.picture(src="#{view.user.getPhotoURL(150)}" alt="")
|
||||
div.profile-info
|
||||
h3.name= user.get('name')
|
||||
if favoriteLanguage
|
||||
h3.name= view.user.get('name')
|
||||
if view.favoriteLanguage
|
||||
div.extra-info
|
||||
span(data-i18n="user.favorite_prefix") Favorite language is
|
||||
strong.favorite-language= favoriteLanguage
|
||||
span(data-i18n="user.favorite_postfix") .
|
||||
strong.favorite-language= view.favoriteLanguage
|
||||
span(data-i18n="user.favorite_postfix") .
|
||||
if playerLevel
|
||||
div.extra-info
|
||||
span.spr(data-i18n="general.player_level") Level
|
||||
strong= playerLevel
|
||||
- var emails = user.getEnabledEmails()
|
||||
strong= playerLevel
|
||||
// TODO: fix this, use some other method for finding contributor classes other than email settings, since they're private... Maybe achievements?
|
||||
if emails
|
||||
ul.contributor-categories
|
||||
|
@ -64,22 +65,22 @@ block append content
|
|||
.panel.panel-default
|
||||
.panel-heading
|
||||
h3.panel-title(data-i18n="clans.clans") Clans
|
||||
if (!clans)
|
||||
if (!view.clanModels)
|
||||
.panel-body
|
||||
p(data-i18n="common.loading")
|
||||
else if (clans.length)
|
||||
else if (view.clanModels.length)
|
||||
table.table
|
||||
tr
|
||||
th.col-xs-4(data-i18n="clans.name") Name
|
||||
th.col-xs-4(data-i18n="clans.chieftain") Chieftain
|
||||
th.col-xs-4(data-i18n="play.heroes") Heroes
|
||||
each clan in clans
|
||||
each clan in view.clanModels
|
||||
tr
|
||||
td
|
||||
a(href="/clans/#{clan.id}")= clan.get('name')
|
||||
td
|
||||
if idNameMap && idNameMap[clan.get('ownerID')]
|
||||
a(href="/user/#{clan.get('ownerID')}")= idNameMap[clan.get('ownerID')]
|
||||
if view.idNameMap && view.idNameMap[clan.get('ownerID')]
|
||||
a(href="/user/#{clan.get('ownerID')}")= view.idNameMap[clan.get('ownerID')]
|
||||
else
|
||||
a(href="/user/#{clan.get('ownerID')}") Anonymous
|
||||
td= clan.get('members').length
|
||||
|
@ -90,17 +91,17 @@ block append content
|
|||
.panel.panel-default
|
||||
.panel-heading
|
||||
h3.panel-title(data-i18n="user.singleplayer_title") Singleplayer Levels
|
||||
if (!singlePlayerSessions)
|
||||
if (!view.singlePlayerSessions)
|
||||
.panel-body
|
||||
p(data-i18n="common.loading") Loading...
|
||||
else if (singlePlayerSessions.length)
|
||||
else if (view.singlePlayerSessions.length)
|
||||
table.table
|
||||
tr
|
||||
th.col-xs-4(data-i18n="resources.level") Level
|
||||
th.col-xs-4(data-i18n="user.last_played") Last Played
|
||||
th.col-xs-4(data-i18n="user.status") Status
|
||||
- var count = 0
|
||||
each session, index in singlePlayerSessions
|
||||
each session, index in view.singlePlayerSessions
|
||||
if session.get('levelName')
|
||||
tr(class=count > 4 ? 'hide' : '')
|
||||
- count++;
|
||||
|
@ -120,16 +121,16 @@ block append content
|
|||
.panel.panel-default
|
||||
.panel-heading
|
||||
h3.panel-title(data-i18n="user.multiplayer_title") Multiplayer Levels
|
||||
if (!multiPlayerSessions)
|
||||
if (!view.multiPlayerSessions)
|
||||
.panel-body
|
||||
p(data-i18n="common.loading") Loading...
|
||||
else if (multiPlayerSessions.length)
|
||||
else if (view.multiPlayerSessions.length)
|
||||
table.table
|
||||
tr
|
||||
th.col-xs-4(data-i18n="resources.level") Level
|
||||
th.col-xs-4(data-i18n="user.last_played") Last Played
|
||||
th.col-xs-4(data-i18n="general.score") Score
|
||||
each session, index in multiPlayerSessions
|
||||
each session, index in view.multiPlayerSessions
|
||||
tr(class=index > 4 ? 'hide' : '')
|
||||
td
|
||||
- var posturl = ''
|
||||
|
@ -140,7 +141,7 @@ block append content
|
|||
td= parseInt(session.get('totalScore') * 100)
|
||||
else
|
||||
td(data-i18n="user.status_unfinished") Unfinished
|
||||
if multiPlayerSessions.length > 4
|
||||
if view.multiPlayerSessions.length > 4
|
||||
.panel-footer
|
||||
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")
|
||||
else
|
||||
|
@ -149,10 +150,10 @@ block append content
|
|||
.panel.panel-default
|
||||
.panel-heading
|
||||
h3.panel-title(data-i18n="user.achievements_title") Achievements
|
||||
if ! earnedAchievements
|
||||
if ! view.earnedAchievements
|
||||
.panel-body
|
||||
p(data-i18n="common.loading") Loading...
|
||||
else if ! earnedAchievements.length
|
||||
else if ! view.earnedAchievements.length
|
||||
.panel-body
|
||||
p(data-i18n="user.no_achievements") No achievements earned so far.
|
||||
else
|
||||
|
@ -161,7 +162,7 @@ block append content
|
|||
th.col-xs-4(data-i18n="achievements.achievement") Achievement
|
||||
th.col-xs-4(data-i18n="achievements.last_earned") Last Earned
|
||||
th.col-xs-4(data-i18n="achievements.amount_achieved") Amount
|
||||
each achievement, index in earnedAchievements.models
|
||||
each achievement, index in view.earnedAchievements.models
|
||||
tr(class=index > 4 ? 'hide' : '')
|
||||
td= achievement.get('achievementName')
|
||||
td= moment(achievement.get('changed')).format("MMMM Do YYYY")
|
||||
|
@ -169,6 +170,6 @@ block append content
|
|||
td= achievement.get('achievedAmount')
|
||||
else
|
||||
td
|
||||
if earnedAchievements.length > 4
|
||||
if view.earnedAchievements.length > 4
|
||||
.panel-footer
|
||||
button.btn.btn-info.btn-sm.more-button(data-i18n="editor.more")
|
||||
|
|
|
@ -19,21 +19,12 @@ module.exports = class UserView extends RootView
|
|||
@user = new User _id: @userID
|
||||
@supermodel.loadModel @user, cache: false
|
||||
|
||||
getRenderData: ->
|
||||
context = super()
|
||||
context.viewName = @viewName
|
||||
context.user = @user unless @user?.isAnonymous()
|
||||
context
|
||||
|
||||
isMe: -> @userID in [me.id, me.get('slug')]
|
||||
|
||||
onLoaded: ->
|
||||
@onUserLoaded @user if @user.loaded and not @userLoaded
|
||||
super()
|
||||
|
||||
onUserLoaded: ->
|
||||
@userData = @user unless @user?.isAnonymous()
|
||||
@userID = @user.id
|
||||
@userLoaded = true
|
||||
super()
|
||||
|
||||
ifUserNotFound: ->
|
||||
console.warn 'user not found'
|
||||
|
|
|
@ -26,59 +26,39 @@ module.exports = class MainUserView extends UserView
|
|||
destroy: ->
|
||||
@stopListening?()
|
||||
|
||||
getRenderData: ->
|
||||
context = super()
|
||||
if @levelSessions and @levelSessions.loaded
|
||||
singlePlayerSessions = []
|
||||
multiPlayerSessions = []
|
||||
languageCounts = {}
|
||||
for levelSession in @levelSessions.models
|
||||
if levelSession.isMultiplayer()
|
||||
multiPlayerSessions.push levelSession
|
||||
else
|
||||
singlePlayerSessions.push levelSession
|
||||
language = levelSession.get('codeLanguage') or levelSession.get('submittedCodeLanguage')
|
||||
if language
|
||||
languageCounts[language] = (languageCounts[language] or 0) + 1
|
||||
mostUsedCount = 0
|
||||
favoriteLanguage = null
|
||||
for language, count of languageCounts
|
||||
if count > mostUsedCount
|
||||
mostUsedCount = count
|
||||
favoriteLanguage = language
|
||||
context.singlePlayerSessions = singlePlayerSessions
|
||||
context.multiPlayerSessions = multiPlayerSessions
|
||||
context.favoriteLanguage = favoriteLanguage
|
||||
context.playerLevel = @user.level()
|
||||
if @earnedAchievements and @earnedAchievements.loaded
|
||||
context.earnedAchievements = @earnedAchievements
|
||||
if @clans and @clans.loaded
|
||||
context.clans = @clans.models
|
||||
context.idNameMap = @idNameMap
|
||||
context
|
||||
|
||||
onLoaded: ->
|
||||
if @user.loaded and not (@earnedAchievements or @levelSessions)
|
||||
@supermodel.resetProgress()
|
||||
@levelSessions = new LevelSessionsCollection @user.getSlugOrID()
|
||||
@earnedAchievements = new EarnedAchievementCollection @user.getSlugOrID()
|
||||
@supermodel.loadCollection @levelSessions, 'levelSessions', {cache: false}
|
||||
@supermodel.loadCollection @earnedAchievements, 'earnedAchievements', {cache: false}
|
||||
if @user.loaded
|
||||
if !@levelSessions
|
||||
@levelSessions = new LevelSessionsCollection @user.getSlugOrID()
|
||||
@listenTo @levelSessions, 'sync', =>
|
||||
@onSyncLevelSessions @levelSessions?.models
|
||||
@render()
|
||||
@supermodel.loadCollection @levelSessions, 'levelSessions', {cache: false}
|
||||
|
||||
if !@earnedAchievements
|
||||
@earnedAchievements = new EarnedAchievementCollection @user.getSlugOrID()
|
||||
@listenTo @earnedAchievements, 'sync', =>
|
||||
@render()
|
||||
@supermodel.loadCollection @earnedAchievements, 'earnedAchievements', {cache: false}
|
||||
|
||||
sortClanList = (a, b) ->
|
||||
if a.get('members').length isnt b.get('members').length
|
||||
if a.get('members').length < b.get('members').length then 1 else -1
|
||||
else
|
||||
b.id.localeCompare(a.id)
|
||||
@idNameMap = {}
|
||||
|
||||
@clans = new CocoCollection([], { url: "/db/user/#{@userID}/clans", model: Clan, comparator: sortClanList })
|
||||
@listenTo @clans, 'sync', =>
|
||||
@refreshNameMap @clans?.models
|
||||
@onSyncClans @clans?.models
|
||||
@render?()
|
||||
@supermodel.loadCollection(@clans, 'clans', {cache: false})
|
||||
|
||||
super()
|
||||
|
||||
refreshNameMap: (clans) ->
|
||||
onSyncClans: (clans) ->
|
||||
return unless clans?
|
||||
@idNameMap = []
|
||||
@clanModels = clans
|
||||
options =
|
||||
url: '/db/user/-/names'
|
||||
method: 'POST'
|
||||
|
@ -88,6 +68,25 @@ module.exports = class MainUserView extends UserView
|
|||
@render?()
|
||||
@supermodel.addRequestResource('user_names', options, 0).load()
|
||||
|
||||
onSyncLevelSessions: (levelSessions) ->
|
||||
return unless levelSessions?
|
||||
@multiPlayerSessions = []
|
||||
@singlePlayerSessions = []
|
||||
languageCounts = []
|
||||
mostUsedCount = 0
|
||||
for levelSession in levelSessions
|
||||
if levelSession.isMultiplayer()
|
||||
@multiPlayerSessions.push levelSession
|
||||
else
|
||||
@singlePlayerSessions.push levelSession
|
||||
language = levelSession.get('codeLanguage') or levelSession.get('submittedCodeLanguage')
|
||||
if language
|
||||
languageCounts[language] = (languageCounts[language] or 0) + 1
|
||||
for language, count of languageCounts
|
||||
if count > mostUsedCount
|
||||
mostUsedCount = count
|
||||
@favoriteLanguage = language
|
||||
|
||||
onClickMoreButton: (e) ->
|
||||
panel = $(e.target).closest('.panel')
|
||||
panel.find('tr.hide').removeClass('hide')
|
||||
|
|
Loading…
Reference in a new issue