PluginProbe
RSVP and Event Management / 1.3.0
RSVP and Event Management v1.3.0
trunk 0.5.0 0.6.0 0.7.0 0.8.0 0.9.0 0.9.5 1.0.0 1.1.0 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.5.0 1.6.0 1.6.1 1.6.2 1.6.5 1.7.0 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 All 136 releases
rsvp / jquery-ui-1.7.2.custom / development-bundle / external / jsdiff / jsdiff.js

jsdiff.js in RSVP and Event Management 1.3.0, at jquery-ui-1.7.2.custom/development-bundle/external/jsdiff/jsdiff.js

160 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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, "&lt;");
14 n = n.replace(/>/g, "&gt;");
15 n = n.replace(/"/g, "&quot;");
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
160