EditorShareJsCodec.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. define([], function() {
  13. let EditorShareJsCodec
  14. return (EditorShareJsCodec = {
  15. rangeToShareJs(range, lines) {
  16. let offset = 0
  17. for (let i = 0; i < lines.length; i++) {
  18. const line = lines[i]
  19. offset += i < range.row ? line.length : range.column
  20. }
  21. offset += range.row // Include newlines
  22. return offset
  23. },
  24. changeToShareJs(delta, lines) {
  25. const offset = EditorShareJsCodec.rangeToShareJs(delta.start, lines)
  26. const text = delta.lines.join('\n')
  27. switch (delta.action) {
  28. case 'insert':
  29. return { i: text, p: offset }
  30. case 'remove':
  31. return { d: text, p: offset }
  32. default:
  33. throw new Error(`unknown action: ${delta.action}`)
  34. }
  35. },
  36. shareJsOffsetToRowColumn(offset, lines) {
  37. let row = 0
  38. for (row = 0; row < lines.length; row++) {
  39. const line = lines[row]
  40. if (offset <= line.length) {
  41. break
  42. }
  43. offset -= lines[row].length + 1
  44. } // + 1 for newline char
  45. return { row, column: offset }
  46. }
  47. })
  48. })