Ticket #2970: 2970_2.patch

File 2970_2.patch, 11.9 KB (added by Garry Yao, 10 years ago)
  • _source/tests/core/tools.html

     
    4646                        assert.areSame( 'Good'          , target.prop6, 'prop6 doesn\'t match' );
    4747                        assert.areSame( fakeArray       , target.prop7, 'prop7 doesn\'t match' );
    4848                },
     49               
     50                /**
     51                 *  Test extend with 'overwrite' option and 'propertiesList' option.
     52                 */
     53                test_extend2 : function()
     54                {
     55                        var source = {
     56                                'prop1' : 1,
     57                                'prop2' : 2,
     58                                'prop3' : 3
     59                        };
     60                       
     61                        var result = CKEDITOR.tools.extend( {
     62                                'prop1' : 1,
     63                                'prop2' : 1
     64                        }, {
     65                                'prop1' : 2,
     66                                'prop2' : 2,
     67                                'prop3' : 3
     68                        }, true, {
     69                                'prop2' : 1,
     70                                'prop3' : 1
     71                        } );
     72                       
     73                        assert.areEqual( 1 ,  source.prop1);
     74                        assert.areEqual( 2 ,  source.prop2);
     75                        assert.areEqual( 3 ,  source.prop3);
     76                       
     77                },
    4978
    5079                test_isArray1 : function()
    5180                {
  • _source/tests/core/dom/documentFragment.html

     
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2<html xmlns="http://www.w3.org/1999/xhtml">
     3<head>
     4        <title>CKEDITOR.dom.documentFragment</title>
     5        <link rel="stylesheet" type="text/css" href="../../test.css" />
     6        <script type="text/javascript" src="../../../../ckeditor_source.js"></script> <!-- %REMOVE_LINE%
     7        <script type="text/javascript" src="../../../ckeditor.js"></script>
     8        %REMOVE_LINE% -->
     9        <script type="text/javascript" src="../../test.js"></script>
     10        <script type="text/javascript">
     11        //<![CDATA[
     12CKEDITOR.test.addTestCase( ( function()
     13{
     14        // Local reference to the "assert" object.
     15        var assert = YAHOO.util.Assert;
     16
     17        return {
     18               
     19                test_appendTo : function()
     20                {
     21                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     22                        var inner = new CKEDITOR.dom.element( 'b' );
     23                        frag.append( inner );
     24                        var container = CKEDITOR.document.getById( 'fragmentContainer1' );
     25                        frag.appendTo( container );
     26                        assert.isTrue( container.getLast().equals( inner ) );
     27                },
     28
     29                test_append : function()
     30                {
     31                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     32                        var inner = new CKEDITOR.dom.element( 'b' );
     33                        frag.append( inner );
     34                        var container = CKEDITOR.document.getById( 'fragmentContainer3' );
     35                        container.append( frag );
     36                        assert.isTrue( container.getLast().equals( inner ) );
     37                },
     38
     39                test_getFirst : function()
     40                {
     41                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     42                        var inner = new CKEDITOR.dom.element( 'b' );
     43                        frag.append( inner );
     44                        var first = frag.getFirst();
     45                        assert.isTrue( first.equals( inner ) );
     46                },
     47
     48                test_getLast : function()
     49                {
     50                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     51                        var inner = new CKEDITOR.dom.element( 'b' ),
     52                                lastInner = inner.clone();
     53                        frag.append( inner );
     54                        frag.append( lastInner );
     55                        var last = frag.getLast();
     56                        assert.isTrue( last.equals( lastInner ) );
     57                },
     58               
     59                test_moveChildren : function()
     60                {
     61                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     62                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     63                                inner2 = new CKEDITOR.dom.element( 'i' );
     64                        frag.append( inner1 );
     65                        frag.append( inner2 );
     66                       
     67                        // Move to element
     68                        var element = new CKEDITOR.dom.element('span');
     69                        frag.moveChildren( element, true );
     70                        assert.isTrue( element.getFirst().equals( inner1 ) );
     71                        assert.isTrue( element.getLast().equals( inner2 ) );
     72                },
     73               
     74                test_moveChildren2 : function()
     75                {
     76                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     77                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     78                                inner2 = new CKEDITOR.dom.element( 'i' );
     79                        frag.append( inner1 );
     80                        frag.append( inner2 );
     81                       
     82                        // Move to fragment
     83                        var anotherFrag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     84                        frag.moveChildren( anotherFrag, true );
     85                        assert.isTrue( anotherFrag.getFirst().equals( inner1 ) );
     86                        assert.isTrue( anotherFrag.getLast().equals( inner2 ) );
     87                },
     88
     89                test_appendText2 : function()
     90                {
     91                        var element = new CKEDITOR.dom.element( 'script' );
     92                        element.appendText( 'Test appendText' );
     93                        assert.areEqual( 'Test appendText', element.$.text );
     94                },
     95
     96                test_insertAfter : function()
     97                {
     98                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     99                        var inner = new CKEDITOR.dom.element( 'b' );
     100                        frag.append( inner );
     101                        var container = CKEDITOR.document.getById( 'fragmentContainer2' );
     102                        var sibling = CKEDITOR.document.getById( 'fragmentSibling1' );
     103                        frag.insertAfterNode( sibling );
     104                        assert.isTrue( container.getLast().equals( inner ) );
     105                },
     106               
     107                test_getChildCount : function()
     108                {
     109                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     110                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     111                                inner2 = new CKEDITOR.dom.element( 'i' );
     112                        frag.append( inner1 );
     113                        frag.append( inner2 );
     114                       
     115                        assert.areEqual( 2, frag.getChildCount() );                     
     116                },
     117
     118                test_getChild: function()
     119                {
     120                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     121                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     122                                inner2 = new CKEDITOR.dom.element( 'i' );
     123                        frag.append( inner1 );
     124                        frag.append( inner2 );
     125                       
     126                        assert.isTrue( inner2.equals( frag.getChild( 1 ) ) );                   
     127                },
     128               
     129                test_getChildren: function()
     130                {
     131                        var frag = new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     132                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     133                                inner2 = new CKEDITOR.dom.element( 'i' );
     134                        frag.append( inner1 );
     135                        frag.append( inner2 );
     136                       
     137                        var childNodesList = frag.getChildren();
     138                        assert.areEqual( 2,  childNodesList.count() );
     139                        assert.isTrue( inner2.equals( childNodesList.getItem( 1 ) ) );                 
     140                },
     141               
     142                test_getDocument : function()
     143                {
     144                        var doc = CKEDITOR.document,
     145                                innerDoc = new CKEDITOR.dom.document(
     146                                        doc.getById( 'innerFrame' ).$.contentWindow.document );
     147                        var frag1 = new CKEDITOR.dom.documentFragment( doc ),
     148                                frag2 = new CKEDITOR.dom.documentFragment( innerDoc );
     149                               
     150                        assert.isTrue( doc.equals( frag1.getDocument() ) );
     151                        assert.isTrue( innerDoc.equals( frag2.getDocument() ) );
     152                },
     153               
     154                name :document.title
     155        };
     156} )() );
     157
     158        //]]>
     159        </script>
     160</head>
     161<body>
     162        <div id="fragmentContainer1"></div>
     163        <div id="fragmentContainer2"><div id="fragmentSibling1"></div></div>
     164        <div id="fragmentContainer3"></div>
     165        <iframe id="innerFrame" name="innerFrame" src="about:blank"></iframe>
     166</body>
     167</html>
     168 No newline at end of file
  • _source/core/tools.js

     
    8383                 * @param {Object} target The object to be extended.
    8484                 * @param {Object} source[,souce(n)] The objects from which copy
    8585                 *              properties. Any number of objects can be passed to this function.
    86                  * @param {Boolean} [overwrite] Indicates that properties already present
    87                  *              in the target object must be overwritten. This must be the last
    88                  *              parameter in the function call.
     86                 * @param {Boolean} overwrite If 'true' is specified it indicates that
     87                 *            properties already present in the target object could be
     88                 *            overwritten by subsequent objects.
     89                 * @param {Object} properties Only properties within the specified names
     90                 *            list will be received from the source object.
    8991                 * @returns {Object} the extended object (target).
    9092                 * @example
    9193                 * // Create the sample object.
     
    108110                extend : function( target )
    109111                {
    110112                        var argsLength = arguments.length,
    111                                 overwrite = arguments[ argsLength - 1 ];
     113                                overwrite, propertiesList;
    112114
    113                         if ( typeof overwrite == 'boolean' )
     115                        if ( CKEDITOR.tools.isArray( overwrite = arguments[ argsLength - 1 ] ) )
    114116                                argsLength--;
    115                         else
    116                                 overwrite = false;
    117 
     117                        else if ( CKEDITOR.tools.isArray( overwrite = arguments[ argsLength - 2 ] ) )
     118                        {
     119                                propertiesList = arguments [ argsLength -1 ];
     120                                argsLength-=2;
     121                        }
    118122                        for ( var i = 1 ; i < argsLength ; i++ )
    119123                        {
    120124                                var source = arguments[ i ];
    121 
    122125                                for ( var propertyName in source )
    123126                                {
    124                                         if ( overwrite || target[ propertyName ] == undefined )
    125                                                 target[ propertyName ] = source[ propertyName ];
     127                                        // Only copy existed fields if in overwrite mode.
     128                                        if ( overwrite === true || target[ propertyName ] == undefined )
     129                                        {
     130                                                // Only copy specified fields if list is provided.
     131                                                if ( propertiesList && ( propertyName in propertiesList )  || !propertiesList )
     132                                                        target[ propertyName ] = source[ propertyName ];
     133
     134                                        }
    126135                                }
    127136                        }
    128137
  • _source/core/dom/documentFragment.js

     
    22Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
    33For licensing, see LICENSE.html or http://ckeditor.com/license
    44*/
    5 
     5/**
     6 * DocumentFragment is a "lightweight" or "minimal" Document object. It is
     7 * commonly used to extract a portion of a document's tree or to create a new
     8 * fragment of a document. Various operations may take DocumentFragment objects
     9 * as arguments and results in all the child nodes of the DocumentFragment being
     10 * moved to the child list of this node.
     11 *
     12 * @param {Object} ownerDocument
     13 */
    614CKEDITOR.dom.documentFragment = function( ownerDocument )
    715{
    8         this.$ = CKEDITOR.env.ie ? ownerDocument.$.createElement( 'div' ) : ownerDocument.$.createDocumentFragment();
     16        ownerDocument = ownerDocument || CKEDITOR.document;
     17        this.$ = ownerDocument.$.createDocumentFragment();
    918};
    1019
    11 (function()
    12 {
    13         var elementPrototype = CKEDITOR.dom.element.prototype;
    14 
    15         CKEDITOR.dom.documentFragment.prototype =
     20CKEDITOR.tools.extend( CKEDITOR.dom.documentFragment.prototype,
     21        CKEDITOR.dom.element.prototype,
    1622        {
    17                 type : CKEDITOR.NODE_DOCUMENT_FRAGMENT,
    18 
    19                 append : elementPrototype.append,
    20 
    21                 getFirst : elementPrototype.getFirst,
    22 
    23                 getLast : elementPrototype.getLast,
    24 
    25                 appendTo : function( targetElement )
    26                 {
    27                         if ( CKEDITOR.env.ie )
    28                                 elementPrototype.moveChildren.call( this, targetElement );
    29                         else
    30                                 targetElement.$.appendChild( this.$ );
    31                 },
    32 
    33                 moveChildren : elementPrototype.moveChildren,
    34 
     23                type :CKEDITOR.NODE_DOCUMENT_FRAGMENT,
    3524                insertAfterNode : function( node )
    3625                {
    37                         var $ = this.$;
    38                         var $node = node.$;
    39                         var $parent = $node.parentNode;
    40 
    41                         if ( CKEDITOR.env.ie )
    42                         {
    43                                 for ( var child ; child = $.lastChild ; )
    44                                         $parent.insertBefore( $.removeChild( child ), $node.nextSibling );
    45                         }
    46                         else
    47                                 $parent.insertBefore( $, $node.nextSibling );
    48                 },
    49 
    50                 replace : function( nodeToReplace )
    51                 {
    52                         this.insertAfterNode( nodeToReplace );
    53                         nodeToReplace.remove();
    54                 },
    55 
    56                 trim : elementPrototype.trim,
    57                 ltrim : elementPrototype.ltrim,
    58                 rtrim : elementPrototype.rtrim,
    59                 getFirst : elementPrototype.getFirst,
    60                 getLast : elementPrototype.getLast,
    61                 getDocument : elementPrototype.getDocument,
    62                 getChildCount : elementPrototype.getChildCount,
    63                 getChild : elementPrototype.getChild,
    64                 contains : elementPrototype.contains
    65         };
    66 })();
     26                        node = node.$;
     27                        node.parentNode.insertBefore( this.$, node.nextSibling );
     28                }
     29        }, [ 'append', 'getFirst', 'getLast', 'appendTo', 'moveChildren',
     30                'insertAfterNode', 'replace', 'trim', 'ltrim', 'rtrim',  'getDocument',
     31                'getChildCount', 'getChild', 'getChildren' ] );
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy