mirror of https://github.com/vector-im/riot-web
don't put cursor position in NewlinePart after adding it
You can't append to it anyway, so mark it uneditable and skip uneditable parts if that's where an edit ended up. This has the added advantage that if there is text after a newly insert pill, the cursor will be put just before it rather than in the pill, after the last character.pull/21833/head
parent
0e3d4fbc0c
commit
f27607a74c
|
@ -88,7 +88,8 @@ export default class EditorModel {
|
||||||
}
|
}
|
||||||
this._mergeAdjacentParts();
|
this._mergeAdjacentParts();
|
||||||
const caretOffset = diff.at - removedOffsetDecrease + addedLen;
|
const caretOffset = diff.at - removedOffsetDecrease + addedLen;
|
||||||
const newPosition = this._positionForOffset(caretOffset, true);
|
let newPosition = this._positionForOffset(caretOffset, true);
|
||||||
|
newPosition = newPosition.skipUneditableParts(this._parts);
|
||||||
this._setActivePart(newPosition);
|
this._setActivePart(newPosition);
|
||||||
this._updateCallback(newPosition);
|
this._updateCallback(newPosition);
|
||||||
}
|
}
|
||||||
|
@ -261,4 +262,13 @@ class DocumentPosition {
|
||||||
get offset() {
|
get offset() {
|
||||||
return this._offset;
|
return this._offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skipUneditableParts(parts) {
|
||||||
|
const part = parts[this.index];
|
||||||
|
if (part && !part.canEdit) {
|
||||||
|
return new DocumentPosition(this.index + 1, 0);
|
||||||
|
} else {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,6 +205,14 @@ export class NewlinePart extends BasePart {
|
||||||
get type() {
|
get type() {
|
||||||
return "newline";
|
return "newline";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this makes the cursor skip this part when it is inserted
|
||||||
|
// rather than trying to append to it, which is what we want.
|
||||||
|
// As a newline can also be only one character, it makes sense
|
||||||
|
// as it can only be one character long. This caused #9741.
|
||||||
|
get canEdit() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class RoomPillPart extends PillPart {
|
export class RoomPillPart extends PillPart {
|
||||||
|
|
Loading…
Reference in New Issue