support all events
This commit is contained in:
parent
88e5724abd
commit
b17bd250b7
6 changed files with 135 additions and 26 deletions
|
|
@ -1,6 +1,9 @@
|
|||
"use strict"
|
||||
|
||||
module.exports = function() {
|
||||
function isModernEvent(type) {
|
||||
return type === "transitionstart" || type === "transitionend" || type === "animationstart" || type === "animationend"
|
||||
}
|
||||
function appendChild(child) {
|
||||
var ancestor = this
|
||||
while (ancestor !== child && ancestor !== null) ancestor = ancestor.parentNode
|
||||
|
|
@ -77,6 +80,7 @@ module.exports = function() {
|
|||
document: {
|
||||
createElement: function(tag, is) {
|
||||
var style = {}
|
||||
var events = {}
|
||||
var element = {
|
||||
nodeType: 1,
|
||||
nodeName: tag.toUpperCase(),
|
||||
|
|
@ -148,9 +152,24 @@ module.exports = function() {
|
|||
}
|
||||
},
|
||||
focus: function() {activeElement = this},
|
||||
addEventListener: function(type, callback, useCapture) {
|
||||
if (events[type] == null) events[type] = [callback]
|
||||
else events[type].push(callback)
|
||||
},
|
||||
removeEventListener: function(type, callback, useCapture) {
|
||||
if (events[type] != null) {
|
||||
var index = events[type].indexOf(callback)
|
||||
if (index > -1) events[type].splice(index, 1)
|
||||
}
|
||||
},
|
||||
dispatchEvent: function(e) {
|
||||
e.target = this
|
||||
if (typeof this["on" + e.type] === "function") this["on" + e.type](e)
|
||||
if (events[e.type] != null) {
|
||||
for (var i = 0; i < events[e.type].length; i++) {
|
||||
events[e.type][i].call(this, e)
|
||||
}
|
||||
}
|
||||
if (typeof this["on" + e.type] === "function" && !isModernEvent(e.type)) this["on" + e.type](e)
|
||||
},
|
||||
}
|
||||
if (element.nodeName === "A") {
|
||||
|
|
|
|||
|
|
@ -484,31 +484,72 @@ o.spec("domMock", function() {
|
|||
})
|
||||
})
|
||||
o.spec("events", function() {
|
||||
var spy, div, e
|
||||
o.beforeEach(function() {
|
||||
spy = o.spy()
|
||||
div = $document.createElement("div")
|
||||
e = $document.createEvent("MouseEvents")
|
||||
e.initEvent("click", true, true)
|
||||
o.spec("click", function() {
|
||||
var spy, div, e
|
||||
o.beforeEach(function() {
|
||||
spy = o.spy()
|
||||
div = $document.createElement("div")
|
||||
e = $document.createEvent("MouseEvents")
|
||||
e.initEvent("click", true, true)
|
||||
|
||||
$document.body.appendChild(div)
|
||||
})
|
||||
o.afterEach(function() {
|
||||
$document.body.removeChild(div)
|
||||
})
|
||||
|
||||
$document.body.appendChild(div)
|
||||
o("addEventListener works", function() {
|
||||
div.addEventListener("click", spy, false)
|
||||
div.dispatchEvent(e)
|
||||
|
||||
o(spy.callCount).equals(1)
|
||||
o(spy.this).equals(div)
|
||||
o(spy.args[0].type).equals("click")
|
||||
o(spy.args[0].target).equals(div)
|
||||
})
|
||||
o("removeEventListener works", function(done) {
|
||||
div.addEventListener("click", spy, false)
|
||||
div.removeEventListener("click", spy, false)
|
||||
div.dispatchEvent(e)
|
||||
|
||||
o(spy.callCount).equals(0)
|
||||
done()
|
||||
})
|
||||
o("click fires onclick", function() {
|
||||
div.onclick = spy
|
||||
div.dispatchEvent(e)
|
||||
|
||||
o(spy.callCount).equals(1)
|
||||
o(spy.this).equals(div)
|
||||
o(spy.args[0].type).equals("click")
|
||||
o(spy.args[0].target).equals(div)
|
||||
})
|
||||
o("click without onclick doesn't throw", function(done) {
|
||||
div.dispatchEvent(e)
|
||||
done()
|
||||
})
|
||||
})
|
||||
o.afterEach(function() {
|
||||
$document.body.removeChild(div)
|
||||
})
|
||||
|
||||
o("click fires onclick", function() {
|
||||
div.onclick = spy
|
||||
div.dispatchEvent(e)
|
||||
o.spec("transitionend", function() {
|
||||
var spy, div, e
|
||||
o.beforeEach(function() {
|
||||
spy = o.spy()
|
||||
div = $document.createElement("div")
|
||||
e = $document.createEvent("AnimationEvent")
|
||||
e.initEvent("transitionend", true, true)
|
||||
|
||||
$document.body.appendChild(div)
|
||||
})
|
||||
o.afterEach(function() {
|
||||
$document.body.removeChild(div)
|
||||
})
|
||||
|
||||
o(spy.callCount).equals(1)
|
||||
o(spy.this).equals(div)
|
||||
o(spy.args[0].type).equals("click")
|
||||
o(spy.args[0].target).equals(div)
|
||||
})
|
||||
o("click without onclick doesn't throw", function(done) {
|
||||
div.dispatchEvent(e)
|
||||
done()
|
||||
o("ontransitionend does not fire", function(done) {
|
||||
div.ontransitionend = spy
|
||||
div.dispatchEvent(e)
|
||||
|
||||
o(spy.callCount).equals(0)
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
o.spec("attributes", function() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue