@leonwerth/vue-diff
Version:
Vue diff
1,104 lines (1,103 loc) • 42.2 kB
JavaScript
import { ref as S, onMounted as R, onBeforeUnmount as G, defineComponent as O, watch as X, nextTick as Q, openBlock as U, createElementBlock as z, createElementVNode as C, normalizeStyle as j, unref as k, onUnmounted as Z, withDirectives as W, createVNode as V, vShow as J, createCommentVNode as K } from "vue";
var H = {}, Y = {
get exports() {
return H;
},
set exports(m) {
H = m;
}
};
(function(m) {
var s = function() {
this.Diff_Timeout = 1, this.Diff_EditCost = 4, this.Match_Threshold = 0.5, this.Match_Distance = 1e3, this.Patch_DeleteThreshold = 0.5, this.Patch_Margin = 4, this.Match_MaxBits = 32;
}, v = -1, g = 1, o = 0;
s.Diff = function(e, r) {
return [e, r];
}, s.prototype.diff_main = function(e, r, n, i) {
typeof i > "u" && (this.Diff_Timeout <= 0 ? i = Number.MAX_VALUE : i = (/* @__PURE__ */ new Date()).getTime() + this.Diff_Timeout * 1e3);
var a = i;
if (e == null || r == null)
throw new Error("Null input. (diff_main)");
if (e == r)
return e ? [new s.Diff(o, e)] : [];
typeof n > "u" && (n = !0);
var t = n, l = this.diff_commonPrefix(e, r), h = e.substring(0, l);
e = e.substring(l), r = r.substring(l), l = this.diff_commonSuffix(e, r);
var u = e.substring(e.length - l);
e = e.substring(0, e.length - l), r = r.substring(0, r.length - l);
var f = this.diff_compute_(e, r, t, a);
return h && f.unshift(new s.Diff(o, h)), u && f.push(new s.Diff(o, u)), this.diff_cleanupMerge(f), f;
}, s.prototype.diff_compute_ = function(e, r, n, i) {
var a;
if (!e)
return [new s.Diff(g, r)];
if (!r)
return [new s.Diff(v, e)];
var t = e.length > r.length ? e : r, l = e.length > r.length ? r : e, h = t.indexOf(l);
if (h != -1)
return a = [
new s.Diff(g, t.substring(0, h)),
new s.Diff(o, l),
new s.Diff(
g,
t.substring(h + l.length)
)
], e.length > r.length && (a[0][0] = a[2][0] = v), a;
if (l.length == 1)
return [
new s.Diff(v, e),
new s.Diff(g, r)
];
var u = this.diff_halfMatch_(e, r);
if (u) {
var f = u[0], c = u[1], p = u[2], b = u[3], _ = u[4], d = this.diff_main(f, p, n, i), w = this.diff_main(c, b, n, i);
return d.concat(
[new s.Diff(o, _)],
w
);
}
return n && e.length > 100 && r.length > 100 ? this.diff_lineMode_(e, r, i) : this.diff_bisect_(e, r, i);
}, s.prototype.diff_lineMode_ = function(e, r, n) {
var i = this.diff_linesToChars_(e, r);
e = i.chars1, r = i.chars2;
var a = i.lineArray, t = this.diff_main(e, r, !1, n);
this.diff_charsToLines_(t, a), this.diff_cleanupSemantic(t), t.push(new s.Diff(o, ""));
for (var l = 0, h = 0, u = 0, f = "", c = ""; l < t.length; ) {
switch (t[l][0]) {
case g:
u++, c += t[l][1];
break;
case v:
h++, f += t[l][1];
break;
case o:
if (h >= 1 && u >= 1) {
t.splice(
l - h - u,
h + u
), l = l - h - u;
for (var p = this.diff_main(f, c, !1, n), b = p.length - 1; b >= 0; b--)
t.splice(l, 0, p[b]);
l = l + p.length;
}
u = 0, h = 0, f = "", c = "";
break;
}
l++;
}
return t.pop(), t;
}, s.prototype.diff_bisect_ = function(e, r, n) {
for (var i = e.length, a = r.length, t = Math.ceil((i + a) / 2), l = t, h = 2 * t, u = new Array(h), f = new Array(h), c = 0; c < h; c++)
u[c] = -1, f[c] = -1;
u[l + 1] = 0, f[l + 1] = 0;
for (var p = i - a, b = p % 2 != 0, _ = 0, d = 0, w = 0, E = 0, M = 0; M < t && !((/* @__PURE__ */ new Date()).getTime() > n); M++) {
for (var y = -M + _; y <= M - d; y += 2) {
var D = l + y, T;
y == -M || y != M && u[D - 1] < u[D + 1] ? T = u[D + 1] : T = u[D - 1] + 1;
for (var B = T - y; T < i && B < a && e.charAt(T) == r.charAt(B); )
T++, B++;
if (u[D] = T, T > i)
d += 2;
else if (B > a)
_ += 2;
else if (b) {
var L = l + p - y;
if (L >= 0 && L < h && f[L] != -1) {
var A = i - f[L];
if (T >= A)
return this.diff_bisectSplit_(e, r, T, B, n);
}
}
}
for (var I = -M + w; I <= M - E; I += 2) {
var L = l + I, A;
I == -M || I != M && f[L - 1] < f[L + 1] ? A = f[L + 1] : A = f[L - 1] + 1;
for (var P = A - I; A < i && P < a && e.charAt(i - A - 1) == r.charAt(a - P - 1); )
A++, P++;
if (f[L] = A, A > i)
E += 2;
else if (P > a)
w += 2;
else if (!b) {
var D = l + p - I;
if (D >= 0 && D < h && u[D] != -1) {
var T = u[D], B = l + T - D;
if (A = i - A, T >= A)
return this.diff_bisectSplit_(e, r, T, B, n);
}
}
}
}
return [
new s.Diff(v, e),
new s.Diff(g, r)
];
}, s.prototype.diff_bisectSplit_ = function(e, r, n, i, a) {
var t = e.substring(0, n), l = r.substring(0, i), h = e.substring(n), u = r.substring(i), f = this.diff_main(t, l, !1, a), c = this.diff_main(h, u, !1, a);
return f.concat(c);
}, s.prototype.diff_linesToChars_ = function(e, r) {
var n = [], i = {};
n[0] = "";
function a(u) {
for (var f = "", c = 0, p = -1, b = n.length; p < u.length - 1; ) {
p = u.indexOf(`
`, c), p == -1 && (p = u.length - 1);
var _ = u.substring(c, p + 1);
(i.hasOwnProperty ? i.hasOwnProperty(_) : i[_] !== void 0) ? f += String.fromCharCode(i[_]) : (b == t && (_ = u.substring(c), p = u.length), f += String.fromCharCode(b), i[_] = b, n[b++] = _), c = p + 1;
}
return f;
}
var t = 4e4, l = a(e);
t = 65535;
var h = a(r);
return { chars1: l, chars2: h, lineArray: n };
}, s.prototype.diff_charsToLines_ = function(e, r) {
for (var n = 0; n < e.length; n++) {
for (var i = e[n][1], a = [], t = 0; t < i.length; t++)
a[t] = r[i.charCodeAt(t)];
e[n][1] = a.join("");
}
}, s.prototype.diff_commonPrefix = function(e, r) {
if (!e || !r || e.charAt(0) != r.charAt(0))
return 0;
for (var n = 0, i = Math.min(e.length, r.length), a = i, t = 0; n < a; )
e.substring(t, a) == r.substring(t, a) ? (n = a, t = n) : i = a, a = Math.floor((i - n) / 2 + n);
return a;
}, s.prototype.diff_commonSuffix = function(e, r) {
if (!e || !r || e.charAt(e.length - 1) != r.charAt(r.length - 1))
return 0;
for (var n = 0, i = Math.min(e.length, r.length), a = i, t = 0; n < a; )
e.substring(e.length - a, e.length - t) == r.substring(r.length - a, r.length - t) ? (n = a, t = n) : i = a, a = Math.floor((i - n) / 2 + n);
return a;
}, s.prototype.diff_commonOverlap_ = function(e, r) {
var n = e.length, i = r.length;
if (n == 0 || i == 0)
return 0;
n > i ? e = e.substring(n - i) : n < i && (r = r.substring(0, n));
var a = Math.min(n, i);
if (e == r)
return a;
for (var t = 0, l = 1; ; ) {
var h = e.substring(a - l), u = r.indexOf(h);
if (u == -1)
return t;
l += u, (u == 0 || e.substring(a - l) == r.substring(0, l)) && (t = l, l++);
}
}, s.prototype.diff_halfMatch_ = function(e, r) {
if (this.Diff_Timeout <= 0)
return null;
var n = e.length > r.length ? e : r, i = e.length > r.length ? r : e;
if (n.length < 4 || i.length * 2 < n.length)
return null;
var a = this;
function t(d, w, E) {
for (var M = d.substring(E, E + Math.floor(d.length / 4)), y = -1, D = "", T, B, L, A; (y = w.indexOf(M, y + 1)) != -1; ) {
var I = a.diff_commonPrefix(
d.substring(E),
w.substring(y)
), P = a.diff_commonSuffix(
d.substring(0, E),
w.substring(0, y)
);
D.length < P + I && (D = w.substring(y - P, y) + w.substring(y, y + I), T = d.substring(0, E - P), B = d.substring(E + I), L = w.substring(0, y - P), A = w.substring(y + I));
}
return D.length * 2 >= d.length ? [
T,
B,
L,
A,
D
] : null;
}
var l = t(
n,
i,
Math.ceil(n.length / 4)
), h = t(
n,
i,
Math.ceil(n.length / 2)
), u;
if (!l && !h)
return null;
h ? l ? u = l[4].length > h[4].length ? l : h : u = h : u = l;
var f, c, p, b;
e.length > r.length ? (f = u[0], c = u[1], p = u[2], b = u[3]) : (p = u[0], b = u[1], f = u[2], c = u[3]);
var _ = u[4];
return [f, c, p, b, _];
}, s.prototype.diff_cleanupSemantic = function(e) {
for (var r = !1, n = [], i = 0, a = null, t = 0, l = 0, h = 0, u = 0, f = 0; t < e.length; )
e[t][0] == o ? (n[i++] = t, l = u, h = f, u = 0, f = 0, a = e[t][1]) : (e[t][0] == g ? u += e[t][1].length : f += e[t][1].length, a && a.length <= Math.max(l, h) && a.length <= Math.max(
u,
f
) && (e.splice(
n[i - 1],
0,
new s.Diff(v, a)
), e[n[i - 1] + 1][0] = g, i--, i--, t = i > 0 ? n[i - 1] : -1, l = 0, h = 0, u = 0, f = 0, a = null, r = !0)), t++;
for (r && this.diff_cleanupMerge(e), this.diff_cleanupSemanticLossless(e), t = 1; t < e.length; ) {
if (e[t - 1][0] == v && e[t][0] == g) {
var c = e[t - 1][1], p = e[t][1], b = this.diff_commonOverlap_(c, p), _ = this.diff_commonOverlap_(p, c);
b >= _ ? (b >= c.length / 2 || b >= p.length / 2) && (e.splice(t, 0, new s.Diff(
o,
p.substring(0, b)
)), e[t - 1][1] = c.substring(0, c.length - b), e[t + 1][1] = p.substring(b), t++) : (_ >= c.length / 2 || _ >= p.length / 2) && (e.splice(t, 0, new s.Diff(
o,
c.substring(0, _)
)), e[t - 1][0] = g, e[t - 1][1] = p.substring(0, p.length - _), e[t + 1][0] = v, e[t + 1][1] = c.substring(_), t++), t++;
}
t++;
}
}, s.prototype.diff_cleanupSemanticLossless = function(e) {
function r(_, d) {
if (!_ || !d)
return 6;
var w = _.charAt(_.length - 1), E = d.charAt(0), M = w.match(s.nonAlphaNumericRegex_), y = E.match(s.nonAlphaNumericRegex_), D = M && w.match(s.whitespaceRegex_), T = y && E.match(s.whitespaceRegex_), B = D && w.match(s.linebreakRegex_), L = T && E.match(s.linebreakRegex_), A = B && _.match(s.blanklineEndRegex_), I = L && d.match(s.blanklineStartRegex_);
return A || I ? 5 : B || L ? 4 : M && !D && T ? 3 : D || T ? 2 : M || y ? 1 : 0;
}
for (var n = 1; n < e.length - 1; ) {
if (e[n - 1][0] == o && e[n + 1][0] == o) {
var i = e[n - 1][1], a = e[n][1], t = e[n + 1][1], l = this.diff_commonSuffix(i, a);
if (l) {
var h = a.substring(a.length - l);
i = i.substring(0, i.length - l), a = h + a.substring(0, a.length - l), t = h + t;
}
for (var u = i, f = a, c = t, p = r(i, a) + r(a, t); a.charAt(0) === t.charAt(0); ) {
i += a.charAt(0), a = a.substring(1) + t.charAt(0), t = t.substring(1);
var b = r(i, a) + r(a, t);
b >= p && (p = b, u = i, f = a, c = t);
}
e[n - 1][1] != u && (u ? e[n - 1][1] = u : (e.splice(n - 1, 1), n--), e[n][1] = f, c ? e[n + 1][1] = c : (e.splice(n + 1, 1), n--));
}
n++;
}
}, s.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/, s.whitespaceRegex_ = /\s/, s.linebreakRegex_ = /[\r\n]/, s.blanklineEndRegex_ = /\n\r?\n$/, s.blanklineStartRegex_ = /^\r?\n\r?\n/, s.prototype.diff_cleanupEfficiency = function(e) {
for (var r = !1, n = [], i = 0, a = null, t = 0, l = !1, h = !1, u = !1, f = !1; t < e.length; )
e[t][0] == o ? (e[t][1].length < this.Diff_EditCost && (u || f) ? (n[i++] = t, l = u, h = f, a = e[t][1]) : (i = 0, a = null), u = f = !1) : (e[t][0] == v ? f = !0 : u = !0, a && (l && h && u && f || a.length < this.Diff_EditCost / 2 && l + h + u + f == 3) && (e.splice(
n[i - 1],
0,
new s.Diff(v, a)
), e[n[i - 1] + 1][0] = g, i--, a = null, l && h ? (u = f = !0, i = 0) : (i--, t = i > 0 ? n[i - 1] : -1, u = f = !1), r = !0)), t++;
r && this.diff_cleanupMerge(e);
}, s.prototype.diff_cleanupMerge = function(e) {
e.push(new s.Diff(o, ""));
for (var r = 0, n = 0, i = 0, a = "", t = "", l; r < e.length; )
switch (e[r][0]) {
case g:
i++, t += e[r][1], r++;
break;
case v:
n++, a += e[r][1], r++;
break;
case o:
n + i > 1 ? (n !== 0 && i !== 0 && (l = this.diff_commonPrefix(t, a), l !== 0 && (r - n - i > 0 && e[r - n - i - 1][0] == o ? e[r - n - i - 1][1] += t.substring(0, l) : (e.splice(0, 0, new s.Diff(
o,
t.substring(0, l)
)), r++), t = t.substring(l), a = a.substring(l)), l = this.diff_commonSuffix(t, a), l !== 0 && (e[r][1] = t.substring(t.length - l) + e[r][1], t = t.substring(0, t.length - l), a = a.substring(0, a.length - l))), r -= n + i, e.splice(r, n + i), a.length && (e.splice(
r,
0,
new s.Diff(v, a)
), r++), t.length && (e.splice(
r,
0,
new s.Diff(g, t)
), r++), r++) : r !== 0 && e[r - 1][0] == o ? (e[r - 1][1] += e[r][1], e.splice(r, 1)) : r++, i = 0, n = 0, a = "", t = "";
break;
}
e[e.length - 1][1] === "" && e.pop();
var h = !1;
for (r = 1; r < e.length - 1; )
e[r - 1][0] == o && e[r + 1][0] == o && (e[r][1].substring(e[r][1].length - e[r - 1][1].length) == e[r - 1][1] ? (e[r][1] = e[r - 1][1] + e[r][1].substring(0, e[r][1].length - e[r - 1][1].length), e[r + 1][1] = e[r - 1][1] + e[r + 1][1], e.splice(r - 1, 1), h = !0) : e[r][1].substring(0, e[r + 1][1].length) == e[r + 1][1] && (e[r - 1][1] += e[r + 1][1], e[r][1] = e[r][1].substring(e[r + 1][1].length) + e[r + 1][1], e.splice(r + 1, 1), h = !0)), r++;
h && this.diff_cleanupMerge(e);
}, s.prototype.diff_xIndex = function(e, r) {
var n = 0, i = 0, a = 0, t = 0, l;
for (l = 0; l < e.length && (e[l][0] !== g && (n += e[l][1].length), e[l][0] !== v && (i += e[l][1].length), !(n > r)); l++)
a = n, t = i;
return e.length != l && e[l][0] === v ? t : t + (r - a);
}, s.prototype.diff_prettyHtml = function(e) {
for (var r = [], n = /&/g, i = /</g, a = />/g, t = /\n/g, l = 0; l < e.length; l++) {
var h = e[l][0], u = e[l][1], f = u.replace(n, "&").replace(i, "<").replace(a, ">").replace(t, "¶<br>");
switch (h) {
case g:
r[l] = '<ins style="background:#e6ffe6;">' + f + "</ins>";
break;
case v:
r[l] = '<del style="background:#ffe6e6;">' + f + "</del>";
break;
case o:
r[l] = "<span>" + f + "</span>";
break;
}
}
return r.join("");
}, s.prototype.diff_text1 = function(e) {
for (var r = [], n = 0; n < e.length; n++)
e[n][0] !== g && (r[n] = e[n][1]);
return r.join("");
}, s.prototype.diff_text2 = function(e) {
for (var r = [], n = 0; n < e.length; n++)
e[n][0] !== v && (r[n] = e[n][1]);
return r.join("");
}, s.prototype.diff_levenshtein = function(e) {
for (var r = 0, n = 0, i = 0, a = 0; a < e.length; a++) {
var t = e[a][0], l = e[a][1];
switch (t) {
case g:
n += l.length;
break;
case v:
i += l.length;
break;
case o:
r += Math.max(n, i), n = 0, i = 0;
break;
}
}
return r += Math.max(n, i), r;
}, s.prototype.diff_toDelta = function(e) {
for (var r = [], n = 0; n < e.length; n++)
switch (e[n][0]) {
case g:
r[n] = "+" + encodeURI(e[n][1]);
break;
case v:
r[n] = "-" + e[n][1].length;
break;
case o:
r[n] = "=" + e[n][1].length;
break;
}
return r.join(" ").replace(/%20/g, " ");
}, s.prototype.diff_fromDelta = function(e, r) {
for (var n = [], i = 0, a = 0, t = r.split(/\t/g), l = 0; l < t.length; l++) {
var h = t[l].substring(1);
switch (t[l].charAt(0)) {
case "+":
try {
n[i++] = new s.Diff(g, decodeURI(h));
} catch {
throw new Error("Illegal escape in diff_fromDelta: " + h);
}
break;
case "-":
case "=":
var u = parseInt(h, 10);
if (isNaN(u) || u < 0)
throw new Error("Invalid number in diff_fromDelta: " + h);
var f = e.substring(a, a += u);
t[l].charAt(0) == "=" ? n[i++] = new s.Diff(o, f) : n[i++] = new s.Diff(v, f);
break;
default:
if (t[l])
throw new Error("Invalid diff operation in diff_fromDelta: " + t[l]);
}
}
if (a != e.length)
throw new Error("Delta length (" + a + ") does not equal source text length (" + e.length + ").");
return n;
}, s.prototype.match_main = function(e, r, n) {
if (e == null || r == null || n == null)
throw new Error("Null input. (match_main)");
return n = Math.max(0, Math.min(n, e.length)), e == r ? 0 : e.length ? e.substring(n, n + r.length) == r ? n : this.match_bitap_(e, r, n) : -1;
}, s.prototype.match_bitap_ = function(e, r, n) {
if (r.length > this.Match_MaxBits)
throw new Error("Pattern too long for this browser.");
var i = this.match_alphabet_(r), a = this;
function t(T, B) {
var L = T / r.length, A = Math.abs(n - B);
return a.Match_Distance ? L + A / a.Match_Distance : A ? 1 : L;
}
var l = this.Match_Threshold, h = e.indexOf(r, n);
h != -1 && (l = Math.min(t(0, h), l), h = e.lastIndexOf(r, n + r.length), h != -1 && (l = Math.min(t(0, h), l)));
var u = 1 << r.length - 1;
h = -1;
for (var f, c, p = r.length + e.length, b, _ = 0; _ < r.length; _++) {
for (f = 0, c = p; f < c; )
t(_, n + c) <= l ? f = c : p = c, c = Math.floor((p - f) / 2 + f);
p = c;
var d = Math.max(1, n - c + 1), w = Math.min(n + c, e.length) + r.length, E = Array(w + 2);
E[w + 1] = (1 << _) - 1;
for (var M = w; M >= d; M--) {
var y = i[e.charAt(M - 1)];
if (_ === 0 ? E[M] = (E[M + 1] << 1 | 1) & y : E[M] = (E[M + 1] << 1 | 1) & y | ((b[M + 1] | b[M]) << 1 | 1) | b[M + 1], E[M] & u) {
var D = t(_, M - 1);
if (D <= l)
if (l = D, h = M - 1, h > n)
d = Math.max(1, 2 * n - h);
else
break;
}
}
if (t(_ + 1, n) > l)
break;
b = E;
}
return h;
}, s.prototype.match_alphabet_ = function(e) {
for (var r = {}, n = 0; n < e.length; n++)
r[e.charAt(n)] = 0;
for (var n = 0; n < e.length; n++)
r[e.charAt(n)] |= 1 << e.length - n - 1;
return r;
}, s.prototype.patch_addContext_ = function(e, r) {
if (r.length != 0) {
if (e.start2 === null)
throw Error("patch not initialized");
for (var n = r.substring(e.start2, e.start2 + e.length1), i = 0; r.indexOf(n) != r.lastIndexOf(n) && n.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin; )
i += this.Patch_Margin, n = r.substring(
e.start2 - i,
e.start2 + e.length1 + i
);
i += this.Patch_Margin;
var a = r.substring(e.start2 - i, e.start2);
a && e.diffs.unshift(new s.Diff(o, a));
var t = r.substring(
e.start2 + e.length1,
e.start2 + e.length1 + i
);
t && e.diffs.push(new s.Diff(o, t)), e.start1 -= a.length, e.start2 -= a.length, e.length1 += a.length + t.length, e.length2 += a.length + t.length;
}
}, s.prototype.patch_make = function(e, r, n) {
var i, a;
if (typeof e == "string" && typeof r == "string" && typeof n > "u")
i = /** @type {string} */
e, a = this.diff_main(
i,
/** @type {string} */
r,
!0
), a.length > 2 && (this.diff_cleanupSemantic(a), this.diff_cleanupEfficiency(a));
else if (e && typeof e == "object" && typeof r > "u" && typeof n > "u")
a = /** @type {!Array.<!diff_match_patch.Diff>} */
e, i = this.diff_text1(a);
else if (typeof e == "string" && r && typeof r == "object" && typeof n > "u")
i = /** @type {string} */
e, a = /** @type {!Array.<!diff_match_patch.Diff>} */
r;
else if (typeof e == "string" && typeof r == "string" && n && typeof n == "object")
i = /** @type {string} */
e, a = /** @type {!Array.<!diff_match_patch.Diff>} */
n;
else
throw new Error("Unknown call format to patch_make.");
if (a.length === 0)
return [];
for (var t = [], l = new s.patch_obj(), h = 0, u = 0, f = 0, c = i, p = i, b = 0; b < a.length; b++) {
var _ = a[b][0], d = a[b][1];
switch (!h && _ !== o && (l.start1 = u, l.start2 = f), _) {
case g:
l.diffs[h++] = a[b], l.length2 += d.length, p = p.substring(0, f) + d + p.substring(f);
break;
case v:
l.length1 += d.length, l.diffs[h++] = a[b], p = p.substring(0, f) + p.substring(f + d.length);
break;
case o:
d.length <= 2 * this.Patch_Margin && h && a.length != b + 1 ? (l.diffs[h++] = a[b], l.length1 += d.length, l.length2 += d.length) : d.length >= 2 * this.Patch_Margin && h && (this.patch_addContext_(l, c), t.push(l), l = new s.patch_obj(), h = 0, c = p, u = f);
break;
}
_ !== g && (u += d.length), _ !== v && (f += d.length);
}
return h && (this.patch_addContext_(l, c), t.push(l)), t;
}, s.prototype.patch_deepCopy = function(e) {
for (var r = [], n = 0; n < e.length; n++) {
var i = e[n], a = new s.patch_obj();
a.diffs = [];
for (var t = 0; t < i.diffs.length; t++)
a.diffs[t] = new s.Diff(i.diffs[t][0], i.diffs[t][1]);
a.start1 = i.start1, a.start2 = i.start2, a.length1 = i.length1, a.length2 = i.length2, r[n] = a;
}
return r;
}, s.prototype.patch_apply = function(e, r) {
if (e.length == 0)
return [r, []];
e = this.patch_deepCopy(e);
var n = this.patch_addPadding(e);
r = n + r + n, this.patch_splitMax(e);
for (var i = 0, a = [], t = 0; t < e.length; t++) {
var l = e[t].start2 + i, h = this.diff_text1(e[t].diffs), u, f = -1;
if (h.length > this.Match_MaxBits ? (u = this.match_main(
r,
h.substring(0, this.Match_MaxBits),
l
), u != -1 && (f = this.match_main(
r,
h.substring(h.length - this.Match_MaxBits),
l + h.length - this.Match_MaxBits
), (f == -1 || u >= f) && (u = -1))) : u = this.match_main(r, h, l), u == -1)
a[t] = !1, i -= e[t].length2 - e[t].length1;
else {
a[t] = !0, i = u - l;
var c;
if (f == -1 ? c = r.substring(u, u + h.length) : c = r.substring(u, f + this.Match_MaxBits), h == c)
r = r.substring(0, u) + this.diff_text2(e[t].diffs) + r.substring(u + h.length);
else {
var p = this.diff_main(h, c, !1);
if (h.length > this.Match_MaxBits && this.diff_levenshtein(p) / h.length > this.Patch_DeleteThreshold)
a[t] = !1;
else {
this.diff_cleanupSemanticLossless(p);
for (var b = 0, _, d = 0; d < e[t].diffs.length; d++) {
var w = e[t].diffs[d];
w[0] !== o && (_ = this.diff_xIndex(p, b)), w[0] === g ? r = r.substring(0, u + _) + w[1] + r.substring(u + _) : w[0] === v && (r = r.substring(0, u + _) + r.substring(u + this.diff_xIndex(
p,
b + w[1].length
))), w[0] !== v && (b += w[1].length);
}
}
}
}
}
return r = r.substring(n.length, r.length - n.length), [r, a];
}, s.prototype.patch_addPadding = function(e) {
for (var r = this.Patch_Margin, n = "", i = 1; i <= r; i++)
n += String.fromCharCode(i);
for (var i = 0; i < e.length; i++)
e[i].start1 += r, e[i].start2 += r;
var a = e[0], t = a.diffs;
if (t.length == 0 || t[0][0] != o)
t.unshift(new s.Diff(o, n)), a.start1 -= r, a.start2 -= r, a.length1 += r, a.length2 += r;
else if (r > t[0][1].length) {
var l = r - t[0][1].length;
t[0][1] = n.substring(t[0][1].length) + t[0][1], a.start1 -= l, a.start2 -= l, a.length1 += l, a.length2 += l;
}
if (a = e[e.length - 1], t = a.diffs, t.length == 0 || t[t.length - 1][0] != o)
t.push(new s.Diff(o, n)), a.length1 += r, a.length2 += r;
else if (r > t[t.length - 1][1].length) {
var l = r - t[t.length - 1][1].length;
t[t.length - 1][1] += n.substring(0, l), a.length1 += l, a.length2 += l;
}
return n;
}, s.prototype.patch_splitMax = function(e) {
for (var r = this.Match_MaxBits, n = 0; n < e.length; n++)
if (!(e[n].length1 <= r)) {
var i = e[n];
e.splice(n--, 1);
for (var a = i.start1, t = i.start2, l = ""; i.diffs.length !== 0; ) {
var h = new s.patch_obj(), u = !0;
for (h.start1 = a - l.length, h.start2 = t - l.length, l !== "" && (h.length1 = h.length2 = l.length, h.diffs.push(new s.Diff(o, l))); i.diffs.length !== 0 && h.length1 < r - this.Patch_Margin; ) {
var f = i.diffs[0][0], c = i.diffs[0][1];
f === g ? (h.length2 += c.length, t += c.length, h.diffs.push(i.diffs.shift()), u = !1) : f === v && h.diffs.length == 1 && h.diffs[0][0] == o && c.length > 2 * r ? (h.length1 += c.length, a += c.length, u = !1, h.diffs.push(new s.Diff(f, c)), i.diffs.shift()) : (c = c.substring(
0,
r - h.length1 - this.Patch_Margin
), h.length1 += c.length, a += c.length, f === o ? (h.length2 += c.length, t += c.length) : u = !1, h.diffs.push(new s.Diff(f, c)), c == i.diffs[0][1] ? i.diffs.shift() : i.diffs[0][1] = i.diffs[0][1].substring(c.length));
}
l = this.diff_text2(h.diffs), l = l.substring(l.length - this.Patch_Margin);
var p = this.diff_text1(i.diffs).substring(0, this.Patch_Margin);
p !== "" && (h.length1 += p.length, h.length2 += p.length, h.diffs.length !== 0 && h.diffs[h.diffs.length - 1][0] === o ? h.diffs[h.diffs.length - 1][1] += p : h.diffs.push(new s.Diff(o, p))), u || e.splice(++n, 0, h);
}
}
}, s.prototype.patch_toText = function(e) {
for (var r = [], n = 0; n < e.length; n++)
r[n] = e[n];
return r.join("");
}, s.prototype.patch_fromText = function(e) {
var r = [];
if (!e)
return r;
for (var n = e.split(`
`), i = 0, a = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/; i < n.length; ) {
var t = n[i].match(a);
if (!t)
throw new Error("Invalid patch string: " + n[i]);
var l = new s.patch_obj();
for (r.push(l), l.start1 = parseInt(t[1], 10), t[2] === "" ? (l.start1--, l.length1 = 1) : t[2] == "0" ? l.length1 = 0 : (l.start1--, l.length1 = parseInt(t[2], 10)), l.start2 = parseInt(t[3], 10), t[4] === "" ? (l.start2--, l.length2 = 1) : t[4] == "0" ? l.length2 = 0 : (l.start2--, l.length2 = parseInt(t[4], 10)), i++; i < n.length; ) {
var h = n[i].charAt(0);
try {
var u = decodeURI(n[i].substring(1));
} catch {
throw new Error("Illegal escape in patch_fromText: " + u);
}
if (h == "-")
l.diffs.push(new s.Diff(v, u));
else if (h == "+")
l.diffs.push(new s.Diff(g, u));
else if (h == " ")
l.diffs.push(new s.Diff(o, u));
else {
if (h == "@")
break;
if (h !== "")
throw new Error('Invalid patch mode "' + h + '" in: ' + u);
}
i++;
}
}
return r;
}, s.patch_obj = function() {
this.diffs = [], this.start1 = null, this.start2 = null, this.length1 = 0, this.length2 = 0;
}, s.patch_obj.prototype.toString = function() {
var e, r;
this.length1 === 0 ? e = this.start1 + ",0" : this.length1 == 1 ? e = this.start1 + 1 : e = this.start1 + 1 + "," + this.length1, this.length2 === 0 ? r = this.start2 + ",0" : this.length2 == 1 ? r = this.start2 + 1 : r = this.start2 + 1 + "," + this.length2;
for (var n = ["@@ -" + e + " +" + r + ` @@
`], i, a = 0; a < this.diffs.length; a++) {
switch (this.diffs[a][0]) {
case g:
i = "+";
break;
case v:
i = "-";
break;
case o:
i = " ";
break;
}
n[a + 1] = i + encodeURI(this.diffs[a][1]) + `
`;
}
return n.join("").replace(/%20/g, " ");
}, m.exports = s, m.exports.diff_match_patch = s, m.exports.DIFF_DELETE = v, m.exports.DIFF_INSERT = g, m.exports.DIFF_EQUAL = o;
})(Y);
var $ = /* @__PURE__ */ ((m) => (m[m.removed = -1] = "removed", m[m.equal = 0] = "equal", m[m.added = 1] = "added", m[m.disabled = 2] = "disabled", m))($ || {});
const F = (m) => $[m] ? $[m] : "disabled", q = (m) => {
const s = [], v = {
prev: 0,
current: 0
};
return m.map((g) => {
const o = g[0][1].replace(/\n$/, "").split(`
`), e = g[1][1].replace(/\n$/, "").split(`
`), r = Math.max(o.length, e.length);
for (let n = 0; n < r; n++) {
const i = F(g[0][0]) !== "disabled" && typeof o[n] < "u", a = F(g[1][0]) !== "disabled" && typeof e[n] < "u";
i && (v.prev = v.prev + 1), a && (v.current = v.current + 1);
const t = !!(F(g[0][0]).match(/added|removed/) && F(g[1][0]).match(/added|removed/));
s.push([
{
type: i ? F(g[0][0]) : "disabled",
lineNum: i ? v.prev : void 0,
value: i ? o[n] : void 0,
chkWords: t
},
{
type: a ? F(g[1][0]) : "disabled",
lineNum: a ? v.current : void 0,
value: a ? e[n] : void 0,
chkWords: t
}
]);
}
}), s;
}, x = (m) => {
const s = [];
let v = 0;
return m.map((g) => {
const o = g[0][1].replace(/\n$/, "").split(`
`), e = g[1][1].replace(/\n$/, "").split(`
`);
o.map((r) => {
F(g[0][0]) === "removed" && s.push([
{
type: F(g[0][0]),
lineNum: void 0,
value: r
}
]);
}), e.map((r) => {
F(g[1][0]) !== "disabled" && (v = v + 1, s.push([
{
type: F(g[1][0]),
lineNum: v,
value: r
}
]));
});
}), s;
}, ee = (m, s, v) => {
function g(e, r) {
const n = new H.diff_match_patch(), i = n.diff_linesToChars_(e, r), a = i.chars1, t = i.chars2, l = i.lineArray, h = n.diff_main(a, t, !1);
return n.diff_charsToLines_(h, l), h;
}
const o = g(s, v).reduce(
(e, r) => {
const n = F(r[0]);
if (n === "equal" && e.push([r]), n === "removed" && e.push([r]), n === "added") {
const i = e.length && e[e.length - 1][0] ? e[e.length - 1][0] : null;
i && F(i[0]) === "removed" ? e[e.length - 1].push(r) : e.push([r]);
}
return e;
},
[]
);
return o.map((e) => {
if (e.length > 1)
return;
const r = F(e[0][0]);
r === "added" ? e.unshift([2, ""]) : r === "removed" ? e.push([2, ""]) : r === "equal" && e.push([...e[0]]);
}), m === "split" ? q(o) : m === "unified" ? x(o) : [];
};
function re() {
const m = S({ width: 1920, height: 1080 });
function s() {
m.value = {
width: window.innerWidth,
height: window.innerHeight
};
}
return R(() => {
window.addEventListener("resize", s);
}), G(() => {
window.removeEventListener("resize", s);
}), m;
}
function ne() {
let s = 16;
const v = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), g = [];
let o;
for (s = s || v.length, o = 0; o < 32; o++)
g[o] = v[0 | Math.random() * s];
return g.join("");
}
const N = {
// 对比转换回html
changeStrToHtml(m) {
let s = m.replace(/\¶\;\<br\>/g, `
`).replace(/\>\;/g, ">").replace(/\<\;/g, "<").replace(/\&\;/g, "&");
return s.substring(6, s.length - 7);
},
// 对比转换html标签
diff_prettyHtml(m) {
for (var s = [], v = /&/g, g = /</g, o = />/g, e = /\n/g, r = 0; r < m.length; r++) {
m[r][0];
var n = m[r][1], i = n.replace(v, "&").replace(g, "<").replace(o, ">").replace(e, "¶<br>");
s[r] = i;
}
return s.join("");
},
// 合并函数不带颜色
concatHTMLWithoutColor(m, s) {
var v = new H.diff_match_patch(), g = v.diff_main(m, s);
let o = "";
return g.forEach((e) => {
o += e[1];
}), o;
},
// 合并函数
concatHTML(m, s) {
var v = new H.diff_match_patch(), g = v.diff_main(m, s);
v.diff_cleanupSemantic(g);
var o = v.diff_prettyHtml(g);
return this.changeStrToHtml(o);
},
// 两屏对比函数
diffScreens(m, s, v) {
if (!m && !s) {
console.log("没有获取到要对比的字符串", m, s);
return;
}
const g = new H.diff_match_patch(), o = g.diff_main(m, s);
return g.diff_cleanupSemantic(o), o.filter((r) => F(r[0]) !== "removed").map((r, n) => r[1]).join("");
},
// 两屏对比塞入颜色
compareHTML(m, s) {
const v = ee("split", m, s);
let g = [], o = "", e = "";
v.forEach((n, i) => {
let a = n[0], t = `pos${i}`;
if (!a.chkWords)
o += `<span>${a.value}</span>`;
else {
let f = N.diffScreens(n[1].value, a.value, t);
o += `<span>${f}</span>`;
}
let l = n[0];
if (!l.chkWords)
e += `<span>${l.value}</span>`;
else {
let f = N.diffScreens(l.value, n[1].value, t);
e += `<span>${f}</span>`;
}
let h = n[0], u = n[1];
if (h.type !== u.type) {
const f = this.computeTypes(n, i, t);
g = g.concat(f);
}
});
const r = this.uniqText(g);
return { newHTML1: o, newHTML2: e, Diffs: r };
},
// 去重
uniqText(m) {
let s = [];
m.forEach((r) => {
let n = JSON.stringify(r);
s.includes(n) || s.push(n);
});
let v = [];
s.forEach((r) => {
v.push(JSON.parse(r));
});
let g = v.filter((r) => r.type === "add"), o = v.filter((r) => r.type === "remove"), e = v.filter((r) => r.type === "edit");
return {
Diffs: v,
DiffsCount: [
{
name: "全部",
value: v.length,
key: "all",
cards: v
},
{
name: "删除",
value: o.length,
key: "remove",
cards: o
},
{
name: "新增",
value: g.length,
key: "add",
cards: g
},
{
name: "修改",
value: e.length,
key: "edit",
cards: e
}
]
};
},
// 计算 删除、新增、编辑 不同类的文件
computeTypes(m, s, v) {
const g = [], o = this.getDiffArr(m[0].value, m[1].value), e = (r) => {
let n = r;
if (r.includes(">") && r.includes("<")) {
let i = r.match(/\>(.*?)\</g), a = i == null ? void 0 : i.map((t) => t.replace(/[\> \<]/g, ""));
n = a == null ? void 0 : a.join("");
}
return n;
};
return o.forEach((r, n) => {
const i = ne();
let a = !1;
r[0] === 1 && (o[n - 1] && o[n - 1][0] === -1 && (a = !0, g.push({
name: "修改",
type: "edit",
id: s,
key: v,
uid: i,
last: e(o[n - 1][1]),
next: e(r[1])
})), a || g.push({
name: "新增",
type: "add",
id: s,
key: v,
uid: i,
last: "",
next: e(r[1])
})), r[0] === -1 && (o[n + 1] && o[n + 1][0] === 1 && (a = !0, g.push({
name: "修改",
type: "edit",
id: s,
key: v,
uid: i,
last: e(r[1]),
next: e(o[n + 1][1])
})), a || g.push({
name: "删除",
type: "remove",
id: s,
key: v,
uid: i,
last: "",
next: e(r[1])
}));
}), g;
},
// 去掉对 html 特殊处理的标签
doingDate(m) {
const s = m.filter((o) => o.last || o.next), v = [], g = [];
return s.forEach((o) => {
v.includes(o.last + o.next + o.type) || (v.push(o.last + o.next + o.type), g.push(o));
}), g;
},
getDiffArr(m, s) {
var v = new H.diff_match_patch(), g = v.diff_main(m, s);
return g;
}
};
const te = { class: "text-compare-page" }, ie = { class: "text-compare-article" }, ae = { class: "text-compare-top" }, le = { class: "input-group" }, se = /* @__PURE__ */ C("label", { for: "同步滚动" }, "同步滚动", -1), he = /* @__PURE__ */ C("label", { for: "文档对调" }, "文档对调", -1), ue = { class: "text-compare-article1" }, oe = ["innerHTML"], fe = { class: "text-compare-article1" }, ge = ["innerHTML"], ve = /* @__PURE__ */ O({
props: {
html1: String,
html2: String,
isTitle: Boolean,
notFilterTag: Array,
similarity: Number
},
setup(m) {
const s = m, { html1: v, html2: g, isTitle: o, similarity: e = 100, notFilterTag: r = [] } = s;
let n = S(), i = S(), a = S(!1), t = S([]);
S("all");
let l = S([
{ name: "全部", value: 0, key: "all", cards: [] },
{ name: "删除", value: 0, key: "remove", cards: [] },
{ name: "新增", value: 0, key: "add", cards: [] },
{ name: "修改", value: 0, key: "edit", cards: [] }
]);
S("");
let h = (_) => {
a.value = _.target.checked;
};
const u = S(!1), f = (_) => {
u.value = _;
};
let c = (_) => {
let d = document.querySelector(".text-compare-left"), w = document.querySelector(".text-compare-right");
_.target.checked && (w.scrollTop = d.scrollTop, w.scrollLeft = d.scrollLeft), d.addEventListener("scroll", () => {
_.target.checked && (u.value || (w.scrollTop = d.scrollTop, w.scrollLeft = d.scrollLeft));
}), w.addEventListener("scroll", () => {
_.target.checked && u.value && (d.scrollTop = w.scrollTop, d.scrollLeft = w.scrollLeft);
});
}, p = re(), b = S();
return X(p, (_) => {
b.value = _.height - 50;
}), R(() => {
if (!v || !g) {
console.log("请传递正确 html 节点");
return;
}
console.time("对比计算");
let { newHTML1: _, newHTML2: d, Diffs: w } = N.compareHTML(
v,
g
);
console.timeEnd("对比计算"), n.value = _, i.value = d, e > 50 && (t.value = w.Diffs, l.value = w.DiffsCount), Q(() => {
b.value = document.body.clientHeight - 50;
});
}), (_, d) => (U(), z("div", te, [
C("div", {
class: "text-compare",
style: j({ height: k(b) + "px" })
}, [
C("div", ie, [
C("div", ae, [
C("div", le, [
C("input", {
id: "同步滚动",
type: "checkbox",
name: "同步滚动",
onChange: d[0] || (d[0] = //@ts-ignore
(...w) => k(c) && k(c)(...w))
}, null, 32),
se,
C("input", {
id: "文档对调",
type: "checkbox",
name: "文档对调",
onChange: d[1] || (d[1] = //@ts-ignore
(...w) => k(h) && k(h)(...w))
}, null, 32),
he
])
]),
C("div", {
class: "text-compare-bottom",
style: j({ height: k(b) - 97 + "px" })
}, [
C("div", {
class: "text-compare-left",
onMouseover: d[2] || (d[2] = (w) => f(!1))
}, [
C("div", ue, [
C("div", {
innerHTML: k(a) ? k(i) : k(n)
}, null, 8, oe)
])
], 32),
C("div", {
class: "text-compare-right",
onMouseover: d[3] || (d[3] = (w) => f(!0))
}, [
C("div", fe, [
C("div", {
innerHTML: k(a) ? k(n) : k(i)
}, null, 8, ge)
])
], 32)
], 4)
])
], 4)
]));
}
}), ce = ["innerHTML"], me = /* @__PURE__ */ O({
props: {
html1: String,
// 对比文本字符串1
html2: String
// 对比文本字符串2
},
setup(m) {
const s = m, { html1: v, html2: g } = s;
let o = S("");
return R(() => {
if (!v || !g) {
console.log("请传递正确 html 节点");
return;
}
o.value = N.concatHTMLWithoutColor(v, g);
}), (e, r) => (U(), z("div", {
id: "currentTextId",
innerHTML: k(o),
class: "p-4 rounded-lg border-2 border-gray-500 text-gray-300"
}, null, 8, ce));
}
});
const pe = {
key: 0,
class: "diff-page-c"
}, _e = /* @__PURE__ */ O({
props: {
screen: String,
// 1 一屏合并, 2 两屏对比
html1: String,
// 对比文本字符串1
html2: String,
// 对比文本字符串2
title: Boolean,
notFilterTag: Array,
// 不过滤当前标签
similarity: Number
// 相似度
},
setup(m, { expose: s }) {
const v = m;
let g = S(v.html1), o = S(v.html2), e = S(v.title), r = S(v.notFilterTag), n = S(v.similarity), i = S(""), a = S(v.screen), t = S(!0);
return R(() => {
if (t.value = !0, !g.value || !o.value) {
console.log("请传递正确 html 节点");
return;
}
i.value = N.concatHTML(g.value, o.value), Q(() => {
let l = document.getElementById("currentTextId");
l.contentEditable = !0;
});
}), Z(() => {
t.value = !1;
}), s(N), (l, h) => k(t) ? (U(), z("div", pe, [
W(V(me, {
html1: k(g),
html2: k(o)
}, null, 8, ["html1", "html2"]), [
[J, k(a) === "1"]
]),
W(V(ve, {
html1: k(g),
html2: k(o),
isTitle: k(e),
similarity: k(n),
notFilterTag: k(r)
}, null, 8, ["html1", "html2", "isTitle", "similarity", "notFilterTag"]), [
[J, k(a) === "2"]
])
])) : K("", !0);
}
}), be = {
install: (m, s = {}) => {
m.component("DiffPage", _e);
}
};
export {
_e as DiffPage,
be as default
};