Ticket #2970: 2970_3.patch

File 2970_3.patch, 13.2 KB (added by Garry Yao, 11 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 =
     22                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     23                        var inner =
     24                                        new CKEDITOR.dom.element( 'b' );
     25                        frag.append( inner );
     26                        var container = CKEDITOR.document.getById( 'fragmentContainer1' );
     27                        frag.appendTo( container );
     28                        assert.isTrue( container.getLast().equals( inner ) );
     29                },
     30
     31                test_append : function()
     32                {
     33                        var frag =
     34                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     35                        var inner =
     36                                        new CKEDITOR.dom.element( 'b' );
     37                        frag.append( inner );
     38                        var container = CKEDITOR.document.getById( 'fragmentContainer3' );
     39                        container.append( frag );
     40                        assert.isTrue( container.getLast().equals( inner ) );
     41                },
     42
     43                test_getFirst : function()
     44                {
     45                        var frag =
     46                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     47                        var inner =
     48                                        new CKEDITOR.dom.element( 'b' );
     49                        frag.append( inner );
     50                        var first = frag.getFirst();
     51                        assert.isTrue( first.equals( inner ) );
     52                },
     53
     54                test_getLast : function()
     55                {
     56                        var frag =
     57                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     58                        var inner =
     59                                        new CKEDITOR.dom.element( 'b' ), lastInner = inner.clone();
     60                        frag.append( inner );
     61                        frag.append( lastInner );
     62                        var last = frag.getLast();
     63                        assert.isTrue( last.equals( lastInner ) );
     64                },
     65
     66                test_moveChildren : function()
     67                {
     68                        var frag =
     69                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     70                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     71                        inner2 = new CKEDITOR.dom.element( 'i' );
     72                        frag.append( inner1 );
     73                        frag.append( inner2 );
     74
     75                        // Move to element
     76                        var element = new CKEDITOR.dom.element( 'span' );
     77                        frag.moveChildren( element, true );
     78                        assert.isTrue( element.getFirst().equals( inner1 ) );
     79                        assert.isTrue( element.getLast().equals( inner2 ) );
     80                },
     81
     82                test_moveChildren2 : function()
     83                {
     84                        var frag =
     85                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     86                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     87                                inner2 = new CKEDITOR.dom.element( 'i' );
     88                        frag.append( inner1 );
     89                        frag.append( inner2 );
     90
     91                        // Move to fragment
     92                        var anotherFrag = new CKEDITOR.dom.documentFragment(
     93                                CKEDITOR.document );
     94                        frag.moveChildren( anotherFrag, true );
     95                        assert.isTrue( anotherFrag.getFirst().equals( inner1 ) );
     96                        assert.isTrue( anotherFrag.getLast().equals( inner2 ) );
     97                },
     98
     99                test_appendText : function()
     100                {
     101                        var element = new CKEDITOR.dom.element( 'script' );
     102                        element.appendText( 'Test appendText' );
     103                        assert.areEqual( 'Test appendText', element.$.text );
     104                },
     105
     106                test_ltrim : function()
     107                {
     108                        var element = CKEDITOR.document.getById( 'trimTarget' )
     109                                .clone( true );
     110                        var frag =
     111                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     112                        element.moveChildren( frag );
     113                        frag.ltrim();
     114                        var ct = new CKEDITOR.dom.element( 'div' );
     115                        ct.append( frag );
     116                        assert.areSame( 'text \t\n', ct.getText() );
     117                },
     118
     119                test_rtrim : function()
     120                {
     121                        var element = CKEDITOR.document.getById( 'trimTarget' )
     122                                .clone( true );
     123                        var frag =
     124                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     125                        element.moveChildren( frag );
     126                        frag.rtrim();
     127                        var ct = new CKEDITOR.dom.element( 'div' );
     128                        ct.append( frag );
     129                        assert.areSame( ' \t\ntext', ct.getText() );
     130                },
     131
     132                test_trim : function()
     133                {
     134                        var element =
     135                                        CKEDITOR.document.getById( 'trimTarget' ).clone( true );
     136                        var frag =
     137                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     138                        element.moveChildren( frag );
     139                        frag.trim();
     140                        var ct = new CKEDITOR.dom.element( 'div' );
     141                        ct.append( frag );
     142                        assert.areSame( 'text', ct.getText() );
     143                },
     144
     145                test_insertAfter : function()
     146                {
     147                        var frag =
     148                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     149                        var inner = new CKEDITOR.dom.element( 'b' );
     150                        frag.append( inner );
     151                        var container = CKEDITOR.document.getById( 'fragmentContainer2' );
     152                        var sibling = CKEDITOR.document.getById( 'fragmentSibling1' );
     153                        frag.insertAfterNode( sibling );
     154                        assert.isTrue( container.getLast().equals( inner ) );
     155                },
     156
     157                test_getChildCount : function()
     158                {
     159                        var frag =
     160                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     161                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     162                                inner2 = new CKEDITOR.dom.element( 'i' );
     163                        frag.append( inner1 );
     164                        frag.append( inner2 );
     165
     166                        assert.areEqual( 2, frag.getChildCount() );
     167                },
     168
     169                test_getChild : function()
     170                {
     171                        var frag =
     172                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     173                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     174                                inner2 = new CKEDITOR.dom.element( 'i' );
     175                        frag.append( inner1 );
     176                        frag.append( inner2 );
     177
     178                        assert.isTrue( inner2.equals( frag.getChild( 1 ) ) );
     179                },
     180
     181                test_getChildren : function()
     182                {
     183                        var frag =
     184                                        new CKEDITOR.dom.documentFragment( CKEDITOR.document );
     185                        var inner1 = new CKEDITOR.dom.element( 'b' ),
     186                                inner2 = new CKEDITOR.dom.element( 'i' );
     187                        frag.append( inner1 );
     188                        frag.append( inner2 );
     189
     190                        var childNodesList = frag.getChildren();
     191                        assert.areEqual( 2, childNodesList.count() );
     192                        assert.isTrue( inner2.equals( childNodesList.getItem( 1 ) ) );
     193                },
     194
     195                test_getDocument : function()
     196                {
     197                        var doc = CKEDITOR.document,
     198                                innerDoc = new CKEDITOR.dom.document(
     199                                        doc.getById( 'innerFrame' ).$.contentWindow.document );
     200                        var frag1 = new CKEDITOR.dom.documentFragment( doc ),
     201                                frag2 = new CKEDITOR.dom.documentFragment( innerDoc );
     202
     203                        assert.isTrue( doc.equals( frag1.getDocument() ) );
     204                        assert.isTrue( innerDoc.equals( frag2.getDocument() ) );
     205                },
     206
     207                name :document.title
     208        };
     209} )() );
     210
     211        //]]>
     212        </script>
     213</head>
     214<body>
     215        <div id="fragmentContainer1"></div>
     216        <div id="fragmentContainer2"><div id="fragmentSibling1"></div></div>
     217        <div id="fragmentContainer3"></div>
     218        <div id="trimTarget">   
     219text   
     220</div>
     221        <iframe id="innerFrame" name="innerFrame" src="about:blank"></iframe>
     222</body>
     223</html>
     224 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 ( typeof ( overwrite = arguments[ argsLength - 1 ] ) == 'boolean')
    114116                                argsLength--;
    115                         else
    116                                 overwrite = false;
    117 
     117                        else if ( typeof ( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' )
     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 ) )
     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        {
    1723                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 
    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        },
     30        true,
     31        {
     32                'append' : 1,
     33                'getFirst' : 1,
     34                'getLast' : 1,
     35                'appendTo' : 1,
     36                'moveChildren' : 1,
     37                'insertAfterNode' : 1,
     38                'replace' : 1,
     39                'trim' : 1,
     40                'ltrim' : 1,
     41                'rtrim' : 1,
     42                'getDocument' : 1,
     43                'getChildCount' : 1,
     44                'getChild' : 1,
     45                'getChildren' : 1
     46        } );
     47 No newline at end of file
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy