User.coffee 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. define [
  2. "libs/md5"
  3. "libs/backbone"
  4. ], () ->
  5. User = Backbone.Model.extend {
  6. gravatarUrl: (size = 32) ->
  7. email = @get("email").trim().toLowerCase()
  8. hash = CryptoJS.MD5(email)
  9. return "//www.gravatar.com/avatar/#{hash}.jpg?size=#{size}&d=mm"
  10. OWNER_HUE: 200
  11. hue: () ->
  12. if window.user.id == @get("id")
  13. hue = @OWNER_HUE
  14. else
  15. hash = CryptoJS.MD5(@get("id"))
  16. hue = parseInt(hash.toString().slice(0,8), 16) % 320
  17. # Avoid 20 degrees either side of the owner
  18. if hue > @OWNER_HUE - 20
  19. hue = hue + 40
  20. return hue
  21. name: () ->
  22. if window.user.id == @get("id")
  23. return "you"
  24. parts = []
  25. first_name = @get("first_name")
  26. if first_name? and first_name.length > 0
  27. parts.push first_name
  28. last_name = @get("last_name")
  29. if last_name? and last_name.length > 0
  30. parts.push last_name
  31. return parts.join(" ")
  32. }, {
  33. findOrBuild : (id, attributes) ->
  34. model = @find id
  35. if !model?
  36. model = @build id
  37. model.set model.parse attributes
  38. return model
  39. build: (id) ->
  40. model = new this(id : id)
  41. @loadedModel ||= {}
  42. @loadedModel[id] = model
  43. return model
  44. find: (id) ->
  45. @loadedModel ||= {}
  46. return @loadedModel[id]
  47. getAnonymousUser: () ->
  48. return User.findOrBuild("anonymous", { first_name: "Anonymous", email: "anon@sharelatex.com" })
  49. }