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 2017/07/17 11:52:26 UTC
git commit: [flex-asjs] [refs/heads/develop] - Fixed some issues
related to single item XMLLists
Repository: flex-asjs
Updated Branches:
refs/heads/develop b730bd827 -> 5ae65eabc
Fixed some issues related to single item XMLLists
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/5ae65eab
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/5ae65eab
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/5ae65eab
Branch: refs/heads/develop
Commit: 5ae65eabcf2fcc87dfbed210c7595a4cfa50279d
Parents: b730bd8
Author: Harbs <ha...@in-tools.com>
Authored: Mon Jul 17 14:52:21 2017 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Mon Jul 17 14:52:21 2017 +0300
----------------------------------------------------------------------
frameworks/projects/XML/src/main/flex/XML.as | 87 ++++++++++++++------
.../projects/XML/src/main/flex/XMLList.as | 29 ++++++-
2 files changed, 91 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5ae65eab/frameworks/projects/XML/src/main/flex/XML.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/src/main/flex/XML.as b/frameworks/projects/XML/src/main/flex/XML.as
index efd1756..fd54fca 100644
--- a/frameworks/projects/XML/src/main/flex/XML.as
+++ b/frameworks/projects/XML/src/main/flex/XML.as
@@ -21,6 +21,8 @@ package
COMPILE::JS
public class XML
{
+ import org.apache.flex.debugging.assert;
+ import org.apache.flex.debugging.assertType;
/*
* Dealing with namespaces:
* If the name is qualified, it has a prefix. Otherwise, the prefix is null.
@@ -394,6 +396,7 @@ package
}
private function addChildInternal(child:XML):void
{
+ assertType(child,XML,"Type must be XML");
child.setParent(this);
if(child.nodeKind() =="attribute")
{
@@ -496,24 +499,30 @@ package
*/
var childType:String = typeof child;
if(childType != "object")
- {
- child = child.toString();
- var xml:XML = new XML();
- xml.setNodeKind("text");
- xml.setValue(child);
- child = xml;
- }
-
- if(child is XMLList)
- child = child[0];
-
- child.setParent(this);
+ child = xmlFromStringable(child);
- _children.push(child);
+ appendChildInternal(child);
normalize();
- return child;
+ return this;
}
+ private function appendChildInternal(child:*):void
+ {
+ if(child is XMLList)
+ {
+ var len:int = child.length();
+ for(var i:int=0; i<len; i++)
+ {
+ appendChildInternal(child[0]);
+ }
+ }
+ else
+ {
+ assertType(child,XML,"Type must be XML");
+ child.setParent(this);
+ _children.push(child);
+ }
+ }
/**
* Returns the XML value of the attribute that has the name matching the attributeName parameter.
@@ -1395,6 +1404,14 @@ package
return list.plus(rightHand);
}
+ private function xmlFromStringable(value:*):XML
+ {
+ var str:String = value.toString();
+ var xml:XML = new XML();
+ xml.setNodeKind("text");
+ xml.setValue(str);
+ return xml;
+ }
/**
* Inserts the provided child object into the XML element before any existing XML properties for that element.
* @param value
@@ -1403,13 +1420,34 @@ package
*/
public function prependChild(child:XML):XML
{
- child.setParent(this);
-
- _children.unshift(child);
+ var childType:String = typeof child;
+ if(childType != "object")
+ child = xmlFromStringable(child);
- return child;
+ prependChildInternal(child);
+ normalize();
+ return this;
}
+ private function prependChildInternal(child:*):void
+ {
+ if(child is XMLList)
+ {
+ var len:int = child.length();
+ for(var i:int=0; i<len; i++)
+ {
+ prependChildInternal(child[0]);
+ }
+ }
+ else
+ {
+ assertType(child,XML,"Type must be XML");
+ child.setParent(this);
+ _children.unshift(child);
+ }
+ }
+
+
/**
* If a name parameter is provided, lists all the children of the XML object that contain processing instructions with that name.
*
@@ -1465,14 +1503,14 @@ package
var removed:XML;
if(!child)
return false;
- if(!_attributes)
- return false;
if(!(child is XML))
return removeChildByName(child);
if(child.nodeKind() == "attribute")
{
+ if(!_attributes)
+ return false;
for(i=0;i<_attributes.length;i++)
{
if(child.equals(_attributes[i]))
@@ -1483,13 +1521,14 @@ package
return true;
}
}
+ return false;
}
var idx:int = _children.indexOf(child);
if(idx < 0)
return false;
removed = _children.splice(idx,1);
- child.setParent(null);
- return removed;
+ child._parent = null;
+ return true;
}
private function removeChildByName(name:*):Boolean
{
@@ -1507,7 +1546,7 @@ package
if(_attributes[i].name().matches(name))
{
child = _attributes[i];
- child.setParent(null);
+ child._parent = null;
_attributes.splice(i,1);
removedItem = true;
}
@@ -1522,7 +1561,7 @@ package
if(_children[i].name().matches(name))
{
child = _children[i];
- child.setParent(null);
+ child._parent = null;
_children.splice(i,1);
removedItem = true;
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5ae65eab/frameworks/projects/XML/src/main/flex/XMLList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/src/main/flex/XMLList.as b/frameworks/projects/XML/src/main/flex/XMLList.as
index d07a00a..17c2e33 100644
--- a/frameworks/projects/XML/src/main/flex/XMLList.as
+++ b/frameworks/projects/XML/src/main/flex/XMLList.as
@@ -164,6 +164,9 @@ package
*/
public function attribute(attributeName:*):XMLList
{
+ if(isSingle())
+ return _xmlArray[0].attribute(attributeName);
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -182,6 +185,9 @@ package
*/
public function attributes():XMLList
{
+ if(isSingle())
+ return _xmlArray[0].attributes();
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -212,7 +218,9 @@ package
}
return retVal;
}
-
+ if(isSingle())
+ return _xmlArray[0].child(propertyName);
+
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
{
@@ -238,6 +246,9 @@ package
*/
public function children():XMLList
{
+ if(isSingle())
+ return _xmlArray[0].children();
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -256,6 +267,9 @@ package
*/
public function comments():XMLList
{
+ if(isSingle())
+ return _xmlArray[0].comments();
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -336,6 +350,9 @@ package
*/
public function descendants(name:Object = "*"):XMLList
{
+ if(isSingle())
+ return _xmlArray[0].descendants(name);
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -356,6 +373,9 @@ package
*/
public function elements(name:Object = "*"):XMLList
{
+ if(isSingle())
+ return _xmlArray[0].elements(name);
+
var retVal:XMLList = new XMLList();
var len:int = _xmlArray.length;
for (var i:int=0;i<len;i++)
@@ -379,6 +399,8 @@ package
public function equals(list:*):Boolean
{
+ if(isSingle())
+ return _xmlArray[0].equals(list);
/*
Overview
The XMLList type adds the internal [[Equals]] method to the internal properties defined by the Object type.
@@ -443,6 +465,9 @@ package
a. If x[i].[[Class]] == "element" and the result of calling the [[HasProperty]] method of x[i] with argument P == true, return true
3. Return false
*/
+ if(isSingle())
+ return _xmlArray[0].hasOwnProperty(propertyName);
+
if(parseInt(propertyName,10).toString() == propertyName)
{
return parseInt(propertyName,10) < _xmlArray.length;
@@ -597,6 +622,8 @@ package
*/
public function processingInstructions(name:String = "*"):XMLList
{
+ if(isSingle())
+ return _xmlArray[0].processingInstructions(name);
var retVal:XMLList = new XMLList();
if(!name)
return retVal;