envjs 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -3502,6 +3502,368 @@ var $entityDefinitions = {
3502
3502
 
3503
3503
 
3504
3504
  $debug("Defining Document");
3505
+
3506
+ /**
3507
+ * Defined 'globally' to this scope. Remember everything is wrapped in a closure so this doesnt show up
3508
+ * in the outer most global scope.
3509
+ */
3510
+
3511
+ /**
3512
+ * process SAX events
3513
+ *
3514
+ * @author Jon van Noort (jon@webarcana.com.au), David Joham (djoham@yahoo.com) and Scott Severtson
3515
+ *
3516
+ * @param impl : DOMImplementation
3517
+ * @param doc : DOMDocument - the Document to contain the parsed XML string
3518
+ * @param p : XMLP - the SAX Parser
3519
+ *
3520
+ * @return : DOMDocument
3521
+ */
3522
+
3523
+ function __parseLoop__(impl, doc, p, isWindowDocument) {
3524
+ var iEvt, iNode, iAttr, strName;
3525
+ var iNodeParent = doc;
3526
+
3527
+ var el_close_count = 0;
3528
+
3529
+ var entitiesList = new Array();
3530
+ var textNodesList = new Array();
3531
+
3532
+ // if namespaceAware, add default namespace
3533
+ if (impl.namespaceAware) {
3534
+ var iNS = doc.createNamespace(""); // add the default-default namespace
3535
+ iNS.value = "http://www.w3.org/2000/xmlns/";
3536
+ doc._namespaces.setNamedItem(iNS);
3537
+ }
3538
+
3539
+ // loop until SAX parser stops emitting events
3540
+ var q = 0;
3541
+ while(true) {
3542
+ // get next event
3543
+ iEvt = p.next();
3544
+
3545
+ if (iEvt == XMLP._ELM_B) { // Begin-Element Event
3546
+ var pName = p.getName(); // get the Element name
3547
+ pName = trim(pName, true, true); // strip spaces from Element name
3548
+ if(pName.toLowerCase() == 'script')
3549
+ p.replaceEntities = false;
3550
+
3551
+ if (!impl.namespaceAware) {
3552
+ iNode = doc.createElement(p.getName()); // create the Element
3553
+ // add attributes to Element
3554
+ for(var i = 0; i < p.getAttributeCount(); i++) {
3555
+ strName = p.getAttributeName(i); // get Attribute name
3556
+ iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
3557
+
3558
+ if(!iAttr) {
3559
+ iAttr = doc.createAttribute(strName); // otherwise create it
3560
+ }
3561
+
3562
+ iAttr.value = p.getAttributeValue(i); // set Attribute value
3563
+ iNode.setAttributeNode(iAttr); // attach Attribute to Element
3564
+ }
3565
+ }
3566
+ else { // Namespace Aware
3567
+ // create element (with empty namespaceURI,
3568
+ // resolve after namespace 'attributes' have been parsed)
3569
+ iNode = doc.createElementNS("", p.getName());
3570
+
3571
+ // duplicate ParentNode's Namespace definitions
3572
+ iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode, true);
3573
+
3574
+ // add attributes to Element
3575
+ for(var i = 0; i < p.getAttributeCount(); i++) {
3576
+ strName = p.getAttributeName(i); // get Attribute name
3577
+
3578
+ // if attribute is a namespace declaration
3579
+ if (__isNamespaceDeclaration__(strName)) {
3580
+ // parse Namespace Declaration
3581
+ var namespaceDec = __parseNSName__(strName);
3582
+
3583
+ if (strName != "xmlns") {
3584
+ iNS = doc.createNamespace(strName); // define namespace
3585
+ }
3586
+ else {
3587
+ iNS = doc.createNamespace(""); // redefine default namespace
3588
+ }
3589
+ iNS.value = p.getAttributeValue(i); // set value = namespaceURI
3590
+
3591
+ iNode._namespaces.setNamedItem(iNS); // attach namespace to namespace collection
3592
+ }
3593
+ else { // otherwise, it is a normal attribute
3594
+ iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
3595
+
3596
+ if(!iAttr) {
3597
+ iAttr = doc.createAttributeNS("", strName); // otherwise create it
3598
+ }
3599
+
3600
+ iAttr.value = p.getAttributeValue(i); // set Attribute value
3601
+ iNode.setAttributeNodeNS(iAttr); // attach Attribute to Element
3602
+
3603
+ if (__isIdDeclaration__(strName)) {
3604
+ iNode.id = p.getAttributeValue(i); // cache ID for getElementById()
3605
+ }
3606
+ }
3607
+ }
3608
+
3609
+ // resolve namespaceURIs for this Element
3610
+ if (iNode._namespaces.getNamedItem(iNode.prefix)) {
3611
+ iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
3612
+ } else {
3613
+ iNode.namespaceURI = iNodeParent.namespaceURI;
3614
+ }
3615
+
3616
+ // for this Element's attributes
3617
+ for (var i = 0; i < iNode.attributes.length; i++) {
3618
+ if (iNode.attributes.item(i).prefix != "") { // attributes do not have a default namespace
3619
+ if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
3620
+ iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
3621
+ }
3622
+ }
3623
+ }
3624
+
3625
+ // We didn't know the NS of the node when we created it, which means we created a default DOM object.
3626
+ // Now that we know the NS, if there is one, we clone this node so that it'll get created under
3627
+ // with the right constructor. This makes things like SVG work. Might be nice not to create twice as
3628
+ // as many nodes, but that's painfully given the complexity of namespaces.
3629
+ if(iNode.namespaceURI != ""){
3630
+ iNode = iNode.cloneNode();
3631
+ }
3632
+ }
3633
+
3634
+ // if this is the Root Element
3635
+ if (iNodeParent.nodeType == DOMNode.DOCUMENT_NODE) {
3636
+ iNodeParent._documentElement = iNode; // register this Element as the Document.documentElement
3637
+ }
3638
+
3639
+ iNodeParent.appendChild(iNode); // attach Element to parentNode
3640
+ iNodeParent = iNode; // descend one level of the DOM Tree
3641
+ }
3642
+
3643
+ else if(iEvt == XMLP._ELM_E) { // End-Element Event
3644
+ iNodeParent = iNodeParent.parentNode; // ascend one level of the DOM Tree
3645
+ }
3646
+
3647
+ else if(iEvt == XMLP._ELM_EMP) { // Empty Element Event
3648
+ pName = p.getName(); // get the Element name
3649
+ pName = trim(pName, true, true); // strip spaces from Element name
3650
+
3651
+ if (!impl.namespaceAware) {
3652
+ iNode = doc.createElement(pName); // create the Element
3653
+
3654
+ // add attributes to Element
3655
+ for(var i = 0; i < p.getAttributeCount(); i++) {
3656
+ strName = p.getAttributeName(i); // get Attribute name
3657
+ iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
3658
+
3659
+ if(!iAttr) {
3660
+ iAttr = doc.createAttribute(strName); // otherwise create it
3661
+ }
3662
+
3663
+ iAttr.value = p.getAttributeValue(i); // set Attribute value
3664
+ iNode.setAttributeNode(iAttr); // attach Attribute to Element
3665
+ }
3666
+ }
3667
+ else { // Namespace Aware
3668
+ // create element (with empty namespaceURI,
3669
+ // resolve after namespace 'attributes' have been parsed)
3670
+ iNode = doc.createElementNS("", p.getName());
3671
+
3672
+ // duplicate ParentNode's Namespace definitions
3673
+ iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode);
3674
+
3675
+ // add attributes to Element
3676
+ for(var i = 0; i < p.getAttributeCount(); i++) {
3677
+ strName = p.getAttributeName(i); // get Attribute name
3678
+
3679
+ // if attribute is a namespace declaration
3680
+ if (__isNamespaceDeclaration__(strName)) {
3681
+ // parse Namespace Declaration
3682
+ var namespaceDec = __parseNSName__(strName);
3683
+
3684
+ if (strName != "xmlns") {
3685
+ iNS = doc.createNamespace(strName); // define namespace
3686
+ }
3687
+ else {
3688
+ iNS = doc.createNamespace(""); // redefine default namespace
3689
+ }
3690
+ iNS.value = p.getAttributeValue(i); // set value = namespaceURI
3691
+
3692
+ iNode._namespaces.setNamedItem(iNS); // attach namespace to namespace collection
3693
+ }
3694
+ else { // otherwise, it is a normal attribute
3695
+ iAttr = iNode.getAttributeNode(strName); // if Attribute exists, use it
3696
+
3697
+ if(!iAttr) {
3698
+ iAttr = doc.createAttributeNS("", strName); // otherwise create it
3699
+ }
3700
+
3701
+ iAttr.value = p.getAttributeValue(i); // set Attribute value
3702
+ iNode.setAttributeNodeNS(iAttr); // attach Attribute to Element
3703
+
3704
+ if (__isIdDeclaration__(strName)) {
3705
+ iNode.id = p.getAttributeValue(i); // cache ID for getElementById()
3706
+ }
3707
+ }
3708
+ }
3709
+
3710
+ // resolve namespaceURIs for this Element
3711
+ if (iNode._namespaces.getNamedItem(iNode.prefix)) {
3712
+ iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
3713
+ }
3714
+
3715
+ // for this Element's attributes
3716
+ for (var i = 0; i < iNode.attributes.length; i++) {
3717
+ if (iNode.attributes.item(i).prefix != "") { // attributes do not have a default namespace
3718
+ if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
3719
+ iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
3720
+ }
3721
+ }
3722
+ }
3723
+ }
3724
+
3725
+ // if this is the Root Element
3726
+ if (iNodeParent.nodeType == DOMNode.DOCUMENT_NODE) {
3727
+ iNodeParent._documentElement = iNode; // register this Element as the Document.documentElement
3728
+ }
3729
+
3730
+ iNodeParent.appendChild(iNode); // attach Element to parentNode
3731
+ }
3732
+ else if(iEvt == XMLP._TEXT || iEvt == XMLP._ENTITY) { // TextNode and entity Events
3733
+ // get Text content
3734
+ var pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
3735
+
3736
+ if (!impl.preserveWhiteSpace ) {
3737
+ if (trim(pContent, true, true) == "") {
3738
+ pContent = ""; //this will cause us not to create the text node below
3739
+ }
3740
+ }
3741
+
3742
+ if (pContent.length > 0) { // ignore empty TextNodes
3743
+ var textNode = doc.createTextNode(pContent);
3744
+ iNodeParent.appendChild(textNode); // attach TextNode to parentNode
3745
+
3746
+ //the sax parser breaks up text nodes when it finds an entity. For
3747
+ //example hello&lt;there will fire a text, an entity and another text
3748
+ //this sucks for the dom parser because it looks to us in this logic
3749
+ //as three text nodes. I fix this by keeping track of the entity nodes
3750
+ //and when we're done parsing, calling normalize on their parent to
3751
+ //turn the multiple text nodes into one, which is what DOM users expect
3752
+ //the code to do this is at the bottom of this function
3753
+ if (iEvt == XMLP._ENTITY) {
3754
+ entitiesList[entitiesList.length] = textNode;
3755
+ }
3756
+ else {
3757
+ //I can't properly decide how to handle preserve whitespace
3758
+ //until the siblings of the text node are built due to
3759
+ //the entitiy handling described above. I don't know that this
3760
+ //will be all of the text node or not, so trimming is not appropriate
3761
+ //at this time. Keep a list of all the text nodes for now
3762
+ //and we'll process the preserve whitespace stuff at a later time.
3763
+ textNodesList[textNodesList.length] = textNode;
3764
+ }
3765
+ }
3766
+ }
3767
+ else if(iEvt == XMLP._PI) { // ProcessingInstruction Event
3768
+ // attach ProcessingInstruction to parentNode
3769
+ iNodeParent.appendChild(doc.createProcessingInstruction(p.getName(), p.getContent().substring(p.getContentBegin(), p.getContentEnd())));
3770
+ }
3771
+ else if(iEvt == XMLP._CDATA) { // CDATA Event
3772
+ // get CDATA data
3773
+ pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
3774
+
3775
+ if (!impl.preserveWhiteSpace) {
3776
+ pContent = trim(pContent, true, true); // trim whitespace
3777
+ pContent.replace(/ +/g, ' '); // collapse multiple spaces to 1 space
3778
+ }
3779
+
3780
+ if (pContent.length > 0) { // ignore empty CDATANodes
3781
+ iNodeParent.appendChild(doc.createCDATASection(pContent)); // attach CDATA to parentNode
3782
+ }
3783
+ }
3784
+ else if(iEvt == XMLP._COMMENT) { // Comment Event
3785
+ // get COMMENT data
3786
+ var pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
3787
+
3788
+ if (!impl.preserveWhiteSpace) {
3789
+ pContent = trim(pContent, true, true); // trim whitespace
3790
+ pContent.replace(/ +/g, ' '); // collapse multiple spaces to 1 space
3791
+ }
3792
+
3793
+ if (pContent.length > 0) { // ignore empty CommentNodes
3794
+ iNodeParent.appendChild(doc.createComment(pContent)); // attach Comment to parentNode
3795
+ }
3796
+ }
3797
+ else if(iEvt == XMLP._DTD) { // ignore DTD events
3798
+ }
3799
+ else if(iEvt == XMLP._ERROR) {
3800
+ $error("Fatal Error: " + p.getContent() +
3801
+ "\nLine: " + p.getLineNumber() +
3802
+ "\nColumn: " + p.getColumnNumber() + "\n");
3803
+ throw(new DOMException(DOMException.SYNTAX_ERR));
3804
+ }
3805
+ else if(iEvt == XMLP._NONE) { // no more events
3806
+ //steven woods notes that unclosed tags are rejected elsewhere and this check
3807
+ //breaks a table patching routine
3808
+ //if (iNodeParent == doc) { // confirm that we have recursed back up to root
3809
+ // break;
3810
+ //}
3811
+ //else {
3812
+ // throw(new DOMException(DOMException.SYNTAX_ERR)); // one or more Tags were not closed properly
3813
+ //}
3814
+ break;
3815
+
3816
+ }
3817
+ }
3818
+
3819
+ //normalize any entities in the DOM to a single textNode
3820
+ for (var i = 0; i < entitiesList.length; i++) {
3821
+ var entity = entitiesList[i];
3822
+ //its possible (if for example two entities were in the
3823
+ //same domnode, that the normalize on the first entitiy
3824
+ //will remove the parent for the second. Only do normalize
3825
+ //if I can find a parent node
3826
+ var parentNode = entity.parentNode;
3827
+ if (parentNode) {
3828
+ parentNode.normalize();
3829
+
3830
+ //now do whitespace (if necessary)
3831
+ //it was not done for text nodes that have entities
3832
+ if(!impl.preserveWhiteSpace) {
3833
+ var children = parentNode.childNodes;
3834
+ for ( var j = 0; j < children.length; j++) {
3835
+ var child = children.item(j);
3836
+ if (child.nodeType == DOMNode.TEXT_NODE) {
3837
+ var childData = child.data;
3838
+ childData.replace(/\s/g, ' ');
3839
+ child.data = childData;
3840
+ }
3841
+ }
3842
+ }
3843
+ }
3844
+ }
3845
+
3846
+ //do the preserve whitespace processing on the rest of the text nodes
3847
+ //It's possible (due to the processing above) that the node will have been
3848
+ //removed from the tree. Only do whitespace checking if parentNode is not null.
3849
+ //This may duplicate the whitespace processing for some nodes that had entities in them
3850
+ //but there's no way around that
3851
+ if (!impl.preserveWhiteSpace) {
3852
+ for (var i = 0; i < textNodesList.length; i++) {
3853
+ var node = textNodesList[i];
3854
+ if (node.parentNode != null) {
3855
+ var nodeData = node.data;
3856
+ nodeData.replace(/\s/g, ' ');
3857
+ node.data = nodeData;
3858
+ }
3859
+ }
3860
+
3861
+ }
3862
+ };
3863
+
3864
+
3865
+
3866
+
3505
3867
  /**
3506
3868
  * @class DOMDocument - The Document interface represents the entire HTML
3507
3869
  * or XML document. Conceptually, it is the root of the document tree,
@@ -3579,11 +3941,14 @@ __extend__(DOMDocument.prototype, {
3579
3941
  // create SAX Parser
3580
3942
  var parser = new XMLP(xmlString+'');
3581
3943
 
3944
+ /*
3582
3945
  // create DOM Document
3583
3946
  if(this === $document){
3584
3947
  $debug("Setting internal window.document");
3585
3948
  $document = this;
3586
3949
  }
3950
+ */
3951
+
3587
3952
  // populate Document with Parsed Nodes
3588
3953
  try {
3589
3954
  // make sure thid document object is empty before we try to load ...
@@ -3965,10 +4330,12 @@ print("xpath failure: " + e);
3965
4330
  },
3966
4331
  get defaultView(){
3967
4332
  var doc = this;
3968
- return { getComputedStyle: function(elem){
3969
- return doc._parentWindow.getComputedStyle(elem);
3970
- }};
3971
- },
4333
+ return {
4334
+ document: this,
4335
+ getComputedStyle: function(elem){
4336
+ return doc._parentWindow.getComputedStyle(elem);
4337
+ }};
4338
+ },
3972
4339
  _genId : function() {
3973
4340
  this._lastId += 1; // increment lastId (to generate unique id)
3974
4341
  return this._lastId;
@@ -4047,6 +4414,109 @@ function __parseQName__(qualifiedName) {
4047
4414
  return resultQName;
4048
4415
  };
4049
4416
 
4417
+ /**
4418
+ * @method DOMImplementation._isNamespaceDeclaration - Return true, if attributeName is a namespace declaration
4419
+ * @author Jon van Noort (jon@webarcana.com.au)
4420
+ * @param attributeName : string - the attribute name
4421
+ * @return : boolean
4422
+ */
4423
+ function __isNamespaceDeclaration__(attributeName) {
4424
+ // test if attributeName is 'xmlns'
4425
+ return (attributeName.indexOf('xmlns') > -1);
4426
+ };
4427
+
4428
+ /**
4429
+ * @method DOMImplementation._isIdDeclaration - Return true, if attributeName is an id declaration
4430
+ * @author Jon van Noort (jon@webarcana.com.au)
4431
+ * @param attributeName : string - the attribute name
4432
+ * @return : boolean
4433
+ */
4434
+ function __isIdDeclaration__(attributeName) {
4435
+ // test if attributeName is 'id' (case insensitive)
4436
+ return attributeName?(attributeName.toLowerCase() == 'id'):false;
4437
+ };
4438
+
4439
+ /**
4440
+ * @method DOMImplementation._isValidName - Return true,
4441
+ * if name contains no invalid characters
4442
+ * @author Jon van Noort (jon@webarcana.com.au)
4443
+ * @param name : string - the candidate name
4444
+ * @return : boolean
4445
+ */
4446
+ function __isValidName__(name) {
4447
+ // test if name contains only valid characters
4448
+ return name.match(re_validName);
4449
+ };
4450
+ var re_validName = /^[a-zA-Z_:][a-zA-Z0-9\.\-_:]*$/;
4451
+
4452
+ /**
4453
+ * @method DOMImplementation._isValidString - Return true, if string does not contain any illegal chars
4454
+ * All of the characters 0 through 31 and character 127 are nonprinting control characters.
4455
+ * With the exception of characters 09, 10, and 13, (Ox09, Ox0A, and Ox0D)
4456
+ * Note: different from _isValidName in that ValidStrings may contain spaces
4457
+ * @author Jon van Noort (jon@webarcana.com.au)
4458
+ * @param name : string - the candidate string
4459
+ * @return : boolean
4460
+ */
4461
+ function __isValidString__(name) {
4462
+ // test that string does not contains invalid characters
4463
+ return (name.search(re_invalidStringChars) < 0);
4464
+ };
4465
+ var re_invalidStringChars = /\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F/;
4466
+
4467
+ /**
4468
+ * @method DOMImplementation._parseNSName - parse the namespace name.
4469
+ * if there is no colon, the
4470
+ * @author Jon van Noort (jon@webarcana.com.au)
4471
+ * @param qualifiedName : string - The qualified name
4472
+ * @return : NSName - [
4473
+ .prefix : string - The prefix part of the qname
4474
+ .namespaceName : string - The namespaceURI part of the qname
4475
+ ]
4476
+ */
4477
+ function __parseNSName__(qualifiedName) {
4478
+ var resultNSName = new Object();
4479
+
4480
+ resultNSName.prefix = qualifiedName; // unless the qname has a namespaceName, the prefix is the entire String
4481
+ resultNSName.namespaceName = "";
4482
+
4483
+ // split on ':'
4484
+ var delimPos = qualifiedName.indexOf(':');
4485
+ if (delimPos > -1) {
4486
+ // get prefix
4487
+ resultNSName.prefix = qualifiedName.substring(0, delimPos);
4488
+ // get namespaceName
4489
+ resultNSName.namespaceName = qualifiedName.substring(delimPos +1, qualifiedName.length);
4490
+ }
4491
+ return resultNSName;
4492
+ };
4493
+
4494
+ /**
4495
+ * @method DOMImplementation._parseQName - parse the qualified name
4496
+ * @author Jon van Noort (jon@webarcana.com.au)
4497
+ * @param qualifiedName : string - The qualified name
4498
+ * @return : QName
4499
+ */
4500
+ function __parseQName__(qualifiedName) {
4501
+ var resultQName = new Object();
4502
+
4503
+ resultQName.localName = qualifiedName; // unless the qname has a prefix, the local name is the entire String
4504
+ resultQName.prefix = "";
4505
+
4506
+ // split on ':'
4507
+ var delimPos = qualifiedName.indexOf(':');
4508
+
4509
+ if (delimPos > -1) {
4510
+ // get prefix
4511
+ resultQName.prefix = qualifiedName.substring(0, delimPos);
4512
+
4513
+ // get localName
4514
+ resultQName.localName = qualifiedName.substring(delimPos +1, qualifiedName.length);
4515
+ }
4516
+
4517
+ return resultQName;
4518
+ };
4519
+
4050
4520
  // $w.Document = DOMDocument;
4051
4521
 
4052
4522
  // Local Variables:
@@ -4532,6 +5002,7 @@ __extend__(HTMLElement.prototype, {
4532
5002
  },
4533
5003
  offsetLeft: 0,
4534
5004
  offsetRight: 0,
5005
+ offsetTop: 0,
4535
5006
  get offsetParent(){
4536
5007
  /* TODO */
4537
5008
  return;
@@ -4540,6 +5011,7 @@ __extend__(HTMLElement.prototype, {
4540
5011
  /* TODO */
4541
5012
  return;
4542
5013
  },
5014
+ scrollTop: 0,
4543
5015
  scrollHeight: 0,
4544
5016
  scrollWidth: 0,
4545
5017
  scrollLeft: 0,
@@ -6119,7 +6591,7 @@ var __param__= function( array, boundary ) {
6119
6591
  array[i].value.push(content);
6120
6592
  array[i].value = array[i].value.join("\r\n");
6121
6593
  }
6122
- serialized.push('Content-Disposition: form-data; name="'+array[i].name+'"'+fn+'\r\n');
6594
+ serialized.push('Content-Disposition: form-data; name="'+array[i].name+'"'+fn+'\r\n\r\n');
6123
6595
  serialized.push(array[i].value);
6124
6596
  serialized.push( "\r\n" );
6125
6597
  }
@@ -19679,6 +20151,7 @@ function TokenExpr(m) {
19679
20151
  }
19680
20152
 
19681
20153
  TokenExpr.prototype.evaluate = function() {
20154
+ // print("0 "+arguments.callee+" "+this.value);
19682
20155
  return new StringValue(this.value);
19683
20156
  };
19684
20157
 
@@ -19969,12 +20442,14 @@ function NodeTestAny() {
19969
20442
  }
19970
20443
 
19971
20444
  NodeTestAny.prototype.evaluate = function(ctx) {
20445
+ // print("0 "+arguments.callee);
19972
20446
  return this.value;
19973
20447
  };
19974
20448
 
19975
20449
  function NodeTestElementOrAttribute() {}
19976
20450
 
19977
20451
  NodeTestElementOrAttribute.prototype.evaluate = function(ctx) {
20452
+ // print("0 "+arguments.callee);
19978
20453
  return new BooleanValue(
19979
20454
  ctx.node.nodeType == DOMNode.ELEMENT_NODE ||
19980
20455
  ctx.node.nodeType == DOMNode.ATTRIBUTE_NODE);
@@ -19983,12 +20458,14 @@ NodeTestElementOrAttribute.prototype.evaluate = function(ctx) {
19983
20458
  function NodeTestText() {}
19984
20459
 
19985
20460
  NodeTestText.prototype.evaluate = function(ctx) {
20461
+ // print("0 "+arguments.callee);
19986
20462
  return new BooleanValue(ctx.node.nodeType == DOMNode.TEXT_NODE);
19987
20463
  }
19988
20464
 
19989
20465
  function NodeTestComment() {}
19990
20466
 
19991
20467
  NodeTestComment.prototype.evaluate = function(ctx) {
20468
+ // print("0 "+arguments.callee);
19992
20469
  return new BooleanValue(ctx.node.nodeType == DOMNode.COMMENT_NODE);
19993
20470
  }
19994
20471
 
@@ -19997,6 +20474,7 @@ function NodeTestPI(target) {
19997
20474
  }
19998
20475
 
19999
20476
  NodeTestPI.prototype.evaluate = function(ctx) {
20477
+ // print("0 "+arguments.callee);
20000
20478
  return new
20001
20479
  BooleanValue(ctx.node.nodeType == DOMNode.PROCESSING_INSTRUCTION_NODE &&
20002
20480
  (!this.target || ctx.node.nodeName == this.target));
@@ -20008,6 +20486,7 @@ function NodeTestNC(nsprefix) {
20008
20486
  }
20009
20487
 
20010
20488
  NodeTestNC.prototype.evaluate = function(ctx) {
20489
+ // print("0 "+arguments.callee);
20011
20490
  var n = ctx.node;
20012
20491
  return new BooleanValue(this.regex.match(n.nodeName));
20013
20492
  }
@@ -20018,6 +20497,7 @@ function NodeTestName(name) {
20018
20497
  }
20019
20498
 
20020
20499
  NodeTestName.prototype.evaluate = function(ctx) {
20500
+ // print("0 !!! "+arguments.callee);
20021
20501
  var n = ctx.node;
20022
20502
  if (ctx.caseInsensitive || n instanceof HTMLElement) {
20023
20503
  if (n.nodeName.length != this.name.length) return new BooleanValue(false);
@@ -20032,6 +20512,7 @@ function PredicateExpr(expr) {
20032
20512
  }
20033
20513
 
20034
20514
  PredicateExpr.prototype.evaluate = function(ctx) {
20515
+ // print("0 "+arguments.callee);
20035
20516
  var v = this.expr.evaluate(ctx);
20036
20517
  if (v.type == 'number') {
20037
20518
  // NOTE(mesch): Internally, position is represented starting with
@@ -20053,9 +20534,11 @@ FunctionCallExpr.prototype.appendArg = function(arg) {
20053
20534
  };
20054
20535
 
20055
20536
  FunctionCallExpr.prototype.evaluate = function(ctx) {
20537
+ // print("0 "+arguments.callee+" "+this.name.value);
20056
20538
  var fn = '' + this.name.value;
20057
20539
  var f = this.xpathfunctions[fn];
20058
20540
  if (f) {
20541
+ // print("1 "+f);
20059
20542
  return f.call(this, ctx);
20060
20543
  } else {
20061
20544
  xpathLog('XPath NO SUCH FUNCTION ' + fn);
@@ -20129,6 +20612,9 @@ FunctionCallExpr.prototype.xpathfunctions = {
20129
20612
  if (n.length == 0) {
20130
20613
  return new StringValue('');
20131
20614
  } else {
20615
+ if (ctx.caseInsensitive || n[0] instanceof HTMLElement) {
20616
+ return new StringValue(n[0].nodeName.toLowerCase());
20617
+ }
20132
20618
  return new StringValue(n[0].nodeName);
20133
20619
  }
20134
20620
  },
@@ -20406,6 +20892,7 @@ function UnionExpr(expr1, expr2) {
20406
20892
  }
20407
20893
 
20408
20894
  UnionExpr.prototype.evaluate = function(ctx) {
20895
+ // print("0 "+arguments.callee);
20409
20896
  var nodes1 = this.expr1.evaluate(ctx).nodeSetValue();
20410
20897
  var nodes2 = this.expr2.evaluate(ctx).nodeSetValue();
20411
20898
  var I1 = nodes1.length;
@@ -20431,6 +20918,7 @@ function PathExpr(filter, rel) {
20431
20918
  }
20432
20919
 
20433
20920
  PathExpr.prototype.evaluate = function(ctx) {
20921
+ // print("0 "+arguments.callee);
20434
20922
  var nodes = this.filter.evaluate(ctx).nodeSetValue();
20435
20923
  var nodes1 = [];
20436
20924
  if (ctx.returnOnFirstMatch) {
@@ -20459,6 +20947,7 @@ function FilterExpr(expr, predicate) {
20459
20947
  }
20460
20948
 
20461
20949
  FilterExpr.prototype.evaluate = function(ctx) {
20950
+ // print("0 "+arguments.callee);
20462
20951
  // the filter expression should be evaluated in its entirety with no
20463
20952
  // optimization, as we can't backtrack to it after having moved on to
20464
20953
  // evaluating the relative location path. See the testReturnOnFirstMatch
@@ -20487,6 +20976,7 @@ function UnaryMinusExpr(expr) {
20487
20976
  }
20488
20977
 
20489
20978
  UnaryMinusExpr.prototype.evaluate = function(ctx) {
20979
+ // print("0 "+arguments.callee);
20490
20980
  return new NumberValue(-this.expr.evaluate(ctx).numberValue());
20491
20981
  };
20492
20982
 
@@ -20497,6 +20987,7 @@ function BinaryExpr(expr1, op, expr2) {
20497
20987
  }
20498
20988
 
20499
20989
  BinaryExpr.prototype.evaluate = function(ctx) {
20990
+ // print("0 "+arguments.callee);
20500
20991
  var ret;
20501
20992
  switch (this.op.value) {
20502
20993
  case 'or':
@@ -20661,6 +21152,7 @@ function LiteralExpr(value) {
20661
21152
  }
20662
21153
 
20663
21154
  LiteralExpr.prototype.evaluate = function(ctx) {
21155
+ // print("0 "+arguments.callee+" "+this.value);
20664
21156
  return new StringValue(this.value);
20665
21157
  };
20666
21158
 
@@ -20669,6 +21161,7 @@ function NumberExpr(value) {
20669
21161
  }
20670
21162
 
20671
21163
  NumberExpr.prototype.evaluate = function(ctx) {
21164
+ // print("0 "+arguments.callee);
20672
21165
  return new NumberValue(this.value);
20673
21166
  };
20674
21167
 
@@ -20677,6 +21170,7 @@ function VariableExpr(name) {
20677
21170
  }
20678
21171
 
20679
21172
  VariableExpr.prototype.evaluate = function(ctx) {
21173
+ // print("0 "+arguments.callee);
20680
21174
  return ctx.getVariable(this.name);
20681
21175
  }
20682
21176
 
@@ -22139,7 +22633,7 @@ __extend__(CSS2Properties.prototype, {
22139
22633
  get cssText(){
22140
22634
  var css = '';
22141
22635
  for(var i=0;i<this.length;i++){
22142
- css+=this[i]+":"+this.getPropertyValue(this[i])+';'
22636
+ css+=this[i]+":"+this.getPropertyValue(this[i])+';';
22143
22637
  }
22144
22638
  return css;
22145
22639
  },
@@ -22293,7 +22787,7 @@ var __supportedStyles__ = function(){
22293
22787
  fontVariant: null,
22294
22788
  fontWeight: null,
22295
22789
  height: '1px',
22296
- left: null,
22790
+ left: '0px',
22297
22791
  letterSpacing: null,
22298
22792
  lineHeight: null,
22299
22793
  listStyle: null,
@@ -22352,7 +22846,7 @@ var __supportedStyles__ = function(){
22352
22846
  textIndent: null,
22353
22847
  textShadow: null,
22354
22848
  textTransform: null,
22355
- top: null,
22849
+ top: '0px',
22356
22850
  unicodeBidi: null,
22357
22851
  verticalAlign: null,
22358
22852
  visibility: null,
@@ -22577,10 +23071,12 @@ get cookie(c){
22577
23071
  //case we must check our current location.protocol to make sure it's
22578
23072
  //https:
22579
23073
  var allcookies = [], i;
22580
- return cookieString($cookies.temporary) + cookieString($cookies.persistent);
23074
+ return cookieString.call(this, $cookies.temporary) +
23075
+ cookieString.call(this, $cookies.persistent);
22581
23076
  }});
22582
23077
 
22583
23078
  var cookieString = function(cookies) {
23079
+ var $w = this._parentWindow;
22584
23080
  var cookieString = "";
22585
23081
  for (var i in cookies) {
22586
23082
  // check if the cookie is in the current domain (if domain is set)