Project.coffee 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. remoteChange = false
  40. @on "change:rootDoc_id", (project, docId) =>
  41. if !remoteChange
  42. @get("ide").socket.emit "setRootDoc", docId
  43. @get("ide").socket.on "rootDocUpdated", (docId) =>
  44. remoteChange = true
  45. @set("rootDoc_id", docId)
  46. remoteChange = false
  47. bindToProjectName: ->
  48. remoteChange = false
  49. @on "change:name", (project, name) =>
  50. if !remoteChange
  51. @get("ide").socket.emit "setProjectName", window.window_id, name
  52. @get("ide").socket.on "projectNameUpdated", (senderWindowId, name) =>
  53. remoteChange = true
  54. @set("name", name)
  55. remoteChange = false
  56. bindToCompiler: ->
  57. remoteChange = false
  58. @on "change:compiler", (project, name) =>
  59. if !remoteChange
  60. @get("ide").socket.emit "setCompiler", name
  61. @get("ide").socket.on "compilerUpdated", (compiler) =>
  62. remoteChange = true
  63. @set("compiler", compiler)
  64. remoteChange = false
  65. bindToSpellingPreference: ->
  66. @on "change:spellCheckLanguage", (project, languageCode) =>
  67. @get("ide").socket.emit "setSpellCheckLanguage", languageCode
  68. bindToPublicAccessLevel: ->
  69. remoteChange = false
  70. @on "change:publicAccesLevel", (project, level) =>
  71. if !remoteChange
  72. @get("ide").socket.emit "setPublicAccessLevel", level
  73. @get("ide").socket.on 'publicAccessLevelUpdated', (level) =>
  74. remoteChange = true
  75. @set("publicAccesLevel", level)
  76. remoteChange = false
  77. bindToProjectDescription: ->
  78. remoteChange = false
  79. @on "change:description", (project, description) =>
  80. if !remoteChange
  81. @get("ide").socket.emit "updateProjectDescription", description
  82. @get("ide").socket.on 'projectDescriptionUpdated', (description) =>
  83. remoteChange = true
  84. @set("description", description)
  85. remoteChange = false
  86. getRootDocumentsList: (callback) ->
  87. @get("ide").socket.emit "getRootDocumentsList", (err, listOfDocs) ->
  88. callback(listOfDocs)