Added support for events, made window.location Async (and based upon XHR), added trigger for window.onload.
This commit is contained in:
parent
d776dc9d5c
commit
0bb035a1ab
|
@ -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){
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("GET", url);
|
||||||
|
xhr.onreadystatechange = function(){
|
||||||
curLocation = new java.net.URL( curLocation, url );
|
curLocation = new java.net.URL( curLocation, url );
|
||||||
|
window.document = xhr.responseXML;
|
||||||
|
|
||||||
window.document = new DOMDocument(
|
var event = document.createEvent();
|
||||||
new Packages.org.xml.sax.InputSource(
|
event.initEvent("load");
|
||||||
new java.io.InputStreamReader(
|
window.dispatchEvent( event );
|
||||||
new java.io.FileInputStream( url ))));
|
};
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -74,8 +85,50 @@ var window = this;
|
||||||
|
|
||||||
// Window Events
|
// Window Events
|
||||||
|
|
||||||
window.addEventListener = function(){};
|
var events = [{}];
|
||||||
window.removeEventListener = function(){};
|
|
||||||
|
window.addEventListener = function(type, fn){
|
||||||
|
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;
|
||||||
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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
createEvent: function(){
|
||||||
|
return {
|
||||||
|
type: "",
|
||||||
|
initEvent: function(type){
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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("*");
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,18 +1,21 @@
|
||||||
// Init
|
// Init
|
||||||
load("build/runtest/env.js");
|
load("build/runtest/env.js");
|
||||||
|
|
||||||
window.location = "test/index.html";
|
window.location = "test/index.html";
|
||||||
|
|
||||||
// Load the test runner
|
window.onload = function(){
|
||||||
load("dist/jquery.js","build/runtest/testrunner.js");
|
// Load the test runner
|
||||||
|
load("dist/jquery.js","build/runtest/testrunner.js");
|
||||||
|
|
||||||
// Load the tests
|
// Load the tests
|
||||||
load(
|
load(
|
||||||
"src/jquery/coreTest.js",
|
"src/jquery/coreTest.js",
|
||||||
"src/selector/selectorTest.js",
|
"src/selector/selectorTest.js",
|
||||||
"src/event/eventTest.js",
|
"src/event/eventTest.js",
|
||||||
"src/fx/fxTest.js"
|
"src/fx/fxTest.js"
|
||||||
//"src/ajax/ajaxTest.js"
|
//"src/ajax/ajaxTest.js"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Display the results
|
// Display the results
|
||||||
results();
|
results();
|
||||||
|
};
|
Loading…
Reference in a new issue