AceShareJsCodec.coffee 795 B

1234567891011121314151617181920212223242526272829
  1. define [], () ->
  2. AceShareJsCodec =
  3. aceRangeToShareJs: (range, lines) ->
  4. offset = 0
  5. for line, i in lines
  6. offset += if i < range.row
  7. line.length
  8. else
  9. range.column
  10. offset += range.row # Include newlines
  11. return offset
  12. aceChangeToShareJs: (delta, lines) ->
  13. offset = AceShareJsCodec.aceRangeToShareJs(delta.start, lines)
  14. text = delta.lines.join('\n')
  15. switch delta.action
  16. when 'insert'
  17. return { i: text, p: offset }
  18. when 'remove'
  19. return { d: text, p: offset }
  20. else throw new Error "unknown action: #{delta.action}"
  21. shareJsOffsetToAcePosition: (offset, lines) ->
  22. row = 0
  23. for line, row in lines
  24. break if offset <= line.length
  25. offset -= lines[row].length + 1 # + 1 for newline char
  26. return {row:row, column:offset}