You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2016/04/11 00:48:24 UTC

[13/49] git commit: [flex-asjs] [refs/heads/develop] - insert methods

insert methods


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/fd890393
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/fd890393
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/fd890393

Branch: refs/heads/develop
Commit: fd890393f76088afc2499a452908cf961ed23225
Parents: cf9de31
Author: Harbs <ha...@in-tools.com>
Authored: Sun Feb 7 22:52:04 2016 +0200
Committer: Harbs <ha...@in-tools.com>
Committed: Sun Feb 7 22:52:04 2016 +0200

----------------------------------------------------------------------
 frameworks/projects/XML/as/src/XML.as | 65 ++++++++++++++++++++++++++++--
 1 file changed, 61 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fd890393/frameworks/projects/XML/as/src/XML.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XML.as b/frameworks/projects/XML/as/src/XML.as
index c2dfbe8..479fc11 100644
--- a/frameworks/projects/XML/as/src/XML.as
+++ b/frameworks/projects/XML/as/src/XML.as
@@ -961,6 +961,15 @@ package
 			return _namespaces.slice();
 		}
 		
+		private function insertChildAt(child:XML,idx:int):void{
+			if(!child)
+				return;
+			var parent:XML = child.parent();
+			if(parent)
+				parent.removeChild(child);
+			child.setParent(this);
+			_children.splice(idx,0,child);
+		}
 		/**
 		 * Inserts the given child2 parameter after the child1 parameter in this XML object and returns the resulting object.
 		 * 
@@ -969,9 +978,32 @@ package
 		 * @return 
 		 * 
 		 */
-		public function insertChildAfter(child1:Object, child2:Object):*
+		public function insertChildAfter(child1:Object, child2:Object):XML
 		{
-			return null;
+			/*
+				When the insertChildAfter method is called on an XML object x with parameters child1 and child2, the following steps are taken:
+				1. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", "attribute"}, return
+				2. If (child1 == null)
+				a. Call the [[Insert]] method of x with arguments "0" and child2
+				b. Return x
+				3. Else if Type(child1) is XML
+				a. For i = 0 to x.[[Length]]-1
+				i. If x[i] is the same object as child1
+				1. Call the [[Insert]] method of x with a
+			*/
+			if(_nodeKind == "text" || _nodeKind == "comment" || _nodeKind == "processing-instruction" || _nodeKind == "attribute")
+				return null;
+			if(!child1)
+			{
+				insertChildAt(child2,0);
+				return child2;
+			}
+			var idx:int = _children.indexOf(child1);
+			if(idx >= 0)
+			{
+				insertChildAt(child2,idx+1);
+			}
+			return child2;
 		}
 		
 		/**
@@ -982,9 +1014,34 @@ package
 		 * @return 
 		 * 
 		 */
-		public function insertChildBefore(child1:Object, child2:Object):*
+		public function insertChildBefore(child1:Object, child2:Object):XML
 		{
-			return null;
+			/*
+				When the insertChildBefore method is called on an XML object x with parameters child1 and child2, the following steps are taken:
+				1. If x.[[Class]] ∈ {"text", "comment", "processing-instruction", "attribute"}, return
+				2. If (child1 == null)
+				a. Call the [[Insert]] method of x with arguments ToString(x.[[Length]]) and child2
+				b. Return x
+				3. Else if Type(child1) is XML
+				a. For i = 0 to x.[[Length]]-1
+				i. If x[i] is the same object as child1
+				1. Call the [[Insert]] method of x with arguments ToString(i) and child2
+				2. Return x
+				4. Return			
+			*/
+			if(_nodeKind == "text" || _nodeKind == "comment" || _nodeKind == "processing-instruction" || _nodeKind == "attribute")
+				return null;
+			if(!child1)
+			{
+				insertChildAt(child2,_children.length);
+				return child2;
+			}
+			var idx:int = _children.indexOf(child1);
+			if(idx >= 0)
+			{
+				insertChildAt(child2,idx);
+			}
+			return child2;
 		}
 		
 		/**