Skip to content

Commit

Permalink
consider bookmark
Browse files Browse the repository at this point in the history
  • Loading branch information
yiminghe committed May 16, 2012
1 parent 30364db commit c1f1611
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 57 deletions.
13 changes: 6 additions & 7 deletions src/editor/src/editor/core/range.js
Expand Up @@ -40,8 +40,11 @@ KISSY.add("editor/core/range", function (S, Editor, Utils, Walker, ElementPath)
EMPTY = {"area":1, "base":1, "br":1, "col":1, "hr":1, "img":1, "input":1, "link":1, "meta":1, "param":1};


var isNotWhitespaces = Walker.whitespaces(TRUE),
isWhitespaces = Walker.whitespaces();
var isWhitespace = new Walker.whitespaces(),
isBookmark = new Walker.bookmark(),
isNotWhitespaces = Walker.whitespaces(TRUE),
isNotBookmarks = Walker.bookmark(false, true);


/**
* Extract html content within range.
Expand Down Expand Up @@ -662,7 +665,6 @@ KISSY.add("editor/core/range", function (S, Editor, Utils, Walker, ElementPath)
}

var walker = new Walker(walkerRange),
isNotBookmarks = Walker.bookmark(false, true),
node, pre;

walker.evaluator = function (node) {
Expand Down Expand Up @@ -1147,7 +1149,7 @@ KISSY.add("editor/core/range", function (S, Editor, Utils, Walker, ElementPath)
while (enlarge) {
// 兄弟节点是否都是空节点?
while (sibling) {
if (isWhitespace(sibling)) {
if (isWhitespace(sibling) || isBookmark(sibling)) {
sibling = sibling[direction];
} else {
break;
Expand Down Expand Up @@ -1598,9 +1600,6 @@ KISSY.add("editor/core/range", function (S, Editor, Utils, Walker, ElementPath)
return c1 || c2 || c3;
}

var isWhitespace = new Walker.whitespaces(),
isBookmark = new Walker.bookmark();

function nonWhitespaceOrIsBookmark(node) {
// Whitespaces and bookmark nodes are to be ignored.
return !isWhitespace(node) && !isBookmark(node);
Expand Down
132 changes: 82 additions & 50 deletions src/editor/tests/range-spec.js
Expand Up @@ -947,91 +947,123 @@ KISSY.use("editor", function (S, Editor) {

describe("enlarge", function () {

it("enlarge element within same element", function () {

var div = $("<div><strong><span>123</span>abc</strong>def</div>")
.prependTo("body");
describe("enlarge element", function () {
it("enlarge element within same element", function () {

var span = div.first().first();
var div = $("<div><strong><span>123</span>abc</strong>def</div>")
.prependTo("body");

var textNode1 = $(span[0].firstChild);
var span = div.first().first();

var textNode2 = $(span[0].nextSibling);
var textNode1 = $(span[0].firstChild);

var range = new Range(document);
var textNode2 = $(span[0].nextSibling);

range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);
var range = new Range(document);

range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);
range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);

expect(range.startContainer[0]).toBe(div[0]);
expect(range.endContainer[0]).toBe(div[0]);
expect(range.startOffset).toBe(0);
expect(range.endOffset).toBe(1);
range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);

div.remove();
});
expect(range.startContainer[0]).toBe(div[0]);
expect(range.endContainer[0]).toBe(div[0]);
expect(range.startOffset).toBe(0);
expect(range.endOffset).toBe(1);

div.remove();
});

it("enlarge element within same element 2", function () {

var div = $("<div><strong>x<span>123</span>abc</strong>def</div>")
.prependTo("body");
it("enlarge element within same element 2", function () {

var span = div.first("strong").first("span");
var div = $("<div><strong>x<span>123</span>abc</strong>def</div>")
.prependTo("body");

var textNode1 = $(span[0].firstChild);
var span = div.first("strong").first("span");

var textNode2 = $(span[0].nextSibling);
var textNode1 = $(span[0].firstChild);

var strong = div.first("strong");
var textNode2 = $(span[0].nextSibling);

var range = new Range(document);
var strong = div.first("strong");

range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);
var range = new Range(document);

range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);
range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);

expect(range.startContainer[0]).toBe(strong[0]);
expect(range.endContainer[0]).toBe(textNode2[0]);
expect(range.startOffset).toBe(1);
expect(range.endOffset).toBe(textNode2[0].nodeValue.length);
range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);

div.remove();
});
expect(range.startContainer[0]).toBe(strong[0]);
expect(range.endContainer[0]).toBe(textNode2[0]);
expect(range.startOffset).toBe(1);
expect(range.endOffset).toBe(textNode2[0].nodeValue.length);

div.remove();
});


it("enlarge element within same element 3", function () {

var div = $("<div><strong>x<span>123</span><span>abc</span></strong>def</div>")
.prependTo("body");

var span = div.first("strong").first("span");

it("enlarge element within same element 3", function () {
var span2 = span.next();

var div = $("<div><strong>x<span>123</span><span>abc</span></strong>def</div>")
.prependTo("body");
var textNode1 = $(span[0].firstChild);

var span = div.first("strong").first("span");
var textNode2 = $(span2[0].firstChild);

var span2 = span.next();
var strong = div.first("strong");

var textNode1 = $(span[0].firstChild);
var range = new Range(document);

var textNode2 = $(span2[0].firstChild);
range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);

var strong = div.first("strong");
range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);

var range = new Range(document);
expect(range.startContainer[0]).toBe(strong[0]);
expect(range.endContainer[0]).toBe(strong[0]);
expect(range.startOffset).toBe(1);
expect(range.endOffset).toBe(3);

range.setStart(textNode1, 0);
range.setEnd(textNode2, textNode2[0].nodeValue.length);
div.remove();
});

range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);

expect(range.startContainer[0]).toBe(strong[0]);
expect(range.endContainer[0]).toBe(strong[0]);
expect(range.startOffset).toBe(1);
expect(range.endOffset).toBe(3);
it("enlarge element even bookmark", function () {
var div = $("<div>" +
"<strong>" +
"<span _ke_bookmark='1'></span>" +
"<span>123</span><span>abc</span>" +
"<span _ke_bookmark='1'></span>" +
"</strong>" +
"def" +
"</div>")
.prependTo("body");

div.remove();
var span = div.one("span").next();
var span2 = span.next();
var range = new Range(document);
range.setStart(span, 0);
range.setEnd(span2, 1);

range.enlarge(Editor.RANGE.ENLARGE_ELEMENT);

expect(range.startContainer[0]).toBe(div[0]);
expect(range.endContainer[0]).toBe(div[0]);
expect(range.startOffset).toBe(0);
expect(range.endOffset).toBe(1);

});
});


});

});
Expand Down

0 comments on commit c1f1611

Please sign in to comment.