overleaf/services/web/frontend/js/ide/editor/EditorShareJsCodec.js

51 lines
1.3 KiB
JavaScript
Raw Normal View History

/* eslint-disable
max-len,
no-return-assign,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
let EditorShareJsCodec
export default EditorShareJsCodec = {
rangeToShareJs(range, lines) {
let offset = 0
for (let i = 0; i < lines.length; i++) {
const line = lines[i]
offset += i < range.row ? line.length : range.column
}
offset += range.row // Include newlines
return offset
},
changeToShareJs(delta, lines) {
const offset = EditorShareJsCodec.rangeToShareJs(delta.start, lines)
const text = delta.lines.join('\n')
switch (delta.action) {
case 'insert':
return { i: text, p: offset }
case 'remove':
return { d: text, p: offset }
default:
throw new Error(`unknown action: ${delta.action}`)
}
},
shareJsOffsetToRowColumn(offset, lines) {
let row = 0
for (row = 0; row < lines.length; row++) {
const line = lines[row]
if (offset <= line.length) {
break
}
offset -= lines[row].length + 1
} // + 1 for newline char
return { row, column: offset }
},
}