UTF8 support rolled in (both for external docs and innerHTML).
[jquery.git] / build / runtest / env.js
index f4c54bb..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(){},
@@ -206,8 +208,7 @@ var window = this;
                this.style = {};
                
                // Load CSS info
-               var styles = (new String(this.getAttribute("style") || ""))
-                       .split(/\s*;\s*/);
+               var styles = (this.getAttribute("style") || "").split(/\s*;\s*/);
                
                for ( var i = 0; i < styles.length; i++ ) {
                        var style = styles[i].split(/\s*:\s*/);
@@ -257,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 );
@@ -305,6 +306,27 @@ var window = this;
                set checked(val) { return this.setAttribute("checked",val); },
                
                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;
                },
@@ -327,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){