| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 /* 2 * Javascript Diff Algorithm 3 * By John Resig (http://ejohn.org/) 4 * Modified by Chu Alan "sprite" 5 * 6 * More Info: 7 * http://ejohn.org/projects/javascript-diff-algorithm/ 8 */ 9 10 function escape(s) { 11 var n = s; 12 n = n.replace(/&/g, "&"); 13 n = n.replace(/</g, "<"); 14 n = n.replace(/>/g, ">"); 15 n = n.replace(/"/g, """); 16 17 return n; 18 } 19 20 function diffString( o, n ) { 21 o = o.replace(/\s+$/, ''); 22 n = n.replace(/\s+$/, ''); 23 24 var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) ); 25 var str = ""; 26 27 var oSpace = o.match(/\s+/g); 28 if (oSpace == null) { 29 oSpace = ["\n"]; 30 } else { 31 oSpace.push("\n"); 32 } 33 var nSpace = n.match(/\s+/g); 34 if (nSpace == null) { 35 nSpace = ["\n"]; 36 } else { 37 nSpace.push("\n"); 38 } 39 40 if (out.n.length == 0) { 41 for (var i = 0; i < out.o.length; i++) { 42 str += '<del>' + escape(out.o[i]) + oSpace[i] + "</del>"; 43 } 44 } else { 45 if (out.n[0].text == null) { 46 for (n = 0; n < out.o.length && out.o[n].text == null; n++) { 47 str += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>"; 48 } 49 } 50 51 for ( var i = 0; i < out.n.length; i++ ) { 52 if (out.n[i].text == null) { 53 str += '<ins>' + escape(out.n[i]) + nSpace[i] + "</ins>"; 54 } else { 55 var pre = ""; 56 57 for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) { 58 pre += '<del>' + escape(out.o[n]) + oSpace[n] + "</del>"; 59 } 60 str += " " + out.n[i].text + nSpace[i] + pre; 61 } 62 } 63 } 64 65 return str; 66 } 67 68 function randomColor() { 69 return "rgb(" + (Math.random() * 100) + "%, " + 70 (Math.random() * 100) + "%, " + 71 (Math.random() * 100) + "%)"; 72 } 73 function diffString2( o, n ) { 74 o = o.replace(/\s+$/, ''); 75 n = n.replace(/\s+$/, ''); 76 77 var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/) ); 78 79 var oSpace = o.match(/\s+/g); 80 if (oSpace == null) { 81 oSpace = ["\n"]; 82 } else { 83 oSpace.push("\n"); 84 } 85 var nSpace = n.match(/\s+/g); 86 if (nSpace == null) { 87 nSpace = ["\n"]; 88 } else { 89 nSpace.push("\n"); 90 } 91 92 var os = ""; 93 var colors = new Array(); 94 for (var i = 0; i < out.o.length; i++) { 95 colors[i] = randomColor(); 96 97 if (out.o[i].text != null) { 98 os += '<span style="background-color: ' +colors[i]+ '">' + 99 escape(out.o[i].text) + oSpace[i] + "</span>"; 100 } else { 101 os += "<del>" + escape(out.o[i]) + oSpace[i] + "</del>"; 102 } 103 } 104 105 var ns = ""; 106 for (var i = 0; i < out.n.length; i++) { 107 if (out.n[i].text != null) { 108 ns += '<span style="background-color: ' +colors[out.n[i].row]+ '">' + 109 escape(out.n[i].text) + nSpace[i] + "</span>"; 110 } else { 111 ns += "<ins>" + escape(out.n[i]) + nSpace[i] + "</ins>"; 112 } 113 } 114 115 return { o : os , n : ns }; 116 } 117 118 function diff( o, n ) { 119 var ns = new Object(); 120 var os = new Object(); 121 122 for ( var i = 0; i < n.length; i++ ) { 123 if ( ns[ n[i] ] == null ) 124 ns[ n[i] ] = { rows: new Array(), o: null }; 125 ns[ n[i] ].rows.push( i ); 126 } 127 128 for ( var i = 0; i < o.length; i++ ) { 129 if ( os[ o[i] ] == null ) 130 os[ o[i] ] = { rows: new Array(), n: null }; 131 os[ o[i] ].rows.push( i ); 132 } 133 134 for ( var i in ns ) { 135 if ( ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1 ) { 136 n[ ns[i].rows[0] ] = { text: n[ ns[i].rows[0] ], row: os[i].rows[0] }; 137 o[ os[i].rows[0] ] = { text: o[ os[i].rows[0] ], row: ns[i].rows[0] }; 138 } 139 } 140 141 for ( var i = 0; i < n.length - 1; i++ ) { 142 if ( n[i].text != null && n[i+1].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null && 143 n[i+1] == o[ n[i].row + 1 ] ) { 144 n[i+1] = { text: n[i+1], row: n[i].row + 1 }; 145 o[n[i].row+1] = { text: o[n[i].row+1], row: i + 1 }; 146 } 147 } 148 149 for ( var i = n.length - 1; i > 0; i-- ) { 150 if ( n[i].text != null && n[i-1].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null && 151 n[i-1] == o[ n[i].row - 1 ] ) { 152 n[i-1] = { text: n[i-1], row: n[i].row - 1 }; 153 o[n[i].row-1] = { text: o[n[i].row-1], row: i - 1 }; 154 } 155 } 156 157 return { o: o, n: n }; 158 } 159
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |