hasComplexContent(),hasOwnProperty(),hasSimpleContent()

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

Branch: refs/heads/develop
Commit: cf9de31cff3124407239f832f3913142680d7439
Parents: f6aee89
Author: Harbs <[email protected]>
Authored: Sun Feb 7 17:01:19 2016 +0200
Committer: Harbs <[email protected]>
Committed: Sun Feb 7 17:01:19 2016 +0200

----------------------------------------------------------------------
 frameworks/projects/XML/as/src/XML.as | 53 ++++++++++++++++++++++++++++--
 1 file changed, 50 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/cf9de31c/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 e14f8f0..c2dfbe8 100644
--- a/frameworks/projects/XML/as/src/XML.as
+++ b/frameworks/projects/XML/as/src/XML.as
@@ -870,10 +870,25 @@ package
                 */
                public function hasComplexContent():Boolean
                {
-                       return false
+                       /*
+                               When the hasComplexContent method is called on 
an XML object x, the following steps are taken:
+                               1. If x.[[Class]] ∈ {"attribute", "comment", 
"processing-instruction", "text"}, return false
+                               2. For each property p in x
+                               a. If p.[[Class]] == "element", return true
+                               3. Return false
+                       */
+                       if(_nodeKind == "attribute" || _nodeKind == "comment" 
|| _nodeKind == "processing-instruction" || _nodeKind == "text")
+                               return false;
+                       var i:int;
+                       for(i=0i<_children.length;i++)
+                       {
+                               if(_children[i].nodeKind() == "element")
+                                       return true;
+                       }
+                       return false;
                }
 
-               public function hasOwnProperty():Boolean
+               public function hasOwnProperty(p:*):Boolean
                {
                        /*
                                When the [[HasProperty]] method of an XML 
object x is called with property name P, the following steps are taken:
@@ -890,6 +905,23 @@ package
                                    i. Return true
                                5. Return false
                        */
+                       if(parseInt(p,10).toString() == p)
+                               return p == "0";
+                       var name:QName = toXMLName(p);
+                       var i:int;
+                       for(i=0;i<_attributes.length;i++)
+                       {
+                               if(_attributes[i].name().matches(name))
+                                       return true;
+                       }
+                       for(i=0;i<_children.length;i++)
+                       {
+                               if(_children[i].nodeKind() != "element")
+                                       continue;
+                               if(_children[i].name().matches(name))
+                                       return true;
+                       }
+                       return false;
                }
                                
                /**
@@ -900,7 +932,22 @@ package
                 */
                public function hasSimpleContent():Boolean
                {
-                       return false;
+                       /*
+                               When the hasSimpleContent method is called on 
an XML object x, the following steps are taken:
+                               1. If x.[[Class]] ∈ {"comment", 
"processing-instruction"}, return false
+                               2. For each property p in x
+                               a. If p.[[Class]] == "element", return false
+                               3. Return true
+                       */
+                       if(_nodeKind == "comment" || _nodeKind == 
"processing-instruction")
+                               return false;
+                       var i:int;
+                       for(i=0i<_children.length;i++)
+                       {
+                               if(_children[i].nodeKind() == "element")
+                                       return false;
+                       }
+                       return true;
                }
                
                /**

Reply via email to