Commit 0bb035a1 authored by John Resig's avatar John Resig

Added support for events, made window.location Async (and based upon XHR),...

Added support for events, made window.location Async (and based upon XHR), added trigger for window.onload.
parent d776dc9d
...@@ -20,18 +20,29 @@ var window = this; ...@@ -20,18 +20,29 @@ var window = this;
var curLocation = (new java.io.File("./")).toURL(); var curLocation = (new java.io.File("./")).toURL();
window.__defineSetter__("location", function(url){ window.__defineSetter__("location", function(url){
curLocation = new java.net.URL( curLocation, url ); var xhr = new XMLHttpRequest();
xhr.open("GET", url);
window.document = new DOMDocument( xhr.onreadystatechange = function(){
new Packages.org.xml.sax.InputSource( curLocation = new java.net.URL( curLocation, url );
new java.io.InputStreamReader( window.document = xhr.responseXML;
new java.io.FileInputStream( url ))));
var event = document.createEvent();
event.initEvent("load");
window.dispatchEvent( event );
};
xhr.send();
}); });
window.__defineGetter__("location", function(url){ window.__defineGetter__("location", function(url){
return { return {
get protocol(){ get protocol(){
return curLocation.getProtocol() + ":"; return curLocation.getProtocol() + ":";
},
get href(){
return curLocation.toString();
},
toString: function(){
return this.href;
} }
}; };
}); });
...@@ -73,9 +84,51 @@ var window = this; ...@@ -73,9 +84,51 @@ var window = this;
}; };
// Window Events // Window Events
var events = [{}];
window.addEventListener = function(){}; window.addEventListener = function(type, fn){
window.removeEventListener = function(){}; if ( !this.uuid || this == window ) {
this.uuid = events.length;
events[this.uuid] = {};
}
if ( !events[this.uuid][type] )
events[this.uuid][type] = [];
if ( events[this.uuid][type].indexOf( fn ) < 0 )
events[this.uuid][type].push( fn );
};
window.removeEventListener = function(type, fn){
if ( !this.uuid || this == window ) {
this.uuid = events.length;
events[this.uuid] = {};
}
if ( !events[this.uuid][type] )
events[this.uuid][type] = [];
events[this.uuid][type] =
events[this.uuid][type].filter(function(f){
return f != fn;
});
};
window.dispatchEvent = function(event){
if ( event.type ) {
if ( this.uuid && events[this.uuid][event.type] ) {
var self = this;
events[this.uuid][event.type].forEach(function(fn){
fn.call( self, event );
});
}
if ( this["on" + event.type] )
this["on" + event.type].call( self, event );
}
};
// DOM Document // DOM Document
...@@ -121,8 +174,9 @@ var window = this; ...@@ -121,8 +174,9 @@ var window = this;
get ownerDocument(){ get ownerDocument(){
return null; return null;
}, },
addEventListener: function(){}, addEventListener: window.addEventListener,
removeEventListener: function(){}, removeEventListener: window.removeEventListener,
dispatchEvent: window.dispatchEvent,
get nodeName() { get nodeName() {
return "#document"; return "#document";
}, },
...@@ -152,6 +206,15 @@ var window = this; ...@@ -152,6 +206,15 @@ var window = this;
}; };
} }
}; };
},
createEvent: function(){
return {
type: "",
initEvent: function(type){
this.type = type;
}
};
} }
}; };
...@@ -411,12 +474,31 @@ var window = this; ...@@ -411,12 +474,31 @@ var window = this;
}, },
getElementsByTagName: DOMDocument.prototype.getElementsByTagName, getElementsByTagName: DOMDocument.prototype.getElementsByTagName,
addEventListener: function(){},
removeEventListener: function(){}, addEventListener: window.addEventListener,
click: function(){}, removeEventListener: window.removeEventListener,
submit: function(){}, dispatchEvent: window.dispatchEvent,
focus: function(){},
blur: function(){}, click: function(){
var event = document.createEvent();
event.initEvent("click");
this.dispatchEvent(event);
},
submit: function(){
var event = document.createEvent();
event.initEvent("submit");
this.dispatchEvent(event);
},
focus: function(){
var event = document.createEvent();
event.initEvent("focus");
this.dispatchEvent(event);
},
blur: function(){
var event = document.createEvent();
event.initEvent("blur");
this.dispatchEvent(event);
},
get elements(){ get elements(){
return this.getElementsByTagName("*"); return this.getElementsByTagName("*");
}, },
......
// Init // Init
load("build/runtest/env.js"); load("build/runtest/env.js");
window.location = "test/index.html";
// Load the test runner
load("dist/jquery.js","build/runtest/testrunner.js");
// Load the tests window.location = "test/index.html";
load(
"src/jquery/coreTest.js",
"src/selector/selectorTest.js",
"src/event/eventTest.js",
"src/fx/fxTest.js"
//"src/ajax/ajaxTest.js"
);
// Display the results window.onload = function(){
results(); // Load the test runner
load("dist/jquery.js","build/runtest/testrunner.js");
// Load the tests
load(
"src/jquery/coreTest.js",
"src/selector/selectorTest.js",
"src/event/eventTest.js",
"src/fx/fxTest.js"
//"src/ajax/ajaxTest.js"
);
// Display the results
results();
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment