AttributeManager: Simplify logic

pull/5003/head
Richard Hansen 2021-04-10 03:46:29 -04:00
parent e3d32a26b6
commit d40d59d9eb
1 changed files with 7 additions and 24 deletions

View File

@ -68,10 +68,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
// see https://github.com/ether/etherpad-lite/issues/2772
let allChangesets;
for (let row = start[0]; row <= end[0]; row++) {
const rowRange = this._findRowRange(row, start, end);
const startCol = rowRange[0];
const endCol = rowRange[1];
const [startCol, endCol] = this._findRowRange(row, start, end);
const rowChangeset = this._setAttributesOnRangeByLine(row, startCol, endCol, attribs);
// compose changesets of all rows into a single changeset
@ -89,26 +86,12 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
},
_findRowRange(row, start, end) {
let startCol, endCol;
const startLineOffset = this.rep.lines.offsetOfIndex(row);
const endLineOffset = this.rep.lines.offsetOfIndex(row + 1);
const lineLength = endLineOffset - startLineOffset;
// find column where range on this row starts
if (row === start[0]) { // are we on the first row of range?
startCol = start[1];
} else {
startCol = this.lineHasMarker(row) ? 1 : 0; // remove "*" used as line marker
}
// find column where range on this row ends
if (row === end[0]) { // are we on the last row of range?
endCol = end[1]; // if so, get the end of range, not end of row
} else {
endCol = lineLength - 1; // remove "\n"
}
// Subtract 1 for the end-of-line '\n' (it is never selected).
const lineLength =
this.rep.lines.offsetOfIndex(row + 1) - this.rep.lines.offsetOfIndex(row) - 1;
const markerWidth = this.lineHasMarker(row) ? 1 : 0;
const startCol = row === start[0] ? start[1] : markerWidth;
const endCol = row === end[0] ? end[1] : lineLength;
return [startCol, endCol];
},