Project.coffee 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. define [
  2. "models/User"
  3. "models/ProjectMemberList"
  4. "models/Folder"
  5. "libs/backbone"
  6. ], (User, ProjectMemberList, Folder) ->
  7. Project = Backbone.Model.extend
  8. initialize: ->
  9. @on "change:ide", (project, ide) =>
  10. @bindToRootDocId()
  11. @bindToProjectName()
  12. @bindToPublicAccessLevel()
  13. @bindToCompiler()
  14. @bindToSpellingPreference()
  15. @bindToProjectDescription()
  16. parse: (rawAttributes) ->
  17. attributes =
  18. id : rawAttributes._id
  19. name : rawAttributes.name
  20. rootFolder : new Folder(rawAttributes.rootFolder[0], parse: true)
  21. rootDoc_id : rawAttributes.rootDoc_id
  22. publicAccesLevel : rawAttributes.publicAccesLevel
  23. features : rawAttributes.features
  24. compiler : rawAttributes.compiler
  25. spellCheckLanguage: rawAttributes.spellCheckLanguage
  26. dropboxEnabled : rawAttributes.dropboxEnabled
  27. description : rawAttributes.description
  28. deletedByExternalDataSource: rawAttributes.deletedByExternalDataSource
  29. useOt : rawAttributes.useOt
  30. attributes.members = members = new ProjectMemberList()
  31. attributes.owner = owner = User.findOrBuild rawAttributes.owner._id, rawAttributes.owner
  32. owner.set("privileges", "owner")
  33. members.add owner
  34. for rawMember in rawAttributes.members
  35. member = User.findOrBuild rawMember._id, rawMember
  36. members.add member
  37. return attributes
  38. bindToRootDocId: ->
  39. @on "change:rootDoc_id", (project, docId) =>
  40. @get("ide").socket.emit "setRootDoc", docId
  41. @get("ide").socket.on "rootDocUpdated", (docId) =>
  42. @set("rootDoc_id", docId)
  43. bindToProjectName: ->
  44. @on "change:name", (project, name) =>
  45. @get("ide").socket.emit "setProjectName", window.window_id, name
  46. @get("ide").socket.on "projectNameUpdated", (senderWindowId, name) =>
  47. @set("name", name)
  48. bindToCompiler: ->
  49. @on "change:compiler", (project, name) =>
  50. @get("ide").socket.emit "setCompiler", name
  51. @get("ide").socket.on "compilerUpdated", (compiler) =>
  52. @set("compiler", compiler)
  53. bindToSpellingPreference: ->
  54. @on "change:spellCheckLanguage", (project, languageCode) =>
  55. @get("ide").socket.emit "setSpellCheckLanguage", languageCode
  56. bindToPublicAccessLevel: ->
  57. @on "change:publicAccesLevel", (project, level) =>
  58. @get("ide").socket.emit "setPublicAccessLevel", level
  59. @get("ide").socket.on 'publicAccessLevelUpdated', (level) =>
  60. @set("publicAccesLevel", level)
  61. bindToProjectDescription: ->
  62. @on "change:description", (project, description) =>
  63. @get("ide").socket.emit "updateProjectDescription", description
  64. @get("ide").socket.on 'projectDescriptionUpdated', (description) =>
  65. @set("description", description)
  66. getRootDocumentsList: (callback) ->
  67. @get("ide").socket.emit "getRootDocumentsList", (err, listOfDocs) ->
  68. callback(listOfDocs)