Skip to content

Commit 8a3822d

Browse files
committed
Remove IE11 unmount hack
1 parent bf23fa1 commit 8a3822d

File tree

8 files changed

+25
-30
lines changed

8 files changed

+25
-30
lines changed

src/diff/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { BaseComponent, getDomSibling } from '../component';
1313
import { Fragment } from '../create-element';
1414
import { diffChildren } from './children';
1515
import { setProperty } from './props';
16-
import { assign, isArray, removeNode, slice } from '../util';
16+
import { assign, isArray, slice } from '../util';
1717
import options from '../options';
1818

1919
/**
@@ -564,7 +564,7 @@ function diffElementNodes(
564564
// Remove children that are not part of any vnode.
565565
if (excessDomChildren != NULL) {
566566
for (i = excessDomChildren.length; i--; ) {
567-
removeNode(excessDomChildren[i]);
567+
if (excessDomChildren[i]) excessDomChildren[i].remove();
568568
}
569569
}
570570
}
@@ -668,8 +668,8 @@ export function unmount(vnode, parentVNode, skipRemove) {
668668
}
669669
}
670670

671-
if (!skipRemove) {
672-
removeNode(vnode._dom);
671+
if (!skipRemove && vnode._dom != null && typeof vnode.type != 'function') {
672+
vnode._dom.remove();
673673
}
674674

675675
vnode._component = vnode._parent = vnode._dom = UNDEFINED;

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 {import('./index').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
@@ -37,12 +37,14 @@ describe('Fragment', () => {
3737

3838
let resetInsertBefore;
3939
let resetAppendChild;
40-
let resetRemoveChild;
40+
let resetRemove;
41+
let resetRemoveText;
4142

4243
beforeAll(() => {
4344
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
4445
resetAppendChild = logCall(Element.prototype, 'appendChild');
45-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
46+
resetRemove = logCall(Element.prototype, 'remove');
47+
resetRemoveText = logCall(Text.prototype, 'remove');
4648
// logCall(CharacterData.prototype, 'remove');
4749
// TODO: Consider logging setting set data
4850
// ```
@@ -58,7 +60,8 @@ describe('Fragment', () => {
5860
afterAll(() => {
5961
resetInsertBefore();
6062
resetAppendChild();
61-
resetRemoveChild();
63+
resetRemove();
64+
resetRemoveText();
6265
});
6366

6467
beforeEach(() => {

test/browser/hydrate.test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,31 @@ describe('hydrate()', () => {
2525

2626
let resetAppendChild;
2727
let resetInsertBefore;
28-
let resetRemoveChild;
2928
let resetRemove;
29+
let resetRemoveText;
30+
let resetRemoveComment;
3031
let resetSetAttribute;
3132
let resetRemoveAttribute;
3233
let rerender;
3334

3435
beforeAll(() => {
3536
resetAppendChild = logCall(Element.prototype, 'appendChild');
3637
resetInsertBefore = logCall(Element.prototype, 'insertBefore');
37-
resetRemoveChild = logCall(Element.prototype, 'removeChild');
3838
resetRemove = logCall(Element.prototype, 'remove');
39+
resetRemoveComment = logCall(Comment.prototype, 'remove');
40+
resetRemoveText = logCall(Text.prototype, 'remove');
3941
resetSetAttribute = logCall(Element.prototype, 'setAttribute');
4042
resetRemoveAttribute = logCall(Element.prototype, 'removeAttribute');
4143
});
4244

4345
afterAll(() => {
4446
resetAppendChild();
4547
resetInsertBefore();
46-
resetRemoveChild();
4748
resetRemove();
49+
resetRemoveText();
4850
resetSetAttribute();
4951
resetRemoveAttribute();
52+
resetRemoveComment();
5053
});
5154

5255
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
beforeAll(() => {
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
afterAll(() => {
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
beforeAll(() => {
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
afterAll(() => {
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
beforeAll(() => {
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
afterAll(() => {
5454
resetAppendChild();
5555
resetInsertBefore();
56-
resetRemoveChild();
56+
resetRemoveText();
5757
resetRemove();
5858
});
5959

0 commit comments

Comments
 (0)