mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
93 lines
3.1 KiB
CoffeeScript
93 lines
3.1 KiB
CoffeeScript
UserView = require 'views/common/UserView'
|
|
CocoCollection = require 'collections/CocoCollection'
|
|
LevelSession = require 'models/LevelSession'
|
|
template = require 'templates/user/main-user-view'
|
|
{me} = require 'core/auth'
|
|
Clan = require 'models/Clan'
|
|
EarnedAchievementCollection = require 'collections/EarnedAchievementCollection'
|
|
|
|
class LevelSessionsCollection extends CocoCollection
|
|
model: LevelSession
|
|
|
|
constructor: (userID) ->
|
|
@url = "/db/user/#{userID}/level.sessions?project=state.complete,levelID,levelName,changed,team,codeLanguage,submittedCodeLanguage,totalScore&order=-1"
|
|
super()
|
|
|
|
module.exports = class MainUserView extends UserView
|
|
id: 'user-home'
|
|
template: template
|
|
|
|
events:
|
|
'click .more-button': 'onClickMoreButton'
|
|
|
|
constructor: (userID, options) ->
|
|
super options
|
|
|
|
destroy: ->
|
|
@stopListening?()
|
|
|
|
onLoaded: ->
|
|
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)
|
|
|
|
@clans = new CocoCollection([], { url: "/db/user/#{@userID}/clans", model: Clan, comparator: sortClanList })
|
|
@listenTo @clans, 'sync', =>
|
|
@onSyncClans @clans?.models
|
|
@render?()
|
|
@supermodel.loadCollection(@clans, 'clans', {cache: false})
|
|
|
|
super()
|
|
|
|
onSyncClans: (clans) ->
|
|
return unless clans?
|
|
@idNameMap = []
|
|
@clanModels = clans
|
|
options =
|
|
url: '/db/user/-/names'
|
|
method: 'POST'
|
|
data: {ids: _.map(clans, (clan) -> clan.get('ownerID'))}
|
|
success: (models, response, options) =>
|
|
@idNameMap[userID] = models[userID].name for userID of models
|
|
@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')
|
|
panel.find('.panel-footer').remove()
|