Ticket #2970: 2970_2.patch
File 2970_2.patch, 11.9 KB (added by , 14 years ago) |
---|
-
_source/tests/core/tools.html
46 46 assert.areSame( 'Good' , target.prop6, 'prop6 doesn\'t match' ); 47 47 assert.areSame( fakeArray , target.prop7, 'prop7 doesn\'t match' ); 48 48 }, 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 }, 49 78 50 79 test_isArray1 : function() 51 80 { -
_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[ 12 CKEDITOR.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
83 83 * @param {Object} target The object to be extended. 84 84 * @param {Object} source[,souce(n)] The objects from which copy 85 85 * 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. 89 91 * @returns {Object} the extended object (target). 90 92 * @example 91 93 * // Create the sample object. … … 108 110 extend : function( target ) 109 111 { 110 112 var argsLength = arguments.length, 111 overwrite = arguments[ argsLength - 1 ];113 overwrite, propertiesList; 112 114 113 if ( typeof overwrite == 'boolean')115 if ( CKEDITOR.tools.isArray( overwrite = arguments[ argsLength - 1 ] ) ) 114 116 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 } 118 122 for ( var i = 1 ; i < argsLength ; i++ ) 119 123 { 120 124 var source = arguments[ i ]; 121 122 125 for ( var propertyName in source ) 123 126 { 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 } 126 135 } 127 136 } 128 137 -
_source/core/dom/documentFragment.js
2 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 4 */ 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 */ 6 14 CKEDITOR.dom.documentFragment = function( ownerDocument ) 7 15 { 8 this.$ = CKEDITOR.env.ie ? ownerDocument.$.createElement( 'div' ) : ownerDocument.$.createDocumentFragment(); 16 ownerDocument = ownerDocument || CKEDITOR.document; 17 this.$ = ownerDocument.$.createDocumentFragment(); 9 18 }; 10 19 11 (function() 12 { 13 var elementPrototype = CKEDITOR.dom.element.prototype; 14 15 CKEDITOR.dom.documentFragment.prototype = 20 CKEDITOR.tools.extend( CKEDITOR.dom.documentFragment.prototype, 21 CKEDITOR.dom.element.prototype, 16 22 { 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, 35 24 insertAfterNode : function( node ) 36 25 { 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' ] );