X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fstyles%2Fplugin.js;h=2d9878b5611541f42fd4385faf312244a747fba6;hb=refs%2Ftags%2Fv3.2.2;hp=65a36c21fa386c333a14bbc6cf91d4a0ae9a017a;hpb=e7789c1ad838194d45eeee6ac2eb6e55f5cf35a1;p=ckeditor.git diff --git a/_source/plugins/styles/plugin.js b/_source/plugins/styles/plugin.js index 65a36c2..2d9878b 100644 --- a/_source/plugins/styles/plugin.js +++ b/_source/plugins/styles/plugin.js @@ -379,39 +379,9 @@ CKEDITOR.STYLE_OBJECT = 3; // Get the first node to be processed and the last, which concludes the // processing. - var boundaryNodes = range.getBoundaryNodes(); - var firstNode = boundaryNodes.startNode; - var lastNode = boundaryNodes.endNode.getNextSourceNode( true ); - - // Probably the document end is reached, we need a marker node. - if ( !lastNode ) - { - var marker; - lastNode = marker = document.createText( '' ); - lastNode.insertAfter( range.endContainer ); - } - // The detection algorithm below skips the contents inside bookmark nodes, so - // we'll need to make sure lastNode isn't the   inside a bookmark node. - var lastParent = lastNode.getParent(); - if ( lastParent && lastParent.getAttribute( '_fck_bookmark' ) ) - lastNode = lastParent; - - if ( lastNode.equals( firstNode ) ) - { - // If the last node is the same as the the first one, we must move - // it to the next one, otherwise the first one will not be - // processed. - lastNode = lastNode.getNextSourceNode( true ); - - // It may happen that there are no more nodes after it (the end of - // the document), so we must add something there to make our code - // simpler. - if ( !lastNode ) - { - lastNode = marker = document.createText( '' ); - lastNode.insertAfter( firstNode ); - } - } + var boundaryNodes = range.createBookmark(), + firstNode = boundaryNodes.startNode, + lastNode = boundaryNodes.endNode; var currentNode = firstNode; @@ -550,7 +520,7 @@ CKEDITOR.STYLE_OBJECT = 3; styleRange.insertNode( styleNode ); // Let's merge our new style with its neighbors, if possible. - mergeSiblings( styleNode ); + styleNode.mergeSiblings(); // As the style system breaks text nodes constantly, let's normalize // things for performance. @@ -568,8 +538,8 @@ CKEDITOR.STYLE_OBJECT = 3; } } - // Remove the temporary marking node.(#4111) - marker && marker.remove(); + firstNode.remove(); + lastNode.remove(); range.moveToBookmark( bookmark ); // Minimize the result range to exclude empty text nodes. (#5374) range.shrink( CKEDITOR.SHRINK_TEXT ); @@ -624,7 +594,7 @@ CKEDITOR.STYLE_OBJECT = 3; * no difference that they're separate entities in the DOM tree. So, merge * them before removal. */ - mergeSiblings( element ); + element.mergeSiblings(); removeFromElement( this, element ); } @@ -753,6 +723,10 @@ CKEDITOR.STYLE_OBJECT = 3; var iterator = range.createIterator(); iterator.enforceRealBlocks = true; + // make recognize
tag as a separator in ENTER_BR mode (#5121) + if ( this._.enterMode ) + iterator.enlargeBr = ( this._.enterMode != CKEDITOR.ENTER_BR ); + var block; var doc = range.document; var previousPreBlock; @@ -1057,47 +1031,11 @@ CKEDITOR.STYLE_OBJECT = 3; if ( firstChild ) { // Check the cached nodes for merging. - mergeSiblings( firstChild ); - - if ( lastChild && !firstChild.equals( lastChild ) ) - mergeSiblings( lastChild ); - } - } - } - - function mergeSiblings( element ) - { - if ( !element || element.type != CKEDITOR.NODE_ELEMENT || !CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) - return; - - mergeElements( element, element.getNext(), true ); - mergeElements( element, element.getPrevious() ); - } - - function mergeElements( element, sibling, isNext ) - { - if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT ) - { - var hasBookmark = sibling.getAttribute( '_fck_bookmark' ); - - if ( hasBookmark ) - sibling = isNext ? sibling.getNext() : sibling.getPrevious(); - - if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && element.isIdentical( sibling ) ) - { - // Save the last child to be checked too, to merge things like - // => - var innerSibling = isNext ? element.getLast() : element.getFirst(); - - if ( hasBookmark ) - ( isNext ? sibling.getPrevious() : sibling.getNext() ).move( element, !isNext ); - - sibling.moveChildren( element, !isNext ); - sibling.remove(); + firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings(); - // Now check the last inner child (see two comments above). - if ( innerSibling ) - mergeSiblings( innerSibling ); + if ( lastChild && !firstChild.equals( lastChild ) + && lastChild.type == CKEDITOR.NODE_ELEMENT ) + lastChild.mergeSiblings(); } } } @@ -1422,6 +1360,7 @@ CKEDITOR.editor.prototype.getStylesSet = function( callback ) * Otherwise, this setting has the "name:url" syntax, making it * possible to set the URL from which loading the styles file.
* Previously this setting was available as config.stylesCombo_stylesSet
+ * @name CKEDITOR.config.stylesSet * @type String|Array * @default 'default' * @since 3.3