-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptimize.js
More file actions
46 lines (43 loc) · 1.27 KB
/
Copy pathoptimize.js
File metadata and controls
46 lines (43 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function getLowHangingLeaves() {
var parList = [document];
var chiList = document.childNodes;
while (chiList.length > 0) {
parList = chiList;
chiList = [];
for (var i = 0; i < parList.length; i++) {
Array.prototype.push.apply(chiList, parList[i].childNodes);
}
}
return parList;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function trimDomIteratively(initialDelay, levelDelay, iterDelay, maxPerIter) {
console.log("DOM optimization called with initialDelay="+initialDelay+" levelDelay="+levelDelay+" iterDelay="+iterDelay+" maxPerIter="+maxPerIter);
if (maxPerIter < 1)
maxPerIter = Number.POSITIVE_INFINITY;
var topEls = [null]
if (initialDelay > 0)
await sleep(initialDelay);
while (topEls.length > 0) {
if (levelDelay > 0)
await sleep(levelDelay);
topEls = getLowHangingLeaves()
for (var i = 0; i < topEls.length && i < maxPerIter; i++) {
if (iterDelay > 0)
await sleep(iterDelay);
topEls[i].parentNode.removeChild(topEls[i]);
}
console.log("Optimized " + i + " elements");
}
}
chrome.storage.sync.get({
initialDelay: 10000,
levelDelay: 1000,
iterDelay: 0,
maxPerIter: 0
}, function(items) {
trimDomIteratively(items.initialDelay, items.levelDelay, items.iterDelay, items.maxPerIter);
}
);