Skip to content

Commit 6378916

Browse files
author
Clauderic Demers
committed
chore: extract node cloning logic into util
1 parent 1bd2f35 commit 6378916

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

src/SortableContainer/index.js

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Manager from '../Manager';
77
import {isSortableHandle} from '../SortableHandle';
88

99
import {
10+
cloneNode,
1011
closest,
1112
events,
1213
getScrollingParent,
@@ -271,24 +272,7 @@ export default function sortableContainer(
271272
top: window.pageYOffset,
272273
};
273274

274-
const fields = node.querySelectorAll('input, textarea, select, canvas');
275-
const clonedNode = node.cloneNode(true);
276-
const clonedFields = [
277-
...clonedNode.querySelectorAll('input, textarea, select, canvas'),
278-
];
279-
280-
clonedFields.forEach((field, i) => {
281-
if (field.type !== 'file' && fields[index]) {
282-
field.value = fields[i].value;
283-
}
284-
285-
if (field.tagName === NodeType.Canvas) {
286-
const destCtx = field.getContext('2d');
287-
destCtx.drawImage(fields[i], 0, 0);
288-
}
289-
});
290-
291-
this.helper = this.helperContainer.appendChild(clonedNode);
275+
this.helper = this.helperContainer.appendChild(cloneNode(node));
292276

293277
setInlineStyles(this.helper, {
294278
boxSizing: 'border-box',

src/utils.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,3 +249,23 @@ export const NodeType = {
249249
Textarea: 'TEXTAREA',
250250
Select: 'SELECT',
251251
};
252+
253+
export function cloneNode(node) {
254+
const selector = 'input, textarea, select, canvas, [contenteditable]';
255+
const fields = node.querySelectorAll(selector);
256+
const clonedNode = node.cloneNode(true);
257+
const clonedFields = [...clonedNode.querySelectorAll(selector)];
258+
259+
clonedFields.forEach((field, i) => {
260+
if (field.type !== 'file') {
261+
field.value = fields[i].value;
262+
}
263+
264+
if (field.tagName === NodeType.Canvas) {
265+
const destCtx = field.getContext('2d');
266+
destCtx.drawImage(fields[i], 0, 0);
267+
}
268+
});
269+
270+
return clonedNode;
271+
}

0 commit comments

Comments
 (0)