Refactor dropzone (#31482)

Refactor the legacy code and remove some jQuery calls.
This commit is contained in:
wxiaoguang
2024-06-27 01:01:20 +08:00
committed by GitHub
parent 35ce7a5e0e
commit a88f718c10
8 changed files with 183 additions and 183 deletions

View File

@ -304,3 +304,17 @@ export function createElementFromHTML(htmlString) {
div.innerHTML = htmlString.trim();
return div.firstChild;
}
export function createElementFromAttrs(tagName, attrs) {
const el = document.createElement(tagName);
for (const [key, value] of Object.entries(attrs)) {
if (value === undefined || value === null) continue;
if (value === true) {
el.toggleAttribute(key, value);
} else {
el.setAttribute(key, String(value));
}
// TODO: in the future we could make it also support "textContent" and "innerHTML" properties if needed
}
return el;
}

View File

@ -1,5 +1,16 @@
import {createElementFromHTML} from './dom.js';
import {createElementFromAttrs, createElementFromHTML} from './dom.js';
test('createElementFromHTML', () => {
expect(createElementFromHTML('<a>foo<span>bar</span></a>').outerHTML).toEqual('<a>foo<span>bar</span></a>');
});
test('createElementFromAttrs', () => {
const el = createElementFromAttrs('button', {
id: 'the-id',
class: 'cls-1 cls-2',
'data-foo': 'the-data',
disabled: true,
required: null,
});
expect(el.outerHTML).toEqual('<button id="the-id" class="cls-1 cls-2" data-foo="the-data" disabled=""></button>');
});