fix event removal in diff
fix CI
This commit is contained in:
parent
fc9d4f2ee4
commit
6c3036e5c6
10 changed files with 37 additions and 67 deletions
|
|
@ -30,7 +30,7 @@ Mithril's virtual DOM engine is around 500 lines of well organized code and it i
|
|||
|
||||
## Robustness
|
||||
|
||||
There are over 3000 assertions in the test suite, and tests cover even difficult-to-test things like `location.href`, `element.innerHTML` and `XMLHttpRequest` usage.
|
||||
There are over 4000 assertions in the test suite, and tests cover even difficult-to-test things like `location.href`, `element.innerHTML` and `XMLHttpRequest` usage.
|
||||
|
||||
## Modularity
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ module.exports = function(input, output, options) {
|
|||
.replace(/(?:var|let|const)[\t ]([\w_$\.]+)(\s*=\s*)\1([\r\n;]+)/g, "$3") // remove assignments to itself
|
||||
.replace(/([\r\n]){2,}/g, "$1") // remove multiple consecutive line breaks
|
||||
.replace(/\}[\r\n]+\(/g, "}(") // remove space from iife
|
||||
.replace(/(window\.){2}/g, "") // collapse window references
|
||||
}
|
||||
|
||||
function exportCode(file, def, variable, eq) {
|
||||
|
|
|
|||
5
index.js
5
index.js
|
|
@ -1,9 +1,10 @@
|
|||
"use strict"
|
||||
|
||||
var Stream = require("./util/stream")(console.error.bind(console))
|
||||
var log = console.error.bind(console)
|
||||
var Stream = require("./util/stream")(log)
|
||||
var m = require("./render/hyperscript")
|
||||
var renderService = require("./render/render")(window)
|
||||
var requestService = require("./request/request")(window)
|
||||
var requestService = require("./request/request")(window, log)
|
||||
var redrawService = require("./api/pubsub")()
|
||||
|
||||
requestService.setCompletionCallback(redrawService.publish)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
new function() {
|
||||
|
||||
var Stream = function(log) {
|
||||
var guid = 0, noop = function() {}, HALT = {}
|
||||
function createStream() {
|
||||
|
|
|
|||
|
|
@ -421,7 +421,8 @@ module.exports = function($window) {
|
|||
if (old != null) {
|
||||
for (var key in old) {
|
||||
if (attrs == null || !(key in attrs)) {
|
||||
if (key !== "key") vnode.dom.removeAttribute(key)
|
||||
if (key[0] === "o" && key[1] === "n" && !isLifecycleMethod(key)) updateEvent(vnode, key, undefined)
|
||||
else if (key !== "key") vnode.dom.removeAttribute(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -470,8 +471,10 @@ module.exports = function($window) {
|
|||
var eventName = key.slice(2)
|
||||
if (vnode.events === undefined) vnode.events = {}
|
||||
if (vnode.events[key] != null) element.removeEventListener(eventName, vnode.events[key], false)
|
||||
vnode.events[key] = callback
|
||||
element.addEventListener(eventName, vnode.events[key], false)
|
||||
if (typeof value === "function") {
|
||||
vnode.events[key] = callback
|
||||
element.addEventListener(eventName, vnode.events[key], false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,21 @@ o.spec("event", function() {
|
|||
o(onevent.args[0].type).equals("click")
|
||||
o(onevent.args[0].target).equals(div.dom)
|
||||
})
|
||||
|
||||
o("removes event", function() {
|
||||
var spy = o.spy()
|
||||
var vnode = {tag: "a", attrs: {onclick: spy}}
|
||||
var updated = {tag: "a", attrs: {}}
|
||||
|
||||
render(root, [vnode])
|
||||
render(root, [updated])
|
||||
|
||||
var e = $window.document.createEvent("MouseEvents")
|
||||
e.initEvent("click", true, true)
|
||||
vnode.dom.dispatchEvent(e)
|
||||
|
||||
o(spy.callCount).equals(0)
|
||||
})
|
||||
|
||||
o("fires onclick only once after redraw", function() {
|
||||
var spy = o.spy()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
"use strict"
|
||||
|
||||
var buildQueryString = require("../querystring/build")
|
||||
var Stream = require("../util/stream")
|
||||
var StreamFactory = require("../util/stream")
|
||||
|
||||
module.exports = function($window) {
|
||||
module.exports = function($window, log) {
|
||||
var Stream = StreamFactory(log)
|
||||
var callbackCount = 0
|
||||
|
||||
var oncompletion
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@ var Request = require("../../request/request")
|
|||
var parseQueryString = require("../../querystring/parse")
|
||||
|
||||
o.spec("jsonp", function() {
|
||||
var mock, jsonp
|
||||
var mock, jsonp, spy
|
||||
o.beforeEach(function() {
|
||||
mock = xhrMock()
|
||||
jsonp = new Request(mock).jsonp
|
||||
spy = o.spy()
|
||||
jsonp = new Request(mock, spy).jsonp
|
||||
})
|
||||
|
||||
o("works", function(done) {
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@ var xhrMock = require("../../test-utils/xhrMock")
|
|||
var Request = require("../../request/request")
|
||||
|
||||
o.spec("xhr", function() {
|
||||
var mock, xhr
|
||||
var mock, xhr, spy
|
||||
o.beforeEach(function() {
|
||||
mock = xhrMock()
|
||||
xhr = new Request(mock).xhr
|
||||
spy = o.spy()
|
||||
xhr = new Request(mock, spy).xhr
|
||||
})
|
||||
|
||||
o.spec("success", function() {
|
||||
|
|
|
|||
|
|
@ -1,57 +1,3 @@
|
|||
"use strict"
|
||||
|
||||
/**
|
||||
* This is modeled after Bluebird's scheduler. It solves for quite a few edge
|
||||
* cases, and should help alleviate most of the flakiness issues. It also speeds
|
||||
* up the suite a bit.
|
||||
*/
|
||||
|
||||
module.exports = (function () {
|
||||
// The scheduler for NodeJS/io.js is setImmediate for recent versions of
|
||||
// node because of macrotask semantics (i.e. don't starve the event loop).
|
||||
if (typeof process !== "undefined" &&
|
||||
/^\[object process\]/i.test({}.toString.call(process))) {
|
||||
var version = process.versions.node.split(".").map(Number)
|
||||
var isRecent = version[0] === 0 && version[1] > 10 || version[0] > 0
|
||||
|
||||
return isRecent ? setImmediate : process.nextTick
|
||||
}
|
||||
|
||||
if (typeof Promise === "function") {
|
||||
var p = Promise.resolve()
|
||||
|
||||
return function (fn) {
|
||||
p.then(fn)
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof MutationObserver !== "undefined") {
|
||||
// Using 2 mutation observers to batch multiple updates into one.
|
||||
var div = document.createElement("div")
|
||||
var opts = {attributes: true}
|
||||
var toggleScheduled = false
|
||||
var div2 = document.createElement("div")
|
||||
var o2 = new MutationObserver(function() {
|
||||
div.classList.toggle("foo")
|
||||
toggleScheduled = false
|
||||
})
|
||||
o2.observe(div2, opts)
|
||||
|
||||
function scheduleToggle() {
|
||||
if (toggleScheduled) return
|
||||
toggleScheduled = true
|
||||
div2.classList.toggle("foo")
|
||||
}
|
||||
|
||||
return function (fn) {
|
||||
var o = new MutationObserver(function() {
|
||||
o.disconnect()
|
||||
fn()
|
||||
})
|
||||
o.observe(div, opts)
|
||||
scheduleToggle()
|
||||
}
|
||||
}
|
||||
|
||||
return typeof setImmediate === "function" ? setImmediate : setTimeout
|
||||
})()
|
||||
module.exports = typeof setImmediate === "function" ? setImmediate : setTimeout
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue