1
+ String . prototype . times = function ( n ) { return n < 1 ? '' :Array ( n + 1 ) . join ( this ) ; }
2
+
1
3
console . log ( "hello, guys" ) ;
2
4
5
+ //var mimeType = "text/xml";
6
+ var mimeType = "text/html" ;
7
+
3
8
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