Skip to content

Commit 0fbfcad

Browse files
committed
Remove IE11 unmount hack
1 parent b7e55e2 commit 0fbfcad

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
@@ -9,7 +9,7 @@ import { BaseComponent, getDomSibling } from '../component';
99
import { Fragment } from '../create-element';
1010
import { diffChildren } from './children';
1111
import { setProperty } from './props';
12-
import { assign, isArray, removeNode, slice } from '../util';
12+
import { assign, isArray, slice } from '../util';
1313
import options from '../options';
1414

1515
/**
@@ -531,7 +531,7 @@ function diffElementNodes(
531531
// Remove children that are not part of any vnode.
532532
if (excessDomChildren != null) {
533533
for (i = excessDomChildren.length; i--; ) {
534-
removeNode(excessDomChildren[i]);
534+
if (excessDomChildren[i]) excessDomChildren[i].remove();
535535
}
536536
}
537537
}
@@ -635,8 +635,8 @@ export function unmount(vnode, parentVNode, skipRemove) {
635635
}
636636
}
637637

638-
if (!skipRemove) {
639-
removeNode(vnode._dom);
638+
if (!skipRemove && vnode._dom != null && typeof vnode.type != 'function') {
639+
vnode._dom.remove();
640640
}
641641

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

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
@@ -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
before(() => {
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
after(() => {
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
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)