ngx-text-diff
Advanced tools
Comparing version 0.5.3 to 0.5.4
@@ -126,3 +126,4 @@ (function (global, factory) { | ||
belongTo: 'both', | ||
hasDiffs: false | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
@@ -156,2 +157,3 @@ rows.push(rowTemp); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow); | ||
} | ||
@@ -163,3 +165,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'left' | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
@@ -192,2 +195,3 @@ } | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow); | ||
} | ||
@@ -199,3 +203,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'right' | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
@@ -212,2 +217,23 @@ } | ||
* @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 | ||
@@ -381,2 +407,3 @@ * @param {?} compareValue | ||
this.cd = cd; | ||
this._hideMatchingLines = false; | ||
this.format = 'SideBySide'; | ||
@@ -386,3 +413,5 @@ this.left = ''; | ||
this.loading = false; | ||
this.showToolbar = true; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new i0.EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -393,3 +422,2 @@ this.tableRows = []; | ||
this.filteredTableRowsLineByLine = []; | ||
this.showLinesDiffs = false; | ||
this.diffsCount = 0; | ||
@@ -402,3 +430,3 @@ this.formatOptions = [ | ||
value: 'SideBySide', | ||
icon: 'la-code' | ||
icon: 'la-code', | ||
}, | ||
@@ -410,6 +438,21 @@ { | ||
value: 'LineByLine', | ||
icon: 'la-file-text' | ||
} | ||
icon: 'la-file-text', | ||
}, | ||
]; | ||
} | ||
Object.defineProperty(NgxTextDiffComponent.prototype, "hideMatchingLines", { | ||
get: /** | ||
* @return {?} | ||
*/ function () { | ||
return this._hideMatchingLines; | ||
}, | ||
set: /** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ function (hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
}, | ||
enumerable: true, | ||
configurable: true | ||
}); | ||
/** | ||
@@ -456,3 +499,3 @@ * @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.showLinesDiffsChange = /** | ||
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = /** | ||
* @param {?} value | ||
@@ -462,4 +505,4 @@ * @return {?} | ||
function (value) { | ||
this.showLinesDiffs = value; | ||
if (this.showLinesDiffs) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
@@ -512,3 +555,4 @@ this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -521,3 +565,4 @@ } | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -531,5 +576,6 @@ } | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }).length; | ||
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]; | ||
@@ -545,2 +591,25 @@ case 2: | ||
/** | ||
* @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); | ||
}; | ||
/** | ||
* @param {?} index | ||
@@ -574,3 +643,3 @@ * @param {?} row | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
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}"] | ||
@@ -592,3 +661,12 @@ }] } | ||
loading: [{ type: i0.Input }], | ||
showBtnToolbar: [{ 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 }] | ||
}; | ||
@@ -595,0 +673,0 @@ return NgxTextDiffComponent; |
@@ -1,2 +0,2 @@ | ||
!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},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"):n.push({leftContent:l,rightContent:null,hasDiffs:!0,belongTo:"left"}),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"):n.push({leftContent:null,rightContent:a,hasDiffs:!0,belongTo:"right"}),c+=1})}return 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.format="SideBySide",this.left="",this.right="",this.loading=!1,this.showBtnToolbar=!0,this.subscriptions=[],this.tableRows=[],this.filteredTableRows=[],this.tableRowsLineByLine=[],this.filteredTableRowsLineByLine=[],this.showLinesDiffs=!1,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 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.showLinesDiffsChange=function(t){this.showLinesDiffs=t,this.showLinesDiffs?(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}),n.rightContent&&t.push({leftContent:null,rightContent:n.rightContent,belongTo:n.belongTo,hasDiffs:!0})):t.push(n),t},[]),this.diffsCount=this.tableRows.filter(function(t){return t.leftContent&&"-"===t.leftContent.prefix||t.rightContent&&"+"===t.rightContent.prefix}).length,this.filteredTableRows=this.tableRows,this.filteredTableRowsLineByLine=this.tableRowsLineByLine,[3,3];case 2:throw t.sent();case 3:return[2]}})})},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 *ngIf="!loading">\r\n <div class="td-wrapper">\r\n <div class="td-toolbar-show-diff">\r\n <label class="td-checkbox-container">Show Lines with Diffs ({{diffsCount}})\r\n <input type="checkbox"\r\n id="showDiffs"\r\n [ngModel]="showLinesDiffs"\r\n (ngModelChange)="showLinesDiffsChange($event)"\r\n >\r\n <span class="checkmark"></span>\r\n </label>\r\n </div>\r\n <div class="td-toolbar-select-format" *ngIf="showBtnToolbar">\r\n <div class="td-btn-group td-btn-group-toggle" data-toggle="buttons">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class="td-table-wrapper">\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 scope="row" class="fit-column line-number-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent}">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : \' \'}}\r\n </td>\r\n <td class="fit-column prefix-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent}">\r\n <span>{{row.leftContent?.prefix || \' \'}}</span>\r\n </td>\r\n <td class="content-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent}"\r\n *ngIf="!row.hasDiffs">\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td class="content-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'empty-row\': !row.leftContent?.lineContent}"\r\n *ngIf="row.hasDiffs">\r\n <span [innerHTML]="diff.content | formatLine" [ngClass]="{\'highlight\': diff.isDiff}"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"></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 scope="row" class="fit-column line-number-col"\r\n [ngClass]="{\'insert-row\' : row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent}">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : \' \'}}\r\n </td>\r\n <td class="fit-column prefix-col"\r\n [ngClass]="{\'insert-row\' : row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent}">\r\n <span>{{row.rightContent?.prefix || \' \'}}</span>\r\n </td>\r\n <td class="content-col"\r\n [ngClass]="{\'insert-row\' : row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent}"\r\n *ngIf="!row.hasDiffs">\r\n <span [innerHTML]="row.rightContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td class="content-col"\r\n [ngClass]="{\'insert-row\' : row.rightContent?.prefix === \'+\', \'empty-row\': !row.rightContent?.lineContent}"\r\n *ngIf="row.hasDiffs">\r\n <span [innerHTML]="diff.content | formatLine" [ngClass]="{\'highlight\': diff.isDiff}"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"></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 class="fit-column prefix-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'insert-row\' : row.rightContent?.prefix === \'+\'}">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || \' \'}}</span>\r\n </td>\r\n <td class="content-col"\r\n [ngClass]="{\'delete-row\' : row.leftContent?.prefix === \'-\', \'insert-row\' : row.rightContent?.prefix === \'+\'}"\r\n *ngIf="!row.hasDiffs">\r\n <span [innerHTML]="row.leftContent?.lineContent | formatLine"></span>\r\n </td>\r\n <td 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 <span [innerHTML]="diff.content | formatLine" [ngClass]="{\'highlight\': diff.isDiff}"\r\n *ngFor="let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs"></span>\r\n </td>\r\n <td 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 <span [innerHTML]="diff.content | formatLine" [ngClass]="{\'highlight\': diff.isDiff}"\r\n *ngFor="let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\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}],showBtnToolbar:[{type:r.Input}]},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("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})}); | ||
//# sourceMappingURL=ngx-text-diff.umd.min.js.map |
@@ -6,3 +6,3 @@ /** | ||
import * as tslib_1 from "tslib"; | ||
import { ChangeDetectorRef, Component, Input } from '@angular/core'; | ||
import { ChangeDetectorRef, Component, Input, Output, EventEmitter } from '@angular/core'; | ||
import { NgxTextDiffService } from './ngx-text-diff.service'; | ||
@@ -18,2 +18,3 @@ import { Observable } from 'rxjs'; | ||
this.cd = cd; | ||
this._hideMatchingLines = false; | ||
this.format = 'SideBySide'; | ||
@@ -23,3 +24,5 @@ this.left = ''; | ||
this.loading = false; | ||
this.showToolbar = true; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -30,3 +33,2 @@ this.tableRows = []; | ||
this.filteredTableRowsLineByLine = []; | ||
this.showLinesDiffs = false; | ||
this.diffsCount = 0; | ||
@@ -39,3 +41,3 @@ this.formatOptions = [ | ||
value: 'SideBySide', | ||
icon: 'la-code' | ||
icon: 'la-code', | ||
}, | ||
@@ -47,4 +49,4 @@ { | ||
value: 'LineByLine', | ||
icon: 'la-file-text' | ||
} | ||
icon: 'la-file-text', | ||
}, | ||
]; | ||
@@ -55,2 +57,15 @@ } | ||
*/ | ||
get hideMatchingLines() { | ||
return this._hideMatchingLines; | ||
} | ||
/** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ | ||
set hideMatchingLines(hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnInit() { | ||
@@ -87,5 +102,5 @@ this.loading = true; | ||
*/ | ||
showLinesDiffsChange(value) { | ||
this.showLinesDiffs = value; | ||
if (this.showLinesDiffs) { | ||
hideMatchingLinesChanged(value) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')); | ||
@@ -124,3 +139,4 @@ this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')); | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -133,3 +149,4 @@ } | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -143,5 +160,6 @@ } | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')).length; | ||
this.diffsCount = this.tableRows.filter(row => row.hasDiffs).length; | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
this.emitCompareResultsEvent(); | ||
} | ||
@@ -154,2 +172,20 @@ catch (e) { | ||
/** | ||
* @return {?} | ||
*/ | ||
emitCompareResultsEvent() { | ||
/** @type {?} */ | ||
const diffResults = { | ||
hasDiff: this.diffsCount > 0, | ||
diffsCount: this.diffsCount, | ||
rowsWithDiff: this.tableRows | ||
.filter(row => row.hasDiffs) | ||
.map(row => ({ | ||
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null, | ||
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null, | ||
numDiffs: row.numDiffs, | ||
})), | ||
}; | ||
this.compareResults.next(diffResults); | ||
} | ||
/** | ||
* @param {?} index | ||
@@ -174,3 +210,3 @@ * @param {?} row | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
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}"] | ||
@@ -190,5 +226,19 @@ }] } | ||
loading: [{ type: Input }], | ||
showBtnToolbar: [{ 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 {?} */ | ||
@@ -205,4 +255,20 @@ NgxTextDiffComponent.prototype.format; | ||
/** @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; | ||
@@ -218,4 +284,2 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.showLinesDiffs; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.diffsCount; | ||
@@ -235,2 +299,2 @@ /** @type {?} */ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBT2hELE1BQU0sT0FBTyxvQkFBb0I7Ozs7O0lBZ0MvQixZQUFvQixJQUF3QixFQUFVLEVBQXFCO1FBQXZELFNBQUksR0FBSixJQUFJLENBQW9CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEvQmxFLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUMvQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUF5QixFQUFFLENBQUM7UUFDckMsc0JBQWlCLEdBQXlCLEVBQUUsQ0FBQztRQUM3Qyx3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBQy9DLGdDQUEyQixHQUF5QixFQUFFLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLGtCQUFhLEdBQTRCO1lBQ3ZDO2dCQUNFLEVBQUUsRUFBRSxjQUFjO2dCQUNsQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLEVBQUUsRUFB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Q0FBbUM7O0lBQ25DLHlDQUFxQzs7SUFDckMsaURBQTZDOztJQUM3QyxtREFBK0M7O0lBQy9DLDJEQUF1RDs7SUFDdkQsOENBQXVCOztJQUN2QiwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpZmZDb250ZW50LCBEaWZmUGFydCwgRGlmZlRhYmxlRm9ybWF0LCBEaWZmVGFibGVGb3JtYXRPcHRpb24sIERpZmZUYWJsZVJvd1Jlc3VsdCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5tb2RlbCc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmU2VydmljZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RkLW5neC10ZXh0LWRpZmYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnRuVG9vbGJhciA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICB0YWJsZVJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgZmlsdGVyZWRUYWJsZVJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgdGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmU6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgc2hvd0xpbmVzRGlmZnMgPSBmYWxzZTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ2xpbmUtYnktbGluZScsXHJcbiAgICAgIG5hbWU6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBsYWJlbDogJ0xpbmUgYnkgTGluZScsXHJcbiAgICAgIHZhbHVlOiAnTGluZUJ5TGluZScsXHJcbiAgICAgIGljb246ICdsYS1maWxlLXRleHQnXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dMaW5lc0RpZmZzQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dMaW5lc0RpZmZzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5zaG93TGluZXNEaWZmcykge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREaWZmVGFibGVGb3JtYXQoZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQpIHtcclxuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRGlmZnMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLnRhYmxlUm93cyA9IGF3YWl0IHRoaXMuZGlmZi5nZXREaWZmc0J5TGluZXModGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3MucmVkdWNlKCh0YWJsZUxpbmVCeUxpbmU6IERpZmZUYWJsZVJvd1Jlc3VsdFtdLCByb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGFibGVMaW5lQnlMaW5lKSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvdy5oYXNEaWZmcykge1xyXG4gICAgICAgICAgaWYgKHJvdy5sZWZ0Q29udGVudCkge1xyXG4gICAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaCh7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQ6IHJvdy5sZWZ0Q29udGVudCxcclxuICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgYmVsb25nVG86IHJvdy5iZWxvbmdUbyxcclxuICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyb3cucmlnaHRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IHJvdy5yaWdodENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgYmVsb25nVG86IHJvdy5iZWxvbmdUbyxcclxuICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2gocm93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZUxpbmVCeUxpbmU7XHJcbiAgICAgIH0sIFtdKTtcclxuICAgICAgdGhpcy5kaWZmc0NvdW50ID0gdGhpcy50YWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmU7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFja1RhYmxlUm93cyhpbmRleCwgcm93OiBEaWZmVGFibGVSb3dSZXN1bHQpIHtcclxuICAgIHJldHVybiByb3cgJiYgcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50IDogcm93ICYmIHJvdy5yaWdodENvbnRlbnQgPyByb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50IDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tEaWZmcyhpbmRleCwgZGlmZjogRGlmZlBhcnQpIHtcclxuICAgIHJldHVybiBkaWZmICYmIGRpZmYuY29udGVudCA/IGRpZmYuY29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFPaEQsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFpRC9CLFlBQW9CLElBQXdCLEVBQVUsRUFBcUI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWhEbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQWVyQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDM0Qsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0Msd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUMvQyxnQ0FBMkIsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixrQkFBYSxHQUE0QjtZQUN2QztnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BC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SUFDbEMsNENBQThCOztJQUM5Qiw0Q0FBMkI7O0lBQzNCLGdEQUFrQzs7SUFDbEMsZ0RBQStCOztJQUMvQiw4Q0FBMkQ7O0lBQzNELDZDQUFtQzs7SUFDbkMseUNBQXFDOztJQUNyQyxpREFBNkM7O0lBQzdDLG1EQUErQzs7SUFDL0MsMkRBQXVEOztJQUN2RCwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmQ29udGVudCwgRGlmZlBhcnQsIERpZmZUYWJsZUZvcm1hdCwgRGlmZlRhYmxlRm9ybWF0T3B0aW9uLCBEaWZmVGFibGVSb3dSZXN1bHQsIERpZmZSZXN1bHRzIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbmd4LXRleHQtZGlmZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10ZXh0LWRpZmYuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfaGlkZU1hdGNoaW5nTGluZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0J0blRvb2xiYXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGhpZGVNYXRjaGluZ0xpbmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGVNYXRjaGluZ0xpbmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGhpZGVNYXRjaGluZ0xpbmVzKGhpZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaGlkZU1hdGNoaW5nTGluZXNDaGFuZ2VkKGhpZGUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3V0ZXJDb250YWluZXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBjb21wYXJlUm93c1N0eWxlOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ== |
@@ -70,3 +70,17 @@ /** | ||
DiffTableRowResult.prototype.hasDiffs; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.numDiffs; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsMkNBT0M7OztJQU5DLG1DQUFXOztJQUNYLHFDQUFhOztJQUNiLHNDQUFjOztJQUNkLHNDQUF1Qjs7SUFDdkIscUNBQWM7O0lBQ2QseUNBQW1COzs7OztBQUdyQixpQ0FHQzs7O0lBRkMsa0NBQW9COztJQUNwQixtQ0FBcUI7Ozs7O0FBR3ZCLDhCQUdDOzs7SUFGQywyQkFBZ0I7O0lBQ2hCLDBCQUFnQjs7Ozs7QUFHbEIsb0NBS0M7OztJQUpDLG9DQUFtQjs7SUFDbkIsZ0NBQWU7O0lBQ2YscUNBQW9COztJQUNwQixtQ0FBc0I7Ozs7O0FBR3hCLHdDQUtDOzs7SUFKQyx5Q0FBNEI7O0lBQzVCLDBDQUE2Qjs7SUFDN0Isc0NBQW1COztJQUNuQixzQ0FBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZScgfCAnTGluZUJ5TGluZSc7XHJcbmV4cG9ydCB0eXBlIFNpZGVEaWZmID0gJ2JvdGgnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlRhYmxlRm9ybWF0T3B0aW9uIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBEaWZmVGFibGVGb3JtYXQ7XHJcbiAgaWNvbj86IHN0cmluZztcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbnRlbnQge1xyXG4gIGxlZnRDb250ZW50OiBzdHJpbmc7XHJcbiAgcmlnaHRDb250ZW50OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlBhcnQge1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBpc0RpZmY6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkxpbmVSZXN1bHQge1xyXG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcclxuICBwcmVmaXg6IHN0cmluZztcclxuICBsaW5lQ29udGVudDogc3RyaW5nO1xyXG4gIGxpbmVEaWZmczogRGlmZlBhcnRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmVGFibGVSb3dSZXN1bHQge1xyXG4gIGxlZnRDb250ZW50OiBEaWZmTGluZVJlc3VsdDtcclxuICByaWdodENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0O1xyXG4gIGJlbG9uZ1RvOiBTaWRlRGlmZjtcclxuICBoYXNEaWZmczogYm9vbGVhbjtcclxufVxyXG4iXX0= | ||
/** | ||
* @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= |
@@ -101,3 +101,4 @@ /** | ||
belongTo: 'both', | ||
hasDiffs: false | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
@@ -131,2 +132,3 @@ rows.push(rowTemp); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = this.countDiffs(rightDiffRow); | ||
} | ||
@@ -138,3 +140,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'left' | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
@@ -167,2 +170,3 @@ } | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = this.countDiffs(leftDiffRow); | ||
} | ||
@@ -174,3 +178,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'right' | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
@@ -187,2 +192,18 @@ } | ||
* @private | ||
* @param {?} result | ||
* @return {?} | ||
*/ | ||
countDiffs(result) { | ||
/** @type {?} */ | ||
let diffCount = 0; | ||
if (result.leftContent) { | ||
diffCount += result.leftContent.lineDiffs.filter(diff => diff.isDiff).length; | ||
} | ||
if (result.leftContent) { | ||
diffCount += result.rightContent.lineDiffs.filter(diff => diff.isDiff).length; | ||
} | ||
return diffCount; | ||
} | ||
/** | ||
* @private | ||
* @param {?} value | ||
@@ -242,2 +263,2 @@ * @param {?} compareValue | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7O2tCQUNyRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztrQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztrQkFDeEIsS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztrQkFDaEQsSUFBSSxHQUF5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUss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RUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7O1lBdE1GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs7OztJQUVDLHdDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlmZiwgRElGRl9ERUxFVEUsIERJRkZfRVFVQUwsIERJRkZfSU5TRVJULCBkaWZmX21hdGNoX3BhdGNoIH0gZnJvbSAnZGlmZi1tYXRjaC1wYXRjaCc7XHJcbmltcG9ydCB7IERpZmZMaW5lUmVzdWx0LCBEaWZmUGFydCwgRGlmZlRhYmxlUm93UmVzdWx0IH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICcuL25neC10ZXh0LWRpZmYudXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZTZXJ2aWNlIHtcclxuICBkaWZmUGFyc2VyOiBkaWZmX21hdGNoX3BhdGNoO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuaW5pdFBhcnNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0UGFyc2VyKCkge1xyXG4gICAgdGhpcy5kaWZmUGFyc2VyID0gbmV3IGRpZmZfbWF0Y2hfcGF0Y2goKTtcclxuICB9XHJcblxyXG4gIGdldERpZmZzQnlMaW5lcyhsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBQcm9taXNlPERpZmZUYWJsZVJvd1Jlc3VsdFtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgYSA9IHRoaXMuZGlmZlBhcnNlci5kaWZmX2xpbmVzVG9DaGFyc18obGVmdCwgcmlnaHQpO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDEgPSBhLmNoYXJzMTtcclxuICAgICAgY29uc3QgbGluZVRleHQyID0gYS5jaGFyczI7XHJcbiAgICAgIGNvbnN0IGxpbmVzQXJyYXkgPSBhLmxpbmVBcnJheTtcclxuICAgICAgY29uc3QgZGlmZnM6IERpZmZbXSA9IHRoaXMuZGlmZlBhcnNlci5kaWZmX21haW4obGluZVRleHQxLCBsaW5lVGV4dDIsIHRydWUpO1xyXG4gICAgICB0aGlzLmRpZmZQYXJzZXIuZGlmZl9jaGFyc1RvTGluZXNfKGRpZmZzLCBsaW5lc0FycmF5KTtcclxuICAgICAgY29uc3Qgcm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSB0aGlzLmZvcm1hdE91dHB1dChkaWZmcyk7XHJcbiAgICAgIGlmICghcm93cykge1xyXG4gICAgICAgIHJlamVjdCgnRXJyb3InKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZShyb3dzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRPdXRwdXQoZGlmZnM6IERpZmZbXSk6IERpZmZUYWJsZVJvd1Jlc3VsdFtdIHtcclxuICAgIGxldCBsaW5lTGVmdCA9IDE7XHJcbiAgICBsZXQgbGluZVJpZ2h0ID0gMTtcclxuICAgIHJldHVybiBkaWZmcy5yZWR1Y2UoKHJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdLCBkaWZmOiBEaWZmKSA9PiB7XHJcbiAgICAgIGlmICghcm93cykge1xyXG4gICAgICAgIHJvd3MgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkaWZmVHlwZTogbnVtYmVyID0gZGlmZlswXTtcclxuICAgICAgY29uc3QgZGlmZlZhbHVlOiBzdHJpbmcgPSBkaWZmWzFdO1xyXG4gICAgICBsZXQgbGVmdERpZmZSb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByaWdodERpZmZSb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCBsZWZ0Q29udGVudDogRGlmZkxpbmVSZXN1bHQgPSBudWxsO1xyXG4gICAgICBsZXQgcmlnaHRDb250ZW50OiBEaWZmTGluZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByb3dUZW1wOiBEaWZmVGFibGVSb3dSZXN1bHQgPSBudWxsO1xyXG4gICAgICBzd2l0Y2ggKGRpZmZUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBESUZGX0VRVUFMOiAvLyAwXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTGVmdCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbXSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJydcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbXSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJydcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJvd1RlbXAgPSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0Q29udGVudCxcclxuICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICAgIGJlbG9uZ1RvOiAnYm90aCcsXHJcbiAgICAgICAgICAgICAgICBoYXNEaWZmczogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJvd3MucHVzaChyb3dUZW1wKTtcclxuICAgICAgICAgICAgICBsaW5lUmlnaHQgPSBsaW5lUmlnaHQgKyAxO1xyXG4gICAgICAgICAgICAgIGxpbmVMZWZ0ID0gbGluZUxlZnQgKyAxO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRElGRl9ERUxFVEU6IC8vIC0xXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgcmlnaHREaWZmUm93ID0gcm93cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgcm93ID0+ICFyb3cubGVmdENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LmxpbmVOdW1iZXIgPT09IGxpbmVMZWZ0ICYmIHJvdy5yaWdodENvbnRlbnQucHJlZml4ICE9PSAnJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTGVmdCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICctJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKHJpZ2h0RGlmZlJvdykge1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50ID0gbGVmdENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQubGluZURpZmZzID0gdGhpcy5nZXREaWZmUGFydHMoXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZURpZmZzID0gdGhpcy5nZXREaWZmUGFydHMoXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5iZWxvbmdUbyA9ICdib3RoJztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgaGFzRGlmZnM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGJlbG9uZ1RvOiAnbGVmdCdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfSU5TRVJUOiAvLyAxXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gcm93LmxlZnRDb250ZW50ICYmICFyb3cucmlnaHRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lUmlnaHQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcrJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQgPSByaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgYmVsb25nVG86ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lUmlnaHQgPSBsaW5lUmlnaHQgKyAxO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByb3dzO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaWZmUGFydHModmFsdWU6IHN0cmluZywgY29tcGFyZVZhbHVlOiBzdHJpbmcpOiBEaWZmUGFydFtdIHtcclxuICAgIGNvbnN0IGRpZmZQYXJ0czogRGlmZlBhcnRbXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGogPSAwO1xyXG4gICAgbGV0IHNoYXJlZCA9ICcnO1xyXG4gICAgbGV0IGRpZmYgPSAnJztcclxuXHJcbiAgICB3aGlsZSAoaSA8IHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodmFsdWVbaV0gPT09IGNvbXBhcmVWYWx1ZVtqXSAmJiBqIDwgY29tcGFyZVZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChkaWZmICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICAgICAgICBkaWZmID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNoYXJlZCArPSB2YWx1ZVtpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2hhcmVkICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICAgICAgICBzaGFyZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlmZiArPSB2YWx1ZVtpXTtcclxuICAgICAgfVxyXG4gICAgICBpKys7XHJcbiAgICAgIGorKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpZmZQYXJ0cztcclxuICB9XHJcbn1cclxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUt2RCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7O2tCQUNyRCxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztrQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztrQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztrQkFDeEIsS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztrQkFDaEQsSUFBSSxHQUF5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNqQjtZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7OztJQUVPLFlBQVksQ0FBQyxLQUFhOztZQUM1QixRQUFRLEdBQUcsQ0FBQzs7WUFDWixTQUFTLEdBQUcsQ0FBQztRQUNqQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEwQixFQUFFLElBQVUsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNYOztrQkFDSyxRQUFRLEdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQzs7a0JBQzFCLFNBQVMsR0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDOztnQkFDN0IsV0FBVyxHQUF1QixJQUFJOztnQkFDdEMsWUFBWSxHQUF1QixJQUFJOztnQkFDdkMsV0FBVyxHQUFtQixJQUFJOztnQkFDbEMsWUFBWSxHQUFtQixJQUFJOztnQkFDbkMsT0FBTyxHQUF1QixJQUFJO1lBQ3RDLFFBQVEsUUFBUSxFQUFFO2dCQUNoQixLQUFLLFVBQVUsRUFBRSxJQUFJO29CQUNuQixTQUFTO3lCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7eUJBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3hCO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2QsV0FBVyxHQUFHOzRCQUNaLFVBQVUsRUFBRSxRQUFROzRCQUNwQixXQUFXLEVBQUUsSUFBSTs0QkFDakIsU0FBUyxFQUFFLEVBQUU7NEJBQ2IsTUFBTSxFQUFFLEVBQUU7eUJBQ1gsQ0FBQzt3QkFDRixZQUFZLEdBQUc7NEJBQ2IsVUFBVSxFQUFFLFNBQVM7NEJBQ3JCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixTQUFTLEVBQUUsRUFBRTs0QkFDYixNQUFNLEVBQUUsRUFBRTt5QkFDWCxDQUFDO3dCQUNGLE9BQU8sR0FBRzs0QkFDUixXQUFXOzRCQUNYLFlBQVk7NEJBQ1osUUFBUSxFQUFFLE1BQU07NEJBQ2hCLFFBQVEsRUFBRSxLQUFLOzRCQUNmLFFBQVEsRUFBRSxDQUFDO3lCQUNaLENBQUM7d0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbkIsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzFCLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLENBQUMsQ0FBQztvQkFDTCxNQUFNO2dCQUNSLEtBQUssV0FBVyxFQUFFLEtBQUs7b0JBQ3JCLFNBQVM7eUJBQ04sS0FBSyxDQUFDLElBQUksQ0FBQzt5QkFDWCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUM5QixJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDeEI7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQyxDQUFDO3lCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDZCxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUMxSCxDQUFDO3dCQUNGLFdBQVcsR0FBRzs0QkFDWixVQUFVLEVBQUUsUUFBUTs0QkFDcEIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzVDLE1BQU0sRUFBRSxHQUFHO3lCQUNaLENBQUM7d0JBQ0YsSUFBSSxZQUFZLEVBQUU7NEJBQ2hCLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOzRCQUN2QyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNwRCxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFDcEMsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3RDLENBQUM7NEJBQ0YsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDckQsWUFBWSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQ3JDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNyQyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDOzRCQUMvQixZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQ3ZEOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ1IsV0FBVztnQ0FDWCxZQUFZLEVBQUUsSUFBSTtnQ0FDbEIsUUFBUSxFQUFFLElBQUk7Z0NBQ2QsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLFFBQVEsRUFBRSxDQUFDOzZCQUNaLENBQUMsQ0FBQzt5QkFDSjt3QkFDRCxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsTUFBTTtnQkFDUixLQUFLLFdBQVcsRUFBRSxJQUFJO29CQUNwQixTQUFTO3lCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7eUJBQ1gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3hCO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2QsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FDekgsQ0FBQzt3QkFDRixZQUFZLEdBQUc7NEJBQ2IsVUFBVSxFQUFFLFNBQVM7NEJBQ3JCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzRCQUM1QyxNQUFNLEVBQUUsR0FBRzt5QkFDWixDQUFDO3dCQUNGLElBQUksV0FBVyxFQUFFOzRCQUNmLFdBQVcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDOzRCQUN4QyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUNuRCxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFDbkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQ3JDLENBQUM7NEJBQ0YsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDcEQsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQ3BDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNwQyxDQUFDOzRCQUNGLFdBQVcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDOzRCQUM5QixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ3JEOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ1IsV0FBVyxFQUFFLElBQUk7Z0NBQ2pCLFlBQVk7Z0NBQ1osUUFBUSxFQUFFLElBQUk7Z0NBQ2QsUUFBUSxFQUFFLE9BQU87Z0NBQ2pCLFFBQVEsRUFBRSxDQUFDOzZCQUNaLENBQUMsQ0FBQzt5QkFDSjt3QkFDRCxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsTUFBTTthQUNUO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDOzs7Ozs7SUFFTyxVQUFVLENBQUMsTUFBMEI7O1lBQ3ZDLFNBQVMsR0FBRyxDQUFDO1FBQ2pCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM5RTtRQUNELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN0QixTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMvRTtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLFlBQW9COztjQUNoRCxTQUFTLEdBQWUsRUFBRTs7WUFDNUIsQ0FBQyxHQUFHLENBQUM7O1lBQ0wsQ0FBQyxHQUFHLENBQUM7O1lBQ0wsTUFBTSxHQUFHLEVBQUU7O1lBQ1gsSUFBSSxHQUFHLEVBQUU7UUFFYixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO29CQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUNYO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO29CQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDbkQsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDYjtnQkFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1lBQ0QsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakQ7YUFBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7WUF0TkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7Ozs7O0lBRUMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmLCBESUZGX0RFTEVURSwgRElGRl9FUVVBTCwgRElGRl9JTlNFUlQsIGRpZmZfbWF0Y2hfcGF0Y2ggfSBmcm9tICdkaWZmLW1hdGNoLXBhdGNoJztcclxuaW1wb3J0IHsgRGlmZkxpbmVSZXN1bHQsIERpZmZQYXJ0LCBEaWZmVGFibGVSb3dSZXN1bHQgfSBmcm9tICcuL25neC10ZXh0LWRpZmYubW9kZWwnO1xyXG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi51dGlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUZXh0RGlmZlNlcnZpY2Uge1xyXG4gIGRpZmZQYXJzZXI6IGRpZmZfbWF0Y2hfcGF0Y2g7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pbml0UGFyc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXJzZXIoKSB7XHJcbiAgICB0aGlzLmRpZmZQYXJzZXIgPSBuZXcgZGlmZl9tYXRjaF9wYXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlmZnNCeUxpbmVzKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBhID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbGluZXNUb0NoYXJzXyhsZWZ0LCByaWdodCk7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MSA9IGEuY2hhcnMxO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDIgPSBhLmNoYXJzMjtcclxuICAgICAgY29uc3QgbGluZXNBcnJheSA9IGEubGluZUFycmF5O1xyXG4gICAgICBjb25zdCBkaWZmczogRGlmZltdID0gdGhpcy5kaWZmUGFyc2VyLmRpZmZfbWFpbihsaW5lVGV4dDEsIGxpbmVUZXh0MiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlmZlBhcnNlci5kaWZmX2NoYXJzVG9MaW5lc18oZGlmZnMsIGxpbmVzQXJyYXkpO1xyXG4gICAgICBjb25zdCByb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IHRoaXMuZm9ybWF0T3V0cHV0KGRpZmZzKTtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcmVqZWN0KCdFcnJvcicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXNvbHZlKHJvd3MpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE91dHB1dChkaWZmczogRGlmZltdKTogRGlmZlRhYmxlUm93UmVzdWx0W10ge1xyXG4gICAgbGV0IGxpbmVMZWZ0ID0gMTtcclxuICAgIGxldCBsaW5lUmlnaHQgPSAxO1xyXG4gICAgcmV0dXJuIGRpZmZzLnJlZHVjZSgocm93czogRGlmZlRhYmxlUm93UmVzdWx0W10sIGRpZmY6IERpZmYpID0+IHtcclxuICAgICAgaWYgKCFyb3dzKSB7XHJcbiAgICAgICAgcm93cyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRpZmZUeXBlOiBudW1iZXIgPSBkaWZmWzBdO1xyXG4gICAgICBjb25zdCBkaWZmVmFsdWU6IHN0cmluZyA9IGRpZmZbMV07XHJcbiAgICAgIGxldCBsZWZ0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJpZ2h0RGlmZlJvdzogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IGxlZnRDb250ZW50OiBEaWZmTGluZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByaWdodENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJvd1RlbXA6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIHN3aXRjaCAoZGlmZlR5cGUpIHtcclxuICAgICAgICBjYXNlIERJRkZfRVFVQUw6IC8vIDBcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmlnaHRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93VGVtcCA9IHtcclxuICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgYmVsb25nVG86ICdib3RoJyxcclxuICAgICAgICAgICAgICAgIGhhc0RpZmZzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG51bURpZmZzOiAwLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcm93cy5wdXNoKHJvd1RlbXApO1xyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgICAgbGluZUxlZnQgPSBsaW5lTGVmdCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBESUZGX0RFTEVURTogLy8gLTFcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICByaWdodERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gIXJvdy5sZWZ0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50ICYmIHJvdy5yaWdodENvbnRlbnQubGluZU51bWJlciA9PT0gbGluZUxlZnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggIT09ICcnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVMZWZ0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFt7IGNvbnRlbnQ6IGxpbmUsIGlzRGlmZjogdHJ1ZSB9XSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJy0nXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAocmlnaHREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQgPSBsZWZ0Q29udGVudDtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93Lm51bURpZmZzID0gdGhpcy5jb3VudERpZmZzKHJpZ2h0RGlmZlJvdyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBiZWxvbmdUbzogJ2xlZnQnLFxyXG4gICAgICAgICAgICAgICAgICBudW1EaWZmczogMSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfSU5TRVJUOiAvLyAxXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gcm93LmxlZnRDb250ZW50ICYmICFyb3cucmlnaHRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lUmlnaHQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcrJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQgPSByaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubnVtRGlmZnMgPSB0aGlzLmNvdW50RGlmZnMobGVmdERpZmZSb3cpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgYmVsb25nVG86ICdyaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgIG51bURpZmZzOiAxLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxpbmVSaWdodCA9IGxpbmVSaWdodCArIDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50RGlmZnMocmVzdWx0OiBEaWZmVGFibGVSb3dSZXN1bHQpOiBudW1iZXIge1xyXG4gICAgbGV0IGRpZmZDb3VudCA9IDA7XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQubGVmdENvbnRlbnQubGluZURpZmZzLmZpbHRlcihkaWZmID0+IGRpZmYuaXNEaWZmKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0LmxlZnRDb250ZW50KSB7XHJcbiAgICAgIGRpZmZDb3VudCArPSByZXN1bHQucmlnaHRDb250ZW50LmxpbmVEaWZmcy5maWx0ZXIoZGlmZiA9PiBkaWZmLmlzRGlmZikubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZDb3VudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGlmZlBhcnRzKHZhbHVlOiBzdHJpbmcsIGNvbXBhcmVWYWx1ZTogc3RyaW5nKTogRGlmZlBhcnRbXSB7XHJcbiAgICBjb25zdCBkaWZmUGFydHM6IERpZmZQYXJ0W10gPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBqID0gMDtcclxuICAgIGxldCBzaGFyZWQgPSAnJztcclxuICAgIGxldCBkaWZmID0gJyc7XHJcblxyXG4gICAgd2hpbGUgKGkgPCB2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKHZhbHVlW2ldID09PSBjb21wYXJlVmFsdWVbal0gJiYgaiA8IGNvbXBhcmVWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgICAgICAgZGlmZiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFyZWQgKz0gdmFsdWVbaV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgc2hhcmVkID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmYgKz0gdmFsdWVbaV07XHJcbiAgICAgIH1cclxuICAgICAgaSsrO1xyXG4gICAgICBqKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpZmYgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogZGlmZiwgaXNEaWZmOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzaGFyZWQgIT09ICcnKSB7XHJcbiAgICAgIGRpZmZQYXJ0cy5wdXNoKHsgY29udGVudDogc2hhcmVkLCBpc0RpZmY6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWZmUGFydHM7XHJcbiAgfVxyXG59XHJcbiJdfQ== |
@@ -6,3 +6,3 @@ /** | ||
import * as tslib_1 from "tslib"; | ||
import { ChangeDetectorRef, Component, Input } from '@angular/core'; | ||
import { ChangeDetectorRef, Component, Input, Output, EventEmitter } from '@angular/core'; | ||
import { NgxTextDiffService } from './ngx-text-diff.service'; | ||
@@ -14,2 +14,3 @@ import { Observable } from 'rxjs'; | ||
this.cd = cd; | ||
this._hideMatchingLines = false; | ||
this.format = 'SideBySide'; | ||
@@ -19,3 +20,5 @@ this.left = ''; | ||
this.loading = false; | ||
this.showToolbar = true; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -26,3 +29,2 @@ this.tableRows = []; | ||
this.filteredTableRowsLineByLine = []; | ||
this.showLinesDiffs = false; | ||
this.diffsCount = 0; | ||
@@ -35,3 +37,3 @@ this.formatOptions = [ | ||
value: 'SideBySide', | ||
icon: 'la-code' | ||
icon: 'la-code', | ||
}, | ||
@@ -43,6 +45,23 @@ { | ||
value: 'LineByLine', | ||
icon: 'la-file-text' | ||
} | ||
icon: 'la-file-text', | ||
}, | ||
]; | ||
} | ||
Object.defineProperty(NgxTextDiffComponent.prototype, "hideMatchingLines", { | ||
get: /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
return this._hideMatchingLines; | ||
}, | ||
set: /** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ | ||
function (hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
}, | ||
enumerable: true, | ||
configurable: true | ||
}); | ||
/** | ||
@@ -89,3 +108,3 @@ * @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.showLinesDiffsChange = /** | ||
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = /** | ||
* @param {?} value | ||
@@ -95,4 +114,4 @@ * @return {?} | ||
function (value) { | ||
this.showLinesDiffs = value; | ||
if (this.showLinesDiffs) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
@@ -145,3 +164,4 @@ this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -154,3 +174,4 @@ } | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -164,5 +185,6 @@ } | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }).length; | ||
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]; | ||
@@ -178,2 +200,23 @@ case 2: | ||
/** | ||
* @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); | ||
}; | ||
/** | ||
* @param {?} index | ||
@@ -207,3 +250,3 @@ * @param {?} row | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
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}"] | ||
@@ -223,3 +266,12 @@ }] } | ||
loading: [{ type: Input }], | ||
showBtnToolbar: [{ 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 }] | ||
}; | ||
@@ -230,2 +282,7 @@ return NgxTextDiffComponent; | ||
if (false) { | ||
/** | ||
* @type {?} | ||
* @private | ||
*/ | ||
NgxTextDiffComponent.prototype._hideMatchingLines; | ||
/** @type {?} */ | ||
@@ -242,4 +299,20 @@ NgxTextDiffComponent.prototype.format; | ||
/** @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; | ||
@@ -255,4 +328,2 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.showLinesDiffs; | ||
/** @type {?} */ | ||
NgxTextDiffComponent.prototype.diffsCount; | ||
@@ -272,2 +343,2 @@ /** @type {?} */ | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhEO0lBcUNFLDhCQUFvQixJQUF3QixFQUFVLEVBQXFCO1FBQXZELFNBQUksR0FBSixJQUFJLENBQW9CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEvQmxFLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUMvQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUF5QixFQUFFLENBQUM7UUFDckMsc0JBQWlCLEdBQXlCLEVBQUUsQ0FBQztRQUM3Qyx3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBQy9DLGdDQUEyQixHQUF5QixFQUFFLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLGtCQUFhLEdBQTRCO1lBQ3ZDO2dCQUNFLEVBQUUsRUFBRSxjQUFjO2dCQUNsQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLEVBQUUsRUFBRSxjQUFjO2dCQUNsQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxZQUFZO2dCQUNuQixJQUFJLEVBQUUsY0FBYzthQUNyQjtTQUNGLENBQUM7SUFFNEUsQ0FBQzs7OztJQUUvRSx1Q0FBUTs7O0lBQVI7UUFBQSxpQkFvQkM7UUFuQkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFBLE9BQU87Z0JBQ2hDLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixLQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLEtBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDbEMsS0FBSSxDQUFDLFdBQVcsRUFBRTtxQkFDZixJQUFJLENBQUM7b0JBQ0osS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDeEIsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsY0FBTSxPQUFBLENBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBdEIsQ0FBc0IsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUU7YUFDZixJQUFJLENBQUMsY0FBTSxPQUFBLENBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBdEIsQ0FBc0IsQ0FBQzthQUNsQyxLQUFLLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQXRCLENBQXNCLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7O0lBRUQsMENBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxJQUFJLE9BQUEsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUExQixDQUEwQixDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDOzs7OztJQUVELG1EQUFvQjs7OztJQUFwQixVQUFxQixLQUFjO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQzVDLFVBQUEsR0FBRyxJQUFJLE9BQUEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBNUcsQ0FBNEcsQ0FDcEgsQ0FBQztZQUNGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUNoRSxVQUFBLEdBQUcsSUFBSSxPQUFBLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQTVHLENBQTRHLENBQ3BILENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUM3RDtJQUNILENBQUM7Ozs7O0lBRUQsaURBQWtCOzs7O0lBQWxCLFVBQW1CLE1BQXVCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7Ozs7SUFFSywwQ0FBVzs7O0lBQWpCOzs7Ozs7O3dCQUVJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQixLQUFBLElBQUksQ0FBQTt3QkFBYSxxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQTs7d0JBQXZFLEdBQUssU0FBUyxHQUFHLFNBQXNELENBQUM7d0JBQ3hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFDLGVBQXFDLEVBQUUsR0FBdUI7NEJBQzlHLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0NBQ3BCLGVBQWUsR0FBRyxFQUFFLENBQUM7NkJBQ3RCOzRCQUNELElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtnQ0FDaEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO29DQUNuQixlQUFlLENBQUMsSUFBSSxDQUFDO3dDQUNuQixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7d0NBQzVCLFlBQVksRUFBRSxJQUFJO3dDQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7d0NBQ3RCLFFBQVEsRUFBRSxJQUFJO3FDQUNmLENBQUMsQ0FBQztpQ0FDSjtnQ0FDRCxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUU7b0NBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUM7d0NBQ25CLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7d0NBQzlCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTt3Q0FDdEIsUUFBUSxFQUFFLElBQUk7cUNBQ2YsQ0FBQyxDQUFDO2lDQUNKOzZCQUNGO2lDQUFNO2dDQUNMLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NkJBQzNCOzRCQUVELE9BQU8sZUFBZSxDQUFDO3dCQUN6QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDckMsVUFBQSxHQUFHLElBQUksT0FBQSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUE1RyxDQUE0RyxDQUNwSCxDQUFDLE1BQU0sQ0FBQzt3QkFDVCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzs7Ozt3QkFFNUQsTUFBTSxHQUFDLENBQUM7Ozs7O0tBRVg7Ozs7OztJQUVELDZDQUFjOzs7OztJQUFkLFVBQWUsS0FBSyxFQUFFLEdBQXVCO1FBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNuSSxDQUFDOzs7Ozs7SUFFRCx5Q0FBVTs7Ozs7SUFBVixVQUFXLEtBQUssRUFBRSxJQUFjO1FBQzlCLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6RCxDQUFDOztnQkFySUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLHVpTkFBNkM7O2lCQUU5Qzs7OztnQkFQUSxrQkFBa0I7Z0JBRmxCLGlCQUFpQjs7O3lCQVd2QixLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzs4QkFDTCxLQUFLOzBCQUNMLEtBQUs7aUNBQ0wsS0FBSzs7SUEySFIsMkJBQUM7Q0FBQSxBQXRJRCxJQXNJQztTQWpJWSxvQkFBb0I7OztJQUMvQixzQ0FBZ0Q7O0lBQ2hELG9DQUFtQjs7SUFDbkIscUNBQW9COztJQUNwQiwyQ0FBOEM7O0lBQzlDLHVDQUF5Qjs7SUFDekIsOENBQStCOztJQUMvQiw2Q0FBbUM7O0lBQ25DLHlDQUFxQzs7SUFDckMsaURBQTZDOztJQUM3QyxtREFBK0M7O0lBQy9DLDJEQUF1RDs7SUFDdkQsOENBQXVCOztJQUN2QiwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpZmZDb250ZW50LCBEaWZmUGFydCwgRGlmZlRhYmxlRm9ybWF0LCBEaWZmVGFibGVGb3JtYXRPcHRpb24sIERpZmZUYWJsZVJvd1Jlc3VsdCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5tb2RlbCc7XHJcbmltcG9ydCB7IE5neFRleHREaWZmU2VydmljZSB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RkLW5neC10ZXh0LWRpZmYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZ3gtdGV4dC1kaWZmLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnRuVG9vbGJhciA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICB0YWJsZVJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgZmlsdGVyZWRUYWJsZVJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgdGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmU6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gW107XHJcbiAgc2hvd0xpbmVzRGlmZnMgPSBmYWxzZTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ2xpbmUtYnktbGluZScsXHJcbiAgICAgIG5hbWU6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBsYWJlbDogJ0xpbmUgYnkgTGluZScsXHJcbiAgICAgIHZhbHVlOiAnTGluZUJ5TGluZScsXHJcbiAgICAgIGljb246ICdsYS1maWxlLXRleHQnXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dMaW5lc0RpZmZzQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNob3dMaW5lc0RpZmZzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5zaG93TGluZXNEaWZmcykge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXREaWZmVGFibGVGb3JtYXQoZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQpIHtcclxuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRGlmZnMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLnRhYmxlUm93cyA9IGF3YWl0IHRoaXMuZGlmZi5nZXREaWZmc0J5TGluZXModGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcclxuICAgICAgdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3MucmVkdWNlKCh0YWJsZUxpbmVCeUxpbmU6IERpZmZUYWJsZVJvd1Jlc3VsdFtdLCByb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGFibGVMaW5lQnlMaW5lKSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvdy5oYXNEaWZmcykge1xyXG4gICAgICAgICAgaWYgKHJvdy5sZWZ0Q29udGVudCkge1xyXG4gICAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaCh7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQ6IHJvdy5sZWZ0Q29udGVudCxcclxuICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgYmVsb25nVG86IHJvdy5iZWxvbmdUbyxcclxuICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyb3cucmlnaHRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICByaWdodENvbnRlbnQ6IHJvdy5yaWdodENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgYmVsb25nVG86IHJvdy5iZWxvbmdUbyxcclxuICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2gocm93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZUxpbmVCeUxpbmU7XHJcbiAgICAgIH0sIFtdKTtcclxuICAgICAgdGhpcy5kaWZmc0NvdW50ID0gdGhpcy50YWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAgIHJvdyA9PiAocm93LmxlZnRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5wcmVmaXggPT09ICctJykgfHwgKHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5wcmVmaXggPT09ICcrJylcclxuICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cztcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmU7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFja1RhYmxlUm93cyhpbmRleCwgcm93OiBEaWZmVGFibGVSb3dSZXN1bHQpIHtcclxuICAgIHJldHVybiByb3cgJiYgcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50IDogcm93ICYmIHJvdy5yaWdodENvbnRlbnQgPyByb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50IDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tEaWZmcyhpbmRleCwgZGlmZjogRGlmZlBhcnQpIHtcclxuICAgIHJldHVybiBkaWZmICYmIGRpZmYuY29udGVudCA/IGRpZmYuY29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtdGV4dC1kaWZmLyIsInNvdXJjZXMiOlsibGliL25neC10ZXh0LWRpZmYuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFaEQ7SUFzREUsOEJBQW9CLElBQXdCLEVBQVUsRUFBcUI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWhEbkUsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBb0IsWUFBWSxDQUFDO1FBQ3ZDLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixtQkFBYyxHQUFHLElBQUksQ0FBQztRQWVyQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDM0Qsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0Msd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUMvQyxnQ0FBMkIsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixrQkFBYSxHQUE0QjtZQUN2QztnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSxjQUFjO2dCQUNy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QztDQUFBLEFBeEtELElBd0tDO1NBbktZLG9CQUFvQjs7Ozs7O0lBQy9CLGtEQUFtQzs7SUFFbkMsc0NBQWdEOztJQUNoRCxvQ0FBbUI7O0lBQ25CLHFDQUFvQjs7SUFDcEIsMkNBQThDOztJQUM5Qyx1Q0FBeUI7O0lBQ3pCLDJDQUE0Qjs7SUFDNUIsOENBQStCOztJQVMvQixtREFBcUM7O0lBQ3JDLG1EQUFrQzs7SUFDbEMsNENBQThCOztJQUM5Qiw0Q0FBMkI7O0lBQzNCLGdEQUFrQzs7SUFDbEMsZ0RBQStCOztJQUMvQiw4Q0FBMkQ7O0lBQzNELDZDQUFtQzs7SUFDbkMseUNBQXFDOztJQUNyQyxpREFBNkM7O0lBQzdDLG1EQUErQzs7SUFDL0MsMkRBQXVEOztJQUN2RCwwQ0FBZTs7SUFFZiw2Q0FlRTs7Ozs7SUFFVSxvQ0FBZ0M7Ozs7O0lBQUUsa0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWZmQ29udGVudCwgRGlmZlBhcnQsIERpZmZUYWJsZUZvcm1hdCwgRGlmZlRhYmxlRm9ybWF0T3B0aW9uLCBEaWZmVGFibGVSb3dSZXN1bHQsIERpZmZSZXN1bHRzIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgTmd4VGV4dERpZmZTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGQtbmd4LXRleHQtZGlmZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25neC10ZXh0LWRpZmYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10ZXh0LWRpZmYuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfaGlkZU1hdGNoaW5nTGluZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybWF0OiBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZSc7XHJcbiAgQElucHV0KCkgbGVmdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJpZ2h0ID0gJyc7XHJcbiAgQElucHV0KCkgZGlmZkNvbnRlbnQ6IE9ic2VydmFibGU8RGlmZkNvbnRlbnQ+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0J0blRvb2xiYXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGhpZGVNYXRjaGluZ0xpbmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGVNYXRjaGluZ0xpbmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGhpZGVNYXRjaGluZ0xpbmVzKGhpZGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaGlkZU1hdGNoaW5nTGluZXNDaGFuZ2VkKGhpZGUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBvdXRlckNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3V0ZXJDb250YWluZXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJTdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIGNvbXBhcmVSb3dzQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBjb21wYXJlUm93c1N0eWxlOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNvbXBhcmVSZXN1bHRzID0gbmV3IEV2ZW50RW1pdHRlcjxEaWZmUmVzdWx0cz4oKTtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBmaWx0ZXJlZFRhYmxlUm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICB0YWJsZVJvd3NMaW5lQnlMaW5lOiBEaWZmVGFibGVSb3dSZXN1bHRbXSA9IFtdO1xyXG4gIGZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10gPSBbXTtcclxuICBkaWZmc0NvdW50ID0gMDtcclxuXHJcbiAgZm9ybWF0T3B0aW9uczogRGlmZlRhYmxlRm9ybWF0T3B0aW9uW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnc2lkZS1ieS1zaWRlJyxcclxuICAgICAgbmFtZTogJ3NpZGUtYnktc2lkZScsXHJcbiAgICAgIGxhYmVsOiAnU2lkZSBieSBTaWRlJyxcclxuICAgICAgdmFsdWU6ICdTaWRlQnlTaWRlJyxcclxuICAgICAgaWNvbjogJ2xhLWNvZGUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdsaW5lLWJ5LWxpbmUnLFxyXG4gICAgICBuYW1lOiAnbGluZS1ieS1saW5lJyxcclxuICAgICAgbGFiZWw6ICdMaW5lIGJ5IExpbmUnLFxyXG4gICAgICB2YWx1ZTogJ0xpbmVCeUxpbmUnLFxyXG4gICAgICBpY29uOiAnbGEtZmlsZS10ZXh0JyxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWZmOiBOZ3hUZXh0RGlmZlNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kaWZmQ29udGVudCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRpZmZDb250ZW50LnN1YnNjcmliZShjb250ZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxlZnQgPSBjb250ZW50LmxlZnRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yaWdodCA9IGNvbnRlbnQucmlnaHRDb250ZW50O1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJEaWZmcygpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckRpZmZzKClcclxuICAgICAgLnRoZW4oKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcclxuICAgICAgLmNhdGNoKGUgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVNYXRjaGluZ0xpbmVzQ2hhbmdlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGlkZU1hdGNoaW5nTGluZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmhpZGVNYXRjaGluZ0xpbmVzKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3MgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZS5maWx0ZXIoXHJcbiAgICAgICAgcm93ID0+IChyb3cubGVmdENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCA9PT0gJy0nKSB8fCAocm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCA9PT0gJysnKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZFRhYmxlUm93cyA9IHRoaXMudGFibGVSb3dzO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzTGluZUJ5TGluZSA9IHRoaXMudGFibGVSb3dzTGluZUJ5TGluZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpZmZUYWJsZUZvcm1hdChmb3JtYXQ6IERpZmZUYWJsZUZvcm1hdCkge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJEaWZmcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZGlmZnNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMudGFibGVSb3dzID0gYXdhaXQgdGhpcy5kaWZmLmdldERpZmZzQnlMaW5lcyh0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xyXG4gICAgICB0aGlzLnRhYmxlUm93c0xpbmVCeUxpbmUgPSB0aGlzLnRhYmxlUm93cy5yZWR1Y2UoKHRhYmxlTGluZUJ5TGluZTogRGlmZlRhYmxlUm93UmVzdWx0W10sIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0YWJsZUxpbmVCeUxpbmUpIHtcclxuICAgICAgICAgIHRhYmxlTGluZUJ5TGluZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93Lmhhc0RpZmZzKSB7XHJcbiAgICAgICAgICBpZiAocm93LmxlZnRDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZUJ5TGluZS5wdXNoKHtcclxuICAgICAgICAgICAgICBsZWZ0Q29udGVudDogcm93LmxlZnRDb250ZW50LFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJvdy5yaWdodENvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGFibGVMaW5lQnlMaW5lLnB1c2goe1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogcm93LnJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICBiZWxvbmdUbzogcm93LmJlbG9uZ1RvLFxyXG4gICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YWJsZUxpbmVCeUxpbmUucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlTGluZUJ5TGluZTtcclxuICAgICAgfSwgW10pO1xyXG4gICAgICB0aGlzLmRpZmZzQ291bnQgPSB0aGlzLnRhYmxlUm93cy5maWx0ZXIocm93ID0+IHJvdy5oYXNEaWZmcykubGVuZ3RoO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVGFibGVSb3dzID0gdGhpcy50YWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRUYWJsZVJvd3NMaW5lQnlMaW5lID0gdGhpcy50YWJsZVJvd3NMaW5lQnlMaW5lO1xyXG4gICAgICB0aGlzLmVtaXRDb21wYXJlUmVzdWx0c0V2ZW50KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29tcGFyZVJlc3VsdHNFdmVudCgpIHtcclxuICAgIGNvbnN0IGRpZmZSZXN1bHRzOiBEaWZmUmVzdWx0cyA9IHtcclxuICAgICAgaGFzRGlmZjogdGhpcy5kaWZmc0NvdW50ID4gMCxcclxuICAgICAgZGlmZnNDb3VudDogdGhpcy5kaWZmc0NvdW50LFxyXG4gICAgICByb3dzV2l0aERpZmY6IHRoaXMudGFibGVSb3dzXHJcbiAgICAgICAgLmZpbHRlcihyb3cgPT4gcm93Lmhhc0RpZmZzKVxyXG4gICAgICAgIC5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICBsZWZ0TGluZU51bWJlcjogcm93LmxlZnRDb250ZW50ID8gcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgOiBudWxsLFxyXG4gICAgICAgICAgcmlnaHRMaW5lTnVtYmVyOiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyIDogbnVsbCxcclxuICAgICAgICAgIG51bURpZmZzOiByb3cubnVtRGlmZnMsXHJcbiAgICAgICAgfSkpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmVSZXN1bHRzLm5leHQoZGlmZlJlc3VsdHMpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tUYWJsZVJvd3MoaW5kZXgsIHJvdzogRGlmZlRhYmxlUm93UmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcm93ICYmIHJvdy5sZWZ0Q29udGVudCA/IHJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCA6IHJvdyAmJiByb3cucmlnaHRDb250ZW50ID8gcm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudCA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHRyYWNrRGlmZnMoaW5kZXgsIGRpZmY6IERpZmZQYXJ0KSB7XHJcbiAgICByZXR1cm4gZGlmZiAmJiBkaWZmLmNvbnRlbnQgPyBkaWZmLmNvbnRlbnQgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ== |
@@ -70,3 +70,17 @@ /** | ||
DiffTableRowResult.prototype.hasDiffs; | ||
/** @type {?} */ | ||
DiffTableRowResult.prototype.numDiffs; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10ZXh0LWRpZmYvIiwic291cmNlcyI6WyJsaWIvbmd4LXRleHQtZGlmZi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsMkNBT0M7OztJQU5DLG1DQUFXOztJQUNYLHFDQUFhOztJQUNiLHNDQUFjOztJQUNkLHNDQUF1Qjs7SUFDdkIscUNBQWM7O0lBQ2QseUNBQW1COzs7OztBQUdyQixpQ0FHQzs7O0lBRkMsa0NBQW9COztJQUNwQixtQ0FBcUI7Ozs7O0FBR3ZCLDhCQUdDOzs7SUFGQywyQkFBZ0I7O0lBQ2hCLDBCQUFnQjs7Ozs7QUFHbEIsb0NBS0M7OztJQUpDLG9DQUFtQjs7SUFDbkIsZ0NBQWU7O0lBQ2YscUNBQW9COztJQUNwQixtQ0FBc0I7Ozs7O0FBR3hCLHdDQUtDOzs7SUFKQyx5Q0FBNEI7O0lBQzVCLDBDQUE2Qjs7SUFDN0Isc0NBQW1COztJQUNuQixzQ0FBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBEaWZmVGFibGVGb3JtYXQgPSAnU2lkZUJ5U2lkZScgfCAnTGluZUJ5TGluZSc7XHJcbmV4cG9ydCB0eXBlIFNpZGVEaWZmID0gJ2JvdGgnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlRhYmxlRm9ybWF0T3B0aW9uIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBEaWZmVGFibGVGb3JtYXQ7XHJcbiAgaWNvbj86IHN0cmluZztcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkNvbnRlbnQge1xyXG4gIGxlZnRDb250ZW50OiBzdHJpbmc7XHJcbiAgcmlnaHRDb250ZW50OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZlBhcnQge1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBpc0RpZmY6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlmZkxpbmVSZXN1bHQge1xyXG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcclxuICBwcmVmaXg6IHN0cmluZztcclxuICBsaW5lQ29udGVudDogc3RyaW5nO1xyXG4gIGxpbmVEaWZmczogRGlmZlBhcnRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWZmVGFibGVSb3dSZXN1bHQge1xyXG4gIGxlZnRDb250ZW50OiBEaWZmTGluZVJlc3VsdDtcclxuICByaWdodENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0O1xyXG4gIGJlbG9uZ1RvOiBTaWRlRGlmZjtcclxuICBoYXNEaWZmczogYm9vbGVhbjtcclxufVxyXG4iXX0= | ||
/** | ||
* @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= |
@@ -117,3 +117,4 @@ /** | ||
belongTo: 'both', | ||
hasDiffs: false | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
@@ -147,2 +148,3 @@ rows.push(rowTemp); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow); | ||
} | ||
@@ -154,3 +156,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'left' | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
@@ -183,2 +186,3 @@ } | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow); | ||
} | ||
@@ -190,3 +194,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'right' | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
@@ -203,2 +208,23 @@ } | ||
* @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 | ||
@@ -266,2 +292,2 @@ * @param {?} compareValue | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUV2RDtJQU1FO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sdUNBQVU7Ozs7SUFBbEI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCw0Q0FBZTs7Ozs7SUFBZixVQUFnQixJQUFZLEVBQUUsS0FBYTtRQUEzQyxpQkFlQztRQWRDLE9BQU8sSUFBSSxPQUFPLENBQXVCLFVBQUMsT0FBTyxFQUFFLE1BQU07O2dCQUNqRCxDQUFDLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztnQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztnQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztnQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztnQkFDeEIsS0FBSyxHQUFXLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLEtBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztnQkFDaEQsSUFBSSxHQUF5QixLQUFJLENBQUMsWUFBWSxDQUFDLEtB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RUFBRTtZQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7Z0JBdE1GLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7OzZCQVBEO0NBNE1DLEFBdk1ELElBdU1DO1NBcE1ZLGtCQUFrQjs7O0lBQzdCLHdDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlmZiwgRElGRl9ERUxFVEUsIERJRkZfRVFVQUwsIERJRkZfSU5TRVJULCBkaWZmX21hdGNoX3BhdGNoIH0gZnJvbSAnZGlmZi1tYXRjaC1wYXRjaCc7XHJcbmltcG9ydCB7IERpZmZMaW5lUmVzdWx0LCBEaWZmUGFydCwgRGlmZlRhYmxlUm93UmVzdWx0IH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLm1vZGVsJztcclxuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICcuL25neC10ZXh0LWRpZmYudXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VGV4dERpZmZTZXJ2aWNlIHtcclxuICBkaWZmUGFyc2VyOiBkaWZmX21hdGNoX3BhdGNoO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuaW5pdFBhcnNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0UGFyc2VyKCkge1xyXG4gICAgdGhpcy5kaWZmUGFyc2VyID0gbmV3IGRpZmZfbWF0Y2hfcGF0Y2goKTtcclxuICB9XHJcblxyXG4gIGdldERpZmZzQnlMaW5lcyhsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBQcm9taXNlPERpZmZUYWJsZVJvd1Jlc3VsdFtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RGlmZlRhYmxlUm93UmVzdWx0W10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgYSA9IHRoaXMuZGlmZlBhcnNlci5kaWZmX2xpbmVzVG9DaGFyc18obGVmdCwgcmlnaHQpO1xyXG4gICAgICBjb25zdCBsaW5lVGV4dDEgPSBhLmNoYXJzMTtcclxuICAgICAgY29uc3QgbGluZVRleHQyID0gYS5jaGFyczI7XHJcbiAgICAgIGNvbnN0IGxpbmVzQXJyYXkgPSBhLmxpbmVBcnJheTtcclxuICAgICAgY29uc3QgZGlmZnM6IERpZmZbXSA9IHRoaXMuZGlmZlBhcnNlci5kaWZmX21haW4obGluZVRleHQxLCBsaW5lVGV4dDIsIHRydWUpO1xyXG4gICAgICB0aGlzLmRpZmZQYXJzZXIuZGlmZl9jaGFyc1RvTGluZXNfKGRpZmZzLCBsaW5lc0FycmF5KTtcclxuICAgICAgY29uc3Qgcm93czogRGlmZlRhYmxlUm93UmVzdWx0W10gPSB0aGlzLmZvcm1hdE91dHB1dChkaWZmcyk7XHJcbiAgICAgIGlmICghcm93cykge1xyXG4gICAgICAgIHJlamVjdCgnRXJyb3InKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZShyb3dzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRPdXRwdXQoZGlmZnM6IERpZmZbXSk6IERpZmZUYWJsZVJvd1Jlc3VsdFtdIHtcclxuICAgIGxldCBsaW5lTGVmdCA9IDE7XHJcbiAgICBsZXQgbGluZVJpZ2h0ID0gMTtcclxuICAgIHJldHVybiBkaWZmcy5yZWR1Y2UoKHJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdLCBkaWZmOiBEaWZmKSA9PiB7XHJcbiAgICAgIGlmICghcm93cykge1xyXG4gICAgICAgIHJvd3MgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkaWZmVHlwZTogbnVtYmVyID0gZGlmZlswXTtcclxuICAgICAgY29uc3QgZGlmZlZhbHVlOiBzdHJpbmcgPSBkaWZmWzFdO1xyXG4gICAgICBsZXQgbGVmdERpZmZSb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByaWdodERpZmZSb3c6IERpZmZUYWJsZVJvd1Jlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCBsZWZ0Q29udGVudDogRGlmZkxpbmVSZXN1bHQgPSBudWxsO1xyXG4gICAgICBsZXQgcmlnaHRDb250ZW50OiBEaWZmTGluZVJlc3VsdCA9IG51bGw7XHJcbiAgICAgIGxldCByb3dUZW1wOiBEaWZmVGFibGVSb3dSZXN1bHQgPSBudWxsO1xyXG4gICAgICBzd2l0Y2ggKGRpZmZUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBESUZGX0VRVUFMOiAvLyAwXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTGVmdCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbXSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJydcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbXSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJydcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJvd1RlbXAgPSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0Q29udGVudCxcclxuICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudCxcclxuICAgICAgICAgICAgICAgIGJlbG9uZ1RvOiAnYm90aCcsXHJcbiAgICAgICAgICAgICAgICBoYXNEaWZmczogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJvd3MucHVzaChyb3dUZW1wKTtcclxuICAgICAgICAgICAgICBsaW5lUmlnaHQgPSBsaW5lUmlnaHQgKyAxO1xyXG4gICAgICAgICAgICAgIGxpbmVMZWZ0ID0gbGluZUxlZnQgKyAxO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRElGRl9ERUxFVEU6IC8vIC0xXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgcmlnaHREaWZmUm93ID0gcm93cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgcm93ID0+ICFyb3cubGVmdENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudCAmJiByb3cucmlnaHRDb250ZW50LmxpbmVOdW1iZXIgPT09IGxpbmVMZWZ0ICYmIHJvdy5yaWdodENvbnRlbnQucHJlZml4ICE9PSAnJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbGVmdENvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTGVmdCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICctJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKHJpZ2h0RGlmZlJvdykge1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50ID0gbGVmdENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQubGluZURpZmZzID0gdGhpcy5nZXREaWZmUGFydHMoXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZURpZmZzID0gdGhpcy5nZXREaWZmUGFydHMoXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5iZWxvbmdUbyA9ICdib3RoJztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgaGFzRGlmZnM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGJlbG9uZ1RvOiAnbGVmdCdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfSU5TRVJUOiAvLyAxXHJcbiAgICAgICAgICBkaWZmVmFsdWVcclxuICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgbGVmdERpZmZSb3cgPSByb3dzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICByb3cgPT4gcm93LmxlZnRDb250ZW50ICYmICFyb3cucmlnaHRDb250ZW50ICYmIHJvdy5sZWZ0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lUmlnaHQgJiYgcm93LmxlZnRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJpZ2h0Q29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVSaWdodCxcclxuICAgICAgICAgICAgICAgIGxpbmVDb250ZW50OiBsaW5lLFxyXG4gICAgICAgICAgICAgICAgbGluZURpZmZzOiBbeyBjb250ZW50OiBsaW5lLCBpc0RpZmY6IHRydWUgfV0sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcrJ1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKGxlZnREaWZmUm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQgPSByaWdodENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudC5saW5lRGlmZnMgPSB0aGlzLmdldERpZmZQYXJ0cyhcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmJlbG9uZ1RvID0gJ2JvdGgnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICBoYXNEaWZmczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgYmVsb25nVG86ICdyaWdodCdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsaW5lUmlnaHQgPSBsaW5lUmlnaHQgKyAxO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByb3dzO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaWZmUGFydHModmFsdWU6IHN0cmluZywgY29tcGFyZVZhbHVlOiBzdHJpbmcpOiBEaWZmUGFydFtdIHtcclxuICAgIGNvbnN0IGRpZmZQYXJ0czogRGlmZlBhcnRbXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGogPSAwO1xyXG4gICAgbGV0IHNoYXJlZCA9ICcnO1xyXG4gICAgbGV0IGRpZmYgPSAnJztcclxuXHJcbiAgICB3aGlsZSAoaSA8IHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodmFsdWVbaV0gPT09IGNvbXBhcmVWYWx1ZVtqXSAmJiBqIDwgY29tcGFyZVZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChkaWZmICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICAgICAgICBkaWZmID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNoYXJlZCArPSB2YWx1ZVtpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2hhcmVkICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICAgICAgICBzaGFyZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlmZiArPSB2YWx1ZVtpXTtcclxuICAgICAgfVxyXG4gICAgICBpKys7XHJcbiAgICAgIGorKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpZmZQYXJ0cztcclxuICB9XHJcbn1cclxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRleHQtZGlmZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRleHQtZGlmZi8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtdGV4dC1kaWZmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFRLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEcsT0FBTyxFQUFFLE9BQU8sRUFBUyxNQUFNLHVCQUF1QixDQUFDOztBQUV2RDtJQU1FO1FBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU8sdUNBQVU7Ozs7SUFBbEI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFFRCw0Q0FBZTs7Ozs7SUFBZixVQUFnQixJQUFZLEVBQUUsS0FBYTtRQUEzQyxpQkFlQztRQWRDLE9BQU8sSUFBSSxPQUFPLENBQXVCLFVBQUMsT0FBTyxFQUFFLE1BQU07O2dCQUNqRCxDQUFDLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDOztnQkFDbkQsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztnQkFDcEIsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNOztnQkFDcEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxTQUFTOztnQkFDeEIsS0FBSyxHQUFXLEtBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1lBQzNFLEtBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDOztnQkFDaEQsSUFBSSxHQUF5QixLQUFJLENBQUMsWUFBWSxDQUFDLEtB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QXVOQztTQXBOWSxrQkFBa0I7OztJQUM3Qix3Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpZmYsIERJRkZfREVMRVRFLCBESUZGX0VRVUFMLCBESUZGX0lOU0VSVCwgZGlmZl9tYXRjaF9wYXRjaCB9IGZyb20gJ2RpZmYtbWF0Y2gtcGF0Y2gnO1xyXG5pbXBvcnQgeyBEaWZmTGluZVJlc3VsdCwgRGlmZlBhcnQsIERpZmZUYWJsZVJvd1Jlc3VsdCB9IGZyb20gJy4vbmd4LXRleHQtZGlmZi5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRW1wdHksIGlzTmlsIH0gZnJvbSAnLi9uZ3gtdGV4dC1kaWZmLnV0aWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRleHREaWZmU2VydmljZSB7XHJcbiAgZGlmZlBhcnNlcjogZGlmZl9tYXRjaF9wYXRjaDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmluaXRQYXJzZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFBhcnNlcigpIHtcclxuICAgIHRoaXMuZGlmZlBhcnNlciA9IG5ldyBkaWZmX21hdGNoX3BhdGNoKCk7XHJcbiAgfVxyXG5cclxuICBnZXREaWZmc0J5TGluZXMobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogUHJvbWlzZTxEaWZmVGFibGVSb3dSZXN1bHRbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPERpZmZUYWJsZVJvd1Jlc3VsdFtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmRpZmZQYXJzZXIuZGlmZl9saW5lc1RvQ2hhcnNfKGxlZnQsIHJpZ2h0KTtcclxuICAgICAgY29uc3QgbGluZVRleHQxID0gYS5jaGFyczE7XHJcbiAgICAgIGNvbnN0IGxpbmVUZXh0MiA9IGEuY2hhcnMyO1xyXG4gICAgICBjb25zdCBsaW5lc0FycmF5ID0gYS5saW5lQXJyYXk7XHJcbiAgICAgIGNvbnN0IGRpZmZzOiBEaWZmW10gPSB0aGlzLmRpZmZQYXJzZXIuZGlmZl9tYWluKGxpbmVUZXh0MSwgbGluZVRleHQyLCB0cnVlKTtcclxuICAgICAgdGhpcy5kaWZmUGFyc2VyLmRpZmZfY2hhcnNUb0xpbmVzXyhkaWZmcywgbGluZXNBcnJheSk7XHJcbiAgICAgIGNvbnN0IHJvd3M6IERpZmZUYWJsZVJvd1Jlc3VsdFtdID0gdGhpcy5mb3JtYXRPdXRwdXQoZGlmZnMpO1xyXG4gICAgICBpZiAoIXJvd3MpIHtcclxuICAgICAgICByZWplY3QoJ0Vycm9yJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUocm93cyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0T3V0cHV0KGRpZmZzOiBEaWZmW10pOiBEaWZmVGFibGVSb3dSZXN1bHRbXSB7XHJcbiAgICBsZXQgbGluZUxlZnQgPSAxO1xyXG4gICAgbGV0IGxpbmVSaWdodCA9IDE7XHJcbiAgICByZXR1cm4gZGlmZnMucmVkdWNlKChyb3dzOiBEaWZmVGFibGVSb3dSZXN1bHRbXSwgZGlmZjogRGlmZikgPT4ge1xyXG4gICAgICBpZiAoIXJvd3MpIHtcclxuICAgICAgICByb3dzID0gW107XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZGlmZlR5cGU6IG51bWJlciA9IGRpZmZbMF07XHJcbiAgICAgIGNvbnN0IGRpZmZWYWx1ZTogc3RyaW5nID0gZGlmZlsxXTtcclxuICAgICAgbGV0IGxlZnREaWZmUm93OiBEaWZmVGFibGVSb3dSZXN1bHQgPSBudWxsO1xyXG4gICAgICBsZXQgcmlnaHREaWZmUm93OiBEaWZmVGFibGVSb3dSZXN1bHQgPSBudWxsO1xyXG4gICAgICBsZXQgbGVmdENvbnRlbnQ6IERpZmZMaW5lUmVzdWx0ID0gbnVsbDtcclxuICAgICAgbGV0IHJpZ2h0Q29udGVudDogRGlmZkxpbmVSZXN1bHQgPSBudWxsO1xyXG4gICAgICBsZXQgcm93VGVtcDogRGlmZlRhYmxlUm93UmVzdWx0ID0gbnVsbDtcclxuICAgICAgc3dpdGNoIChkaWZmVHlwZSkge1xyXG4gICAgICAgIGNhc2UgRElGRl9FUVVBTDogLy8gMFxyXG4gICAgICAgICAgZGlmZlZhbHVlXHJcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcclxuICAgICAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0VtcHR5KHZhbHVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZUxlZnQsXHJcbiAgICAgICAgICAgICAgICBsaW5lQ29udGVudDogbGluZSxcclxuICAgICAgICAgICAgICAgIGxpbmVEaWZmczogW10sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcnXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICByaWdodENvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lUmlnaHQsXHJcbiAgICAgICAgICAgICAgICBsaW5lQ29udGVudDogbGluZSxcclxuICAgICAgICAgICAgICAgIGxpbmVEaWZmczogW10sXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICcnXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICByb3dUZW1wID0ge1xyXG4gICAgICAgICAgICAgICAgbGVmdENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICByaWdodENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBiZWxvbmdUbzogJ2JvdGgnLFxyXG4gICAgICAgICAgICAgICAgaGFzRGlmZnM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbnVtRGlmZnM6IDAsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICByb3dzLnB1c2gocm93VGVtcCk7XHJcbiAgICAgICAgICAgICAgbGluZVJpZ2h0ID0gbGluZVJpZ2h0ICsgMTtcclxuICAgICAgICAgICAgICBsaW5lTGVmdCA9IGxpbmVMZWZ0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERJRkZfREVMRVRFOiAvLyAtMVxyXG4gICAgICAgICAgZGlmZlZhbHVlXHJcbiAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcclxuICAgICAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0VtcHR5KHZhbHVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdyA9IHJvd3MuZmluZChcclxuICAgICAgICAgICAgICAgIHJvdyA9PiAhcm93LmxlZnRDb250ZW50ICYmIHJvdy5yaWdodENvbnRlbnQgJiYgcm93LnJpZ2h0Q29udGVudC5saW5lTnVtYmVyID09PSBsaW5lTGVmdCAmJiByb3cucmlnaHRDb250ZW50LnByZWZpeCAhPT0gJydcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGxlZnRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZUxlZnQsXHJcbiAgICAgICAgICAgICAgICBsaW5lQ29udGVudDogbGluZSxcclxuICAgICAgICAgICAgICAgIGxpbmVEaWZmczogW3sgY29udGVudDogbGluZSwgaXNEaWZmOiB0cnVlIH1dLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnLSdcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmIChyaWdodERpZmZSb3cpIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5sZWZ0Q29udGVudCA9IGxlZnRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgcmlnaHREaWZmUm93LmxlZnRDb250ZW50LmxpbmVEaWZmcyA9IHRoaXMuZ2V0RGlmZlBhcnRzKFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVEaWZmcyA9IHRoaXMuZ2V0RGlmZlBhcnRzKFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubGVmdENvbnRlbnQubGluZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cuYmVsb25nVG8gPSAnYm90aCc7XHJcbiAgICAgICAgICAgICAgICByaWdodERpZmZSb3cubnVtRGlmZnMgPSB0aGlzLmNvdW50RGlmZnMocmlnaHREaWZmUm93KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgaGFzRGlmZnM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGJlbG9uZ1RvOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgICAgIG51bURpZmZzOiAxLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxpbmVMZWZ0ID0gbGluZUxlZnQgKyAxO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRElGRl9JTlNFUlQ6IC8vIDFcclxuICAgICAgICAgIGRpZmZWYWx1ZVxyXG4gICAgICAgICAgICAuc3BsaXQoJ1xcbicpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhaXNFbXB0eSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgICBsZWZ0RGlmZlJvdyA9IHJvd3MuZmluZChcclxuICAgICAgICAgICAgICAgIHJvdyA9PiByb3cubGVmdENvbnRlbnQgJiYgIXJvdy5yaWdodENvbnRlbnQgJiYgcm93LmxlZnRDb250ZW50LmxpbmVOdW1iZXIgPT09IGxpbmVSaWdodCAmJiByb3cubGVmdENvbnRlbnQucHJlZml4ICE9PSAnJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmlnaHRDb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgbGluZUNvbnRlbnQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBsaW5lRGlmZnM6IFt7IGNvbnRlbnQ6IGxpbmUsIGlzRGlmZjogdHJ1ZSB9XSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJysnXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAobGVmdERpZmZSb3cpIHtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LnJpZ2h0Q29udGVudCA9IHJpZ2h0Q29udGVudDtcclxuICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmxlZnRDb250ZW50LmxpbmVEaWZmcyA9IHRoaXMuZ2V0RGlmZlBhcnRzKFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5sZWZ0Q29udGVudC5saW5lQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGVmdERpZmZSb3cucmlnaHRDb250ZW50LmxpbmVEaWZmcyA9IHRoaXMuZ2V0RGlmZlBhcnRzKFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5yaWdodENvbnRlbnQubGluZUNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnREaWZmUm93LmxlZnRDb250ZW50LmxpbmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGVmdERpZmZSb3cuYmVsb25nVG8gPSAnYm90aCc7XHJcbiAgICAgICAgICAgICAgICBsZWZ0RGlmZlJvdy5udW1EaWZmcyA9IHRoaXMuY291bnREaWZmcyhsZWZ0RGlmZlJvdyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvd3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnRDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICByaWdodENvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgIGhhc0RpZmZzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBiZWxvbmdUbzogJ3JpZ2h0JyxcclxuICAgICAgICAgICAgICAgICAgbnVtRGlmZnM6IDEsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGluZVJpZ2h0ID0gbGluZVJpZ2h0ICsgMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcm93cztcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY291bnREaWZmcyhyZXN1bHQ6IERpZmZUYWJsZVJvd1Jlc3VsdCk6IG51bWJlciB7XHJcbiAgICBsZXQgZGlmZkNvdW50ID0gMDtcclxuICAgIGlmIChyZXN1bHQubGVmdENvbnRlbnQpIHtcclxuICAgICAgZGlmZkNvdW50ICs9IHJlc3VsdC5sZWZ0Q29udGVudC5saW5lRGlmZnMuZmlsdGVyKGRpZmYgPT4gZGlmZi5pc0RpZmYpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHQubGVmdENvbnRlbnQpIHtcclxuICAgICAgZGlmZkNvdW50ICs9IHJlc3VsdC5yaWdodENvbnRlbnQubGluZURpZmZzLmZpbHRlcihkaWZmID0+IGRpZmYuaXNEaWZmKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlmZkNvdW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREaWZmUGFydHModmFsdWU6IHN0cmluZywgY29tcGFyZVZhbHVlOiBzdHJpbmcpOiBEaWZmUGFydFtdIHtcclxuICAgIGNvbnN0IGRpZmZQYXJ0czogRGlmZlBhcnRbXSA9IFtdO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGogPSAwO1xyXG4gICAgbGV0IHNoYXJlZCA9ICcnO1xyXG4gICAgbGV0IGRpZmYgPSAnJztcclxuXHJcbiAgICB3aGlsZSAoaSA8IHZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodmFsdWVbaV0gPT09IGNvbXBhcmVWYWx1ZVtqXSAmJiBqIDwgY29tcGFyZVZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChkaWZmICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICAgICAgICBkaWZmID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNoYXJlZCArPSB2YWx1ZVtpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2hhcmVkICE9PSAnJykge1xyXG4gICAgICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICAgICAgICBzaGFyZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlmZiArPSB2YWx1ZVtpXTtcclxuICAgICAgfVxyXG4gICAgICBpKys7XHJcbiAgICAgIGorKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlmZiAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBkaWZmLCBpc0RpZmY6IHRydWUgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHNoYXJlZCAhPT0gJycpIHtcclxuICAgICAgZGlmZlBhcnRzLnB1c2goeyBjb250ZW50OiBzaGFyZWQsIGlzRGlmZjogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpZmZQYXJ0cztcclxuICB9XHJcbn1cclxuIl19 |
@@ -6,3 +6,3 @@ import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from 'diff-match-patch'; | ||
import { FormsModule } from '@angular/forms'; | ||
import { Injectable, Pipe, Component, Input, NgModule, defineInjectable, ChangeDetectorRef } from '@angular/core'; | ||
import { Injectable, Pipe, Component, Input, NgModule, defineInjectable, EventEmitter, ChangeDetectorRef, Output } from '@angular/core'; | ||
@@ -112,3 +112,4 @@ /** | ||
belongTo: 'both', | ||
hasDiffs: false | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
@@ -142,2 +143,3 @@ rows.push(rowTemp); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = this.countDiffs(rightDiffRow); | ||
} | ||
@@ -149,3 +151,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'left' | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
@@ -178,2 +181,3 @@ } | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = this.countDiffs(leftDiffRow); | ||
} | ||
@@ -185,3 +189,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'right' | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
@@ -198,2 +203,18 @@ } | ||
* @private | ||
* @param {?} result | ||
* @return {?} | ||
*/ | ||
countDiffs(result) { | ||
/** @type {?} */ | ||
let diffCount = 0; | ||
if (result.leftContent) { | ||
diffCount += result.leftContent.lineDiffs.filter(diff => diff.isDiff).length; | ||
} | ||
if (result.leftContent) { | ||
diffCount += result.rightContent.lineDiffs.filter(diff => diff.isDiff).length; | ||
} | ||
return diffCount; | ||
} | ||
/** | ||
* @private | ||
* @param {?} value | ||
@@ -262,2 +283,3 @@ * @param {?} compareValue | ||
this.cd = cd; | ||
this._hideMatchingLines = false; | ||
this.format = 'SideBySide'; | ||
@@ -267,3 +289,5 @@ this.left = ''; | ||
this.loading = false; | ||
this.showToolbar = true; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -274,3 +298,2 @@ this.tableRows = []; | ||
this.filteredTableRowsLineByLine = []; | ||
this.showLinesDiffs = false; | ||
this.diffsCount = 0; | ||
@@ -283,3 +306,3 @@ this.formatOptions = [ | ||
value: 'SideBySide', | ||
icon: 'la-code' | ||
icon: 'la-code', | ||
}, | ||
@@ -291,4 +314,4 @@ { | ||
value: 'LineByLine', | ||
icon: 'la-file-text' | ||
} | ||
icon: 'la-file-text', | ||
}, | ||
]; | ||
@@ -299,2 +322,15 @@ } | ||
*/ | ||
get hideMatchingLines() { | ||
return this._hideMatchingLines; | ||
} | ||
/** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ | ||
set hideMatchingLines(hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnInit() { | ||
@@ -331,5 +367,5 @@ this.loading = true; | ||
*/ | ||
showLinesDiffsChange(value) { | ||
this.showLinesDiffs = value; | ||
if (this.showLinesDiffs) { | ||
hideMatchingLinesChanged(value) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')); | ||
@@ -368,3 +404,4 @@ this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')); | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -377,3 +414,4 @@ } | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -387,5 +425,6 @@ } | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(row => (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+')).length; | ||
this.diffsCount = this.tableRows.filter(row => row.hasDiffs).length; | ||
this.filteredTableRows = this.tableRows; | ||
this.filteredTableRowsLineByLine = this.tableRowsLineByLine; | ||
this.emitCompareResultsEvent(); | ||
} | ||
@@ -398,2 +437,20 @@ catch (e) { | ||
/** | ||
* @return {?} | ||
*/ | ||
emitCompareResultsEvent() { | ||
/** @type {?} */ | ||
const diffResults = { | ||
hasDiff: this.diffsCount > 0, | ||
diffsCount: this.diffsCount, | ||
rowsWithDiff: this.tableRows | ||
.filter(row => row.hasDiffs) | ||
.map(row => ({ | ||
leftLineNumber: row.leftContent ? row.leftContent.lineNumber : null, | ||
rightLineNumber: row.rightContent ? row.rightContent.lineNumber : null, | ||
numDiffs: row.numDiffs, | ||
})), | ||
}; | ||
this.compareResults.next(diffResults); | ||
} | ||
/** | ||
* @param {?} index | ||
@@ -418,3 +475,3 @@ * @param {?} row | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
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}"] | ||
@@ -434,3 +491,12 @@ }] } | ||
loading: [{ type: Input }], | ||
showBtnToolbar: [{ 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 }] | ||
}; | ||
@@ -437,0 +503,0 @@ |
@@ -6,3 +6,3 @@ import { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, diff_match_patch } from 'diff-match-patch'; | ||
import { FormsModule } from '@angular/forms'; | ||
import { Injectable, Pipe, Component, Input, NgModule, defineInjectable, ChangeDetectorRef } from '@angular/core'; | ||
import { Injectable, Pipe, Component, Input, NgModule, defineInjectable, EventEmitter, ChangeDetectorRef, Output } from '@angular/core'; | ||
@@ -128,3 +128,4 @@ /** | ||
belongTo: 'both', | ||
hasDiffs: false | ||
hasDiffs: false, | ||
numDiffs: 0, | ||
}; | ||
@@ -158,2 +159,3 @@ rows.push(rowTemp); | ||
rightDiffRow.belongTo = 'both'; | ||
rightDiffRow.numDiffs = _this.countDiffs(rightDiffRow); | ||
} | ||
@@ -165,3 +167,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'left' | ||
belongTo: 'left', | ||
numDiffs: 1, | ||
}); | ||
@@ -194,2 +197,3 @@ } | ||
leftDiffRow.belongTo = 'both'; | ||
leftDiffRow.numDiffs = _this.countDiffs(leftDiffRow); | ||
} | ||
@@ -201,3 +205,4 @@ else { | ||
hasDiffs: true, | ||
belongTo: 'right' | ||
belongTo: 'right', | ||
numDiffs: 1, | ||
}); | ||
@@ -214,2 +219,23 @@ } | ||
* @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 | ||
@@ -281,2 +307,3 @@ * @param {?} compareValue | ||
this.cd = cd; | ||
this._hideMatchingLines = false; | ||
this.format = 'SideBySide'; | ||
@@ -286,3 +313,5 @@ this.left = ''; | ||
this.loading = false; | ||
this.showToolbar = true; | ||
this.showBtnToolbar = true; | ||
this.compareResults = new EventEmitter(); | ||
this.subscriptions = []; | ||
@@ -293,3 +322,2 @@ this.tableRows = []; | ||
this.filteredTableRowsLineByLine = []; | ||
this.showLinesDiffs = false; | ||
this.diffsCount = 0; | ||
@@ -302,3 +330,3 @@ this.formatOptions = [ | ||
value: 'SideBySide', | ||
icon: 'la-code' | ||
icon: 'la-code', | ||
}, | ||
@@ -310,6 +338,23 @@ { | ||
value: 'LineByLine', | ||
icon: 'la-file-text' | ||
} | ||
icon: 'la-file-text', | ||
}, | ||
]; | ||
} | ||
Object.defineProperty(NgxTextDiffComponent.prototype, "hideMatchingLines", { | ||
get: /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
return this._hideMatchingLines; | ||
}, | ||
set: /** | ||
* @param {?} hide | ||
* @return {?} | ||
*/ | ||
function (hide) { | ||
this.hideMatchingLinesChanged(hide); | ||
}, | ||
enumerable: true, | ||
configurable: true | ||
}); | ||
/** | ||
@@ -356,3 +401,3 @@ * @return {?} | ||
*/ | ||
NgxTextDiffComponent.prototype.showLinesDiffsChange = /** | ||
NgxTextDiffComponent.prototype.hideMatchingLinesChanged = /** | ||
* @param {?} value | ||
@@ -362,4 +407,4 @@ * @return {?} | ||
function (value) { | ||
this.showLinesDiffs = value; | ||
if (this.showLinesDiffs) { | ||
this._hideMatchingLines = value; | ||
if (this.hideMatchingLines) { | ||
this.filteredTableRows = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
@@ -412,3 +457,4 @@ this.filteredTableRowsLineByLine = this.tableRowsLineByLine.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }); | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -421,3 +467,4 @@ } | ||
belongTo: row.belongTo, | ||
hasDiffs: true | ||
hasDiffs: true, | ||
numDiffs: row.numDiffs, | ||
}); | ||
@@ -431,5 +478,6 @@ } | ||
}, []); | ||
this.diffsCount = this.tableRows.filter(function (row) { return (row.leftContent && row.leftContent.prefix === '-') || (row.rightContent && row.rightContent.prefix === '+'); }).length; | ||
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]; | ||
@@ -445,2 +493,23 @@ case 2: | ||
/** | ||
* @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); | ||
}; | ||
/** | ||
* @param {?} index | ||
@@ -474,3 +543,3 @@ * @param {?} row | ||
selector: 'td-ngx-text-diff', | ||
template: "<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", | ||
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}"] | ||
@@ -490,3 +559,12 @@ }] } | ||
loading: [{ type: Input }], | ||
showBtnToolbar: [{ 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 }] | ||
}; | ||
@@ -493,0 +571,0 @@ return NgxTextDiffComponent; |
@@ -1,3 +0,3 @@ | ||
import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core'; | ||
import { DiffContent, DiffPart, DiffTableFormat, DiffTableFormatOption, DiffTableRowResult } from './ngx-text-diff.model'; | ||
import { ChangeDetectorRef, OnDestroy, OnInit, EventEmitter } from '@angular/core'; | ||
import { DiffContent, DiffPart, DiffTableFormat, DiffTableFormatOption, DiffTableRowResult, DiffResults } from './ngx-text-diff.model'; | ||
import { NgxTextDiffService } from './ngx-text-diff.service'; | ||
@@ -8,2 +8,3 @@ import { Observable, Subscription } from 'rxjs'; | ||
private cd; | ||
private _hideMatchingLines; | ||
format: DiffTableFormat; | ||
@@ -14,3 +15,12 @@ left: string; | ||
loading: boolean; | ||
showToolbar: boolean; | ||
showBtnToolbar: boolean; | ||
hideMatchingLines: boolean; | ||
outerContainerClass: string; | ||
outerContainerStyle: any; | ||
toolbarClass: string; | ||
toolbarStyle: any; | ||
compareRowsClass: string; | ||
compareRowsStyle: any; | ||
compareResults: EventEmitter<DiffResults>; | ||
subscriptions: Subscription[]; | ||
@@ -21,3 +31,2 @@ tableRows: DiffTableRowResult[]; | ||
filteredTableRowsLineByLine: DiffTableRowResult[]; | ||
showLinesDiffs: boolean; | ||
diffsCount: number; | ||
@@ -28,7 +37,8 @@ formatOptions: DiffTableFormatOption[]; | ||
ngOnDestroy(): void; | ||
showLinesDiffsChange(value: boolean): void; | ||
hideMatchingLinesChanged(value: boolean): void; | ||
setDiffTableFormat(format: DiffTableFormat): void; | ||
renderDiffs(): Promise<void>; | ||
emitCompareResultsEvent(): void; | ||
trackTableRows(index: any, row: DiffTableRowResult): string; | ||
trackDiffs(index: any, diff: DiffPart): string; | ||
} |
@@ -30,2 +30,12 @@ export declare type DiffTableFormat = 'SideBySide' | 'LineByLine'; | ||
hasDiffs: boolean; | ||
numDiffs: number; | ||
} | ||
export interface DiffResults { | ||
hasDiff: boolean; | ||
diffsCount: number; | ||
rowsWithDiff: { | ||
leftLineNumber?: number; | ||
rightLineNumber?: number; | ||
numDiffs: number; | ||
}[]; | ||
} |
@@ -9,3 +9,4 @@ import { diff_match_patch } from 'diff-match-patch'; | ||
private formatOutput; | ||
private countDiffs; | ||
private getDiffParts; | ||
} |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"NgxTextDiffService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"initParser":[{"__symbolic":"method"}],"getDiffsByLines":[{"__symbolic":"method"}],"formatOutput":[{"__symbolic":"method"}],"getDiffParts":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgxTextDiffComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"td-ngx-text-diff","template":"<td-loader-spinner [active]=\"loading\"></td-loader-spinner>\r\n<div *ngIf=\"!loading\">\r\n <div class=\"td-wrapper\">\r\n <div class=\"td-toolbar-show-diff\">\r\n <label class=\"td-checkbox-container\">Show Lines with Diffs ({{diffsCount}})\r\n <input type=\"checkbox\"\r\n id=\"showDiffs\"\r\n [ngModel]=\"showLinesDiffs\"\r\n (ngModelChange)=\"showLinesDiffsChange($event)\"\r\n >\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n <div class=\"td-toolbar-select-format\" *ngIf=\"showBtnToolbar\">\r\n <div class=\"td-btn-group td-btn-group-toggle\" data-toggle=\"buttons\">\r\n <button *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 >{{option.label}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"td-table-wrapper\">\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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n {{(row.leftContent?.lineNumber !== -1) ?\r\n row.leftContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\">\r\n <span>{{row.leftContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'empty-row': !row.leftContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></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 scope=\"row\" class=\"fit-column line-number-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n {{(row.rightContent?.lineNumber !== -1) ?\r\n row.rightContent?.lineNumber : ' '}}\r\n </td>\r\n <td class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\">\r\n <span>{{row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.rightContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'insert-row' : row.rightContent?.prefix === '+', 'empty-row': !row.rightContent?.lineContent}\"\r\n *ngIf=\"row.hasDiffs\">\r\n <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></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 class=\"fit-column prefix-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\">\r\n <span>{{row.leftContent?.prefix || row.rightContent?.prefix || ' '}}</span>\r\n </td>\r\n <td class=\"content-col\"\r\n [ngClass]=\"{'delete-row' : row.leftContent?.prefix === '-', 'insert-row' : row.rightContent?.prefix === '+'}\"\r\n *ngIf=\"!row.hasDiffs\">\r\n <span [innerHTML]=\"row.leftContent?.lineContent | formatLine\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.leftContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n <td 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 <span [innerHTML]=\"diff.content | formatLine\" [ngClass]=\"{'highlight': diff.isDiff}\"\r\n *ngFor=\"let diff of row.rightContent?.lineDiffs; trackBy: trackDiffs\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\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}"]}]}],"members":{"format":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"left":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"right":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"diffContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"showBtnToolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgxTextDiffService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":42,"character":60}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"showLinesDiffsChange":[{"__symbolic":"method"}],"setDiffTableFormat":[{"__symbolic":"method"}],"renderDiffs":[{"__symbolic":"method"}],"trackTableRows":[{"__symbolic":"method"}],"trackDiffs":[{"__symbolic":"method"}]}},"NgxTextDiffModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":12},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":8,"character":26}],"declarations":[{"__symbolic":"reference","name":"NgxTextDiffComponent"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"NgxTextDiffComponent"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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)}}"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":2,"character":1},"arguments":[{"name":"formatLine"}]}],"members":{"transform":[{"__symbolic":"method"}]}}},"origins":{"NgxTextDiffService":"./lib/ngx-text-diff.service","NgxTextDiffComponent":"./lib/ngx-text-diff.component","NgxTextDiffModule":"./lib/ngx-text-diff.module","ɵa":"./lib/loader-spinner/loader-spinner.component","ɵb":"./lib/format-line.pipe"},"importAs":"ngx-text-diff"} | ||
{"__symbolic":"module","version":4,"metadata":{"NgxTextDiffService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"initParser":[{"__symbolic":"method"}],"getDiffsByLines":[{"__symbolic":"method"}],"formatOutput":[{"__symbolic":"method"}],"countDiffs":[{"__symbolic":"method"}],"getDiffParts":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"NgxTextDiffComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"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}"]}]}],"members":{"format":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"left":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"right":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"diffContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"showToolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":18,"character":3}}]}],"showBtnToolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"hideMatchingLines":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"outerContainerClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":3}}]}],"outerContainerStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"toolbarClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":3}}]}],"toolbarStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"compareRowsClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"compareRowsStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"compareResults":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":34,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NgxTextDiffService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":59,"character":60}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"hideMatchingLinesChanged":[{"__symbolic":"method"}],"setDiffTableFormat":[{"__symbolic":"method"}],"renderDiffs":[{"__symbolic":"method"}],"emitCompareResultsEvent":[{"__symbolic":"method"}],"trackTableRows":[{"__symbolic":"method"}],"trackDiffs":[{"__symbolic":"method"}]}},"NgxTextDiffModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":12},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":8,"character":26}],"declarations":[{"__symbolic":"reference","name":"NgxTextDiffComponent"},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"NgxTextDiffComponent"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"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)}}"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":8,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":2,"character":1},"arguments":[{"name":"formatLine"}]}],"members":{"transform":[{"__symbolic":"method"}]}}},"origins":{"NgxTextDiffService":"./lib/ngx-text-diff.service","NgxTextDiffComponent":"./lib/ngx-text-diff.component","NgxTextDiffModule":"./lib/ngx-text-diff.module","ɵa":"./lib/loader-spinner/loader-spinner.component","ɵb":"./lib/format-line.pipe"},"importAs":"ngx-text-diff"} |
{ | ||
"name": "ngx-text-diff", | ||
"version": "0.5.3", | ||
"version": "0.5.4", | ||
"description": "A Text Diff component for Angular.", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -15,16 +15,29 @@ # ngx-text-diff | ||
## API | ||
`module: NgxTextDiffModule`<br> | ||
`component: NgxTextDiffComponent`<br> | ||
`module: NgxTextDiffModule` | ||
`component: NgxTextDiffComponent` | ||
`selector: td-ngx-text-diff` | ||
### Inputs | ||
| Input | Type | Required | Description | | ||
| -------------- | ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| left | string | Yes | First text to be compared | | ||
| right | string | Yes | Second text to be compared | | ||
| diffContent | Observable | Optional | `DiffContent` observable | | ||
| format | `DiffTableFormat` | Optional, default: `SideBySide` | Possible values:<br> -`SideBySide`<br> -`LineByLine` | | ||
| loading | boolean | Optional, default: `false` | Possible values:<br> -`true`: shows an loading spinner.<br>- `false`: hides the loading spinner | | ||
| showBtnToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the format toolbar.<br>- `false`: hides the format toolbar | | ||
| Input | Type | Required | Description | | ||
| --------------------| ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| left | string | Yes | First text to be compared | | ||
| right | string | Yes | Second text to be compared | | ||
| diffContent | Observable | Optional | `DiffContent` observable | | ||
| format | `DiffTableFormat` | Optional, default: `SideBySide` | Possible values:<br> -`SideBySide`<br> -`LineByLine` | | ||
| loading | boolean | Optional, default: `false` | Possible values:<br> -`true`: shows an loading spinner.<br>- `false`: hides the loading spinner | | ||
| hideMatchingLines | boolean | Optional, default: `false` | Possible values:<br> -`true`: Only shows lines with differences.<br>- `false`: shows all lines | | ||
| showToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the toolbar.<br>- `false`: hides the format toolbar | | ||
| showBtnToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the format toolbar.<br>- `false`: hides the format toolbar | | ||
| outerContainerClass | any | Optional | `ngClass` object for the outer div | | ||
| outerContainerStyle | any | Optional | `ngStyle` object for the outer style | | ||
| toolbarClass | any | Optional | `ngClass` object for the toolbar div | | ||
| toolbarStyle | any | Optional | `ngStyle` object for the toolbar style | | ||
| compareRowsClass | any | Optional | `ngClass` object for the div surrounding the table rows | | ||
| compareRowsStyle | any | Optional | `ngStyle` object for the div surrounding the table rows | | ||
### Output | ||
| Input | Type | Required | Description | | ||
| --------------------| ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| compareResults | DiffResults | Optional | Event fired when comparison is executed | | ||
### Custom Objects | ||
@@ -38,2 +51,12 @@ ``` typescript | ||
export type DiffTableFormat = 'SideBySide' | 'LineByLine'; | ||
export interface DiffResults { | ||
hasDiff: boolean; | ||
diffsCount: number; | ||
rowsWithDiff: { | ||
leftLineNumber?: number; | ||
rightLineNumber?: number; | ||
numDiffs: number; | ||
}[]; | ||
} | ||
``` | ||
@@ -40,0 +63,0 @@ |
@@ -15,16 +15,29 @@ # ngx-text-diff | ||
## API | ||
`module: NgxTextDiffModule`<br> | ||
`component: NgxTextDiffComponent`<br> | ||
`module: NgxTextDiffModule` | ||
`component: NgxTextDiffComponent` | ||
`selector: td-ngx-text-diff` | ||
### Inputs | ||
| Input | Type | Required | Description | | ||
| -------------- | ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| left | string | Yes | First text to be compared | | ||
| right | string | Yes | Second text to be compared | | ||
| diffContent | Observable | Optional | `DiffContent` observable | | ||
| format | `DiffTableFormat` | Optional, default: `SideBySide` | Possible values:<br> -`SideBySide`<br> -`LineByLine` | | ||
| loading | boolean | Optional, default: `false` | Possible values:<br> -`true`: shows an loading spinner.<br>- `false`: hides the loading spinner | | ||
| showBtnToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the format toolbar.<br>- `false`: hides the format toolbar | | ||
| Input | Type | Required | Description | | ||
| --------------------| ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| left | string | Yes | First text to be compared | | ||
| right | string | Yes | Second text to be compared | | ||
| diffContent | Observable | Optional | `DiffContent` observable | | ||
| format | `DiffTableFormat` | Optional, default: `SideBySide` | Possible values:<br> -`SideBySide`<br> -`LineByLine` | | ||
| loading | boolean | Optional, default: `false` | Possible values:<br> -`true`: shows an loading spinner.<br>- `false`: hides the loading spinner | | ||
| hideMatchingLines | boolean | Optional, default: `false` | Possible values:<br> -`true`: Only shows lines with differences.<br>- `false`: shows all lines | | ||
| showToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the toolbar.<br>- `false`: hides the format toolbar | | ||
| showBtnToolbar | boolean | Optional, default: `true` | Possible values:<br> -`true`: shows the format toolbar.<br>- `false`: hides the format toolbar | | ||
| outerContainerClass | any | Optional | `ngClass` object for the outer div | | ||
| outerContainerStyle | any | Optional | `ngStyle` object for the outer style | | ||
| toolbarClass | any | Optional | `ngClass` object for the toolbar div | | ||
| toolbarStyle | any | Optional | `ngStyle` object for the toolbar style | | ||
| compareRowsClass | any | Optional | `ngClass` object for the div surrounding the table rows | | ||
| compareRowsStyle | any | Optional | `ngStyle` object for the div surrounding the table rows | | ||
### Output | ||
| Input | Type | Required | Description | | ||
| --------------------| ----------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- | | ||
| compareResults | DiffResults | Optional | Event fired when comparison is executed | | ||
### Custom Objects | ||
@@ -38,2 +51,12 @@ ``` typescript | ||
export type DiffTableFormat = 'SideBySide' | 'LineByLine'; | ||
export interface DiffResults { | ||
hasDiff: boolean; | ||
diffsCount: number; | ||
rowsWithDiff: { | ||
leftLineNumber?: number; | ||
rightLineNumber?: number; | ||
numDiffs: number; | ||
}[]; | ||
} | ||
``` | ||
@@ -40,0 +63,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
572109
42
3885
88
1