Initial commit
This commit is contained in:
commit
bfeb9d2ff6
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
|
||||||
|
"name": "DOM Optimizer",
|
||||||
|
"description": "Keeps your web pages thin by optimizing the DOM.",
|
||||||
|
"version": "1.0",
|
||||||
|
|
||||||
|
"permissions": [
|
||||||
|
"storage"
|
||||||
|
],
|
||||||
|
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": ["<all_urls>"],
|
||||||
|
"js": ["optimize.js"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"options_ui": {
|
||||||
|
"page": "options.html",
|
||||||
|
"chrome_style": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,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);
|
||||||
|
}
|
||||||
|
);
|
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>DOM Trimmer options</title>
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<input type="number" min=0 id="initial">
|
||||||
|
Initial delay (ms)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<input type="number" min=0 id="level">
|
||||||
|
Level delay (ms)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<input type="number" min=0 id="iter">
|
||||||
|
Iteration delay (ms)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<input type="number" min=0 id="maxPer">
|
||||||
|
Trims per iteration (dom objects)
|
||||||
|
</p>
|
||||||
|
<button id="save">Save</button>
|
||||||
|
<div id="status"></div>
|
||||||
|
|
||||||
|
<script src="options.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,35 @@
|
||||||
|
function save_options() {
|
||||||
|
var initial = document.getElementById('initial').value;
|
||||||
|
var level = document.getElementById('level').value;
|
||||||
|
var iter = document.getElementById('iter').value;
|
||||||
|
var maxPer = document.getElementById('maxPer').value;
|
||||||
|
chrome.storage.sync.set({
|
||||||
|
initialDelay: initial,
|
||||||
|
levelDelay: level,
|
||||||
|
iterDelay: iter,
|
||||||
|
maxPerIter: maxPer
|
||||||
|
}, function() {
|
||||||
|
var status = document.getElementById('save');
|
||||||
|
status.textContent = 'Saved!';
|
||||||
|
setTimeout(function() {
|
||||||
|
status.textContent = 'Save';
|
||||||
|
}, 750);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function restore_options() {
|
||||||
|
chrome.storage.sync.get({
|
||||||
|
initialDelay: 10000,
|
||||||
|
levelDelay: 1000,
|
||||||
|
iterDelay: 0,
|
||||||
|
maxPerIter: 0
|
||||||
|
}, function(items) {
|
||||||
|
document.getElementById('initial').value = items.initialDelay;
|
||||||
|
document.getElementById('level').value = items.levelDelay;
|
||||||
|
document.getElementById('iter').value = items.iterDelay;
|
||||||
|
document.getElementById('maxPer').value = items.maxPerIter;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
document.addEventListener('DOMContentLoaded', restore_options);
|
||||||
|
document.getElementById('save').addEventListener('click',
|
||||||
|
save_options);
|
Loading…
Reference in New Issue