Skip to content

Commit 92ec5cb

Browse files
committed
Remove IE11 unmount hack
1 parent b0550f5 commit 92ec5cb

File tree

9 files changed

+26
-30
lines changed

9 files changed

+26
-30
lines changed

src/diff/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { BaseComponent, getDomSibling } from '../component';
88
import { Fragment } from '../create-element';
99
import { diffChildren } from './children';
1010
import { setProperty } from './props';
11-
import { assign, isArray, removeNode, slice } from '../util';
11+
import { assign, isArray, slice } from '../util';
1212
import options from '../options';
1313

1414
/**
@@ -523,7 +523,7 @@ function diffElementNodes(
523523
// Remove children that are not part of any vnode.
524524
if (excessDomChildren != null) {
525525
for (i = excessDomChildren.length; i--; ) {
526-
removeNode(excessDomChildren[i]);
526+
if (excessDomChildren[i]) excessDomChildren[i].remove();
527527
}
528528
}
529529
}
@@ -627,8 +627,8 @@ export function unmount(vnode, parentVNode, skipRemove) {
627627
}
628628
}
629629

630-
if (!skipRemove) {
631-
removeNode(vnode._dom);
630+
if (!skipRemove && vnode._dom != null && typeof vnode.type != 'function') {
631+
vnode._dom.remove();
632632
}
633633

634634
// Must be set to `undefined` to properly clean up `_nextDom`

src/internal.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ declare global {
9999
readonly attributes?: Element['attributes'];
100100
setAttribute?: Element['setAttribute'];
101101
removeAttribute?: Element['removeAttribute'];
102+
remove?: Element['remove'];
102103

103104
// Event listeners
104105
addEventListener?: Element['addEventListener'];

src/util.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,3 @@ import { EMPTY_ARR } from './constants';
33
export const isArray = Array.isArray;
44
export const assign = Object.assign;
55
export const slice = EMPTY_ARR.slice;
6-
7-
/**
8-
* Remove a child node from its parent if attached. This is a workaround for
9-
* IE11 which doesn't support `Element.prototype.remove()`. Using this function
10-
* is smaller than including a dedicated polyfill.
11-
* @param {preact.ContainerNode} node The node to remove
12-
*/
13-
export function removeNode(node) {
14-
if (node && node.parentNode) node.parentNode.removeChild(node);
15-
}

test/_util/logCall.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ export function logCall(obj, method) {
3131

3232
let operation;
3333
switch (method) {
34-
case 'removeChild': {
35-
operation = `${serialize(c)}.remove()`;
36-
break;
37-
}
3834
case 'insertBefore': {
3935
if (args[1] === null && args.length === 2) {
4036
operation = `${serialize(this)}.appendChild(${serialize(args[0])})`;

test/browser/fragments.test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ describe('Fragment', () => {
3131

3232
let resetInsertBefore;
3333
let resetAppendChild;
34-
let resetRemoveChild;
34+
let resetRemove;
35+
let resetRemoveText;
3536

3637
before(() => {
3738
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
3839
resetAppendChild = logCall(Element.prototype, 'appendChild');
39-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
40+
resetRemove = logCall(Element.prototype, 'remove');
41+
resetRemoveText = logCall(Text.prototype, 'remove');
4042
// logCall(CharacterData.prototype, 'remove');
4143
// TODO: Consider logging setting set data
4244
// ```
@@ -52,7 +54,8 @@ describe('Fragment', () => {
5254
after(() => {
5355
resetInsertBefore();
5456
resetAppendChild();
55-
resetRemoveChild();
57+
resetRemove();
58+
resetRemoveText();
5659
});
5760

5861
beforeEach(() => {

test/browser/hydrate.test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,30 @@ describe('hydrate()', () => {
2424

2525
let resetAppendChild;
2626
let resetInsertBefore;
27-
let resetRemoveChild;
2827
let resetRemove;
28+
let resetRemoveText;
29+
let resetRemoveComment;
2930
let resetSetAttribute;
3031
let resetRemoveAttribute;
3132

3233
before(() => {
3334
resetAppendChild = logCall(Element.prototype, 'appendChild');
3435
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
35-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
3636
resetRemove = logCall(Element.prototype, 'remove');
37+
resetRemoveComment = logCall(Comment.prototype, 'remove');
38+
resetRemoveText = logCall(Text.prototype, 'remove');
3739
resetSetAttribute = logCall(Element.prototype, 'setAttribute');
3840
resetRemoveAttribute = logCall(Element.prototype, 'removeAttribute');
3941
});
4042

4143
after(() => {
4244
resetAppendChild();
4345
resetInsertBefore();
44-
resetRemoveChild();
4546
resetRemove();
47+
resetRemoveText();
4648
resetSetAttribute();
4749
resetRemoveAttribute();
50+
resetRemoveComment();
4851
});
4952

5053
beforeEach(() => {

test/browser/keys.test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,22 @@ describe('keys', () => {
5757
let resetInsertBefore;
5858
let resetRemoveChild;
5959
let resetRemove;
60+
let resetRemoveText;
6061

6162
before(() => {
6263
resetAppendChild = logCall(Element.prototype, 'appendChild');
6364
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
6465
resetRemoveChild = logCall(Element.prototype, 'removeChild');
6566
resetRemove = logCall(Element.prototype, 'remove');
67+
resetRemoveText = logCall(Text.prototype, 'remove');
6668
});
6769

6870
after(() => {
6971
resetAppendChild();
7072
resetInsertBefore();
7173
resetRemoveChild();
7274
resetRemove();
75+
resetRemoveText();
7376
});
7477

7578
beforeEach(() => {

test/browser/placeholders.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,20 @@ describe('null placeholders', () => {
5656

5757
let resetAppendChild;
5858
let resetInsertBefore;
59-
let resetRemoveChild;
59+
let resetRemoveText;
6060
let resetRemove;
6161

6262
before(() => {
6363
resetAppendChild = logCall(Element.prototype, 'appendChild');
6464
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
65-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
6665
resetRemove = logCall(Element.prototype, 'remove');
66+
resetRemoveText = logCall(Text.prototype, 'remove');
6767
});
6868

6969
after(() => {
7070
resetAppendChild();
7171
resetInsertBefore();
72-
resetRemoveChild();
72+
resetRemoveText();
7373
resetRemove();
7474
});
7575

test/browser/render.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ describe('render()', () => {
3131

3232
let resetAppendChild;
3333
let resetInsertBefore;
34-
let resetRemoveChild;
34+
let resetRemoveText;
3535
let resetRemove;
3636

3737
beforeEach(() => {
@@ -46,14 +46,14 @@ describe('render()', () => {
4646
before(() => {
4747
resetAppendChild = logCall(Element.prototype, 'appendChild');
4848
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
49-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
49+
resetRemoveText = logCall(Text.prototype, 'remove');
5050
resetRemove = logCall(Element.prototype, 'remove');
5151
});
5252

5353
after(() => {
5454
resetAppendChild();
5555
resetInsertBefore();
56-
resetRemoveChild();
56+
resetRemoveText();
5757
resetRemove();
5858
});
5959

0 commit comments

Comments
 (0)