UTF8 support rolled in (both for external docs and innerHTML).
[jquery.git] / build / runtest / env.js
index 30cd8f1..fae6490 100644 (file)
@@ -12,7 +12,9 @@ var window = this;
        };
        
        window.__defineSetter__("location", function(url){
-               window.document = new DOMDocument(url);
+               window.document = new DOMDocument(
+                       new Packages.org.xml.sax.InputSource(\r                  new java.io.InputStreamReader(
+                               new java.io.FileInputStream(url))));
        });
        
        window.__defineGetter__("location", function(url){
@@ -106,7 +108,7 @@ var window = this;
                        return makeNode( this._dom.getDocumentElement() );
                },
                get ownerDocument(){
-                       return this;
+                       return null;
                },
                addEventListener: function(){},
                removeEventListener: function(){},
@@ -203,6 +205,16 @@ var window = this;
 
        window.DOMElement = function(elem){
                this._dom = elem;
+               this.style = {};
+               
+               // Load CSS info
+               var styles = (this.getAttribute("style") || "").split(/\s*;\s*/);
+               
+               for ( var i = 0; i < styles.length; i++ ) {
+                       var style = styles[i].split(/\s*:\s*/);
+                       if ( style.length == 2 )
+                               this.style[ style[0] ] = style[1];
+               }
        };
        
        DOMElement.prototype = extend( new DOMNode(), {
@@ -246,7 +258,7 @@ var window = this;
                        var nodes = this.ownerDocument.importNode(
                                new DOMDocument( new java.io.ByteArrayInputStream(
                                        (new java.lang.String("<wrap>" + html + "</wrap>"))
-                                               .getBytes())).documentElement, true).childNodes;
+                                               .getBytes("UTF8"))).documentElement, true).childNodes;
                                
                        while (this.firstChild)
                                this.removeChild( this.firstChild );
@@ -281,13 +293,43 @@ var window = this;
                offsetHeight: 0,
                offsetWidth: 0,
                
-               get disabled() { return !!this.getAttribute("disabled"); },
+               get disabled() {
+                       var val = this.getAttribute("disabled");
+                       return val != "false" && !!val;
+               },
                set disabled(val) { return this.setAttribute("disabled",val); },
                
-               get checked() { return !!this.getAttribute("checked"); },
+               get checked() {
+                       var val = this.getAttribute("checked");
+                       return val != "false" && !!val;
+               },
                set checked(val) { return this.setAttribute("checked",val); },
                
-               get selected() { return !!this.getAttribute("selected"); },
+               get selected() {
+                       if ( !this._selectDone ) {
+                               this._selectDone = true;
+                               
+                               if ( this.nodeName == "OPTION" && !this.parentNode.getAttribute("multiple") ) {
+                                       var opt = this.parentNode.getElementsByTagName("option");
+                                       
+                                       if ( this == opt[0] ) {
+                                               var select = true;
+                                               
+                                               for ( var i = 1; i < opt.length; i++ )
+                                                       if ( opt[i].selected ) {
+                                                               select = false;
+                                                               break;
+                                                       }
+                                                       
+                                               if ( select )
+                                                       this.selected = true;
+                                       }
+                               }
+                       }
+                       
+                       var val = this.getAttribute("selected");
+                       return val != "false" && !!val;
+               },
                set selected(val) { return this.setAttribute("selected",val); },
 
                get className() { return this.getAttribute("class") || ""; },
@@ -307,7 +349,7 @@ var window = this;
                
                getAttribute: function(name){
                        return this._dom.hasAttribute(name) ?
-                               this._dom.getAttribute(name) :
+                               new String( this._dom.getAttribute(name) ) :
                                null;
                },
                setAttribute: function(name,value){
@@ -343,7 +385,9 @@ var window = this;
                submit: function(){},
                focus: function(){},
                blur: function(){},
-               elements: []
+               get elements(){
+                       return this.getElementsByTagName("*");
+               }
        });
        
        // Helper method for extending one object with another