Skip to content

fix stopPropagation override for IE11#2390

Merged
marvinhagemeister merged 5 commits intomasterfrom
fix-stop-propagation
Mar 8, 2020
Merged

fix stopPropagation override for IE11#2390
marvinhagemeister merged 5 commits intomasterfrom
fix-stop-propagation

Conversation

@JoviDeCroock
Copy link
Copy Markdown
Member

@JoviDeCroock JoviDeCroock commented Mar 4, 2020

IE11 throws an error when overriding the stopPropagation method on an event

@JoviDeCroock JoviDeCroock requested review from andrewiggins, developit and marvinhagemeister and removed request for andrewiggins March 4, 2020 19:45
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 4, 2020

Size Change: +53 B (0%)

Total Size: 38.5 kB

Filename Size Change
compat/dist/compat.js 3.12 kB +18 B (0%)
compat/dist/compat.module.js 3.14 kB +18 B (0%)
compat/dist/compat.umd.js 3.17 kB +17 B (0%)
ℹ️ View Unchanged
Filename Size Change
debug/dist/debug.js 2.98 kB 0 B
debug/dist/debug.module.js 2.96 kB 0 B
debug/dist/debug.umd.js 3.04 kB 0 B
devtools/dist/devtools.js 175 B 0 B
devtools/dist/devtools.module.js 185 B 0 B
devtools/dist/devtools.umd.js 252 B 0 B
dist/preact.js 3.72 kB 0 B
dist/preact.min.js 3.72 kB 0 B
dist/preact.module.js 3.73 kB 0 B
dist/preact.umd.js 3.78 kB 0 B
hooks/dist/hooks.js 1.05 kB 0 B
hooks/dist/hooks.module.js 1.08 kB 0 B
hooks/dist/hooks.umd.js 1.13 kB 0 B
test-utils/dist/testUtils.js 390 B 0 B
test-utils/dist/testUtils.module.js 392 B 0 B
test-utils/dist/testUtils.umd.js 469 B 0 B

compressed-size-action

@coveralls
Copy link
Copy Markdown

coveralls commented Mar 4, 2020

Coverage Status

Coverage decreased (-0.6%) to 98.975% when pulling 2976865 on fix-stop-propagation into 3f06b00 on master.

@JoviDeCroock
Copy link
Copy Markdown
Member Author

image

Looks like it works in IE11

Comment thread compat/src/render.js Outdated
@38elements
Copy link
Copy Markdown
Contributor

38elements commented Mar 5, 2020

I may be misunderstanding .
I used following code on IE11 of Windows 10.
This code worked normally.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Test</title>
</head>
<body>
<div id="bar">
  <div id="foo">foo<br>foo<br>foo<br></div>
</div>
<script type="text/javascript">
  var foo = document.getElementById('foo')
  foo.addEventListener('click', function(e) {
    var stopPropagation = e.stopPropagation
    e.stopPropagation = function() {stopPropagation.call(this)};
    e.stopPropagation();
    console.log('Foo');
  }, false);
  var bar = document.getElementById('bar')
    bar.addEventListener('click', function(e) {
    console.log('Bar');
  }, false);
</script>
</body>
</html>

@JoviDeCroock
Copy link
Copy Markdown
Member Author

@38elements look at the IE11 tests on master, or something weird happens to the closure on IE11 or the override doesn't take effect.

These tests only run on master, https://travis-ci.org/preactjs/preact/builds/656971648?utm_source=github_status&utm_medium=notification

We can enable them by enabling sauceLabs on our karma config

@38elements
Copy link
Copy Markdown
Contributor

38elements commented Mar 5, 2020

@JoviDeCroock
Thank you for reply.
I think that event.defaultPrevented may cause a problem.

Error
   at AssertionError (node_modules/chai/chai.js:9449:7)
   at Assertion.prototype.assert (node_modules/chai/chai.js:239:7)
   at Anonymous function (node_modules/chai/chai.js:1021:5)
   at propertyGetter (node_modules/chai/chai.js:7899:9)
   at Anonymous function (webpack:///compat/test/browser/events.test.js:51:2 <- compat/test/browser/events.test.js:7244:5)

expect(event.isDefaultPrevented()).to.be.true;

But, this code worked normally in IE11.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Test</title>
</head>
<body>
<div id="foo">foo<br>foo<br>foo<br></div>
<script type="text/javascript">
  var foo = document.getElementById('foo')
  foo.addEventListener('click', function(e) {
    console.log(e.defaultPrevented)
    e.preventDefault()
    console.log(e.defaultPrevented)
    console.log('Foo');
  }, false);
</script>
</body>
</html>
import { createElement as h, render, Component } from 'preact/compat'


function App() {

  function onClick(event) {
    console.log('isDefaultPrevented=' + event.isDefaultPrevented())
    event.preventDefault()
    console.log('isDefaultPrevented=' + event.isDefaultPrevented())
    console.log('isPropagationStopped=' + event.isPropagationStopped())
    event.stopPropagation()
    console.log('isPropagationStopped=' + event.isPropagationStopped())
  }

  return <div onClick={onClick}>foo<br/>foo<br/>foo</div> 
}

render(<App />, document.body)

@JoviDeCroock
Copy link
Copy Markdown
Member Author

Seems like IE11 on Windows 7 was indeed bugging out, thanks @38elements I must've missed the line-number. You're a hero!

@JoviDeCroock JoviDeCroock force-pushed the fix-stop-propagation branch from 9805969 to 2976865 Compare March 8, 2020 23:17
Copy link
Copy Markdown
Member

@marvinhagemeister marvinhagemeister left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome 🙌 🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants