AceUpdateManager.coffee 990 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. define [
  2. "documentUpdater"
  3. "ace/range"
  4. ], () ->
  5. Range = require("ace/range").Range
  6. Modal = require("utils/Modal")
  7. class AceUpdateManager
  8. constructor: (@editor) ->
  9. @ide = @editor.ide
  10. guidGenerator=()->
  11. S4 = ()->
  12. return (((1+Math.random())*0x10000)|0).toString(16).substring(1)
  13. return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4())
  14. @window_id = guidGenerator()
  15. @bindToServerEvents()
  16. bindToServerEvents: () ->
  17. @ide.socket.on 'reciveTextUpdate', (updating_id, change) =>
  18. @ide.savingAreaManager.saved()
  19. if(@window_id == updating_id)
  20. return
  21. @ownChange = true
  22. doc = @editor.getDocument()
  23. documentUpdater.applyChange doc, change, Range, ()=>
  24. @ownChange = false
  25. bindToDocument: (doc_id, docLines, version) ->
  26. @current_doc_id = doc_id
  27. aceDoc = @editor.getDocument()
  28. aceDoc.on 'change', (change) =>
  29. if(!@ownChange)
  30. @ide.socket.emit 'sendUpdate',
  31. @current_doc_id, @window_id, change.data