Project.coffee 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. define [
  2. "models/User"
  3. "models/ProjectMemberList"
  4. "models/Folder"
  5. "models/Doc"
  6. "libs/backbone"
  7. ], (User, ProjectMemberList, Folder, Doc) ->
  8. Project = Backbone.Model.extend
  9. initialize: ->
  10. @on "change:ide", (project, ide) =>
  11. @bindToRootDocId()
  12. @bindToProjectName()
  13. @bindToPublicAccessLevel()
  14. @bindToCompiler()
  15. @bindToSpellingPreference()
  16. @bindToProjectDescription()
  17. parse: (rawAttributes) ->
  18. attributes =
  19. id : rawAttributes._id
  20. name : rawAttributes.name
  21. rootFolder : new Folder(rawAttributes.rootFolder[0], parse: true)
  22. rootDoc_id : rawAttributes.rootDoc_id
  23. publicAccesLevel : rawAttributes.publicAccesLevel
  24. features : rawAttributes.features
  25. compiler : rawAttributes.compiler
  26. spellCheckLanguage: rawAttributes.spellCheckLanguage
  27. dropboxEnabled : rawAttributes.dropboxEnabled
  28. description : rawAttributes.description
  29. deletedByExternalDataSource: rawAttributes.deletedByExternalDataSource
  30. useOt : rawAttributes.useOt
  31. attributes.members = members = new ProjectMemberList()
  32. attributes.owner = owner = User.findOrBuild rawAttributes.owner._id, rawAttributes.owner
  33. owner.set("privileges", "owner")
  34. members.add owner
  35. for rawMember in rawAttributes.members or []
  36. member = User.findOrBuild rawMember._id, rawMember
  37. members.add member
  38. for doc in rawAttributes.deletedDocs or []
  39. doc.deleted = true
  40. attributes.deletedDocs = new Folder({
  41. _id: "deleted-docs-folder"
  42. name: "Deleted documents"
  43. docs: rawAttributes.deletedDocs
  44. }, parse: true)
  45. return attributes
  46. bindToRootDocId: ->
  47. remoteChange = false
  48. @on "change:rootDoc_id", (project, docId) =>
  49. if !remoteChange
  50. @get("ide").socket.emit "setRootDoc", docId
  51. @get("ide").socket.on "rootDocUpdated", (docId) =>
  52. remoteChange = true
  53. @set("rootDoc_id", docId)
  54. remoteChange = false
  55. bindToProjectName: ->
  56. remoteChange = false
  57. @on "change:name", (project, name) =>
  58. if !remoteChange
  59. @get("ide").socket.emit "setProjectName", name
  60. @get("ide").socket.on "projectNameUpdated", (name) =>
  61. remoteChange = true
  62. @set("name", name)
  63. remoteChange = false
  64. bindToCompiler: ->
  65. remoteChange = false
  66. @on "change:compiler", (project, name) =>
  67. if !remoteChange
  68. @get("ide").socket.emit "setCompiler", name
  69. @get("ide").socket.on "compilerUpdated", (compiler) =>
  70. remoteChange = true
  71. @set("compiler", compiler)
  72. remoteChange = false
  73. bindToSpellingPreference: ->
  74. @on "change:spellCheckLanguage", (project, languageCode) =>
  75. @get("ide").socket.emit "setSpellCheckLanguage", languageCode
  76. bindToPublicAccessLevel: ->
  77. remoteChange = false
  78. @on "change:publicAccesLevel", (project, level) =>
  79. if !remoteChange
  80. @get("ide").socket.emit "setPublicAccessLevel", level
  81. @get("ide").socket.on 'publicAccessLevelUpdated', (level) =>
  82. remoteChange = true
  83. @set("publicAccesLevel", level)
  84. remoteChange = false
  85. bindToProjectDescription: ->
  86. remoteChange = false
  87. @on "change:description", (project, description) =>
  88. if !remoteChange
  89. @get("ide").socket.emit "updateProjectDescription", description
  90. @get("ide").socket.on 'projectDescriptionUpdated', (description) =>
  91. remoteChange = true
  92. @set("description", description)
  93. remoteChange = false
  94. getRootDocumentsList: (callback) ->
  95. @get("ide").socket.emit "getRootDocumentsList", (err, listOfDocs) ->
  96. callback(listOfDocs)