Make sure fixed preventDefault can be called multiple times

Fixes #441 Interact .draggable and webcomponentsjs conflict in IE
This commit is contained in:
Daniel Freedman
2015-11-13 12:15:21 -08:00
parent aff4917482
commit 8c21f2e171
3 changed files with 23 additions and 11 deletions

View File

@@ -534,12 +534,17 @@
Event.prototype.preventDefault = function() {
if (!this.cancelable)
return;
unsafeUnwrap(this).preventDefault();
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
}
});
if (!this.defaultPrevented) {
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
}
};
}

View File

@@ -17,7 +17,7 @@
if (!window.performance) {
var start = Date.now();
// only at millisecond precision
window.performance = {now: function(){ return Date.now() - start }};
window.performance = {now: function(){ return Date.now() - start; }};
}
// polyfill for requestAnimationFrame
@@ -64,12 +64,17 @@
if (!this.cancelable) {
return;
}
origPreventDefault.call(this);
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
}
});
if (!this.defaultPrevented) {
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
}
};
}

View File

@@ -87,6 +87,8 @@
var e = new Event('foo', {cancelable: true});
e.preventDefault();
assert.isTrue(e.defaultPrevented);
// call again, just in case
assert.doesNotThrow(e.preventDefault);
});
});
</script>