codecombat/app/views/account/profile_view.coffee
2014-04-09 13:14:52 -07:00

82 lines
2.7 KiB
CoffeeScript

View = require 'views/kinds/RootView'
template = require 'templates/account/profile'
User = require 'models/User'
module.exports = class ProfileView extends View
id: "profile-view"
template: template
loadingProfile: true
events:
'click #toggle-job-profile-approved': 'toggleJobProfileApproved'
'keyup #job-profile-notes': 'onJobProfileNotesChanged'
constructor: (options, @userID) ->
@onJobProfileNotesChanged = _.debounce @onJobProfileNotesChanged, 1000
super options
@user = User.getByID(@userID)
@loadingProfile = false if 'gravatarProfile' of @user
@listenTo(@user, 'change', @userChanged)
@listenTo(@user, 'error', @userError)
userChanged: (user) ->
@loadingProfile = false if 'gravatarProfile' of user
@render()
userError: (user) ->
@loadingProfile = false
@render()
getRenderData: ->
context = super()
grav = @user.gravatarProfile
grav = grav.entry[0] if grav
addedContext =
user: @user
loadingProfile: @loadingProfile
myProfile: @user.id is context.me.id
grav: grav
photoURL: @user.getPhotoURL()
context[key] = addedContext[key] for key of addedContext
context.marked = marked
context.moment = moment
context.iconForLink = @iconForLink
if links = @user.get('jobProfile')?.links
links = ($.extend(true, {}, link) for link in links)
link.icon = @iconForLink link for link in links
context.profileLinks = _.sortBy links, (link) -> not link.icon # icons first
context
afterRender: ->
super()
@updateProfileApproval() if me.isAdmin()
updateProfileApproval: ->
approved = @user.get 'jobProfileApproved'
@$el.find('.approved').toggle Boolean(approved)
@$el.find('.not-approved').toggle not approved
toggleJobProfileApproved: ->
approved = not @user.get 'jobProfileApproved'
@user.set 'jobProfileApproved', approved
@user.save()
@updateProfileApproval()
onJobProfileNotesChanged: (e) =>
notes = @$el.find("#job-profile-notes").val()
@user.set 'jobProfileNotes', notes
@user.save()
iconForLink: (link) ->
icons = [
{icon: 'facebook', name: 'Facebook', domain: 'facebook.com', match: /facebook/i}
{icon: 'twitter', name: 'Twitter', domain: 'twitter.com', match: /twitter/i}
{icon: 'github', name: 'GitHub', domain: 'github.com', match: /github/i}
{icon: 'gplus', name: 'Google Plus', domain: 'plus.google.com', match: /(google|^g).?(\+|plus)/i}
{icon: 'linkedin', name: 'LinkedIn', domain: 'linkedin.com', match: /(google|^g).?(\+|plus)/i}
]
for icon in icons
if (link.name.search(icon.match) isnt -1) or (link.link.search(icon.domain) isnt -1)
icon.url = "/images/pages/account/profile/icon_#{icon.icon}.png"
return icon
null