EditorShareJsCodec.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* eslint-disable
  2. max-len,
  3. no-return-assign,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  11. */
  12. let EditorShareJsCodec
  13. export default EditorShareJsCodec = {
  14. rangeToShareJs(range, lines) {
  15. let offset = 0
  16. for (let i = 0; i < lines.length; i++) {
  17. const line = lines[i]
  18. offset += i < range.row ? line.length : range.column
  19. }
  20. offset += range.row // Include newlines
  21. return offset
  22. },
  23. changeToShareJs(delta, lines) {
  24. const offset = EditorShareJsCodec.rangeToShareJs(delta.start, lines)
  25. const text = delta.lines.join('\n')
  26. switch (delta.action) {
  27. case 'insert':
  28. return { i: text, p: offset }
  29. case 'remove':
  30. return { d: text, p: offset }
  31. default:
  32. throw new Error(`unknown action: ${delta.action}`)
  33. }
  34. },
  35. shareJsOffsetToRowColumn(offset, lines) {
  36. let row = 0
  37. for (row = 0; row < lines.length; row++) {
  38. const line = lines[row]
  39. if (offset <= line.length) {
  40. break
  41. }
  42. offset -= lines[row].length + 1
  43. } // + 1 for newline char
  44. return { row, column: offset }
  45. },
  46. }