Skip to content

Commit 527199d

Browse files
committed
The changes I described earlier
1 parent b7718cf commit 527199d

File tree

1 file changed

+18
-12
lines changed
  • frameworks/keyed/vanillajs-3/src

1 file changed

+18
-12
lines changed

frameworks/keyed/vanillajs-3/src/Main.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,23 @@ function* _random(n) {
99
yield arr
1010
}
1111
}
12-
const data = [], tbody = document.getElementsByTagName('tbody')[0];
12+
const data = [], nTemplates = 10, tbody = document.getElementsByTagName('tbody')[0];
1313
let index = 1, i, lbl, selected;
1414

1515
function create(n = 1000) { if (data.length) clear(); append(n); }
1616
function append(n = 1000) {
17-
const [r1, r2, r3] = _random(n);
18-
const itemTemplate = document.getElementById('itemTemplate').content.firstElementChild;
19-
const itemId = itemTemplate.firstElementChild.firstChild, itemLabel = itemTemplate.querySelector('a.lbl').firstChild;
20-
while (--n >= 0) {
21-
itemId.nodeValue = index++;
22-
data.push(itemLabel.nodeValue = `${adjectives[r1[n]]} ${colours[r2[n]]} ${nouns[r3[n]]}`)
17+
const [r1, r2, r3] = _random(n); let j = 0;
18+
const itemTemplate1 = document.getElementById('itemTemplate').content.firstElementChild;
19+
const itemTemplate = document.createDocumentFragment();
20+
for (i = 0; i < nTemplates; i++) itemTemplate.appendChild(itemTemplate1.cloneNode(true));
21+
const ids = Array.prototype.map.call(itemTemplate.querySelectorAll('td:first-child'), i => i.firstChild)
22+
const labels = Array.prototype.map.call(itemTemplate.querySelectorAll('a.lbl'), i => i.firstChild);
23+
24+
while ((n -= nTemplates) >= 0) {
25+
for (i = 0; i < nTemplates; i++, j++) {
26+
ids[i].nodeValue = index++;
27+
data.push(labels[i].nodeValue = `${adjectives[r1[j]]} ${colours[r2[j]]} ${nouns[r3[j]]}`)
28+
}
2329
tbody.appendChild(itemTemplate.cloneNode(true));
2430
}
2531
}
@@ -30,22 +36,22 @@ function update() {
3036
function clear() { data.length = 0; tbody.textContent = '' }
3137

3238
function swap() {
33-
if (data.length < 999) return; let temp;
39+
if (data.length < 999) return; const first = tbody.firstElementChild;
3440
[data[1], data[998]] = [data[998], data[1]];
35-
tbody.insertBefore(tbody.children[1], (temp = tbody.children[998]));
36-
tbody.insertBefore(temp, tbody.children[1]);
41+
tbody.insertBefore(tbody.insertBefore(first.nextElementSibling,
42+
tbody.children[998]).nextElementSibling, first.nextElementSibling);
3743
}
3844
tbody.onclick = (e) => {
3945
e.preventDefault; e.stopPropagation;
4046
if (e.target.matches('a.lbl')) {
41-
const element = e.composedPath()[2];
47+
const element = e.target.parentNode.parentNode;
4248
if (element === selected) selected.className = selected.className ? "" : "danger";
4349
else {
4450
if (selected) selected.className = "";
4551
element.className = "danger"; selected = element
4652
}
4753
} else if (e.target.matches('span.remove')) {
48-
data.splice(Array.prototype.indexOf.call(tbody.children, tbody.removeChild(e.composedPath()[3])), 1);
54+
data.splice(Array.prototype.indexOf.call(tbody.children, tbody.removeChild(e.target.parentNode.parentNode.parentNode)), 1);
4955
}
5056
}
5157
for (let [key, fn] of Object.entries({

0 commit comments

Comments
 (0)