EditorShareJsCodec.js 1.4 KB

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