UNPKG

@leonwerth/vue-diff

Version:

Vue diff

1,104 lines (1,103 loc) 42.2 kB
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, "&amp;").replace(i, "&lt;").replace(a, "&gt;").replace(t, "&para;<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(/\&para\;\<br\>/g, ` `).replace(/\&gt\;/g, ">").replace(/\&lt\;/g, "<").replace(/\&amp\;/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, "&amp;").replace(g, "&lt;").replace(o, "&gt;").replace(e, "&para;<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 };