50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
import cledit from './cleditCore';
|
|
|
|
const DIFF_DELETE = -1;
|
|
const DIFF_INSERT = 1;
|
|
const DIFF_EQUAL = 0;
|
|
|
|
let idCounter = 0;
|
|
|
|
class Marker {
|
|
constructor(offset, trailing) {
|
|
this.id = idCounter;
|
|
idCounter += 1;
|
|
this.offset = offset;
|
|
this.trailing = trailing;
|
|
}
|
|
|
|
adjustOffset(diffs) {
|
|
let startOffset = 0;
|
|
diffs.cl_each((diff) => {
|
|
const diffType = diff[0];
|
|
const diffText = diff[1];
|
|
const diffOffset = diffText.length;
|
|
switch (diffType) {
|
|
case DIFF_EQUAL:
|
|
startOffset += diffOffset;
|
|
break;
|
|
case DIFF_INSERT:
|
|
if (
|
|
this.trailing
|
|
? this.offset > startOffset
|
|
: this.offset >= startOffset
|
|
) {
|
|
this.offset += diffOffset;
|
|
}
|
|
startOffset += diffOffset;
|
|
break;
|
|
case DIFF_DELETE:
|
|
if (this.offset > startOffset) {
|
|
this.offset -= Math.min(diffOffset, this.offset - startOffset);
|
|
}
|
|
break;
|
|
default:
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
cledit.Marker = Marker;
|