From 3b35bd273a79f6b01fda7a246aed64aca147ea7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 21 Mar 2016 02:20:06 +0100 Subject: Upgrade to 4.5.7 and add some plugin --- sources/core/dom/comment.js | 4 +-- sources/core/dom/document.js | 4 +-- sources/core/dom/documentfragment.js | 2 +- sources/core/dom/domobject.js | 2 +- sources/core/dom/element.js | 2 +- sources/core/dom/elementpath.js | 4 +-- sources/core/dom/event.js | 4 +-- sources/core/dom/iterator.js | 2 +- sources/core/dom/node.js | 13 ++++--- sources/core/dom/nodelist.js | 4 +-- sources/core/dom/range.js | 67 ++++++++++++++++++++++++++++++------ sources/core/dom/rangelist.js | 4 +-- sources/core/dom/text.js | 4 +-- sources/core/dom/walker.js | 6 ++-- sources/core/dom/window.js | 4 +-- 15 files changed, 89 insertions(+), 37 deletions(-) (limited to 'sources/core/dom') diff --git a/sources/core/dom/comment.js b/sources/core/dom/comment.js index b4e67833..69828c2e 100644 --- a/sources/core/dom/comment.js +++ b/sources/core/dom/comment.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/document.js b/sources/core/dom/document.js index ea0290f0..f287245e 100644 --- a/sources/core/dom/document.js +++ b/sources/core/dom/document.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/documentfragment.js b/sources/core/dom/documentfragment.js index 5015144d..ffca9e5d 100644 --- a/sources/core/dom/documentfragment.js +++ b/sources/core/dom/documentfragment.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/domobject.js b/sources/core/dom/domobject.js index 21a351d7..607e9f3c 100644 --- a/sources/core/dom/domobject.js +++ b/sources/core/dom/domobject.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/element.js b/sources/core/dom/element.js index d5181282..b586b027 100644 --- a/sources/core/dom/element.js +++ b/sources/core/dom/element.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/elementpath.js b/sources/core/dom/elementpath.js index 55b776d5..1ee551bb 100644 --- a/sources/core/dom/elementpath.js +++ b/sources/core/dom/elementpath.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/event.js b/sources/core/dom/event.js index ee88d78c..7cc1bd80 100644 --- a/sources/core/dom/event.js +++ b/sources/core/dom/event.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/iterator.js b/sources/core/dom/iterator.js index 99491218..41a823c8 100644 --- a/sources/core/dom/iterator.js +++ b/sources/core/dom/iterator.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/node.js b/sources/core/dom/node.js index 5d791319..7818b079 100644 --- a/sources/core/dom/node.js +++ b/sources/core/dom/node.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @@ -373,7 +373,7 @@ CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, { // The idea is - all empty text nodes will be virtually merged into their adjacent text nodes. // If an empty text node does not have an adjacent non-empty text node we can return -1 straight away, // because it and all its sibling text nodes will be merged into an empty text node and then totally ignored. - if ( normalized && current.nodeType == CKEDITOR.NODE_TEXT && !current.nodeValue ) { + if ( normalized && current.nodeType == CKEDITOR.NODE_TEXT && isEmpty( current ) ) { var adjacent = getAdjacentNonEmptyTextNode( current ) || getAdjacentNonEmptyTextNode( current, true ); if ( !adjacent ) @@ -382,7 +382,7 @@ CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, { do { // Bypass blank node and adjacent text nodes. - if ( normalized && current != this.$ && current.nodeType == CKEDITOR.NODE_TEXT && ( isNormalizing || !current.nodeValue ) ) + if ( normalized && current != this.$ && current.nodeType == CKEDITOR.NODE_TEXT && ( isNormalizing || isEmpty( current ) ) ) continue; index++; @@ -401,7 +401,12 @@ CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype, { // If found a non-empty text node, then return it. // If not, then continue search. - return sibling.nodeValue ? sibling : getAdjacentNonEmptyTextNode( sibling, lookForward ); + return isEmpty( sibling ) ? getAdjacentNonEmptyTextNode( sibling, lookForward ) : sibling; + } + + // Checks whether a text node is empty or is FCSeq string (which will be totally removed when normalizing). + function isEmpty( textNode ) { + return !textNode.nodeValue || textNode.nodeValue == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE; } }, diff --git a/sources/core/dom/nodelist.js b/sources/core/dom/nodelist.js index 0bbe3ee6..0f91eaa1 100644 --- a/sources/core/dom/nodelist.js +++ b/sources/core/dom/nodelist.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/range.js b/sources/core/dom/range.js index fe75c550..b5e87363 100644 --- a/sources/core/dom/range.js +++ b/sources/core/dom/range.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @@ -804,12 +804,12 @@ CKEDITOR.dom.range = function( root ) { var sum = 0; while ( ( node = node.getPrevious() ) && node.type == CKEDITOR.NODE_TEXT ) - sum += node.getLength(); + sum += node.getText().replace( CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE, '' ).length; return sum; } - function normalize( limit ) { + function normalizeTextNodes( limit ) { var container = limit.container, offset = limit.offset; @@ -820,11 +820,13 @@ CKEDITOR.dom.range = function( root ) { offset = container.getLength(); } - // Now, if limit is anchored in element and has at least two nodes before it, + // Now, if limit is anchored in element and has at least one node before it, // it may happen that some of them will be merged. Normalize the offset - // by setting it to normalized index of its preceding node. - if ( container.type == CKEDITOR.NODE_ELEMENT && offset > 1 ) - offset = container.getChild( offset - 1 ).getIndex( true ) + 1; + // by setting it to normalized index of its preceding, safe node. + // (safe == one for which getIndex(true) does not return -1, so one which won't disappear). + if ( container.type == CKEDITOR.NODE_ELEMENT && offset > 0 ) { + offset = getPrecedingSafeNodeIndex( container, offset ) + 1; + } // The last step - fix the offset inside text node by adding // lengths of preceding text nodes which will be merged with container. @@ -870,6 +872,48 @@ CKEDITOR.dom.range = function( root ) { limit.offset = offset; } + function normalizeFCSeq( limit, root ) { + var fcseq = root.getCustomData( 'cke-fillingChar' ); + + if ( !fcseq ) { + return; + } + + var container = limit.container; + + if ( fcseq.equals( container ) ) { + limit.offset -= CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length; + + // == 0 handles case when limit was at the end of FCS. + // < 0 handles all cases where limit was somewhere in the middle or at the beginning. + // > 0 (the "else" case) means cases where there are some more characters in the FCS node (FCSabc^def). + if ( limit.offset <= 0 ) { + limit.offset = container.getIndex(); + limit.container = container.getParent(); + } + return; + } + + // And here goes the funny part - all other cases are handled inside node.getAddress() and getIndex() thanks to + // node.getIndex() being aware of FCS (handling it as an empty node). + } + + // Finds a normalized index of a safe node preceding this one. + // Safe == one that will not disappear, so one for which getIndex( true ) does not return -1. + // Return -1 if there's no safe preceding node. + function getPrecedingSafeNodeIndex( container, offset ) { + var index; + + while ( offset-- ) { + index = container.getChild( offset ).getIndex( true ); + + if ( index >= 0 ) + return index; + } + + return -1; + } + return function( normalized ) { var collapsed = this.collapsed, bmStart = { @@ -882,10 +926,13 @@ CKEDITOR.dom.range = function( root ) { }; if ( normalized ) { - normalize( bmStart ); + normalizeTextNodes( bmStart ); + normalizeFCSeq( bmStart, this.root ); - if ( !collapsed ) - normalize( bmEnd ); + if ( !collapsed ) { + normalizeTextNodes( bmEnd ); + normalizeFCSeq( bmEnd, this.root ); + } } return { diff --git a/sources/core/dom/rangelist.js b/sources/core/dom/rangelist.js index 9c558b36..d02fc033 100644 --- a/sources/core/dom/rangelist.js +++ b/sources/core/dom/rangelist.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/text.js b/sources/core/dom/text.js index 7c403f90..c3132590 100644 --- a/sources/core/dom/text.js +++ b/sources/core/dom/text.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ diff --git a/sources/core/dom/walker.js b/sources/core/dom/walker.js index 5f2c8f40..746b4067 100644 --- a/sources/core/dom/walker.js +++ b/sources/core/dom/walker.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @@ -388,9 +388,9 @@ return function( node ) { var isWhitespace; if ( node && node.type == CKEDITOR.NODE_TEXT ) { - // whitespace, as well as the text cursor filler node we used in Webkit. (#9384) + // Whitespace, as well as the Filling Char Sequence text node used in Webkit. (#9384, #13816) isWhitespace = !CKEDITOR.tools.trim( node.getText() ) || - CKEDITOR.env.webkit && node.getText() == '\u200b'; + CKEDITOR.env.webkit && node.getText() == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE; } return !!( isReject ^ isWhitespace ); diff --git a/sources/core/dom/window.js b/sources/core/dom/window.js index 123c981a..edfeb84e 100644 --- a/sources/core/dom/window.js +++ b/sources/core/dom/window.js @@ -1,5 +1,5 @@ -/** - * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +/** + * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ -- cgit v1.2.3