Skip to content

Commit

Permalink
Fix range collapsing after moving end position inward.
Browse files Browse the repository at this point in the history
Fixes #34
  • Loading branch information
bwrrp committed Jun 23, 2017
1 parent a3ddaff commit 1959ca7
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "slimdom",
"version": "2.0.0",
"version": "2.0.1",
"description": "Fast, tiny DOM implementation in pure JS",
"author": "Stef Busking",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion src/Range.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export default class Range {
const rootOfRange = getRootOfRange(this);
if (
rootOfNode !== rootOfRange ||
compareBoundaryPointPositions(node, offset, this.endContainer, this.endOffset) === POSITION_BEFORE
compareBoundaryPointPositions(node, offset, this.startContainer, this.startOffset) === POSITION_BEFORE
) {
this.startContainer = node;
this.startOffset = offset;
Expand Down
32 changes: 32 additions & 0 deletions test/Range.tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,23 @@ describe('Range', () => {
});

it('end after start is ok', () => {
// Move end forward
range.setEnd(element, 1);
chai.assert.equal(range.endContainer, element);
chai.assert.equal(range.endOffset, 1);
chai.assert.equal(range.startContainer, document);
chai.assert.equal(range.startOffset, 0);
chai.assert.equal(range.collapsed, false);
chai.assert.equal(range.commonAncestorContainer, document);

// Move end back
range.setEnd(element, 0);
chai.assert.equal(range.endContainer, element);
chai.assert.equal(range.endOffset, 0);
chai.assert.equal(range.startContainer, document);
chai.assert.equal(range.startOffset, 0);
chai.assert.equal(range.collapsed, false);
chai.assert.equal(range.commonAncestorContainer, document);
});

it('end before start moves start', () => {
Expand All @@ -54,6 +64,28 @@ describe('Range', () => {
chai.assert.equal(range.commonAncestorContainer, element);
});

it('start before end is ok', () => {
range.setEnd(document, 1);

// Move start forward
range.setStart(element, 1);
chai.assert.equal(range.startContainer, element);
chai.assert.equal(range.startOffset, 1);
chai.assert.equal(range.endContainer, document);
chai.assert.equal(range.endOffset, 1);
chai.assert.equal(range.collapsed, false);
chai.assert.equal(range.commonAncestorContainer, document);

// Move start back
range.setStart(element, 0);
chai.assert.equal(range.startContainer, element);
chai.assert.equal(range.startOffset, 0);
chai.assert.equal(range.endContainer, document);
chai.assert.equal(range.endOffset, 1);
chai.assert.equal(range.collapsed, false);
chai.assert.equal(range.commonAncestorContainer, document);
});

it('throws if the container is a doctype', () => {
const doctype = document.implementation.createDocumentType('html', '', '');
chai.assert.throws(() => range.setStart(doctype, 0), 'InvalidNodeTypeError');
Expand Down

0 comments on commit 1959ca7

Please sign in to comment.