Skip to content

Commit 38ec433

Browse files
committed
First storage and traversal implementation
1 parent a1b2051 commit 38ec433

File tree

1 file changed

+114
-11
lines changed

1 file changed

+114
-11
lines changed

background.js

Lines changed: 114 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,117 @@
1+
String.prototype.times = function(n) { return n < 1 ? '':Array(n+1).join(this); }
2+
13
console.log("hello, guys");
24

5+
//var mimeType = "text/xml";
6+
var mimeType = "text/html";
7+
38
chrome.browserAction.onClicked.addListener(function(tab) {
4-
console.log(tab);
5-
console.log("GET "+tab.url);
6-
var xhr = new XMLHttpRequest();
7-
xhr.open('GET', tab.url, true);
8-
xhr.onreadystatechange = function() {
9-
if (xhr.readyState === this.DONE) {
10-
console.log(xhr.responseText);
11-
}
12-
}
13-
xhr.send();
14-
});
9+
console.log("TAB: ", tab);
10+
var url = tab.url;
11+
console.log("GET " + url);
12+
var xhr = new XMLHttpRequest();
13+
xhr.open('GET', url, true);
14+
xhr.onreadystatechange = function() {
15+
if (xhr.readyState === this.DONE) {
16+
console.log("XHR: ", xhr);
17+
console.log(xhr.responseText);
18+
console.log("XML: ", xhr.responseXML);
19+
20+
store(url, xhr.responseText);
21+
22+
diffStored(url);
23+
24+
// doesn't work
25+
//var parser = new DOMParser();
26+
//var prevXML = parser.parseFromString(getPrev(url), mimeType);
27+
28+
var prevDiv = document.createElement("div");
29+
prevDiv.innerHTML = getPrev(url);
30+
document.body.appendChild(prevDiv);
31+
32+
var currDiv = document.createElement("div");
33+
currDiv.innerHTML = getPrev(url);
34+
document.body.appendChild(currDiv);
35+
36+
diffDOM(prevDiv, currDiv);
37+
}
38+
}
39+
xhr.overrideMimeType(mimeType); // doesn't work with html
40+
xhr.send();
41+
});
42+
43+
function prevKey(url) { return url + "$$$PREV"; }
44+
45+
function getPrev(url) { return localStorage.getItem(prevKey(url)); }
46+
function getCurr(url) { return localStorage.getItem(url); }
47+
48+
function store(url, responseText) {
49+
var prev = getCurr(url);
50+
localStorage.setItem(prevKey(url), prev);
51+
localStorage.setItem(url, responseText);
52+
}
53+
54+
function diffStored(url) {
55+
var prev = getPrev(url);
56+
var cur = getCurr(url);
57+
if (prev == cur) {
58+
console.log("SAME SAME!");
59+
return;
60+
}
61+
}
62+
63+
function diffDOM(prev, curr) {
64+
console.log("diffDOM: ", prev, curr);
65+
console.log("DOM: ", document);
66+
traverse(0, prev);
67+
//traverse(0, document);
68+
//pTraverse(0, docu);
69+
}
70+
71+
function pTraverse(level, prev, curr) {
72+
if (!prev || !curr) return;
73+
if (prev instanceof Function) return;
74+
if (prev instanceof Number) return;
75+
if (prev instanceof String) return;
76+
77+
if (curr instanceof Function) return;
78+
if (curr instanceof Number) return;
79+
if (curr instanceof String) return;
80+
81+
var prevC = prev.childNodes;
82+
if (!prevC) return;
83+
84+
var currC = curr.childNodes;
85+
if (!currC) return;
86+
87+
// TODO: compare number of nodes, find inserted?
88+
for (var i in c) {
89+
//if (!(i instanceof Number)) return; // not HTML element?
90+
var n = c[i];
91+
if (n instanceof HTMLElement) {
92+
console.log(' '.times(level*2), "i=", i, n, n.innerText);
93+
}
94+
traverse(level+1, n);
95+
}
96+
}
97+
98+
function traverse(level, node) {
99+
if (!node) return;
100+
if (node instanceof Function) return;
101+
if (node instanceof Number) return;
102+
if (node instanceof String) return;
103+
104+
var c = node.childNodes;
105+
if (!c) return;
106+
107+
for (var i in c) {
108+
//if (!(i instanceof Number)) return; // not HTML element?
109+
var n = c[i];
110+
if (n instanceof HTMLElement) {
111+
console.log(' '.times(level*2), "i=", i, n, n.innerText);
112+
}
113+
traverse(level+1, n);
114+
}
115+
}
116+
117+
console.log("loaded...");

0 commit comments

Comments
 (0)