ngx-text-diff
Advanced tools
Comparing version 0.5.4 to 0.6.0
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('diff-match-patch'), require('@angular/common'), require('@angular/forms'), require('@angular/core')) : | ||
typeof define === 'function' && define.amd ? define('ngx-text-diff', ['exports', 'diff-match-patch', '@angular/common', '@angular/forms', '@angular/core'], factory) : | ||
(factory((global['ngx-text-diff'] = {}),global.diffMatchPatch,global.ng.common,global.ng.forms,global.ng.core)); | ||
}(this, (function (exports,diffMatchPatch,common,forms,i0) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('diff-match-patch'), require('rxjs'), require('@angular/cdk/scrolling'), require('@angular/common'), require('@angular/forms')) : | ||
typeof define === 'function' && define.amd ? define('ngx-text-diff', ['exports', '@angular/core', 'diff-match-patch', 'rxjs', '@angular/cdk/scrolling', '@angular/common', '@angular/forms'], factory) : | ||
(global = global || self, factory(global['ngx-text-diff'] = {}, global.ng.core, global.diffMatchPatch, global.rxjs, global.ng.cdk.scrolling, global.ng.common, global.ng.forms)); | ||
}(this, (function (exports, core, diffMatchPatch, rxjs, scrolling, common, forms) { 'use strict'; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
/** @type {?} */ | ||
var isEmpty = function (val) { return val == null || !(Object.keys(val) || val).length || (Object.keys(val) || val).length === 0; }; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
var NgxTextDiffService = /** @class */ (function () { | ||
function NgxTextDiffService() { | ||
this.initParser(); | ||
} | ||
/** | ||
* @private | ||
* @return {?} | ||
*/ | ||
NgxTextDiffService.prototype.initParser = /** | ||
* @private | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.diffParser = new diffMatchPatch.diff_match_patch(); | ||
}; | ||
/** | ||
* @param {?} left | ||
* @param {?} right | ||
* @return {?} | ||
*/ | ||
NgxTextDiffService.prototype.getDiffsByLines = /** | ||
* @param {?} left | ||
* @param {?} right | ||
* @return {?} | ||
*/ | ||
function (left, right) { | ||
var _this = this; | ||
return new Promise(function (resolve, reject) { | ||
/** @type {?} */ | ||
var a = _this.diffParser.diff_linesToChars_(left, right); | ||
/** @type {?} */ | ||
var lineText1 = a.chars1; | ||
/** @type {?} */ | ||
var lineText2 = a.chars2; | ||
/** @type {?} */ | ||
var linesArray = a.lineArray; | ||
/** @type {?} */ | ||
var diffs = _this.diffParser.diff_main(lineText1, lineText2, true); | ||
_this.diffParser.diff_charsToLines_(diffs, linesArray); | ||
/** @type {?} */ | ||
var rows = _this.formatOutput(diffs); | ||
if (!rows) { | ||
reject('Error'); | ||
} | ||
resolve(rows); | ||
}); | ||
}; | ||
/** | ||
* @private | ||
* @param {?} diffs | ||
* @return {?} | ||
*/ | ||
NgxTextDiffService.prototype.formatOutput = /** | ||
* @private | ||
* @param {?} diffs | ||
* @return {?} | ||
*/ | ||
function (diffs) { | ||
var _this = this; | ||
/** @type {?} */ | ||
var lineLeft = 1; | ||
/** @type {?} */ | ||
var lineRight = 1; | ||
return diffs.reduce(function (rows, diff) { | ||
if (!rows) { | ||
rows = []; | ||
} | ||
/** @type {?} */ | ||
var diffType = diff[0]; | ||
/** @type {?} */ | ||
var diffValue = diff[1]; | ||
/** @type {?} */ | ||
var leftDiffRow = null; | ||
/** @type {?} */ | ||
var rightDiffRow = null; | ||
/** @type {?} */ | ||
var leftContent = null; | ||
/** @type {?} */ | ||
var rightContent = null; | ||
/** @type {?} */ | ||
var rowTemp = null; | ||
switch (diffType) { | ||
case diffMatchPatch.DIFF_EQUAL: // 0 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
leftContent = { | ||
lineNumber: lineLeft, | ||
lineContent: line, | ||
lineDiffs: [], | ||
prefix: '' | ||
}; | ||
rightContent = { | ||
lineNumber: lineRight, | ||
lineContent: line, | ||
lineDiffs: [], | ||
prefix: '' | ||
}; | ||
rowTemp = { | ||
leftContent: leftContent, | ||
rightContent: rightContent, | ||
belongTo: 'both', | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
rows.push(rowTemp); | ||
lineRight = lineRight + 1; | ||
lineLeft = lineLeft + 1; | ||
}); | ||
break; | ||
case diffMatchPatch.DIFF_DELETE: // -1 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
rightDiffRow = rows.find(function (row) { return !row.leftContent && row.rightContent && row.rightContent.lineNumber === lineLeft && row.rightContent.prefix !== ''; }); | ||
leftContent = { | ||
lineNumber: lineLeft, | ||
lineContent: line, | ||
lineDiffs: [{ content: line, isDiff: true }], | ||
prefix: '-' | ||
}; | ||
if (rightDiffRow) { | ||
rightDiffRow.leftContent = leftContent; | ||
rightDiffRow.leftContent.lineDiffs = _this.getDiffParts(rightDiffRow.leftContent.lineContent, rightDiffRow.rightContent.lineContent); | ||
rightDiffRow.rightContent.lineDiffs = _this.getDiffParts(rightDiffRow.rightContent.lineContent, rightDiffRow.leftContent.lineContent); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow); | ||
} | ||
else { | ||
rows.push({ | ||
leftContent: leftContent, | ||
rightContent: null, | ||
hasDiffs: true, | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
} | ||
lineLeft = lineLeft + 1; | ||
}); | ||
break; | ||
case diffMatchPatch.DIFF_INSERT: // 1 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
leftDiffRow = rows.find(function (row) { return row.leftContent && !row.rightContent && row.leftContent.lineNumber === lineRight && row.leftContent.prefix !== ''; }); | ||
rightContent = { | ||
lineNumber: lineRight, | ||
lineContent: line, | ||
lineDiffs: [{ content: line, isDiff: true }], | ||
prefix: '+' | ||
}; | ||
if (leftDiffRow) { | ||
leftDiffRow.rightContent = rightContent; | ||
leftDiffRow.leftContent.lineDiffs = _this.getDiffParts(leftDiffRow.leftContent.lineContent, leftDiffRow.rightContent.lineContent); | ||
leftDiffRow.rightContent.lineDiffs = _this.getDiffParts(leftDiffRow.rightContent.lineContent, leftDiffRow.leftContent.lineContent); | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow); | ||
} | ||
else { | ||
rows.push({ | ||
leftContent: null, | ||
rightContent: rightContent, | ||
hasDiffs: true, | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
} | ||
lineRight = lineRight + 1; | ||
}); | ||
break; | ||
} | ||
return rows; | ||
}, []); | ||
}; | ||
/** | ||
* @private | ||
* @param {?} result | ||
* @return {?} | ||
*/ | ||
NgxTextDiffService.prototype.countDiffs = /** | ||
* @private | ||
* @param {?} result | ||
* @return {?} | ||
*/ | ||
function (result) { | ||
/** @type {?} */ | ||
var diffCount = 0; | ||
if (result.leftContent) { | ||
diffCount += result.leftContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length; | ||
} | ||
if (result.leftContent) { | ||
diffCount += result.rightContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length; | ||
} | ||
return diffCount; | ||
}; | ||
/** | ||
* @private | ||
* @param {?} value | ||
* @param {?} compareValue | ||
* @return {?} | ||
*/ | ||
NgxTextDiffService.prototype.getDiffParts = /** | ||
* @private | ||
* @param {?} value | ||
* @param {?} compareValue | ||
* @return {?} | ||
*/ | ||
function (value, compareValue) { | ||
/** @type {?} */ | ||
var diffParts = []; | ||
/** @type {?} */ | ||
var i = 0; | ||
/** @type {?} */ | ||
var j = 0; | ||
/** @type {?} */ | ||
var shared = ''; | ||
/** @type {?} */ | ||
var diff = ''; | ||
while (i < value.length) { | ||
if (value[i] === compareValue[j] && j < compareValue.length) { | ||
if (diff !== '') { | ||
diffParts.push({ content: diff, isDiff: true }); | ||
diff = ''; | ||
} | ||
shared += value[i]; | ||
} | ||
else { | ||
if (shared !== '') { | ||
diffParts.push({ content: shared, isDiff: false }); | ||
shared = ''; | ||
} | ||
diff += value[i]; | ||
} | ||
i++; | ||
j++; | ||
} | ||
if (diff !== '') { | ||
diffParts.push({ content: diff, isDiff: true }); | ||
} | ||
else if (shared !== '') { | ||
diffParts.push({ content: shared, isDiff: false }); | ||
} | ||
return diffParts; | ||
}; | ||
NgxTextDiffService.decorators = [ | ||
{ type: i0.Injectable, args: [{ | ||
providedIn: 'root' | ||
},] } | ||
]; | ||
/** @nocollapse */ | ||
NgxTextDiffService.ctorParameters = function () { return []; }; | ||
/** @nocollapse */ NgxTextDiffService.ngInjectableDef = i0.defineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" }); | ||
return NgxTextDiffService; | ||
}()); | ||
/*! ***************************************************************************** | ||
@@ -305,96 +21,430 @@ Copyright (c) Microsoft Corporation. All rights reserved. | ||
***************************************************************************** */ | ||
/* global Reflect, Promise */ | ||
var extendStatics = function(d, b) { | ||
extendStatics = Object.setPrototypeOf || | ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
return extendStatics(d, b); | ||
}; | ||
function __extends(d, b) { | ||
extendStatics(d, b); | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
} | ||
var __assign = function() { | ||
__assign = Object.assign || function __assign(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
function __rest(s, e) { | ||
var t = {}; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | ||
t[p] = s[p]; | ||
if (s != null && typeof Object.getOwnPropertySymbols === "function") | ||
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | ||
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | ||
t[p[i]] = s[p[i]]; | ||
} | ||
return t; | ||
} | ||
function __decorate(decorators, target, key, desc) { | ||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | ||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | ||
return c > 3 && r && Object.defineProperty(target, key, r), r; | ||
} | ||
function __param(paramIndex, decorator) { | ||
return function (target, key) { decorator(target, key, paramIndex); } | ||
} | ||
function __metadata(metadataKey, metadataValue) { | ||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); | ||
} | ||
function __awaiter(thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { | ||
step(generator.next(value)); | ||
} | ||
catch (e) { | ||
reject(e); | ||
} } | ||
function rejected(value) { try { | ||
step(generator["throw"](value)); | ||
} | ||
catch (e) { | ||
reject(e); | ||
} } | ||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
} | ||
function __generator(thisArg, body) { | ||
var _ = { label: 0, sent: function () { if (t[0] & 1) | ||
throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) | ||
throw new TypeError("Generator is already executing."); | ||
while (_) | ||
try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) | ||
return t; | ||
if (y = 0, t) | ||
op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: | ||
case 1: | ||
t = op; | ||
break; | ||
case 4: | ||
_.label++; | ||
return { value: op[1], done: false }; | ||
case 5: | ||
_.label++; | ||
y = op[1]; | ||
op = [0]; | ||
continue; | ||
case 7: | ||
op = _.ops.pop(); | ||
_.trys.pop(); | ||
continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { | ||
_ = 0; | ||
continue; | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
} | ||
function __exportStar(m, exports) { | ||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; | ||
} | ||
function __values(o) { | ||
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; | ||
if (m) return m.call(o); | ||
if (o && typeof o.length === "number") return { | ||
next: function () { | ||
if (o && i >= o.length) o = void 0; | ||
return { value: o && o[i++], done: !o }; | ||
} | ||
}; | ||
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); | ||
} | ||
function __read(o, n) { | ||
var m = typeof Symbol === "function" && o[Symbol.iterator]; | ||
if (!m) return o; | ||
var i = m.call(o), r, ar = [], e; | ||
try { | ||
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); | ||
} | ||
catch (error) { e = { error: error }; } | ||
finally { | ||
try { | ||
if (r && !r.done && (m = i["return"])) m.call(i); | ||
} | ||
finally { if (e) throw e.error; } | ||
} | ||
return ar; | ||
} | ||
function __spread() { | ||
for (var ar = [], i = 0; i < arguments.length; i++) | ||
ar = ar.concat(__read(arguments[i])); | ||
return ar; | ||
} | ||
function __spreadArrays() { | ||
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; | ||
for (var r = Array(s), k = 0, i = 0; i < il; i++) | ||
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) | ||
r[k] = a[j]; | ||
return r; | ||
}; | ||
function __await(v) { | ||
return this instanceof __await ? (this.v = v, this) : new __await(v); | ||
} | ||
function __asyncGenerator(thisArg, _arguments, generator) { | ||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | ||
var g = generator.apply(thisArg, _arguments || []), i, q = []; | ||
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; | ||
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } | ||
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } | ||
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } | ||
function fulfill(value) { resume("next", value); } | ||
function reject(value) { resume("throw", value); } | ||
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } | ||
} | ||
function __asyncDelegator(o) { | ||
var i, p; | ||
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; | ||
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } | ||
} | ||
function __asyncValues(o) { | ||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | ||
var m = o[Symbol.asyncIterator], i; | ||
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); | ||
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } | ||
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } | ||
} | ||
function __makeTemplateObject(cooked, raw) { | ||
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } | ||
return cooked; | ||
}; | ||
function __importStar(mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result.default = mod; | ||
return result; | ||
} | ||
function __importDefault(mod) { | ||
return (mod && mod.__esModule) ? mod : { default: mod }; | ||
} | ||
function __classPrivateFieldGet(receiver, privateMap) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to get private field on non-instance"); | ||
} | ||
return privateMap.get(receiver); | ||
} | ||
function __classPrivateFieldSet(receiver, privateMap, value) { | ||
if (!privateMap.has(receiver)) { | ||
throw new TypeError("attempted to set private field on non-instance"); | ||
} | ||
privateMap.set(receiver, value); | ||
return value; | ||
} | ||
var isNil = function (val) { return val === undefined || val === null; }; | ||
var isEmpty = function (val) { return val == null || !(Object.keys(val) || val).length || (Object.keys(val) || val).length === 0; }; | ||
var NgxTextDiffService = /** @class */ (function () { | ||
function NgxTextDiffService() { | ||
this.initParser(); | ||
} | ||
NgxTextDiffService.prototype.initParser = function () { | ||
this.diffParser = new diffMatchPatch.diff_match_patch(); | ||
}; | ||
NgxTextDiffService.prototype.getDiffsByLines = function (left, right) { | ||
var _this = this; | ||
return new Promise(function (resolve, reject) { | ||
var a = _this.diffParser.diff_linesToChars_(left, right); | ||
var lineText1 = a.chars1; | ||
var lineText2 = a.chars2; | ||
var linesArray = a.lineArray; | ||
var diffs = _this.diffParser.diff_main(lineText1, lineText2, true); | ||
_this.diffParser.diff_charsToLines_(diffs, linesArray); | ||
var rows = _this.formatOutput(diffs); | ||
if (!rows) { | ||
reject('Error'); | ||
} | ||
resolve(rows); | ||
}); | ||
}; | ||
NgxTextDiffService.prototype.formatOutput = function (diffs) { | ||
var _this = this; | ||
var lineLeft = 1; | ||
var lineRight = 1; | ||
return diffs.reduce(function (rows, diff) { | ||
if (!rows) { | ||
rows = []; | ||
} | ||
var diffType = diff[0]; | ||
var diffValue = diff[1]; | ||
var leftDiffRow = null; | ||
var rightDiffRow = null; | ||
var leftContent = null; | ||
var rightContent = null; | ||
var rowTemp = null; | ||
switch (diffType) { | ||
case diffMatchPatch.DIFF_EQUAL: // 0 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { | ||
_.label = op[1]; | ||
break; | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
leftContent = { | ||
lineNumber: lineLeft, | ||
lineContent: line, | ||
lineDiffs: [], | ||
prefix: '' | ||
}; | ||
rightContent = { | ||
lineNumber: lineRight, | ||
lineContent: line, | ||
lineDiffs: [], | ||
prefix: '' | ||
}; | ||
rowTemp = { | ||
leftContent: leftContent, | ||
rightContent: rightContent, | ||
belongTo: 'both', | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
rows.push(rowTemp); | ||
lineRight = lineRight + 1; | ||
lineLeft = lineLeft + 1; | ||
}); | ||
break; | ||
case diffMatchPatch.DIFF_DELETE: // -1 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
if (op[0] === 6 && _.label < t[1]) { | ||
_.label = t[1]; | ||
t = op; | ||
break; | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
rightDiffRow = rows.find(function (row) { return !row.leftContent && row.rightContent && row.rightContent.lineNumber === lineLeft && row.rightContent.prefix !== ''; }); | ||
leftContent = { | ||
lineNumber: lineLeft, | ||
lineContent: line, | ||
lineDiffs: [{ content: line, isDiff: true }], | ||
prefix: '-' | ||
}; | ||
if (rightDiffRow) { | ||
rightDiffRow.leftContent = leftContent; | ||
rightDiffRow.leftContent.lineDiffs = _this.getDiffParts(rightDiffRow.leftContent.lineContent, rightDiffRow.rightContent.lineContent); | ||
rightDiffRow.rightContent.lineDiffs = _this.getDiffParts(rightDiffRow.rightContent.lineContent, rightDiffRow.leftContent.lineContent); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow); | ||
} | ||
if (t && _.label < t[2]) { | ||
_.label = t[2]; | ||
_.ops.push(op); | ||
break; | ||
else { | ||
rows.push({ | ||
leftContent: leftContent, | ||
rightContent: null, | ||
hasDiffs: true, | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
} | ||
if (t[2]) | ||
_.ops.pop(); | ||
_.trys.pop(); | ||
continue; | ||
lineLeft = lineLeft + 1; | ||
}); | ||
break; | ||
case diffMatchPatch.DIFF_INSERT: // 1 | ||
diffValue | ||
.split('\n') | ||
.filter(function (value, index, array) { | ||
if (index === array.length - 1) { | ||
return !isEmpty(value); | ||
} | ||
return true; | ||
}) | ||
.forEach(function (line) { | ||
leftDiffRow = rows.find(function (row) { return row.leftContent && !row.rightContent && row.leftContent.lineNumber === lineRight && row.leftContent.prefix !== ''; }); | ||
rightContent = { | ||
lineNumber: lineRight, | ||
lineContent: line, | ||
lineDiffs: [{ content: line, isDiff: true }], | ||
prefix: '+' | ||
}; | ||
if (leftDiffRow) { | ||
leftDiffRow.rightContent = rightContent; | ||
leftDiffRow.leftContent.lineDiffs = _this.getDiffParts(leftDiffRow.leftContent.lineContent, leftDiffRow.rightContent.lineContent); | ||
leftDiffRow.rightContent.lineDiffs = _this.getDiffParts(leftDiffRow.rightContent.lineContent, leftDiffRow.leftContent.lineContent); | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow); | ||
} | ||
else { | ||
rows.push({ | ||
leftContent: null, | ||
rightContent: rightContent, | ||
hasDiffs: true, | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
} | ||
lineRight = lineRight + 1; | ||
}); | ||
break; | ||
} | ||
return rows; | ||
}, []); | ||
}; | ||
NgxTextDiffService.prototype.countDiffs = function (result) { | ||
var diffCount = 0; | ||
if (result.leftContent) { | ||
diffCount += result.leftContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length; | ||
} | ||
if (result.leftContent) { | ||
diffCount += result.rightContent.lineDiffs.filter(function (diff) { return diff.isDiff; }).length; | ||
} | ||
return diffCount; | ||
}; | ||
NgxTextDiffService.prototype.getDiffParts = function (value, compareValue) { | ||
var diffParts = []; | ||
var i = 0; | ||
var j = 0; | ||
var shared = ''; | ||
var diff = ''; | ||
while (i < value.length) { | ||
if (value[i] === compareValue[j] && j < compareValue.length) { | ||
if (diff !== '') { | ||
diffParts.push({ content: diff, isDiff: true }); | ||
diff = ''; | ||
} | ||
op = body.call(thisArg, _); | ||
shared += value[i]; | ||
} | ||
catch (e) { | ||
op = [6, e]; | ||
y = 0; | ||
else { | ||
if (shared !== '') { | ||
diffParts.push({ content: shared, isDiff: false }); | ||
shared = ''; | ||
} | ||
diff += value[i]; | ||
} | ||
finally { | ||
f = t = 0; | ||
} | ||
if (op[0] & 5) | ||
throw op[1]; | ||
return { value: op[0] ? op[1] : void 0, done: true }; | ||
i++; | ||
j++; | ||
} | ||
if (diff !== '') { | ||
diffParts.push({ content: diff, isDiff: true }); | ||
} | ||
else if (shared !== '') { | ||
diffParts.push({ content: shared, isDiff: false }); | ||
} | ||
return diffParts; | ||
}; | ||
NgxTextDiffService.ɵprov = core["ɵɵdefineInjectable"]({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" }); | ||
NgxTextDiffService = __decorate([ | ||
core.Injectable({ | ||
providedIn: 'root' | ||
}), | ||
__metadata("design:paramtypes", []) | ||
], NgxTextDiffService); | ||
return NgxTextDiffService; | ||
}()); | ||
var ContainerDirective = /** @class */ (function () { | ||
function ContainerDirective(_el) { | ||
this._el = _el; | ||
this.element = _el.nativeElement; | ||
} | ||
} | ||
ContainerDirective.ctorParameters = function () { return [ | ||
{ type: core.ElementRef } | ||
]; }; | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", String) | ||
], ContainerDirective.prototype, "id", void 0); | ||
ContainerDirective = __decorate([ | ||
core.Directive({ | ||
selector: '[tdContainer]', | ||
}), | ||
__metadata("design:paramtypes", [core.ElementRef]) | ||
], ContainerDirective); | ||
return ContainerDirective; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
var NgxTextDiffComponent = /** @class */ (function () { | ||
function NgxTextDiffComponent(diff, cd) { | ||
function NgxTextDiffComponent(scrollService, diff, cd) { | ||
this.scrollService = scrollService; | ||
this.diff = diff; | ||
@@ -409,3 +459,4 @@ this.cd = cd; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new i0.EventEmitter(); | ||
this.synchronizeScrolling = true; | ||
this.compareResults = new core.EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -435,11 +486,6 @@ this.tableRows = []; | ||
Object.defineProperty(NgxTextDiffComponent.prototype, "hideMatchingLines", { | ||
get: /** | ||
* @return {?} | ||
*/ function () { | ||
get: function () { | ||
return this._hideMatchingLines; | ||
}, | ||
set: /** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ function (hide) { | ||
set: function (hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
@@ -450,216 +496,218 @@ }, | ||
}); | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.ngOnInit = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.loading = true; | ||
if (this.diffContent) { | ||
this.subscriptions.push(this.diffContent.subscribe(function (content) { | ||
_this.loading = true; | ||
_this.left = content.leftContent; | ||
_this.right = content.rightContent; | ||
_this.renderDiffs() | ||
.then(function () { | ||
_this.cd.detectChanges(); | ||
_this.loading = false; | ||
}) | ||
.catch(function () { return (_this.loading = false); }); | ||
})); | ||
} | ||
this.renderDiffs() | ||
.then(function () { return (_this.loading = false); }) | ||
.catch(function (e) { return (_this.loading = false); }); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.ngOnDestroy = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this.subscriptions) { | ||
this.subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); | ||
} | ||
}; | ||
/** | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = /** | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
function (value) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
} | ||
else { | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
} | ||
}; | ||
/** | ||
* @param {?} format | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.setDiffTableFormat = /** | ||
* @param {?} format | ||
* @return {?} | ||
*/ | ||
function (format) { | ||
this.format = format; | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.renderDiffs = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var _a, e_1; | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
_b.trys.push([0, 2, , 3]); | ||
this.diffsCount = 0; | ||
_a = this; | ||
return [4 /*yield*/, this.diff.getDiffsByLines(this.left, this.right)]; | ||
case 1: | ||
_a.tableRows = _b.sent(); | ||
this.tableRowsLineByLine = this.tableRows.reduce(function (tableLineByLine, row) { | ||
if (!tableLineByLine) { | ||
tableLineByLine = []; | ||
NgxTextDiffComponent.prototype.ngOnInit = function () { | ||
var _this = this; | ||
this.loading = true; | ||
if (this.diffContent) { | ||
this.subscriptions.push(this.diffContent.subscribe(function (content) { | ||
_this.loading = true; | ||
_this.left = content.leftContent; | ||
_this.right = content.rightContent; | ||
_this.renderDiffs() | ||
.then(function () { | ||
_this.cd.detectChanges(); | ||
_this.loading = false; | ||
}) | ||
.catch(function () { return (_this.loading = false); }); | ||
})); | ||
} | ||
this.renderDiffs() | ||
.then(function () { return (_this.loading = false); }) | ||
.catch(function (e) { return (_this.loading = false); }); | ||
}; | ||
NgxTextDiffComponent.prototype.ngAfterViewInit = function () { | ||
this.initScrollListener(); | ||
}; | ||
NgxTextDiffComponent.prototype.ngOnDestroy = function () { | ||
if (this.subscriptions) { | ||
this.subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); | ||
} | ||
}; | ||
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = function (value) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
} | ||
else { | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
} | ||
}; | ||
NgxTextDiffComponent.prototype.setDiffTableFormat = function (format) { | ||
this.format = format; | ||
}; | ||
NgxTextDiffComponent.prototype.renderDiffs = function () { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var _a, e_1; | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
_b.trys.push([0, 2, , 3]); | ||
this.diffsCount = 0; | ||
_a = this; | ||
return [4 /*yield*/, this.diff.getDiffsByLines(this.left, this.right)]; | ||
case 1: | ||
_a.tableRows = _b.sent(); | ||
this.tableRowsLineByLine = this.tableRows.reduce(function (tableLineByLine, row) { | ||
if (!tableLineByLine) { | ||
tableLineByLine = []; | ||
} | ||
if (row.hasDiffs) { | ||
if (row.leftContent) { | ||
tableLineByLine.push({ | ||
leftContent: row.leftContent, | ||
rightContent: null, | ||
belongTo: row.belongTo, | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
} | ||
if (row.hasDiffs) { | ||
if (row.leftContent) { | ||
tableLineByLine.push({ | ||
leftContent: row.leftContent, | ||
rightContent: null, | ||
belongTo: row.belongTo, | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
} | ||
if (row.rightContent) { | ||
tableLineByLine.push({ | ||
leftContent: null, | ||
rightContent: row.rightContent, | ||
belongTo: row.belongTo, | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
} | ||
if (row.rightContent) { | ||
tableLineByLine.push({ | ||
leftContent: null, | ||
rightContent: row.rightContent, | ||
belongTo: row.belongTo, | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
} | ||
else { | ||
tableLineByLine.push(row); | ||
} | ||
return tableLineByLine; | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(function (row) { return row.hasDiffs; }).length; | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
this.emitCompareResultsEvent(); | ||
return [3 /*break*/, 3]; | ||
case 2: | ||
e_1 = _b.sent(); | ||
throw e_1; | ||
case 3: return [2 /*return*/]; | ||
} | ||
}); | ||
} | ||
else { | ||
tableLineByLine.push(row); | ||
} | ||
return tableLineByLine; | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(function (row) { return row.hasDiffs; }).length; | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
this.emitCompareResultsEvent(); | ||
return [3 /*break*/, 3]; | ||
case 2: | ||
e_1 = _b.sent(); | ||
throw e_1; | ||
case 3: return [2 /*return*/]; | ||
} | ||
}); | ||
}); | ||
}; | ||
NgxTextDiffComponent.prototype.emitCompareResultsEvent = function () { | ||
var diffResults = { | ||
hasDiff: this.diffsCount > 0, | ||
diffsCount: this.diffsCount, | ||
rowsWithDiff: this.tableRows | ||
.filter(function (row) { return row.hasDiffs; }) | ||
.map(function (row) { return ({ | ||
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null, | ||
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null, | ||
numDiffs: row.numDiffs, | ||
}); }), | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.emitCompareResultsEvent = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
/** @type {?} */ | ||
var diffResults = { | ||
hasDiff: this.diffsCount > 0, | ||
diffsCount: this.diffsCount, | ||
rowsWithDiff: this.tableRows | ||
.filter(function (row) { return row.hasDiffs; }) | ||
.map(function (row) { | ||
return ({ | ||
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null, | ||
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null, | ||
numDiffs: row.numDiffs, | ||
this.compareResults.next(diffResults); | ||
}; | ||
NgxTextDiffComponent.prototype.trackTableRows = function (index, row) { | ||
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined; | ||
}; | ||
NgxTextDiffComponent.prototype.trackDiffs = function (index, diff) { | ||
return diff && diff.content ? diff.content : undefined; | ||
}; | ||
NgxTextDiffComponent.prototype.initScrollListener = function () { | ||
var _this = this; | ||
this.subscriptions.push(this.scrollService.scrolled().subscribe(function (scrollableEv) { | ||
if (scrollableEv && _this.synchronizeScrolling) { | ||
var scrollableId_1 = scrollableEv.getElementRef().nativeElement.id; | ||
var nonScrolledContainer = _this.containers.find(function (container) { return container.id !== scrollableId_1; }); | ||
if (nonScrolledContainer) { | ||
nonScrolledContainer.element.scrollTo({ | ||
top: scrollableEv.measureScrollOffset('top'), | ||
left: scrollableEv.measureScrollOffset('left'), | ||
}); | ||
}), | ||
}; | ||
this.compareResults.next(diffResults); | ||
}; | ||
/** | ||
* @param {?} index | ||
* @param {?} row | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.trackTableRows = /** | ||
* @param {?} index | ||
* @param {?} row | ||
* @return {?} | ||
*/ | ||
function (index, row) { | ||
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined; | ||
}; | ||
/** | ||
* @param {?} index | ||
* @param {?} diff | ||
* @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.trackDiffs = /** | ||
* @param {?} index | ||
* @param {?} diff | ||
* @return {?} | ||
*/ | ||
function (index, diff) { | ||
return diff && diff.content ? diff.content : undefined; | ||
}; | ||
NgxTextDiffComponent.decorators = [ | ||
{ type: i0.Component, args: [{ | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
styles: [".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"] | ||
}] } | ||
]; | ||
/** @nocollapse */ | ||
NgxTextDiffComponent.ctorParameters = function () { | ||
return [ | ||
{ type: NgxTextDiffService }, | ||
{ type: i0.ChangeDetectorRef } | ||
]; | ||
} | ||
} | ||
})); | ||
}; | ||
NgxTextDiffComponent.propDecorators = { | ||
format: [{ type: i0.Input }], | ||
left: [{ type: i0.Input }], | ||
right: [{ type: i0.Input }], | ||
diffContent: [{ type: i0.Input }], | ||
loading: [{ type: i0.Input }], | ||
showToolbar: [{ type: i0.Input }], | ||
showBtnToolbar: [{ type: i0.Input }], | ||
hideMatchingLines: [{ type: i0.Input }], | ||
outerContainerClass: [{ type: i0.Input }], | ||
outerContainerStyle: [{ type: i0.Input }], | ||
toolbarClass: [{ type: i0.Input }], | ||
toolbarStyle: [{ type: i0.Input }], | ||
compareRowsClass: [{ type: i0.Input }], | ||
compareRowsStyle: [{ type: i0.Input }], | ||
compareResults: [{ type: i0.Output }] | ||
}; | ||
NgxTextDiffComponent.ctorParameters = function () { return [ | ||
{ type: scrolling.ScrollDispatcher }, | ||
{ type: NgxTextDiffService }, | ||
{ type: core.ChangeDetectorRef } | ||
]; }; | ||
__decorate([ | ||
core.ViewChildren(ContainerDirective), | ||
__metadata("design:type", core.QueryList) | ||
], NgxTextDiffComponent.prototype, "containers", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "format", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "left", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "right", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", rxjs.Observable) | ||
], NgxTextDiffComponent.prototype, "diffContent", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "loading", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "showToolbar", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "showBtnToolbar", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Boolean), | ||
__metadata("design:paramtypes", [Boolean]) | ||
], NgxTextDiffComponent.prototype, "hideMatchingLines", null); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "outerContainerClass", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "outerContainerStyle", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "toolbarClass", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "toolbarStyle", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "compareRowsClass", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "compareRowsStyle", void 0); | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "synchronizeScrolling", void 0); | ||
__decorate([ | ||
core.Output(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "compareResults", void 0); | ||
NgxTextDiffComponent = __decorate([ | ||
core.Component({ | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <!-- Right side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-left-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Left side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-right-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Line By Line - combined table -->\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
styles: [".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"] | ||
}), | ||
__metadata("design:paramtypes", [scrolling.ScrollDispatcher, NgxTextDiffService, core.ChangeDetectorRef]) | ||
], NgxTextDiffComponent); | ||
return NgxTextDiffComponent; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
var LoaderSpinnerComponent = /** @class */ (function () { | ||
@@ -669,93 +717,64 @@ function LoaderSpinnerComponent() { | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
LoaderSpinnerComponent.prototype.ngOnInit = /** | ||
* @return {?} | ||
*/ | ||
function () { }; | ||
LoaderSpinnerComponent.decorators = [ | ||
{ type: i0.Component, args: [{ | ||
selector: 'td-loader-spinner', | ||
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n", | ||
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}"] | ||
}] } | ||
]; | ||
/** @nocollapse */ | ||
LoaderSpinnerComponent.ctorParameters = function () { return []; }; | ||
LoaderSpinnerComponent.propDecorators = { | ||
active: [{ type: i0.Input }] | ||
}; | ||
LoaderSpinnerComponent.prototype.ngOnInit = function () { }; | ||
__decorate([ | ||
core.Input(), | ||
__metadata("design:type", Object) | ||
], LoaderSpinnerComponent.prototype, "active", void 0); | ||
LoaderSpinnerComponent = __decorate([ | ||
core.Component({ | ||
selector: 'td-loader-spinner', | ||
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n", | ||
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"] | ||
}), | ||
__metadata("design:paramtypes", []) | ||
], LoaderSpinnerComponent); | ||
return LoaderSpinnerComponent; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
var FormatLinePipe = /** @class */ (function () { | ||
function FormatLinePipe() { | ||
} | ||
/** | ||
* @param {?} line | ||
* @param {?=} diffs | ||
* @return {?} | ||
*/ | ||
FormatLinePipe.prototype.transform = /** | ||
* @param {?} line | ||
* @param {?=} diffs | ||
* @return {?} | ||
*/ | ||
function (line, diffs) { | ||
if (!line) { | ||
return ' '; | ||
} | ||
if (!!diffs && diffs.length > 0) ; | ||
return line | ||
.replace(/&/g, '&') | ||
.replace(/</g, '<') | ||
.replace(/>/g, '>') | ||
.replace(/"/g, '"') | ||
.replace(/ /g, ' '); | ||
}; | ||
FormatLinePipe.decorators = [ | ||
{ type: i0.Pipe, args: [{ | ||
name: 'formatLine' | ||
},] } | ||
]; | ||
FormatLinePipe.prototype.transform = function (line, diffs) { | ||
if (!line) { | ||
return ' '; | ||
} | ||
if (!!diffs && diffs.length > 0) { | ||
/*diffs.forEach(diff => { | ||
line = line.replace(diff, `<span class="highli">${diff}</span>`); | ||
});*/ | ||
} | ||
return line | ||
.replace(/&/g, '&') | ||
.replace(/</g, '<') | ||
.replace(/>/g, '>') | ||
.replace(/"/g, '"') | ||
.replace(/ /g, ' '); | ||
}; | ||
FormatLinePipe = __decorate([ | ||
core.Pipe({ | ||
name: 'formatLine' | ||
}) | ||
], FormatLinePipe); | ||
return FormatLinePipe; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
var NgxTextDiffModule = /** @class */ (function () { | ||
function NgxTextDiffModule() { | ||
} | ||
NgxTextDiffModule.decorators = [ | ||
{ type: i0.NgModule, args: [{ | ||
imports: [common.CommonModule, forms.FormsModule], | ||
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe], | ||
exports: [NgxTextDiffComponent] | ||
},] } | ||
]; | ||
NgxTextDiffModule = __decorate([ | ||
core.NgModule({ | ||
imports: [common.CommonModule, forms.FormsModule, scrolling.ScrollingModule], | ||
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe, ContainerDirective], | ||
exports: [NgxTextDiffComponent], | ||
}) | ||
], NgxTextDiffModule); | ||
return NgxTextDiffModule; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
exports.NgxTextDiffService = NgxTextDiffService; | ||
exports.NgxTextDiffComponent = NgxTextDiffComponent; | ||
exports.NgxTextDiffModule = NgxTextDiffModule; | ||
exports.ɵb = FormatLinePipe; | ||
exports.ɵa = LoaderSpinnerComponent; | ||
exports.NgxTextDiffService = NgxTextDiffService; | ||
exports.ɵa = ContainerDirective; | ||
exports.ɵb = LoaderSpinnerComponent; | ||
exports.ɵc = FormatLinePipe; | ||
@@ -765,3 +784,2 @@ Object.defineProperty(exports, '__esModule', { value: true }); | ||
}))); | ||
//# sourceMappingURL=ngx-text-diff.umd.js.map | ||
//# sourceMappingURL=ngx-text-diff.umd.js.map |
@@ -1,2 +0,16 @@ | ||
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("diff-match-patch"),require("@angular/common"),require("@angular/forms"),require("@angular/core")):"function"==typeof define&&define.amd?define("ngx-text-diff",["exports","diff-match-patch","@angular/common","@angular/forms","@angular/core"],n):n(t["ngx-text-diff"]={},t.diffMatchPatch,t.ng.common,t.ng.forms,t.ng.core)}(this,function(t,p,n,e,r){"use strict";var h=function(t){return null==t||!(Object.keys(t)||t).length||0===(Object.keys(t)||t).length},o=function(){function t(){this.initParser()}return t.prototype.initParser=function(){this.diffParser=new p.diff_match_patch},t.prototype.getDiffsByLines=function(s,f){var d=this;return new Promise(function(t,n){var e=d.diffParser.diff_linesToChars_(s,f),r=e.chars1,o=e.chars2,i=e.lineArray,l=d.diffParser.diff_main(r,o,!0);d.diffParser.diff_charsToLines_(l,i);var a=d.formatOutput(l);a||n("Error"),t(a)})},t.prototype.formatOutput=function(t){var f=this,d=1,c=1;return t.reduce(function(n,t){n||(n=[]);var e=t[0],r=t[1],o=null,i=null,l=null,a=null,s=null;switch(e){case p.DIFF_EQUAL:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){s={leftContent:l={lineNumber:d,lineContent:t,lineDiffs:[],prefix:""},rightContent:a={lineNumber:c,lineContent:t,lineDiffs:[],prefix:""},belongTo:"both",hasDiffs:!1,numDiffs:0},n.push(s),c+=1,d+=1});break;case p.DIFF_DELETE:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){i=n.find(function(t){return!t.leftContent&&t.rightContent&&t.rightContent.lineNumber===d&&""!==t.rightContent.prefix}),l={lineNumber:d,lineContent:t,lineDiffs:[{content:t,isDiff:!0}],prefix:"-"},i?(i.leftContent=l,i.leftContent.lineDiffs=f.getDiffParts(i.leftContent.lineContent,i.rightContent.lineContent),i.rightContent.lineDiffs=f.getDiffParts(i.rightContent.lineContent,i.leftContent.lineContent),i.belongTo="both",i.numDiffs=f.countDiffs(i)):n.push({leftContent:l,rightContent:null,hasDiffs:!0,belongTo:"left",numDiffs:1}),d+=1});break;case p.DIFF_INSERT:r.split("\n").filter(function(t,n,e){return n!==e.length-1||!h(t)}).forEach(function(t){o=n.find(function(t){return t.leftContent&&!t.rightContent&&t.leftContent.lineNumber===c&&""!==t.leftContent.prefix}),a={lineNumber:c,lineContent:t,lineDiffs:[{content:t,isDiff:!0}],prefix:"+"},o?(o.rightContent=a,o.leftContent.lineDiffs=f.getDiffParts(o.leftContent.lineContent,o.rightContent.lineContent),o.rightContent.lineDiffs=f.getDiffParts(o.rightContent.lineContent,o.leftContent.lineContent),o.belongTo="both",o.numDiffs=f.countDiffs(o)):n.push({leftContent:null,rightContent:a,hasDiffs:!0,belongTo:"right",numDiffs:1}),c+=1})}return n},[])},t.prototype.countDiffs=function(t){var n=0;return t.leftContent&&(n+=t.leftContent.lineDiffs.filter(function(t){return t.isDiff}).length),t.leftContent&&(n+=t.rightContent.lineDiffs.filter(function(t){return t.isDiff}).length),n},t.prototype.getDiffParts=function(t,n){for(var e=[],r=0,o=0,i="",l="";r<t.length;)t[r]===n[o]&&o<n.length?(""!==l&&(e.push({content:l,isDiff:!0}),l=""),i+=t[r]):(""!==i&&(e.push({content:i,isDiff:!1}),i=""),l+=t[r]),r++,o++;return""!==l?e.push({content:l,isDiff:!0}):""!==i&&e.push({content:i,isDiff:!1}),e},t.decorators=[{type:r.Injectable,args:[{providedIn:"root"}]}],t.ctorParameters=function(){return[]},t.ngInjectableDef=r.defineInjectable({factory:function(){return new t},token:t,providedIn:"root"}),t}();function i(r,o){var i,l,a,t,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return t={next:n(0),"throw":n(1),"return":n(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function n(n){return function(t){return function e(t){if(i)throw new TypeError("Generator is already executing.");for(;s;)try{if(i=1,l&&(a=2&t[0]?l["return"]:t[0]?l["throw"]||((a=l["return"])&&a.call(l),0):l.next)&&!(a=a.call(l,t[1])).done)return a;switch(l=0,a&&(t=[2&t[0],a.value]),t[0]){case 0:case 1:a=t;break;case 4:return s.label++,{value:t[1],done:!1};case 5:s.label++,l=t[1],t=[0];continue;case 7:t=s.ops.pop(),s.trys.pop();continue;default:if(!(a=0<(a=s.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){s=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3])){s.label=t[1];break}if(6===t[0]&&s.label<a[1]){s.label=a[1],a=t;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(t);break}a[2]&&s.ops.pop(),s.trys.pop();continue}t=o.call(r,s)}catch(n){t=[6,n],l=0}finally{i=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}([n,t])}}}var l=function(){function t(t,n){this.diff=t,this.cd=n,this._hideMatchingLines=!1,this.format="SideBySide",this.left="",this.right="",this.loading=!1,this.showToolbar=!0,this.showBtnToolbar=!0,this.compareResults=new r.EventEmitter,this.subscriptions=[],this.tableRows=[],this.filteredTableRows=[],this.tableRowsLineByLine=[],this.filteredTableRowsLineByLine=[],this.diffsCount=0,this.formatOptions=[{id:"side-by-side",name:"side-by-side",label:"Side by Side",value:"SideBySide",icon:"la-code"},{id:"line-by-line",name:"line-by-line",label:"Line by Line",value:"LineByLine",icon:"la-file-text"}]}return Object.defineProperty(t.prototype,"hideMatchingLines",{get:function(){return this._hideMatchingLines},set:function(t){this.hideMatchingLinesChanged(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var n=this;this.loading=!0,this.diffContent&&this.subscriptions.push(this.diffContent.subscribe(function(t){n.loading=!0,n.left=t.leftContent,n.right=t.rightContent,n.renderDiffs().then(function(){n.cd.detectChanges(),n.loading=!1})["catch"](function(){return n.loading=!1})})),this.renderDiffs().then(function(){return n.loading=!1})["catch"](function(t){return n.loading=!1})},t.prototype.ngOnDestroy=function(){this.subscriptions&&this.subscriptions.forEach(function(t){return t.unsubscribe()})},t.prototype.hideMatchingLinesChanged=function(t){this._hideMatchingLines=t,this.hideMatchingLines?(this.filteredTableRows=this.tableRows.filter(function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix}),this.filteredTableRowsLineByLine=this.tableRowsLineByLine.filter(function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix})):(this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine)},t.prototype.setDiffTableFormat=function(t){this.format=t},t.prototype.renderDiffs=function(){return function t(n,l,a,s){return new(a||(a=Promise))(function(t,e){function r(t){try{i(s.next(t))}catch(n){e(n)}}function o(t){try{i(s["throw"](t))}catch(n){e(n)}}function i(n){n.done?t(n.value):new a(function(t){t(n.value)}).then(r,o)}i((s=s.apply(n,l||[])).next())})}(this,void 0,void 0,function(){var n;return i(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),this.diffsCount=0,[4,(n=this).diff.getDiffsByLines(this.left,this.right)];case 1:return n.tableRows=t.sent(),this.tableRowsLineByLine=this.tableRows.reduce(function(t,n){return t||(t=[]),n.hasDiffs?(n.leftContent&&t.push({leftContent:n.leftContent,rightContent:null,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs}),n.rightContent&&t.push({leftContent:null,rightContent:n.rightContent,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs})):t.push(n),t},[]),this.diffsCount=this.tableRows.filter(function(t){return t.hasDiffs}).length,this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine,this.emitCompareResultsEvent(),[3,3];case 2:throw t.sent();case 3:return[2]}})})},t.prototype.emitCompareResultsEvent=function(){var t={hasDiff:0<this.diffsCount,diffsCount:this.diffsCount,rowsWithDiff:this.tableRows.filter(function(t){return t.hasDiffs}).map(function(t){return{leftLineNumber:t.leftContent?t.leftContent.lineNumber:null,rightLineNumber:t.rightContent?t.rightContent.lineNumber:null,numDiffs:t.numDiffs}})};this.compareResults.next(t)},t.prototype.trackTableRows=function(t,n){return n&&n.leftContent?n.leftContent.lineContent:n&&n.rightContent?n.rightContent.lineContent:undefined},t.prototype.trackDiffs=function(t,n){return n&&n.content?n.content:undefined},t.decorators=[{type:r.Component,args:[{selector:"td-ngx-text-diff",template:'<td-loader-spinner [active]="loading"></td-loader-spinner>\r\n<div class="td-wrapper" [ngClass]="outerContainerClass" [ngStyle]="outerContainerStyle" *ngIf="!loading">\r\n\r\n <div [ngClass]="toolbarClass" [ngStyle]="toolbarStyle" *ngIf="showToolbar">\r\n <div class="td-toolbar-show-diff">\r\n <label class="td-checkbox-container"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type="checkbox" id="showDiffs" [ngModel]="hideMatchingLines" (ngModelChange)="hideMatchingLinesChanged($event)" />\r\n <span class="checkmark"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class="td-toolbar-select-format" *ngIf="showToolbar && showBtnToolbar">\r\n <div class="td-btn-group td-btn-group-toggle" data-toggle="buttons">\r\n <button\r\n *ngFor="let option of formatOptions"\r\n [ngClass]="{ active: format === option.value, disabled: !!option.disabled }"\r\n [name]="option.name"\r\n [id]="option.id"\r\n [disabled]="!!option.disabled"\r\n (click)="setDiffTableFormat(option.value)"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class="td-table-wrapper" [ngClass]="compareRowsClass" [ngStyle]="compareRowsStyle">\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n <span>{{ row.leftContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n <span>{{ row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.rightContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class="td-table-container line-by-line" *ngIf="format === \'LineByLine\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRowsLineByLine; trackBy: trackTableRows">\r\n <td scope="row" class="fit-column line-number-col-left">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope="row" class="fit-column line-number-col">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n',styles:[".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]}]}],t.ctorParameters=function(){return[{type:o},{type:r.ChangeDetectorRef}]},t.propDecorators={format:[{type:r.Input}],left:[{type:r.Input}],right:[{type:r.Input}],diffContent:[{type:r.Input}],loading:[{type:r.Input}],showToolbar:[{type:r.Input}],showBtnToolbar:[{type:r.Input}],hideMatchingLines:[{type:r.Input}],outerContainerClass:[{type:r.Input}],outerContainerStyle:[{type:r.Input}],toolbarClass:[{type:r.Input}],toolbarStyle:[{type:r.Input}],compareRowsClass:[{type:r.Input}],compareRowsStyle:[{type:r.Input}],compareResults:[{type:r.Output}]},t}(),a=function(){function t(){this.active=!1}return t.prototype.ngOnInit=function(){},t.decorators=[{type:r.Component,args:[{selector:"td-loader-spinner",template:'<div class="td-loading-roller" *ngIf="active">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n',styles:['.td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}']}]}],t.ctorParameters=function(){return[]},t.propDecorators={active:[{type:r.Input}]},t}(),s=function(){function t(){}return t.prototype.transform=function(t,n){return t?(n&&n.length,t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/ /g," ")):" "},t.decorators=[{type:r.Pipe,args:[{name:"formatLine"}]}],t}(),f=function(){function t(){}return t.decorators=[{type:r.NgModule,args:[{imports:[n.CommonModule,e.FormsModule],declarations:[l,a,s],exports:[l]}]}],t}();t.NgxTextDiffService=o,t.NgxTextDiffComponent=l,t.NgxTextDiffModule=f,t.ɵb=s,t.ɵa=a,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("diff-match-patch"),require("rxjs"),require("@angular/cdk/scrolling"),require("@angular/common"),require("@angular/forms")):"function"==typeof define&&define.amd?define("ngx-text-diff",["exports","@angular/core","diff-match-patch","rxjs","@angular/cdk/scrolling","@angular/common","@angular/forms"],n):n((t=t||self)["ngx-text-diff"]={},t.ng.core,t.diffMatchPatch,t.rxjs,t.ng.cdk.scrolling,t.ng.common,t.ng.forms)}(this,(function(t,n,e,r,i,o,l){"use strict"; | ||
/*! ***************************************************************************** | ||
Copyright (c) Microsoft Corporation. All rights reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
this file except in compliance with the License. You may obtain a copy of the | ||
License at http://www.apache.org/licenses/LICENSE-2.0 | ||
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
MERCHANTABLITY OR NON-INFRINGEMENT. | ||
See the Apache Version 2.0 License for specific language governing permissions | ||
and limitations under the License. | ||
***************************************************************************** */function s(t,n,e,r){var i,o=arguments.length,l=o<3?n:null===r?r=Object.getOwnPropertyDescriptor(n,e):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(t,n,e,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(l=(o<3?i(l):o>3?i(n,e,l):i(n,e))||l);return o>3&&l&&Object.defineProperty(n,e,l),l}function a(t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,n)}function f(t,n,e,r){return new(e||(e=Promise))((function(i,o){function l(t){try{a(r.next(t))}catch(t){o(t)}}function s(t){try{a(r.throw(t))}catch(t){o(t)}}function a(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(l,s)}a((r=r.apply(t,n||[])).next())}))}function d(t,n){var e,r,i,o,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(e)throw new TypeError("Generator is already executing.");for(;l;)try{if(e=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return l.label++,{value:o[1],done:!1};case 5:l.label++,r=o[1],o=[0];continue;case 7:o=l.ops.pop(),l.trys.pop();continue;default:if(!(i=l.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){l=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){l.label=o[1];break}if(6===o[0]&&l.label<i[1]){l.label=i[1],i=o;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(o);break}i[2]&&l.ops.pop(),l.trys.pop();continue}o=n.call(t,l)}catch(t){o=[6,t],r=0}finally{e=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}var c=function(t){return null==t||!(Object.keys(t)||t).length||0===(Object.keys(t)||t).length},p=function(){function t(){this.initParser()}return t.prototype.initParser=function(){this.diffParser=new e.diff_match_patch},t.prototype.getDiffsByLines=function(t,n){var e=this;return new Promise((function(r,i){var o=e.diffParser.diff_linesToChars_(t,n),l=o.chars1,s=o.chars2,a=o.lineArray,f=e.diffParser.diff_main(l,s,!0);e.diffParser.diff_charsToLines_(f,a);var d=e.formatOutput(f);d||i("Error"),r(d)}))},t.prototype.formatOutput=function(t){var n=this,r=1,i=1;return t.reduce((function(t,o){t||(t=[]);var l=o[0],s=o[1],a=null,f=null,d=null,p=null,h=null;switch(l){case e.DIFF_EQUAL:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(n){h={leftContent:d={lineNumber:r,lineContent:n,lineDiffs:[],prefix:""},rightContent:p={lineNumber:i,lineContent:n,lineDiffs:[],prefix:""},belongTo:"both",hasDiffs:!1,numDiffs:0},t.push(h),i+=1,r+=1}));break;case e.DIFF_DELETE:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(e){f=t.find((function(t){return!t.leftContent&&t.rightContent&&t.rightContent.lineNumber===r&&""!==t.rightContent.prefix})),d={lineNumber:r,lineContent:e,lineDiffs:[{content:e,isDiff:!0}],prefix:"-"},f?(f.leftContent=d,f.leftContent.lineDiffs=n.getDiffParts(f.leftContent.lineContent,f.rightContent.lineContent),f.rightContent.lineDiffs=n.getDiffParts(f.rightContent.lineContent,f.leftContent.lineContent),f.belongTo="both",f.numDiffs=n.countDiffs(f)):t.push({leftContent:d,rightContent:null,hasDiffs:!0,belongTo:"left",numDiffs:1}),r+=1}));break;case e.DIFF_INSERT:s.split("\n").filter((function(t,n,e){return n!==e.length-1||!c(t)})).forEach((function(e){a=t.find((function(t){return t.leftContent&&!t.rightContent&&t.leftContent.lineNumber===i&&""!==t.leftContent.prefix})),p={lineNumber:i,lineContent:e,lineDiffs:[{content:e,isDiff:!0}],prefix:"+"},a?(a.rightContent=p,a.leftContent.lineDiffs=n.getDiffParts(a.leftContent.lineContent,a.rightContent.lineContent),a.rightContent.lineDiffs=n.getDiffParts(a.rightContent.lineContent,a.leftContent.lineContent),a.belongTo="both",a.numDiffs=n.countDiffs(a)):t.push({leftContent:null,rightContent:p,hasDiffs:!0,belongTo:"right",numDiffs:1}),i+=1}))}return t}),[])},t.prototype.countDiffs=function(t){var n=0;return t.leftContent&&(n+=t.leftContent.lineDiffs.filter((function(t){return t.isDiff})).length),t.leftContent&&(n+=t.rightContent.lineDiffs.filter((function(t){return t.isDiff})).length),n},t.prototype.getDiffParts=function(t,n){for(var e=[],r=0,i=0,o="",l="";r<t.length;)t[r]===n[i]&&i<n.length?(""!==l&&(e.push({content:l,isDiff:!0}),l=""),o+=t[r]):(""!==o&&(e.push({content:o,isDiff:!1}),o=""),l+=t[r]),r++,i++;return""!==l?e.push({content:l,isDiff:!0}):""!==o&&e.push({content:o,isDiff:!1}),e},t.ɵprov=n["ɵɵdefineInjectable"]({factory:function(){return new t},token:t,providedIn:"root"}),t=s([n.Injectable({providedIn:"root"}),a("design:paramtypes",[])],t)}(),h=function(){function t(t){this._el=t,this.element=t.nativeElement}return t.ctorParameters=function(){return[{type:n.ElementRef}]},s([n.Input(),a("design:type",String)],t.prototype,"id",void 0),t=s([n.Directive({selector:"[tdContainer]"}),a("design:paramtypes",[n.ElementRef])],t)}(),u=function(){function t(t,e,r){this.scrollService=t,this.diff=e,this.cd=r,this._hideMatchingLines=!1,this.format="SideBySide",this.left="",this.right="",this.loading=!1,this.showToolbar=!0,this.showBtnToolbar=!0,this.synchronizeScrolling=!0,this.compareResults=new n.EventEmitter,this.subscriptions=[],this.tableRows=[],this.filteredTableRows=[],this.tableRowsLineByLine=[],this.filteredTableRowsLineByLine=[],this.diffsCount=0,this.formatOptions=[{id:"side-by-side",name:"side-by-side",label:"Side by Side",value:"SideBySide",icon:"la-code"},{id:"line-by-line",name:"line-by-line",label:"Line by Line",value:"LineByLine",icon:"la-file-text"}]}return Object.defineProperty(t.prototype,"hideMatchingLines",{get:function(){return this._hideMatchingLines},set:function(t){this.hideMatchingLinesChanged(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this.loading=!0,this.diffContent&&this.subscriptions.push(this.diffContent.subscribe((function(n){t.loading=!0,t.left=n.leftContent,t.right=n.rightContent,t.renderDiffs().then((function(){t.cd.detectChanges(),t.loading=!1})).catch((function(){return t.loading=!1}))}))),this.renderDiffs().then((function(){return t.loading=!1})).catch((function(n){return t.loading=!1}))},t.prototype.ngAfterViewInit=function(){this.initScrollListener()},t.prototype.ngOnDestroy=function(){this.subscriptions&&this.subscriptions.forEach((function(t){return t.unsubscribe()}))},t.prototype.hideMatchingLinesChanged=function(t){this._hideMatchingLines=t,this.hideMatchingLines?(this.filteredTableRows=this.tableRows.filter((function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix})),this.filteredTableRowsLineByLine=this.tableRowsLineByLine.filter((function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix}))):(this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine)},t.prototype.setDiffTableFormat=function(t){this.format=t},t.prototype.renderDiffs=function(){return f(this,void 0,void 0,(function(){var t;return d(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),this.diffsCount=0,t=this,[4,this.diff.getDiffsByLines(this.left,this.right)];case 1:return t.tableRows=n.sent(),this.tableRowsLineByLine=this.tableRows.reduce((function(t,n){return t||(t=[]),n.hasDiffs?(n.leftContent&&t.push({leftContent:n.leftContent,rightContent:null,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs}),n.rightContent&&t.push({leftContent:null,rightContent:n.rightContent,belongTo:n.belongTo,hasDiffs:!0,numDiffs:n.numDiffs})):t.push(n),t}),[]),this.diffsCount=this.tableRows.filter((function(t){return t.hasDiffs})).length,this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine,this.emitCompareResultsEvent(),[3,3];case 2:throw n.sent();case 3:return[2]}}))}))},t.prototype.emitCompareResultsEvent=function(){var t={hasDiff:this.diffsCount>0,diffsCount:this.diffsCount,rowsWithDiff:this.tableRows.filter((function(t){return t.hasDiffs})).map((function(t){return{leftLineNumber:t.leftContent?t.leftContent.lineNumber:null,rightLineNumber:t.rightContent?t.rightContent.lineNumber:null,numDiffs:t.numDiffs}}))};this.compareResults.next(t)},t.prototype.trackTableRows=function(t,n){return n&&n.leftContent?n.leftContent.lineContent:n&&n.rightContent?n.rightContent.lineContent:void 0},t.prototype.trackDiffs=function(t,n){return n&&n.content?n.content:void 0},t.prototype.initScrollListener=function(){var t=this;this.subscriptions.push(this.scrollService.scrolled().subscribe((function(n){if(n&&t.synchronizeScrolling){var e=n.getElementRef().nativeElement.id,r=t.containers.find((function(t){return t.id!==e}));r&&r.element.scrollTo({top:n.measureScrollOffset("top"),left:n.measureScrollOffset("left")})}})))},t.ctorParameters=function(){return[{type:i.ScrollDispatcher},{type:p},{type:n.ChangeDetectorRef}]},s([n.ViewChildren(h),a("design:type",n.QueryList)],t.prototype,"containers",void 0),s([n.Input(),a("design:type",String)],t.prototype,"format",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"left",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"right",void 0),s([n.Input(),a("design:type",r.Observable)],t.prototype,"diffContent",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"loading",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"showToolbar",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"showBtnToolbar",void 0),s([n.Input(),a("design:type",Boolean),a("design:paramtypes",[Boolean])],t.prototype,"hideMatchingLines",null),s([n.Input(),a("design:type",String)],t.prototype,"outerContainerClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"outerContainerStyle",void 0),s([n.Input(),a("design:type",String)],t.prototype,"toolbarClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"toolbarStyle",void 0),s([n.Input(),a("design:type",String)],t.prototype,"compareRowsClass",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"compareRowsStyle",void 0),s([n.Input(),a("design:type",Object)],t.prototype,"synchronizeScrolling",void 0),s([n.Output(),a("design:type",Object)],t.prototype,"compareResults",void 0),t=s([n.Component({selector:"td-ngx-text-diff",template:'<td-loader-spinner [active]="loading"></td-loader-spinner>\r\n<div class="td-wrapper" [ngClass]="outerContainerClass" [ngStyle]="outerContainerStyle" *ngIf="!loading">\r\n\r\n <div [ngClass]="toolbarClass" [ngStyle]="toolbarStyle" *ngIf="showToolbar">\r\n <div class="td-toolbar-show-diff">\r\n <label class="td-checkbox-container">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type="checkbox" id="showDiffs" [ngModel]="hideMatchingLines" (ngModelChange)="hideMatchingLinesChanged($event)" />\r\n <span class="checkmark"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class="td-toolbar-select-format" *ngIf="showToolbar && showBtnToolbar">\r\n <div class="td-btn-group td-btn-group-toggle" data-toggle="buttons">\r\n <button\r\n *ngFor="let option of formatOptions"\r\n [ngClass]="{ active: format === option.value, disabled: !!option.disabled }"\r\n [name]="option.name"\r\n [id]="option.id"\r\n [disabled]="!!option.disabled"\r\n (click)="setDiffTableFormat(option.value)"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class="td-table-wrapper" [ngClass]="compareRowsClass" [ngStyle]="compareRowsStyle">\r\n \x3c!-- Right side-by-side --\x3e\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'" id="td-left-compare-container" tdContainer cdkScrollable>\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n >\r\n <span>{{ row.leftContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \x3c!-- Left side-by-side --\x3e\r\n <div class="td-table-container side-by-side" *ngIf="format === \'SideBySide\'" id="td-right-compare-container" tdContainer cdkScrollable>\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRows; trackBy: trackTableRows">\r\n <td\r\n scope="row"\r\n class="fit-column line-number-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : \' \' }}\r\n </td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n >\r\n <span>{{ row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.rightContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'insert-row\': row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent }"\r\n *ngIf="row.hasDiffs"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n \x3c!-- Line By Line - combined table --\x3e\r\n <div class="td-table-container line-by-line" *ngIf="format === \'LineByLine\'">\r\n <table class="td-table">\r\n <tbody>\r\n <tr *ngFor="let row of filteredTableRowsLineByLine; trackBy: trackTableRows">\r\n <td scope="row" class="fit-column line-number-col-left">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope="row" class="fit-column line-number-col">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class="fit-column prefix-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || \' \' }}</span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="!row.hasDiffs"\r\n >\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n <td\r\n class="content-col"\r\n [ngClass]="{ \'delete-row\': row.leftContent?.prefix === \'-\', \'insert-row\': row.rightContent?.prefix === \'+\' }"\r\n *ngIf="row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0"\r\n >\r\n <span\r\n [innerHTML]="diff.content | formatLine"\r\n [ngClass]="{ highlight: diff.isDiff }"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n',styles:[".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"]}),a("design:paramtypes",[i.ScrollDispatcher,p,n.ChangeDetectorRef])],t)}(),g=function(){function t(){this.active=!1}return t.prototype.ngOnInit=function(){},s([n.Input(),a("design:type",Object)],t.prototype,"active",void 0),t=s([n.Component({selector:"td-loader-spinner",template:'<div class="td-loading-roller" *ngIf="active">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n',styles:['.td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}']}),a("design:paramtypes",[])],t)}(),b=function(){function t(){}return t.prototype.transform=function(t,n){return t?(n&&n.length,t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/ /g," ")):" "},t=s([n.Pipe({name:"formatLine"})],t)}(),m=function(){function t(){}return t=s([n.NgModule({imports:[o.CommonModule,l.FormsModule,i.ScrollingModule],declarations:[u,g,b,h],exports:[u]})],t)}();t.NgxTextDiffComponent=u,t.NgxTextDiffModule=m,t.NgxTextDiffService=p,t.ɵa=h,t.ɵb=g,t.ɵc=b,Object.defineProperty(t,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=ngx-text-diff.umd.min.js.map |
@@ -1,12 +0,4 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
import { __decorate } from "tslib"; | ||
import { Pipe } from '@angular/core'; | ||
export class FormatLinePipe { | ||
/** | ||
* @param {?} line | ||
* @param {?=} diffs | ||
* @return {?} | ||
*/ | ||
let FormatLinePipe = class FormatLinePipe { | ||
transform(line, diffs) { | ||
@@ -28,8 +20,9 @@ if (!line) { | ||
} | ||
} | ||
FormatLinePipe.decorators = [ | ||
{ type: Pipe, args: [{ | ||
name: 'formatLine' | ||
},] } | ||
]; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWxpbmUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0LWxpbmUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFLcEQsTUFBTSxPQUFPLGNBQWM7Ozs7OztJQUN6QixTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9COztpQkFFSztTQUNOO1FBQ0QsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7WUFuQkYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxZQUFZO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmb3JtYXRMaW5lJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0TGluZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICB0cmFuc2Zvcm0obGluZTogc3RyaW5nLCBkaWZmcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICByZXR1cm4gJyAnO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZGlmZnMgJiYgZGlmZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKmRpZmZzLmZvckVhY2goZGlmZiA9PiB7XHJcbiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShkaWZmLCBgPHNwYW4gY2xhc3M9XCJoaWdobGlcIj4ke2RpZmZ9PC9zcGFuPmApO1xyXG4gICAgICB9KTsqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmVcclxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcclxuICAgICAgLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpO1xyXG4gIH1cclxufVxyXG4iXX0= | ||
}; | ||
FormatLinePipe = __decorate([ | ||
Pipe({ | ||
name: 'formatLine' | ||
}) | ||
], FormatLinePipe); | ||
export { FormatLinePipe }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWxpbmUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvZm9ybWF0LWxpbmUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFLcEQsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQUN6QixTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWdCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9COztpQkFFSztTQUNOO1FBQ0QsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0YsQ0FBQTtBQWpCWSxjQUFjO0lBSDFCLElBQUksQ0FBQztRQUNKLElBQUksRUFBRSxZQUFZO0tBQ25CLENBQUM7R0FDVyxjQUFjLENBaUIxQjtTQWpCWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmb3JtYXRMaW5lJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0TGluZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICB0cmFuc2Zvcm0obGluZTogc3RyaW5nLCBkaWZmcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICByZXR1cm4gJyAnO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZGlmZnMgJiYgZGlmZnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKmRpZmZzLmZvckVhY2goZGlmZiA9PiB7XHJcbiAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShkaWZmLCBgPHNwYW4gY2xhc3M9XCJoaWdobGlcIj4ke2RpZmZ9PC9zcGFuPmApO1xyXG4gICAgICB9KTsqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbmVcclxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcclxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxyXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXHJcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcclxuICAgICAgLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpO1xyXG4gIH1cclxufVxyXG4iXX0= |
@@ -1,31 +0,22 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
import { __decorate, __metadata } from "tslib"; | ||
import { Component, Input } from '@angular/core'; | ||
export class LoaderSpinnerComponent { | ||
let LoaderSpinnerComponent = class LoaderSpinnerComponent { | ||
constructor() { | ||
this.active = false; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnInit() { } | ||
} | ||
LoaderSpinnerComponent.decorators = [ | ||
{ type: Component, args: [{ | ||
selector: 'td-loader-spinner', | ||
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n", | ||
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;-webkit-transform-origin:32px 32px;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lds-roller{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}"] | ||
}] } | ||
]; | ||
/** @nocollapse */ | ||
LoaderSpinnerComponent.ctorParameters = () => []; | ||
LoaderSpinnerComponent.propDecorators = { | ||
active: [{ type: Input }] | ||
}; | ||
if (false) { | ||
/** @type {?} */ | ||
LoaderSpinnerComponent.prototype.active; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT3pELE1BQU0sT0FBTyxzQkFBc0I7SUFHakM7UUFGUyxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBRVQsQ0FBQzs7OztJQUVoQixRQUFRLEtBQUksQ0FBQzs7O1lBVmQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLG9OQUE4Qzs7YUFFL0M7Ozs7O3FCQUVFLEtBQUs7Ozs7SUFBTix3Q0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbG9hZGVyLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcbn1cclxuIl19 | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], LoaderSpinnerComponent.prototype, "active", void 0); | ||
LoaderSpinnerComponent = __decorate([ | ||
Component({ | ||
selector: 'td-loader-spinner', | ||
template: "<div class=\"td-loading-roller\" *ngIf=\"active\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n</div>\r\n", | ||
styles: [".td-loading-roller{display:inline-block;position:relative;width:64px;height:64px}.td-loading-roller div{-webkit-animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;animation:1.2s cubic-bezier(.5,0,.5,1) infinite lds-roller;transform-origin:32px 32px}.td-loading-roller div:after{content:\" \";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#000;margin:-3px 0 0 -3px}.td-loading-roller div:nth-child(1){-webkit-animation-delay:-36ms;animation-delay:-36ms}.td-loading-roller div:nth-child(1):after{top:50px;left:50px}.td-loading-roller div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.td-loading-roller div:nth-child(2):after{top:54px;left:45px}.td-loading-roller div:nth-child(3){-webkit-animation-delay:-108ms;animation-delay:-108ms}.td-loading-roller div:nth-child(3):after{top:57px;left:39px}.td-loading-roller div:nth-child(4){-webkit-animation-delay:-144ms;animation-delay:-144ms}.td-loading-roller div:nth-child(4):after{top:58px;left:32px}.td-loading-roller div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.td-loading-roller div:nth-child(5):after{top:57px;left:25px}.td-loading-roller div:nth-child(6){-webkit-animation-delay:-216ms;animation-delay:-216ms}.td-loading-roller div:nth-child(6):after{top:54px;left:19px}.td-loading-roller div:nth-child(7){-webkit-animation-delay:-252ms;animation-delay:-252ms}.td-loading-roller div:nth-child(7):after{top:50px;left:14px}.td-loading-roller div:nth-child(8){-webkit-animation-delay:-288ms;animation-delay:-288ms}.td-loading-roller div:nth-child(8):after{top:45px;left:10px}@-webkit-keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes lds-roller{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"] | ||
}), | ||
__metadata("design:paramtypes", []) | ||
], LoaderSpinnerComponent); | ||
export { LoaderSpinnerComponent }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBT3pELElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXNCO0lBR2pDO1FBRlMsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUVULENBQUM7SUFFaEIsUUFBUSxLQUFJLENBQUM7Q0FDZCxDQUFBO0FBTFU7SUFBUixLQUFLLEVBQUU7O3NEQUFnQjtBQURiLHNCQUFzQjtJQUxsQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLG9OQUE4Qzs7S0FFL0MsQ0FBQzs7R0FDVyxzQkFBc0IsQ0FNbEM7U0FOWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbG9hZGVyLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9hZGVyLXNwaW5uZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcbn1cclxuIl19 |
@@ -1,15 +0,10 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
import * as tslib_1 from "tslib"; | ||
import { ChangeDetectorRef, Component, Input, Output, EventEmitter } from '@angular/core'; | ||
import { __awaiter, __decorate, __metadata } from "tslib"; | ||
import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Output, EventEmitter, ViewChildren, QueryList, AfterViewInit } from '@angular/core'; | ||
import { NgxTextDiffService } from './ngx-text-diff.service'; | ||
import { Observable } from 'rxjs'; | ||
export class NgxTextDiffComponent { | ||
/** | ||
* @param {?} diff | ||
* @param {?} cd | ||
*/ | ||
constructor(diff, cd) { | ||
import { ContainerDirective } from './ngx-text-diff-container.directive'; | ||
import { ScrollDispatcher, CdkScrollable } from '@angular/cdk/scrolling'; | ||
let NgxTextDiffComponent = class NgxTextDiffComponent { | ||
constructor(scrollService, diff, cd) { | ||
this.scrollService = scrollService; | ||
this.diff = diff; | ||
@@ -24,2 +19,3 @@ this.cd = cd; | ||
this.showBtnToolbar = true; | ||
this.synchronizeScrolling = true; | ||
this.compareResults = new EventEmitter(); | ||
@@ -49,18 +45,8 @@ this.subscriptions = []; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
get hideMatchingLines() { | ||
return this._hideMatchingLines; | ||
} | ||
/** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ | ||
set hideMatchingLines(hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnInit() { | ||
@@ -85,5 +71,5 @@ this.loading = true; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngAfterViewInit() { | ||
this.initScrollListener(); | ||
} | ||
ngOnDestroy() { | ||
@@ -94,6 +80,2 @@ if (this.subscriptions) { | ||
} | ||
/** | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
hideMatchingLinesChanged(value) { | ||
@@ -110,14 +92,7 @@ this._hideMatchingLines = value; | ||
} | ||
/** | ||
* @param {?} format | ||
* @return {?} | ||
*/ | ||
setDiffTableFormat(format) { | ||
this.format = format; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
renderDiffs() { | ||
return tslib_1.__awaiter(this, void 0, void 0, function* () { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
@@ -165,7 +140,3 @@ this.diffsCount = 0; | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
emitCompareResultsEvent() { | ||
/** @type {?} */ | ||
const diffResults = { | ||
@@ -184,107 +155,106 @@ hasDiff: this.diffsCount > 0, | ||
} | ||
/** | ||
* @param {?} index | ||
* @param {?} row | ||
* @return {?} | ||
*/ | ||
trackTableRows(index, row) { | ||
return row && row.leftContent ? row.leftContent.lineContent : row && row.rightContent ? row.rightContent.lineContent : undefined; | ||
} | ||
/** | ||
* @param {?} index | ||
* @param {?} diff | ||
* @return {?} | ||
*/ | ||
trackDiffs(index, diff) { | ||
return diff && diff.content ? diff.content : undefined; | ||
} | ||
} | ||
NgxTextDiffComponent.decorators = [ | ||
{ type: Component, args: [{ | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\"\r\n >Show Lines with Diffs ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
styles: [".td-wrapper{display:-ms-grid;display:grid;width:100%;grid-row-gap:10px;-ms-grid-columns:([col] 50%)[2];grid-template-columns:repeat(2,[col] 50%);-ms-grid-rows:([row] auto)[2];grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{-ms-grid-column:1;grid-column:1;-ms-grid-row:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;-ms-grid-column:2;grid-column:2;-ms-grid-row:1;grid-row:1}.td-table-container{-ms-grid-column:1;-ms-grid-column-span:1;grid-column:1/2;-ms-grid-row:2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"] | ||
}] } | ||
]; | ||
/** @nocollapse */ | ||
initScrollListener() { | ||
this.subscriptions.push(this.scrollService.scrolled().subscribe((scrollableEv) => { | ||
if (scrollableEv && this.synchronizeScrolling) { | ||
const scrollableId = scrollableEv.getElementRef().nativeElement.id; | ||
const nonScrolledContainer = this.containers.find(container => container.id !== scrollableId); | ||
if (nonScrolledContainer) { | ||
nonScrolledContainer.element.scrollTo({ | ||
top: scrollableEv.measureScrollOffset('top'), | ||
left: scrollableEv.measureScrollOffset('left'), | ||
}); | ||
} | ||
} | ||
})); | ||
} | ||
}; | ||
NgxTextDiffComponent.ctorParameters = () => [ | ||
{ type: ScrollDispatcher }, | ||
{ type: NgxTextDiffService }, | ||
{ type: ChangeDetectorRef } | ||
]; | ||
NgxTextDiffComponent.propDecorators = { | ||
format: [{ type: Input }], | ||
left: [{ type: Input }], | ||
right: [{ type: Input }], | ||
diffContent: [{ type: Input }], | ||
loading: [{ type: Input }], | ||
showToolbar: [{ type: Input }], | ||
showBtnToolbar: [{ type: Input }], | ||
hideMatchingLines: [{ type: Input }], | ||
outerContainerClass: [{ type: Input }], | ||
outerContainerStyle: [{ type: Input }], | ||
toolbarClass: [{ type: Input }], | ||
toolbarStyle: [{ type: Input }], | ||
compareRowsClass: [{ type: Input }], | ||
compareRowsStyle: [{ type: Input }], | ||
compareResults: [{ type: Output }] | ||
}; | ||
if (false) { | ||
/** | ||
* @type {?} | ||
* @private | ||
*/ | ||
NgxTextDiffComponent.prototype._hideMatchingLines; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.format; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.left; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.right; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.diffContent; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.loading; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.showToolbar; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.showBtnToolbar; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.outerContainerClass; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.outerContainerStyle; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.toolbarClass; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.toolbarStyle; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.compareRowsClass; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.compareRowsStyle; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.compareResults; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.subscriptions; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.tableRows; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.filteredTableRows; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.tableRowsLineByLine; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.filteredTableRowsLineByLine; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.diffsCount; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.formatOptions; | ||
/** | ||
* @type {?} | ||
* @private | ||
*/ | ||
NgxTextDiffComponent.prototype.diff; | ||
/** | ||
* @type {?} | ||
* @private | ||
*/ | ||
NgxTextDiffComponent.prototype.cd; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFPaEQsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFpRC9CLFlBQW9CLElBQXdCLEVBQVUsRUFBcUI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWhEbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQWVyQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDM0Qsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0Msd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUMvQyxnQ0FBMkIsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixrQkFBYSxHQUE0QjtZQUN2QztnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BC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SUFDbEMsNENBQThCOztJQUM5Qiw0Q0FBMkI7O0lBQzNCLGdEQUFrQzs7SUFDbEMsZ0RBQStCOztJQUMvQiw4Q0FBMkQ7O0lBQzNELDZDQUFtQzs7SUFDbkMseUNBQXFDOztJQUNyQyxpREFBNkM7O0lBQzdDLG1EQUErQzs7SUFDL0MsMkRBQXVEOztJQUN2RCwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmQ29udGVudCwgRGlmZlBhcnQsIERpZmZUYWJsZUZvcm1hdCwgRGlmZlRhYmxlRm9ybWF0T3B0aW9uLCBEaWZmVGFibGVSb3dSZXN1bHQsIERpZmZSZXN1bHRzIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbmd4LXRleHQtZGlmZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10ZXh0LWRpZmYuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfaGlkZU1hdGNoaW5nTGluZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0J0blRvb2xiYXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGhpZGVNYXRjaGluZ0xpbmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGVNYXRjaGluZ0xpbmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGhpZGVNYXRjaGluZ0xpbmVzKGhpZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaGlkZU1hdGNoaW5nTGluZXNDaGFuZ2VkKGhpZGUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3V0ZXJDb250YWluZXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBjb21wYXJlUm93c1N0eWxlOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ== | ||
__decorate([ | ||
ViewChildren(ContainerDirective), | ||
__metadata("design:type", QueryList) | ||
], NgxTextDiffComponent.prototype, "containers", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "format", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "left", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "right", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Observable) | ||
], NgxTextDiffComponent.prototype, "diffContent", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "loading", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "showToolbar", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "showBtnToolbar", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Boolean), | ||
__metadata("design:paramtypes", [Boolean]) | ||
], NgxTextDiffComponent.prototype, "hideMatchingLines", null); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "outerContainerClass", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "outerContainerStyle", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "toolbarClass", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "toolbarStyle", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", String) | ||
], NgxTextDiffComponent.prototype, "compareRowsClass", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "compareRowsStyle", void 0); | ||
__decorate([ | ||
Input(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "synchronizeScrolling", void 0); | ||
__decorate([ | ||
Output(), | ||
__metadata("design:type", Object) | ||
], NgxTextDiffComponent.prototype, "compareResults", void 0); | ||
NgxTextDiffComponent = __decorate([ | ||
Component({ | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div class=\"td-wrapper\" [ngClass]=\"outerContainerClass\" [ngStyle]=\"outerContainerStyle\" *ngIf=\"!loading\">\r\n\r\n <div [ngClass]=\"toolbarClass\" [ngStyle]=\"toolbarStyle\" *ngIf=\"showToolbar\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">\r\n Only Show Lines with Differences ({{ diffsCount }})\r\n <input type=\"checkbox\" id=\"showDiffs\" [ngModel]=\"hideMatchingLines\" (ngModelChange)=\"hideMatchingLinesChanged($event)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showToolbar && showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button\r\n *ngFor=\"let option of formatOptions\"\r\n [ngClass]=\"{ active: format === option.value, disabled: !!option.disabled }\"\r\n [name]=\"option.name\"\r\n [id]=\"option.id\"\r\n [disabled]=\"!!option.disabled\"\r\n (click)=\"setDiffTableFormat(option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"td-table-wrapper\" [ngClass]=\"compareRowsClass\" [ngStyle]=\"compareRowsStyle\">\r\n <!-- Right side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-left-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n {{ row.leftContent?.lineNumber !== -1 ? row.leftContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Left side-by-side -->\r\n <div class=\"td-table-container side-by-side\" *ngIf=\"format === 'SideBySide'\" id=\"td-right-compare-container\" tdContainer cdkScrollable>\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRows; trackBy: trackTableRows\">\r\n <td\r\n scope=\"row\"\r\n class=\"fit-column line-number-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n {{ row.rightContent?.lineNumber !== -1 ? row.rightContent?.lineNumber : ' ' }}\r\n </td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n >\r\n <span>{{ row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'insert-row': row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent }\"\r\n *ngIf=\"row.hasDiffs\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- Line By Line - combined table -->\r\n <div class=\"td-table-container line-by-line\" *ngIf=\"format === 'LineByLine'\">\r\n <table class=\"td-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of filteredTableRowsLineByLine; trackBy: trackTableRows\">\r\n <td scope=\"row\" class=\"fit-column line-number-col-left\">{{ row.leftContent?.lineNumber }}</td>\r\n <td scope=\"row\" class=\"fit-column line-number-col\">{{ row.rightContent?.lineNumber }}</td>\r\n <td\r\n class=\"fit-column prefix-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n >\r\n <span>{{ row.leftContent?.prefix || row.rightContent?.prefix || ' ' }}</span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"!row.hasDiffs\"\r\n >\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.leftContent && row.leftContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n <td\r\n class=\"content-col\"\r\n [ngClass]=\"{ 'delete-row': row.leftContent?.prefix === '-', 'insert-row': row.rightContent?.prefix === '+' }\"\r\n *ngIf=\"row.hasDiffs && row.rightContent && row.rightContent?.lineDiffs.length !== 0\"\r\n >\r\n <span\r\n [innerHTML]=\"diff.content | formatLine\"\r\n [ngClass]=\"{ highlight: diff.isDiff }\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"\r\n ></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
styles: [".td-wrapper{display:grid;width:100%;grid-row-gap:10px;grid-template-columns:repeat(2,[col] 50%);grid-template-rows:repeat(2,[row] auto);background-color:#fff;color:#444}.td-toolbar-show-diff{grid-column:1;grid-row:1}.td-toolbar-select-format{margin-left:auto;grid-column:2;grid-row:1}.td-table-container{grid-column:1/2;grid-row:2;width:100%;max-width:100%;overflow-x:auto}.td-table-wrapper{display:flex;width:200%}.td-table{border:1px solid #a9a9a9;max-height:50vh;width:100%;max-width:100%}.fit-column{width:1px;white-space:nowrap}.line-number-col{position:relative;position:-webkit-sticky;position:sticky;left:0;top:auto;border-right:1px solid #ddd;color:#999;text-align:right;background-color:#f7f7f7;padding-left:10px;padding-right:10px;font-size:87.5%}.line-number-col-left{color:#999;padding-left:10px;padding-right:10px;text-align:right;background-color:#f7f7f7;font-size:87.5%}.insert-row,.insert-row>.line-number-col{background-color:#dfd;border-color:#b4e2b4}.delete-row,.delete-row>.line-number-col{background-color:#fee8e9;border-color:#e9aeae}.empty-row{background-color:#f7f7f7;height:24px}.td-table td{border-top:0;padding-top:0;padding-bottom:0;white-space:nowrap;max-width:50%}pre{margin-bottom:0}td.content-col{padding:0;margin:0;line-height:24px}td.prefix-col{padding-left:10px;padding-right:10px;line-height:24px}.td-btn-group{border-radius:4px}.td-btn-group button{background-color:rgba(23,162,184,.7);border:1px solid #17a2b8;color:#fff;cursor:pointer;float:left}.td-btn-group button:not(:last-child){border-right:none}.td-btn-group button:first-child{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.td-btn-group button:last-child{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.td-btn-group:after{content:'';clear:both;display:table}.td-btn-group button.active,.td-btn-group button:hover{background-color:#17a2b8}.td-checkbox-container{display:block;position:relative;padding-left:21px;margin-bottom:0;cursor:pointer;font-size:16px;line-height:28px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.td-checkbox-container input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark{position:absolute;top:7px;left:0;height:16px;width:16px;background-color:#eee}.td-checkbox-container:hover input~.checkmark{background-color:#ccc}.td-checkbox-container input:checked~.checkmark{background-color:#17a2b8}.checkmark:after{content:\"\";position:absolute;display:none}.td-checkbox-container input:checked~.checkmark:after{display:block}.td-checkbox-container .checkmark:after{left:5px;top:3px;width:5px;height:10px;border:solid #fff;border-width:0 3px 3px 0;transform:rotate(45deg)}.insert-row>.highlight{background-color:#acf2bd!important}.delete-row>.highlight{background-color:#fdb8c0!important}"] | ||
}), | ||
__metadata("design:paramtypes", [ScrollDispatcher, NgxTextDiffService, ChangeDetectorRef]) | ||
], NgxTextDiffComponent); | ||
export { NgxTextDiffComponent }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEVBQ1QsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU96RSxJQUFhLG9CQUFvQixHQUFqQyxNQUFhLG9CQUFvQjtJQWtEL0IsWUFBb0IsYUFBK0IsRUFBVSxJQUF3QixFQUFVLEVBQXFCO1FBQWhHLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQW9CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFqRDVHLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUxQixXQUFNLEdBQW9CLFlBQVksQ0FBQztRQUN2QyxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFldEIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUMzRCxrQkFBYSxHQUFtQixF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LEVBQUU7OzhEQUF1QjtBQUN0QjtJQUFSLEtBQUssRUFBRTs7a0VBQTZCO0FBQzNCO0lBQVQsTUFBTSxFQUFFOzs0REFBa0Q7QUF6QmhELG9CQUFvQjtJQUxoQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLHcvT0FBNkM7O0tBRTlDLENBQUM7cUNBbURtQyxnQkFBZ0IsRUFBZ0Isa0JBQWtCLEVBQWMsaUJBQWlCO0dBbER6RyxvQkFBb0IsQ0F1TGhDO1NBdkxZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEFmdGVyVmlld0luaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlmZkNvbnRlbnQsIERpZmZQYXJ0LCBEaWZmVGFibGVGb3JtYXQsIERpZmZUYWJsZUZvcm1hdE9wdGlvbiwgRGlmZlRhYmxlUm93UmVzdWx0LCBEaWZmUmVzdWx0cyB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5tb2RlbCc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmU2VydmljZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi1jb250YWluZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2Nyb2xsRGlzcGF0Y2hlciwgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0ZC1uZ3gtdGV4dC1kaWZmJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRleHQtZGlmZi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LXRleHQtZGlmZi5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9oaWRlTWF0Y2hpbmdMaW5lcyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGRyZW4oQ29udGFpbmVyRGlyZWN0aXZlKSBjb250YWluZXJzOiBRdWVyeUxpc3Q8Q29udGFpbmVyRGlyZWN0aXZlPjtcclxuICBASW5wdXQoKSBmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCA9ICdTaWRlQnlTaWRlJztcclxuICBASW5wdXQoKSBsZWZ0ID0gJyc7XHJcbiAgQElucHV0KCkgcmlnaHQgPSAnJztcclxuICBASW5wdXQoKSBkaWZmQ29udGVudDogT2JzZXJ2YWJsZTxEaWZmQ29udGVudD47XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dUb29sYmFyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QnRuVG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KClcclxuICBnZXQgaGlkZU1hdGNoaW5nTGluZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGlkZU1hdGNoaW5nTGluZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgaGlkZU1hdGNoaW5nTGluZXMoaGlkZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5oaWRlTWF0Y2hpbmdMaW5lc0NoYW5nZWQoaGlkZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG91dGVyQ29udGFpbmVyQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lclN0eWxlOiBhbnk7XHJcbiAgQElucHV0KCkgdG9vbGJhckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdG9vbGJhclN0eWxlOiBhbnk7XHJcbiAgQElucHV0KCkgY29tcGFyZVJvd3NDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzU3R5bGU6IGFueTtcclxuICBASW5wdXQoKSBzeW5jaHJvbml6ZVNjcm9sbGluZyA9IHRydWU7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzY3JvbGxTZXJ2aWNlOiBTY3JvbGxEaXNwYXRjaGVyLCBwcml2YXRlIGRpZmY6IE5neFRleHREaWZmU2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRpZmZDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuZGlmZkNvbnRlbnQuc3Vic2NyaWJlKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubGVmdCA9IGNvbnRlbnQubGVmdENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0ID0gY29udGVudC5yaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyRGlmZnMoKVxyXG4gICAgICAudGhlbigoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxyXG4gICAgICAuY2F0Y2goZSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTY3JvbGxMaXN0ZW5lcigpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxlZCgpLnN1YnNjcmliZSgoc2Nyb2xsYWJsZUV2OiBDZGtTY3JvbGxhYmxlKSA9PiB7XHJcbiAgICAgIGlmIChzY3JvbGxhYmxlRXYgJiYgdGhpcy5zeW5jaHJvbml6ZVNjcm9sbGluZykge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVJZCA9IHNjcm9sbGFibGVFdi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5pZDtcclxuICAgICAgICBjb25zdCBub25TY3JvbGxlZENvbnRhaW5lcjogQ29udGFpbmVyRGlyZWN0aXZlID0gdGhpcy5jb250YWluZXJzLmZpbmQoY29udGFpbmVyID0+IGNvbnRhaW5lci5pZCAhPT0gc2Nyb2xsYWJsZUlkKTtcclxuICAgICAgICBpZiAobm9uU2Nyb2xsZWRDb250YWluZXIpIHtcclxuICAgICAgICAgIG5vblNjcm9sbGVkQ29udGFpbmVyLmVsZW1lbnQuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICB0b3A6IHNjcm9sbGFibGVFdi5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKSxcclxuICAgICAgICAgICAgbGVmdDogc2Nyb2xsYWJsZUV2Lm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2xlZnQnKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxufVxyXG4iXX0= |
@@ -1,85 +0,1 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
/** | ||
* @record | ||
*/ | ||
export function DiffTableFormatOption() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffTableFormatOption.prototype.id; | ||
/** @type {?} */ | ||
DiffTableFormatOption.prototype.name; | ||
/** @type {?} */ | ||
DiffTableFormatOption.prototype.label; | ||
/** @type {?} */ | ||
DiffTableFormatOption.prototype.value; | ||
/** @type {?|undefined} */ | ||
DiffTableFormatOption.prototype.icon; | ||
/** @type {?|undefined} */ | ||
DiffTableFormatOption.prototype.disabled; | ||
} | ||
/** | ||
* @record | ||
*/ | ||
export function DiffContent() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffContent.prototype.leftContent; | ||
/** @type {?} */ | ||
DiffContent.prototype.rightContent; | ||
} | ||
/** | ||
* @record | ||
*/ | ||
export function DiffPart() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffPart.prototype.content; | ||
/** @type {?} */ | ||
DiffPart.prototype.isDiff; | ||
} | ||
/** | ||
* @record | ||
*/ | ||
export function DiffLineResult() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffLineResult.prototype.lineNumber; | ||
/** @type {?} */ | ||
DiffLineResult.prototype.prefix; | ||
/** @type {?} */ | ||
DiffLineResult.prototype.lineContent; | ||
/** @type {?} */ | ||
DiffLineResult.prototype.lineDiffs; | ||
} | ||
/** | ||
* @record | ||
*/ | ||
export function DiffTableRowResult() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.leftContent; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.rightContent; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.belongTo; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.hasDiffs; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.numDiffs; | ||
} | ||
/** | ||
* @record | ||
*/ | ||
export function DiffResults() { } | ||
if (false) { | ||
/** @type {?} */ | ||
DiffResults.prototype.hasDiff; | ||
/** @type {?} */ | ||
DiffResults.prototype.diffsCount; | ||
/** @type {?} */ | ||
DiffResults.prototype.rowsWithDiff; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsMkNBT0M7OztJQU5DLG1DQUFXOztJQUNYLHFDQUFhOztJQUNiLHNDQUFjOztJQUNkLHNDQUF1Qjs7SUFDdkIscUNBQWM7O0lBQ2QseUNBQW1COzs7OztBQUdyQixpQ0FHQzs7O0lBRkMsa0NBQW9COztJQUNwQixtQ0FBcUI7Ozs7O0FBR3ZCLDhCQUdDOzs7SUFGQywyQkFBZ0I7O0lBQ2hCLDBCQUFnQjs7Ozs7QUFHbEIsb0NBS0M7OztJQUpDLG9DQUFtQjs7SUFDbkIsZ0NBQWU7O0lBQ2YscUNBQW9COztJQUNwQixtQ0FBc0I7Ozs7O0FBR3hCLHdDQU1DOzs7SUFMQyx5Q0FBNEI7O0lBQzVCLDBDQUE2Qjs7SUFDN0Isc0NBQW1COztJQUNuQixzQ0FBa0I7O0lBQ2xCLHNDQUFpQjs7Ozs7QUFHbkIsaUNBUUM7OztJQVBDLDhCQUFpQjs7SUFDakIsaUNBQW1COztJQUNuQixtQ0FJSSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIERpZmZUYWJsZUZvcm1hdCA9ICdTaWRlQnlTaWRlJyB8ICdMaW5lQnlMaW5lJztcclxuZXhwb3J0IHR5cGUgU2lkZURpZmYgPSAnYm90aCcgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmVGFibGVGb3JtYXRPcHRpb24ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IERpZmZUYWJsZUZvcm1hdDtcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmQ29udGVudCB7XHJcbiAgbGVmdENvbnRlbnQ6IHN0cmluZztcclxuICByaWdodENvbnRlbnQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmUGFydCB7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIGlzRGlmZjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmTGluZVJlc3VsdCB7XHJcbiAgbGluZU51bWJlcjogbnVtYmVyO1xyXG4gIHByZWZpeDogc3RyaW5nO1xyXG4gIGxpbmVDb250ZW50OiBzdHJpbmc7XHJcbiAgbGluZURpZmZzOiBEaWZmUGFydFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZUYWJsZVJvd1Jlc3VsdCB7XHJcbiAgbGVmdENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0O1xyXG4gIHJpZ2h0Q29udGVudDogRGlmZkxpbmVSZXN1bHQ7XHJcbiAgYmVsb25nVG86IFNpZGVEaWZmO1xyXG4gIGhhc0RpZmZzOiBib29sZWFuO1xyXG4gIG51bURpZmZzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlJlc3VsdHMge1xyXG4gIGhhc0RpZmY6IGJvb2xlYW47XHJcbiAgZGlmZnNDb3VudDogbnVtYmVyO1xyXG4gIHJvd3NXaXRoRGlmZjoge1xyXG4gICAgbGVmdExpbmVOdW1iZXI/OiBudW1iZXI7XHJcbiAgICByaWdodExpbmVOdW1iZXI/OiBudW1iZXI7XHJcbiAgICBudW1EaWZmczogbnVtYmVyO1xyXG4gIH1bXTtcclxufVxyXG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRGlmZlRhYmxlRm9ybWF0ID0gJ1NpZGVCeVNpZGUnIHwgJ0xpbmVCeUxpbmUnO1xyXG5leHBvcnQgdHlwZSBTaWRlRGlmZiA9ICdib3RoJyB8ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZUYWJsZUZvcm1hdE9wdGlvbiB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogRGlmZlRhYmxlRm9ybWF0O1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZDb250ZW50IHtcclxuICBsZWZ0Q29udGVudDogc3RyaW5nO1xyXG4gIHJpZ2h0Q29udGVudDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZQYXJ0IHtcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgaXNEaWZmOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpZmZMaW5lUmVzdWx0IHtcclxuICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgcHJlZml4OiBzdHJpbmc7XHJcbiAgbGluZUNvbnRlbnQ6IHN0cmluZztcclxuICBsaW5lRGlmZnM6IERpZmZQYXJ0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlRhYmxlUm93UmVzdWx0IHtcclxuICBsZWZ0Q29udGVudDogRGlmZkxpbmVSZXN1bHQ7XHJcbiAgcmlnaHRDb250ZW50OiBEaWZmTGluZVJlc3VsdDtcclxuICBiZWxvbmdUbzogU2lkZURpZmY7XHJcbiAgaGFzRGlmZnM6IGJvb2xlYW47XHJcbiAgbnVtRGlmZnM6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmUmVzdWx0cyB7XHJcbiAgaGFzRGlmZjogYm9vbGVhbjtcclxuICBkaWZmc0NvdW50OiBudW1iZXI7XHJcbiAgcm93c1dpdGhEaWZmOiB7XHJcbiAgICBsZWZ0TGluZU51bWJlcj86IG51bWJlcjtcclxuICAgIHJpZ2h0TGluZU51bWJlcj86IG51bWJlcjtcclxuICAgIG51bURpZmZzOiBudW1iZXI7XHJcbiAgfVtdO1xyXG59XHJcbiJdfQ== |
@@ -1,5 +0,2 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
import { __decorate } from "tslib"; | ||
import { NgModule } from '@angular/core'; | ||
@@ -11,11 +8,14 @@ import { NgxTextDiffComponent } from './ngx-text-diff.component'; | ||
import { FormatLinePipe } from './format-line.pipe'; | ||
export class NgxTextDiffModule { | ||
} | ||
NgxTextDiffModule.decorators = [ | ||
{ type: NgModule, args: [{ | ||
imports: [CommonModule, FormsModule], | ||
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe], | ||
exports: [NgxTextDiffComponent] | ||
},] } | ||
]; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBT3BELE1BQU0sT0FBTyxpQkFBaUI7OztZQUw3QixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztnQkFDcEMsWUFBWSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxDQUFDO2dCQUM1RSxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzthQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMb2FkZXJTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkZXItc3Bpbm5lci9sb2FkZXItc3Bpbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtYXRMaW5lUGlwZSB9IGZyb20gJy4vZm9ybWF0LWxpbmUucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudCwgTG9hZGVyU3Bpbm5lckNvbXBvbmVudCwgRm9ybWF0TGluZVBpcGVdLFxyXG4gIGV4cG9ydHM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRleHREaWZmTW9kdWxlIHt9XHJcbiJdfQ== | ||
import { ContainerDirective } from './ngx-text-diff-container.directive'; | ||
import { ScrollingModule } from '@angular/cdk/scrolling'; | ||
let NgxTextDiffModule = class NgxTextDiffModule { | ||
}; | ||
NgxTextDiffModule = __decorate([ | ||
NgModule({ | ||
imports: [CommonModule, FormsModule, ScrollingModule], | ||
declarations: [NgxTextDiffComponent, LoaderSpinnerComponent, FormatLinePipe, ContainerDirective], | ||
exports: [NgxTextDiffComponent], | ||
}) | ||
], NgxTextDiffModule); | ||
export { NgxTextDiffModule }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU96RCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtDQUFHLENBQUE7QUFBcEIsaUJBQWlCO0lBTDdCLFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO1FBQ3JELFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQztRQUNoRyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztLQUNoQyxDQUFDO0dBQ1csaUJBQWlCLENBQUc7U0FBcEIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZDb21wb25lbnQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IExvYWRlclNwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2xvYWRlci1zcGlubmVyL2xvYWRlci1zcGlubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1hdExpbmVQaXBlIH0gZnJvbSAnLi9mb3JtYXQtbGluZS5waXBlJztcclxuaW1wb3J0IHsgQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNjcm9sbGluZ01vZHVsZV0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTmd4VGV4dERpZmZDb21wb25lbnQsIExvYWRlclNwaW5uZXJDb21wb25lbnQsIEZvcm1hdExpbmVQaXBlLCBDb250YWluZXJEaXJlY3RpdmVdLFxyXG4gIGV4cG9ydHM6IFtOZ3hUZXh0RGlmZkNvbXBvbmVudF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZk1vZHVsZSB7fVxyXG4iXX0= |
@@ -1,5 +0,2 @@ | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc | ||
*/ | ||
import { __decorate, __metadata } from "tslib"; | ||
import { Injectable } from '@angular/core'; | ||
@@ -9,32 +6,17 @@ import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from 'diff-match-patch'; | ||
import * as i0 from "@angular/core"; | ||
export class NgxTextDiffService { | ||
let NgxTextDiffService = class NgxTextDiffService { | ||
constructor() { | ||
this.initParser(); | ||
} | ||
/** | ||
* @private | ||
* @return {?} | ||
*/ | ||
initParser() { | ||
this.diffParser = new diff_match_patch(); | ||
} | ||
/** | ||
* @param {?} left | ||
* @param {?} right | ||
* @return {?} | ||
*/ | ||
getDiffsByLines(left, right) { | ||
return new Promise((resolve, reject) => { | ||
/** @type {?} */ | ||
const a = this.diffParser.diff_linesToChars_(left, right); | ||
/** @type {?} */ | ||
const lineText1 = a.chars1; | ||
/** @type {?} */ | ||
const lineText2 = a.chars2; | ||
/** @type {?} */ | ||
const linesArray = a.lineArray; | ||
/** @type {?} */ | ||
const diffs = this.diffParser.diff_main(lineText1, lineText2, true); | ||
this.diffParser.diff_charsToLines_(diffs, linesArray); | ||
/** @type {?} */ | ||
const rows = this.formatOutput(diffs); | ||
@@ -47,11 +29,4 @@ if (!rows) { | ||
} | ||
/** | ||
* @private | ||
* @param {?} diffs | ||
* @return {?} | ||
*/ | ||
formatOutput(diffs) { | ||
/** @type {?} */ | ||
let lineLeft = 1; | ||
/** @type {?} */ | ||
let lineRight = 1; | ||
@@ -62,15 +37,8 @@ return diffs.reduce((rows, diff) => { | ||
} | ||
/** @type {?} */ | ||
const diffType = diff[0]; | ||
/** @type {?} */ | ||
const diffValue = diff[1]; | ||
/** @type {?} */ | ||
let leftDiffRow = null; | ||
/** @type {?} */ | ||
let rightDiffRow = null; | ||
/** @type {?} */ | ||
let leftContent = null; | ||
/** @type {?} */ | ||
let rightContent = null; | ||
/** @type {?} */ | ||
let rowTemp = null; | ||
@@ -188,9 +156,3 @@ switch (diffType) { | ||
} | ||
/** | ||
* @private | ||
* @param {?} result | ||
* @return {?} | ||
*/ | ||
countDiffs(result) { | ||
/** @type {?} */ | ||
let diffCount = 0; | ||
@@ -205,18 +167,7 @@ if (result.leftContent) { | ||
} | ||
/** | ||
* @private | ||
* @param {?} value | ||
* @param {?} compareValue | ||
* @return {?} | ||
*/ | ||
getDiffParts(value, compareValue) { | ||
/** @type {?} */ | ||
const diffParts = []; | ||
/** @type {?} */ | ||
let i = 0; | ||
/** @type {?} */ | ||
let j = 0; | ||
/** @type {?} */ | ||
let shared = ''; | ||
/** @type {?} */ | ||
let diff = ''; | ||
@@ -249,15 +200,11 @@ while (i < value.length) { | ||
} | ||
} | ||
NgxTextDiffService.decorators = [ | ||
{ type: Injectable, args: [{ | ||
providedIn: 'root' | ||
},] } | ||
]; | ||
/** @nocollapse */ | ||
NgxTextDiffService.ctorParameters = () => []; | ||
/** @nocollapse */ NgxTextDiffService.ngInjectableDef = i0.defineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" }); | ||
if (false) { | ||
/** @type {?} */ | ||
NgxTextDiffService.prototype.diffParser; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7O2tCQUNyRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztrQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztrQkFDeEIsS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztrQkFDaEQsSUFBSSxHQUF5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNqQjtZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7OztJQUVPLFlBQVksQ0FBQyxLQUFhOztZQUM1QixRQUFRLEdBQUcsQ0FBQzs7WUFDWixTQUFTLEdBQUcsQ0FBQztRQUNqQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEwQixFQUFFLElBQVUsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNYOztrQkFDSyxRQUFRLEdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQzs7a0JBQzFCLFNBQVMsR0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDOztnQkFDN0IsV0FBVyxHQUF1QixJQUFJOztnQkFDdEMsWUFBWSxHQUF1QixJQUFJOztnQkFDdkMsV0FBVyxHQUFtQixJQUFJOztnQkFDbEMsWUFBWSxHQUFtQixJQUFJOztnQkFDbkMsT0FBTyxHQUF1QixJQUFJO1lBQ3RDLFFBQVEsUUFBUSxFQUFFO2dCQUNoQixLQUFLLFVBQVUsRUFBRSxJQUFJO29CQUNuQixTQUFTO3lCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7eUJBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3hCO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2QsV0FBVyxHQUFHOzRCQUNaLFVBQVUsRUFBRSxRQUFROzRCQUNwQixXQUFXLEVBQUUsSUFBSTs0QkFDakIsU0FBUyxFQUFFLEVBQUU7NEJBQ2IsTUFBTSxFQUFFLEVBQUU7eUJBQ1gsQ0FBQzt3QkFDRixZQUFZLEdBQUc7NEJBQ2IsVUFBVSxFQUFFLFNBQVM7NEJBQ3JCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixTQUFTLEVBQUUsRUFBRTs0QkFDYixNQUFNLEVBQUUsRUFBRTt5QkFDWCxDQUFDO3dCQUNGLE9BQU8sR0FBRzs0QkFDUixXQUFXOzRCQUNYLFlBQVk7NEJBQ1osUUFBUSxFQUFFLE1BQU07NEJBQ2hCLFFBQVEsRUFBRSxLQUFLOzRCQUNmLFFBQVEsRUFBRSxDQUFDO3lCQUNaLENBQUM7d0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbkIsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzFCLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQztvQkFDTCxNQUFNO2dCQUNSLEtBQUssV0FBVyxFQUFFLEtBQUs7b0JBQ3JCLFNBQVM7eUJBQ04sS0FBSyxDQUFDLElBQUksQ0FBQzt5QkFDWCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM5QixJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDeEI7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUMxSCxDQUFDO3dCQUNGLFdBQVcsR0FBRzs0QkFDWixVQUFVLEVBQUUsUUFBUTs0QkFDcEIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzVDLE1BQU0sRUFBRSxHQUFHO3lCQUNaLENBQUM7d0JBQ0YsSUFBSSxZQUFZLEVBQUU7NEJBQ2hCLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOzRCQUN2QyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNwRCxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFDcEMsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3RDLENBQUM7NEJBQ0YsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDckQsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQ3JDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNyQyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDOzRCQUMvQixZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQ3ZEOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ1IsV0FBVztnQ0FDWCxZQUFZLEVBQUUsSUFBSTtnQ0FDbEIsUUFBUSxFQUFFLElBQUk7Z0NBQ2QsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLFFBQVEsRUFBRSxDQUFDOzZCQUNaLENBQUMsQ0FBQzt5QkFDSjt3QkFDRCxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsTUFBTTtnQkFDUixLQUFLLFdBQVcsRUFBRSxJQUFJO29CQUNwQixTQUFTO3lCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7eUJBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3hCO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2QsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FDekgsQ0FBQzt3QkFDRixZQUFZLEdBQUc7NEJBQ2IsVUFBVSxFQUFFLFNBQVM7NEJBQ3JCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzRCQUM1QyxNQUFNLEVBQUUsR0FBRzt5QkFDWixDQUFDO3dCQUNGLElBQUksV0FBVyxFQUFFOzRCQUNmLFdBQVcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDOzRCQUN4QyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNuRCxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFDbkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3JDLENBQUM7NEJBQ0YsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDcEQsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQ3BDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNwQyxDQUFDOzRCQUNGLFdBQVcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDOzRCQUM5QixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ3JEOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ1IsV0FBVyxFQUFFLElBQUk7Z0NBQ2pCLFlBQVk7Z0NBQ1osUUFBUSxFQUFFLElBQUk7Z0NBQ2QsUUFBUSxFQUFFLE9BQU87Z0NBQ2pCLFFBQVEsRUFBRSxDQUFDOzZCQUNaLENBQUMsQ0FBQzt5QkFDSjt3QkFDRCxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsTUFBTTthQUNUO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDOzs7Ozs7SUFFTyxVQUFVLENBQUMsTUFBMEI7O1lBQ3ZDLFNBQVMsR0FBRyxDQUFDO1FBQ2pCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM5RTtRQUNELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMvRTtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLFlBQW9COztjQUNoRCxTQUFTLEdBQWUsRUFBRTs7WUFDNUIsQ0FBQyxHQUFHLENBQUM7O1lBQ0wsQ0FBQyxHQUFHLENBQUM7O1lBQ0wsTUFBTSxHQUFHLEVBQUU7O1lBQ1gsSUFBSSxHQUFHLEVBQUU7UUFFYixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO29CQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUNYO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO29CQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDbkQsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDYjtnQkFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakQ7YUFBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7WUF0TkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7Ozs7O0lBRUMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmLCBESUZGX0RFTEVURSwgRElGRl9FUVVBTCwgRElGRl9JTlNFUlQsIGRpZmZfbWF0Y2hfcGF0Y2ggfSBmcm9tICdkaWZmLW1hdGNoLXBhdGNoJztcclxuaW1wb3J0IHsgRGlmZkxpbmVSZXN1bHQsIERpZmZQYXJ0LCBEaWZmVGFibGVSb3dSZXN1bHQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi51dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZlNlcnZpY2Uge1xyXG4gIGRpZmZQYXJzZXI6IGRpZmZfbWF0Y2hfcGF0Y2g7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0UGFyc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXJzZXIoKSB7XHJcbiAgICB0aGlzLmRpZmZQYXJzZXIgPSBuZXcgZGlmZl9tYXRjaF9wYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlmZnNCeUxpbmVzKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBhID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbGluZXNUb0NoYXJzXyhsZWZ0LCByaWdodCk7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MSA9IGEuY2hhcnMxO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDIgPSBhLmNoYXJzMjtcclxuICAgICAgY29uc3QgbGluZXNBcnJheSA9IGEubGluZUFycmF5O1xyXG4gICAgICBjb25zdCBkaWZmczogRGlmZltdID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbWFpbihsaW5lVGV4dDEsIGxpbmVUZXh0MiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlmZlBhcnNlci5kaWZmX2NoYXJzVG9MaW5lc18oZGlmZnMsIGxpbmVzQXJyYXkpO1xyXG4gICAgICBjb25zdCByb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IHRoaXMuZm9ybWF0T3V0cHV0KGRpZmZzKTtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcmVqZWN0KCdFcnJvcicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHJvd3MpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE91dHB1dChkaWZmczogRGlmZltdKTogRGlmZlRhYmxlUm93UmVzdWx0W10ge1xyXG4gICAgbGV0IGxpbmVMZWZ0ID0gMTtcclxuICAgIGxldCBsaW5lUmlnaHQgPSAxO1xyXG4gICAgcmV0dXJuIGRpZmZzLnJlZHVjZSgocm93czogRGlmZlRhYmxlUm93UmVzdWx0W10sIGRpZmY6IERpZmYpID0+IHtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcm93cyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRpZmZUeXBlOiBudW1iZXIgPSBkaWZmWzBdO1xyXG4gICAgICBjb25zdCBkaWZmVmFsdWU6IHN0cmluZyA9IGRpZmZbMV07XHJcbiAgICAgIGxldCBsZWZ0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJpZ2h0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IGxlZnRDb250ZW50OiBEaWZmTGluZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByaWdodENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJvd1RlbXA6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIHN3aXRjaCAoZGlmZlR5cGUpIHtcclxuICAgICAgICBjYXNlIERJRkZfRVFVQUw6IC8vIDBcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmlnaHRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93VGVtcCA9IHtcclxuICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgYmVsb25nVG86ICdib3RoJyxcclxuICAgICAgICAgICAgICAgIGhhc0RpZmZzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG51bURpZmZzOiAwLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93cy5wdXNoKHJvd1RlbXApO1xyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgICAgbGluZUxlZnQgPSBsaW5lTGVmdCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBESUZGX0RFTEVURTogLy8gLTFcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICByaWdodERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gIXJvdy5sZWZ0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50ICYmIHJvdy5yaWdodENvbnRlbnQubGluZU51bWJlciA9PT0gbGluZUxlZnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggIT09ICcnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFt7IGNvbnRlbnQ6IGxpbmUsIGlzRGlmZjogdHJ1ZSB9XSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJy0nXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAocmlnaHREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQgPSBsZWZ0Q29udGVudDtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93Lm51bURpZmZzID0gdGhpcy5jb3VudERpZmZzKHJpZ2h0RGlmZlJvdyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBiZWxvbmdUbzogJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICBudW1EaWZmczogMSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfSU5TRVJUOiAvLyAxXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gcm93LmxlZnRDb250ZW50ICYmICFyb3cucmlnaHRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lUmlnaHQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcrJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQgPSByaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubnVtRGlmZnMgPSB0aGlzLmNvdW50RGlmZnMobGVmdERpZmZSb3cpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgYmVsb25nVG86ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgIG51bURpZmZzOiAxLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50RGlmZnMocmVzdWx0OiBEaWZmVGFibGVSb3dSZXN1bHQpOiBudW1iZXIge1xyXG4gICAgbGV0IGRpZmZDb3VudCA9IDA7XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQubGVmdENvbnRlbnQubGluZURpZmZzLmZpbHRlcihkaWZmID0+IGRpZmYuaXNEaWZmKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQucmlnaHRDb250ZW50LmxpbmVEaWZmcy5maWx0ZXIoZGlmZiA9PiBkaWZmLmlzRGlmZikubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZDb3VudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGlmZlBhcnRzKHZhbHVlOiBzdHJpbmcsIGNvbXBhcmVWYWx1ZTogc3RyaW5nKTogRGlmZlBhcnRbXSB7XHJcbiAgICBjb25zdCBkaWZmUGFydHM6IERpZmZQYXJ0W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGxldCBzaGFyZWQgPSAnJztcclxuICAgIGxldCBkaWZmID0gJyc7XHJcblxyXG4gICAgd2hpbGUgKGkgPCB2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKHZhbHVlW2ldID09PSBjb21wYXJlVmFsdWVbal0gJiYgaiA8IGNvbXBhcmVWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgICAgICAgZGlmZiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFyZWQgKz0gdmFsdWVbaV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgc2hhcmVkID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmYgKz0gdmFsdWVbaV07XHJcbiAgICAgIH1cclxuICAgICAgaSsrO1xyXG4gICAgICBqKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpZmYgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzaGFyZWQgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWZmUGFydHM7XHJcbiAgfVxyXG59XHJcbiJdfQ== | ||
}; | ||
NgxTextDiffService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NgxTextDiffService_Factory() { return new NgxTextDiffService(); }, token: NgxTextDiffService, providedIn: "root" }); | ||
NgxTextDiffService = __decorate([ | ||
Injectable({ | ||
providedIn: 'root' | ||
}), | ||
__metadata("design:paramtypes", []) | ||
], NgxTextDiffService); | ||
export { NgxTextDiffService }; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtJQUc3QjtRQUNFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQXVCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9CLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFD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O1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGLENBQUE7O0FBcE5ZLGtCQUFrQjtJQUg5QixVQUFVLENBQUM7UUFDVixVQUFVLEVBQUUsTUFBTTtLQUNuQixDQUFDOztHQUNXLGtCQUFrQixDQW9OOUI7U0FwTlksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmLCBESUZGX0RFTEVURSwgRElGRl9FUVVBTCwgRElGRl9JTlNFUlQsIGRpZmZfbWF0Y2hfcGF0Y2ggfSBmcm9tICdkaWZmLW1hdGNoLXBhdGNoJztcclxuaW1wb3J0IHsgRGlmZkxpbmVSZXN1bHQsIERpZmZQYXJ0LCBEaWZmVGFibGVSb3dSZXN1bHQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi51dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZlNlcnZpY2Uge1xyXG4gIGRpZmZQYXJzZXI6IGRpZmZfbWF0Y2hfcGF0Y2g7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0UGFyc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXJzZXIoKSB7XHJcbiAgICB0aGlzLmRpZmZQYXJzZXIgPSBuZXcgZGlmZl9tYXRjaF9wYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlmZnNCeUxpbmVzKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBhID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbGluZXNUb0NoYXJzXyhsZWZ0LCByaWdodCk7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MSA9IGEuY2hhcnMxO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDIgPSBhLmNoYXJzMjtcclxuICAgICAgY29uc3QgbGluZXNBcnJheSA9IGEubGluZUFycmF5O1xyXG4gICAgICBjb25zdCBkaWZmczogRGlmZltdID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbWFpbihsaW5lVGV4dDEsIGxpbmVUZXh0MiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlmZlBhcnNlci5kaWZmX2NoYXJzVG9MaW5lc18oZGlmZnMsIGxpbmVzQXJyYXkpO1xyXG4gICAgICBjb25zdCByb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IHRoaXMuZm9ybWF0T3V0cHV0KGRpZmZzKTtcclxuICAgICAgaWYgKCFyb3dzKSB |