From 57df9edc89f20c308120d7fea0bd0ce67a98bc92 Mon Sep 17 00:00:00 2001 From: hackerwins Date: Tue, 19 Feb 2019 20:48:41 +0900 Subject: [PATCH] Fix #3093. - Add 'npm run test: watch' to test while checking results. --- package.json | 1 + src/js/base/core/range.js | 18 ++++++++++++++---- test/base/core/range.spec.js | 15 +++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 39462fdba..a623973e0 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "lint": "eslint src/js plugin lang test Gruntfile.js", "download:selenium": "if [ ! -e test/libs/selenium-server-standalone.jar ]; then wget http://selenium-release.storage.googleapis.com/3.6/selenium-server-standalone-3.6.0.jar -O test/libs/selenium-server-standalone.jar; fi", "test": "karma start karma.conf.js --single-run", + "test:watch": "karma start karma.conf.js", "test:travis": "grunt test-travis --verbose", "test:saucelabs": "grunt saucelabs-test" }, diff --git a/src/js/base/core/range.js b/src/js/base/core/range.js index e55ae00de..68cb386d6 100644 --- a/src/js/base/core/range.js +++ b/src/js/base/core/range.js @@ -219,14 +219,24 @@ class WrappedRange { normalize() { /** * @param {BoundaryPoint} point - * @param {Boolean} isLeftToRight + * @param {Boolean} isLeftToRight - true: prefer to choose right node + * - false: prefer to choose left node * @return {BoundaryPoint} */ const getVisiblePoint = function(point, isLeftToRight) { + // Just use the given point [XXX:Adhoc] + // - case 01. if the point is on the middle of the node + // - case 02. if the point is on the right edge and prefer to choose left node + // - case 03. if the point is on the left edge and prefer to choose right node + // - case 04. if the point is on the right edge and prefer to choose right node but the node is void + // - case 05. if the point is on the left edge and prefer to choose left node but the node is void + // - case 06. if the point is on the block node and there is no children if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || - (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || - (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || - (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { + (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || + (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || + (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling)) || + (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling)) || + (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } diff --git a/test/base/core/range.spec.js b/test/base/core/range.spec.js index 43d44fd29..371a2df5a 100644 --- a/test/base/core/range.spec.js +++ b/test/base/core/range.spec.js @@ -178,7 +178,7 @@ describe('base:core.range', () => { expect(rng.eo).to.equal(0); }); - it('should return

text

|text

for

text

|text

', () => { + it('should return

text

|text

for

text

|text

', () => { var $cont = $('

text

text

'); var $p = $cont.find('p'); @@ -189,7 +189,7 @@ describe('base:core.range', () => { expect(rng.eo).to.equal(0); }); - it('should return

|text

text|

for |

text

text

|', () => { + it('should return

|text

text|

for |

text

text

|', () => { var $cont = $('

text

text

'); var $p = $cont.find('p'); @@ -213,6 +213,17 @@ describe('base:core.range', () => { expect(rng.ec).to.deep.equal($b[0].firstChild); expect(rng.eo).to.equal(0); }); + + it('should return

|text

for

|text

', () => { + var $cont = $('

text

'); + var $img = $cont.find('img'); + var text = $img[0].nextSibling; + + var rng = range.create(text, 0, text, 0).normalize(); + expect(rng.sc).to.equal(text); + expect(rng.so).to.equal(0); + expect(rng.isCollapsed()).to.true; + }); }); describe('insertNode', () => {