text-composable-api.coffee 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # Text document API for text
  2. if WEB?
  3. type = exports.types['text-composable']
  4. else
  5. type = require './text-composable'
  6. type.api =
  7. provides: {'text':true}
  8. # The number of characters in the string
  9. 'getLength': -> @snapshot.length
  10. # Get the text contents of a document
  11. 'getText': -> @snapshot
  12. 'insert': (pos, text, callback) ->
  13. op = type.normalize [pos, 'i':text, (@snapshot.length - pos)]
  14. @submitOp op, callback
  15. op
  16. 'del': (pos, length, callback) ->
  17. op = type.normalize [pos, 'd':@snapshot[pos...(pos + length)], (@snapshot.length - pos - length)]
  18. @submitOp op, callback
  19. op
  20. _register: ->
  21. @on 'remoteop', (op) ->
  22. pos = 0
  23. for component in op
  24. if typeof component is 'number'
  25. pos += component
  26. else if component.i != undefined
  27. @emit 'insert', pos, component.i
  28. pos += component.i.length
  29. else
  30. # delete
  31. @emit 'delete', pos, component.d
  32. # We don't increment pos, because the position
  33. # specified is after the delete has happened.