UNPKG

ace-builds

Version:
1,057 lines (1,049 loc) 194 kB
ace.define("ace/ext/diff/scroll_diff_decorator",["require","exports","module","ace/layer/decorators"], function(require, exports, module){var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var Decorator = require("../../layer/decorators").Decorator; var ScrollDiffDecorator = /** @class */ (function (_super) { __extends(ScrollDiffDecorator, _super); function ScrollDiffDecorator(scrollbarV, renderer, forInlineDiff) { var _this = _super.call(this, scrollbarV, renderer) || this; _this.colors.dark["delete"] = "rgba(255, 18, 18, 1)"; _this.colors.dark["insert"] = "rgba(18, 136, 18, 1)"; _this.colors.light["delete"] = "rgb(255,51,51)"; _this.colors.light["insert"] = "rgb(32,133,72)"; _this.$zones = []; _this.$forInlineDiff = forInlineDiff; return _this; } ScrollDiffDecorator.prototype.addZone = function (startRow, endRow, type) { this.$zones.push({ startRow: startRow, endRow: endRow, type: type }); }; ScrollDiffDecorator.prototype.setSessions = function (sessionA, sessionB) { this.sessionA = sessionA; this.sessionB = sessionB; }; ScrollDiffDecorator.prototype.$updateDecorators = function (config) { if (typeof this.canvas.getContext !== "function") { return; } _super.prototype.$updateDecorators.call(this, config); if (this.$zones.length > 0) { var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light; var ctx = this.canvas.getContext("2d"); this.$setDiffDecorators(ctx, colors); } }; ScrollDiffDecorator.prototype.$transformPosition = function (row, type) { if (type == "delete") { return this.sessionA.documentToScreenRow(row, 0); } else { return this.sessionB.documentToScreenRow(row, 0); } }; ScrollDiffDecorator.prototype.$setDiffDecorators = function (ctx, colors) { var e_1, _a; var _this = this; function compare(a, b) { if (a.from === b.from) { return a.to - b.to; } return a.from - b.from; } var zones = this.$zones; if (zones) { var resolvedZones = []; var deleteZones = zones.filter(function (z) { return z.type === "delete"; }); var insertZones = zones.filter(function (z) { return z.type === "insert"; }); [deleteZones, insertZones].forEach(function (typeZones) { typeZones.forEach(function (zone, i) { var offset1 = _this.$transformPosition(zone.startRow, zone.type) * _this.lineHeight; var offset2 = _this.$transformPosition(zone.endRow, zone.type) * _this.lineHeight + _this.lineHeight; var y1 = Math.round(_this.heightRatio * offset1); var y2 = Math.round(_this.heightRatio * offset2); var padding = 1; var ycenter = Math.round((y1 + y2) / 2); var halfHeight = (y2 - ycenter); if (halfHeight < _this.halfMinDecorationHeight) { halfHeight = _this.halfMinDecorationHeight; } var previousZone = resolvedZones[resolvedZones.length - 1]; if (i > 0 && previousZone && previousZone.type === zone.type && ycenter - halfHeight < previousZone.to + padding) { ycenter = resolvedZones[resolvedZones.length - 1].to + padding + halfHeight; } if (ycenter - halfHeight < 0) { ycenter = halfHeight; } if (ycenter + halfHeight > _this.canvasHeight) { ycenter = _this.canvasHeight - halfHeight; } resolvedZones.push({ type: zone.type, from: ycenter - halfHeight, to: ycenter + halfHeight, color: colors[zone.type] || null }); }); }); resolvedZones = resolvedZones.sort(compare); try { for (var resolvedZones_1 = __values(resolvedZones), resolvedZones_1_1 = resolvedZones_1.next(); !resolvedZones_1_1.done; resolvedZones_1_1 = resolvedZones_1.next()) { var zone = resolvedZones_1_1.value; ctx.fillStyle = zone.color || null; var zoneFrom = zone.from; var zoneTo = zone.to; var zoneHeight = zoneTo - zoneFrom; if (this.$forInlineDiff) { ctx.fillRect(this.oneZoneWidth, zoneFrom, 2 * this.oneZoneWidth, zoneHeight); } else { if (zone.type == "delete") { ctx.fillRect(this.oneZoneWidth, zoneFrom, this.oneZoneWidth, zoneHeight); } else { ctx.fillRect(2 * this.oneZoneWidth, zoneFrom, this.oneZoneWidth, zoneHeight); } } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (resolvedZones_1_1 && !resolvedZones_1_1.done && (_a = resolvedZones_1.return)) _a.call(resolvedZones_1); } finally { if (e_1) throw e_1.error; } } } }; ScrollDiffDecorator.prototype.setZoneWidth = function () { this.oneZoneWidth = Math.round(this.canvasWidth / 3); }; return ScrollDiffDecorator; }(Decorator)); exports.ScrollDiffDecorator = ScrollDiffDecorator; }); ace.define("ace/ext/diff/styles-css.js",["require","exports","module"], function(require, exports, module){exports.cssText = "\n/*\n * Line Markers\n */\n.ace_diff {\n position: absolute;\n z-index: 0;\n}\n.ace_diff.inline {\n z-index: 20;\n}\n/*\n * Light Colors \n */\n.ace_diff.insert {\n background-color: #EFFFF1;\n}\n.ace_diff.delete {\n background-color: #FFF1F1;\n}\n.ace_diff.aligned_diff {\n background: rgba(206, 194, 191, 0.26);\n background: repeating-linear-gradient(\n 45deg,\n rgba(122, 111, 108, 0.26),\n rgba(122, 111, 108, 0.26) 5px,\n rgba(0, 0, 0, 0) 5px,\n rgba(0, 0, 0, 0) 10px \n );\n}\n\n.ace_diff.insert.inline {\n background-color: rgb(74 251 74 / 18%); \n}\n.ace_diff.delete.inline {\n background-color: rgb(251 74 74 / 15%);\n}\n\n.ace_diff.delete.inline.empty {\n background-color: rgba(255, 128, 79, 0.7);\n width: 2px !important;\n}\n\n.ace_diff.insert.inline.empty {\n background-color: rgba(49, 230, 96, 0.7);\n width: 2px !important;\n}\n\n.ace_diff-active-line {\n border-bottom: 1px solid;\n border-top: 1px solid;\n background: transparent;\n position: absolute;\n box-sizing: border-box;\n border-color: #9191ac;\n}\n\n.ace_dark .ace_diff-active-line {\n background: transparent;\n border-color: #75777a;\n}\n \n\n/* gutter changes */\n.ace_mini-diff_gutter-enabled > .ace_gutter-cell,\n.ace_mini-diff_gutter-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_mini-diff_gutter_other > .ace_gutter-cell,\n.ace_mini-diff_gutter_other > .ace_gutter-cell_svg-icons {\n display: none;\n}\n\n.ace_mini-diff_gutter_other {\n pointer-events: none;\n}\n\n\n.ace_mini-diff_gutter-enabled > .mini-diff-added {\n background-color: #EFFFF1;\n border-left: 3px solid #2BB534;\n padding-left: 16px;\n display: block;\n}\n\n.ace_mini-diff_gutter-enabled > .mini-diff-deleted {\n background-color: #FFF1F1;\n border-left: 3px solid #EA7158;\n padding-left: 16px;\n display: block;\n}\n\n\n.ace_mini-diff_gutter-enabled > .mini-diff-added:after {\n position: absolute;\n right: 2px;\n content: \"+\";\n color: darkgray;\n background-color: inherit;\n}\n\n.ace_mini-diff_gutter-enabled > .mini-diff-deleted:after {\n position: absolute;\n right: 2px;\n content: \"-\";\n color: darkgray;\n background-color: inherit;\n}\n.ace_fade-fold-widgets:hover > .ace_folding-enabled > .mini-diff-added:after,\n.ace_fade-fold-widgets:hover > .ace_folding-enabled > .mini-diff-deleted:after {\n display: none;\n}\n\n.ace_diff_other .ace_selection {\n filter: drop-shadow(1px 2px 3px darkgray);\n}\n\n.ace_hidden_marker-layer .ace_bracket {\n display: none;\n}\n\n\n\n/*\n * Dark Colors \n */\n\n.ace_dark .ace_diff.insert {\n background-color: #212E25;\n}\n.ace_dark .ace_diff.delete {\n background-color: #3F2222;\n}\n\n.ace_dark .ace_mini-diff_gutter-enabled > .mini-diff-added {\n background-color: #212E25;\n border-left-color:#00802F;\n}\n\n.ace_dark .ace_mini-diff_gutter-enabled > .mini-diff-deleted {\n background-color: #3F2222;\n border-left-color: #9C3838;\n}\n\n"; }); ace.define("ace/ext/diff/gutter_decorator",["require","exports","module","ace/lib/dom"], function(require, exports, module){var dom = require("../../lib/dom"); var MinimalGutterDiffDecorator = /** @class */ (function () { function MinimalGutterDiffDecorator(editor, type) { this.gutterClass = "ace_mini-diff_gutter-enabled"; this.gutterCellsClasses = { add: "mini-diff-added", delete: "mini-diff-deleted", }; this.editor = editor; this.type = type; this.chunks = []; this.attachToEditor(); } MinimalGutterDiffDecorator.prototype.attachToEditor = function () { this.renderGutters = this.renderGutters.bind(this); dom.addCssClass(this.editor.renderer.$gutterLayer.element, this.gutterClass); this.editor.renderer.$gutterLayer.on("afterRender", this.renderGutters); }; MinimalGutterDiffDecorator.prototype.renderGutters = function (e, gutterLayer) { var _this = this; var cells = this.editor.renderer.$gutterLayer.$lines.cells; cells.forEach(function (cell) { cell.element.classList.remove(Object.values(_this.gutterCellsClasses)); }); var dir = this.type === -1 ? "old" : "new"; var diffClass = this.type === -1 ? this.gutterCellsClasses.delete : this.gutterCellsClasses.add; this.chunks.forEach(function (lineChange) { var startRow = lineChange[dir].start.row; var endRow = lineChange[dir].end.row - 1; cells.forEach(function (cell) { if (cell.row >= startRow && cell.row <= endRow) { cell.element.classList.add(diffClass); } }); }); }; MinimalGutterDiffDecorator.prototype.setDecorations = function (changes) { this.chunks = changes; this.renderGutters(); }; MinimalGutterDiffDecorator.prototype.dispose = function () { dom.removeCssClass(this.editor.renderer.$gutterLayer.element, this.gutterClass); this.editor.renderer.$gutterLayer.off("afterRender", this.renderGutters); }; return MinimalGutterDiffDecorator; }()); exports.MinimalGutterDiffDecorator = MinimalGutterDiffDecorator; }); ace.define("ace/ext/diff/base_diff_view",["require","exports","module","ace/lib/oop","ace/range","ace/lib/dom","ace/config","ace/line_widgets","ace/ext/diff/scroll_diff_decorator","ace/ext/diff/styles-css.js","ace/editor","ace/virtual_renderer","ace/undomanager","ace/layer/decorators","ace/theme/textmate","ace/multi_select","ace/edit_session","ace/ext/diff/gutter_decorator"], function(require, exports, module){"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var dom = require("../../lib/dom"); var config = require("../../config"); var LineWidgets = require("../../line_widgets").LineWidgets; var ScrollDiffDecorator = require("./scroll_diff_decorator").ScrollDiffDecorator; var css = require("./styles-css.js").cssText; var Editor = require("../../editor").Editor; var Renderer = require("../../virtual_renderer").VirtualRenderer; var UndoManager = require("../../undomanager").UndoManager; var Decorator = require("../../layer/decorators").Decorator; require("../../theme/textmate"); require("../../multi_select"); var EditSession = require("../../edit_session").EditSession; var MinimalGutterDiffDecorator = require("./gutter_decorator").MinimalGutterDiffDecorator; var dummyDiffProvider = { compute: function (val1, val2, options) { return []; } }; var BaseDiffView = /** @class */ (function () { function BaseDiffView(inlineDiffEditor, container) { this.onChangeTheme = this.onChangeTheme.bind(this); this.onInput = this.onInput.bind(this); this.onChangeFold = this.onChangeFold.bind(this); this.realign = this.realign.bind(this); this.onSelect = this.onSelect.bind(this); this.onChangeWrapLimit = this.onChangeWrapLimit.bind(this); this.realignPending = false; this.diffSession; this.chunks; this.inlineDiffEditor = inlineDiffEditor || false; this.currentDiffIndex = 0; this.diffProvider = dummyDiffProvider; if (container) { this.container = container; } dom.importCssString(css, "diffview.css"); this.$ignoreTrimWhitespace = false; this.$maxDiffs = 5000; this.$maxComputationTimeMs = 150; this.$syncSelections = false; this.$foldUnchangedOnInput = false; this.markerB = new DiffHighlight(this, 1); this.markerA = new DiffHighlight(this, -1); } BaseDiffView.prototype.$setupModels = function (diffModel) { if (diffModel.diffProvider) { this.setProvider(diffModel.diffProvider); } this.showSideA = diffModel.inline == undefined ? true : diffModel.inline === "a"; var diffEditorOptions = /**@type {Partial<import("../../../ace-internal").Ace.EditorOptions>}*/ ({ scrollPastEnd: 0.5, highlightActiveLine: false, highlightGutterLine: false, animatedScroll: true, customScrollbar: true, vScrollBarAlwaysVisible: true, fadeFoldWidgets: true, showFoldWidgets: true, selectionStyle: "text", }); this.savedOptionsA = diffModel.editorA && diffModel.editorA.getOptions(diffEditorOptions); this.savedOptionsB = diffModel.editorB && diffModel.editorB.getOptions(diffEditorOptions); if (!this.inlineDiffEditor || diffModel.inline === "a") { this.editorA = diffModel.editorA || this.$setupModel(diffModel.sessionA, diffModel.valueA); this.container && this.container.appendChild(this.editorA.container); this.editorA.setOptions(diffEditorOptions); } if (!this.inlineDiffEditor || diffModel.inline === "b") { this.editorB = diffModel.editorB || this.$setupModel(diffModel.sessionB, diffModel.valueB); this.container && this.container.appendChild(this.editorB.container); this.editorB.setOptions(diffEditorOptions); } if (this.inlineDiffEditor) { this.activeEditor = this.showSideA ? this.editorA : this.editorB; this.otherSession = this.showSideA ? this.sessionB : this.sessionA; var cloneOptions = this.activeEditor.getOptions(); cloneOptions.readOnly = true; delete cloneOptions.mode; this.otherEditor = new Editor(new Renderer(null), undefined, cloneOptions); if (this.showSideA) { this.editorB = this.otherEditor; } else { this.editorA = this.otherEditor; } } this.setDiffSession({ sessionA: diffModel.sessionA || (diffModel.editorA ? diffModel.editorA.session : new EditSession(diffModel.valueA || "")), sessionB: diffModel.sessionB || (diffModel.editorB ? diffModel.editorB.session : new EditSession(diffModel.valueB || "")), chunks: [] }); this.setupScrollbars(); }; BaseDiffView.prototype.addGutterDecorators = function () { if (!this.gutterDecoratorA) this.gutterDecoratorA = new MinimalGutterDiffDecorator(this.editorA, -1); if (!this.gutterDecoratorB) this.gutterDecoratorB = new MinimalGutterDiffDecorator(this.editorB, 1); }; BaseDiffView.prototype.$setupModel = function (session, value) { var editor = new Editor(new Renderer(), session); editor.session.setUndoManager(new UndoManager()); if (value != undefined) { editor.setValue(value, -1); } return editor; }; BaseDiffView.prototype.foldUnchanged = function () { var chunks = this.chunks; var placeholder = "-".repeat(120); var prev = { old: new Range(0, 0, 0, 0), new: new Range(0, 0, 0, 0) }; var foldsChanged = false; for (var i = 0; i < chunks.length + 1; i++) { var current = chunks[i] || { old: new Range(this.sessionA.getLength(), 0, this.sessionA.getLength(), 0), new: new Range(this.sessionB.getLength(), 0, this.sessionB.getLength(), 0) }; var l = current.new.start.row - prev.new.end.row - 5; if (l > 2) { var s = prev.old.end.row + 2; var fold1 = this.sessionA.addFold(placeholder, new Range(s, 0, s + l, Number.MAX_VALUE)); s = prev.new.end.row + 2; var fold2 = this.sessionB.addFold(placeholder, new Range(s, 0, s + l, Number.MAX_VALUE)); if (fold1 || fold2) foldsChanged = true; if (fold2 && fold1) { fold1["other"] = fold2; fold2["other"] = fold1; } } prev = current; } return foldsChanged; }; BaseDiffView.prototype.unfoldUnchanged = function () { var folds = this.sessionA.getAllFolds(); for (var i = folds.length - 1; i >= 0; i--) { var fold = folds[i]; if (fold.placeholder.length == 120) { this.sessionA.removeFold(fold); } } }; BaseDiffView.prototype.toggleFoldUnchanged = function () { if (!this.foldUnchanged()) { this.unfoldUnchanged(); } }; BaseDiffView.prototype.setDiffSession = function (session) { if (this.diffSession) { this.$detachSessionsEventHandlers(); this.clearSelectionMarkers(); } this.diffSession = session; this.sessionA = this.sessionB = null; if (this.diffSession) { this.chunks = this.diffSession.chunks || []; this.editorA && this.editorA.setSession(session.sessionA); this.editorB && this.editorB.setSession(session.sessionB); this.sessionA = this.diffSession.sessionA; this.sessionB = this.diffSession.sessionB; this.$attachSessionsEventHandlers(); this.initSelectionMarkers(); } this.otherSession = this.showSideA ? this.sessionB : this.sessionA; }; BaseDiffView.prototype.$attachSessionsEventHandlers = function () { }; BaseDiffView.prototype.$detachSessionsEventHandlers = function () { }; BaseDiffView.prototype.getDiffSession = function () { return this.diffSession; }; BaseDiffView.prototype.setTheme = function (theme) { this.editorA && this.editorA.setTheme(theme); this.editorB && this.editorB.setTheme(theme); }; BaseDiffView.prototype.getTheme = function () { return (this.editorA || this.editorB).getTheme(); }; BaseDiffView.prototype.onChangeTheme = function (e) { var theme = e && e.theme || this.getTheme(); if (this.editorA && this.editorA.getTheme() !== theme) { this.editorA.setTheme(theme); } if (this.editorB && this.editorB.getTheme() !== theme) { this.editorB.setTheme(theme); } }; BaseDiffView.prototype.resize = function (force) { this.editorA && this.editorA.resize(force); this.editorB && this.editorB.resize(force); }; BaseDiffView.prototype.scheduleOnInput = function () { var _this = this; if (this.$onInputTimer) return; this.$onInputTimer = setTimeout(function () { _this.$onInputTimer = null; _this.onInput(); }); }; BaseDiffView.prototype.onInput = function () { var _this = this; if (this.$onInputTimer) clearTimeout(this.$onInputTimer); var val1 = this.sessionA.doc.getAllLines(); var val2 = this.sessionB.doc.getAllLines(); this.selectionRangeA = null; this.selectionRangeB = null; var chunks = this.$diffLines(val1, val2); this.diffSession.chunks = this.chunks = chunks; this.gutterDecoratorA && this.gutterDecoratorA.setDecorations(chunks); this.gutterDecoratorB && this.gutterDecoratorB.setDecorations(chunks); if (this.chunks && this.chunks.length > this.$maxDiffs) { return; } this.align(); this.editorA && this.editorA.renderer.updateBackMarkers(); this.editorB && this.editorB.renderer.updateBackMarkers(); setTimeout(function () { _this.updateScrollBarDecorators(); }, 0); if (this.$foldUnchangedOnInput) { this.foldUnchanged(); } }; BaseDiffView.prototype.setupScrollbars = function () { var _this = this; var setupScrollBar = function (renderer) { setTimeout(function () { _this.$setScrollBarDecorators(renderer); _this.updateScrollBarDecorators(); }, 0); }; if (this.inlineDiffEditor) { setupScrollBar(this.activeEditor.renderer); } else { setupScrollBar(this.editorA.renderer); setupScrollBar(this.editorB.renderer); } }; BaseDiffView.prototype.$setScrollBarDecorators = function (renderer) { if (renderer.$scrollDecorator) { renderer.$scrollDecorator.destroy(); } renderer.$scrollDecorator = new ScrollDiffDecorator(renderer.scrollBarV, renderer, this.inlineDiffEditor); renderer.$scrollDecorator.setSessions(this.sessionA, this.sessionB); renderer.scrollBarV.setVisible(true); renderer.scrollBarV.element.style.bottom = renderer.scrollBarH.getHeight() + "px"; }; BaseDiffView.prototype.$resetDecorators = function (renderer) { if (renderer.$scrollDecorator) { renderer.$scrollDecorator.destroy(); } renderer.$scrollDecorator = new Decorator(renderer.scrollBarV, renderer); }; BaseDiffView.prototype.updateScrollBarDecorators = function () { var _this = this; if (this.inlineDiffEditor) { if (!this.activeEditor) { return; } this.activeEditor.renderer.$scrollDecorator.$zones = []; } else { if (!this.editorA || !this.editorB) { return; } this.editorA.renderer.$scrollDecorator.$zones = []; this.editorB.renderer.$scrollDecorator.$zones = []; } var updateDecorators = function (editor, change) { if (!editor) { return; } if (typeof editor.renderer.$scrollDecorator.addZone !== "function") { return; } if (change.old.start.row != change.old.end.row) { editor.renderer.$scrollDecorator.addZone(change.old.start.row, change.old.end.row - 1, "delete"); } if (change.new.start.row != change.new.end.row) { editor.renderer.$scrollDecorator.addZone(change.new.start.row, change.new.end.row - 1, "insert"); } }; if (this.inlineDiffEditor) { this.chunks && this.chunks.forEach(function (lineChange) { updateDecorators(_this.activeEditor, lineChange); }); this.activeEditor.renderer.$scrollDecorator.$updateDecorators(this.activeEditor.renderer.layerConfig); } else { this.chunks && this.chunks.forEach(function (lineChange) { updateDecorators(_this.editorA, lineChange); updateDecorators(_this.editorB, lineChange); }); this.editorA.renderer.$scrollDecorator.$updateDecorators(this.editorA.renderer.layerConfig); this.editorB.renderer.$scrollDecorator.$updateDecorators(this.editorB.renderer.layerConfig); } }; BaseDiffView.prototype.$diffLines = function (val1, val2) { return this.diffProvider.compute(val1, val2, { ignoreTrimWhitespace: this.$ignoreTrimWhitespace, maxComputationTimeMs: this.$maxComputationTimeMs }); }; BaseDiffView.prototype.setProvider = function (provider) { this.diffProvider = provider; }; BaseDiffView.prototype.$addWidget = function (session, w) { var lineWidget = session.lineWidgets[w.row]; if (lineWidget) { w.rowsAbove += lineWidget.rowsAbove > w.rowsAbove ? lineWidget.rowsAbove : w.rowsAbove; w.rowCount += lineWidget.rowCount; } session.lineWidgets[w.row] = w; session.widgetManager.lineWidgets[w.row] = w; session.$resetRowCache(w.row); var fold = session.getFoldAt(w.row, 0); if (fold) { session.widgetManager.updateOnFold({ data: fold, action: "add", }, session); } }; BaseDiffView.prototype.$initWidgets = function (editor) { var session = editor.session; if (!session.widgetManager) { session.widgetManager = new LineWidgets(session); session.widgetManager.attach(editor); } editor.session.lineWidgets = []; editor.session.widgetManager.lineWidgets = []; editor.session.$resetRowCache(0); }; BaseDiffView.prototype.$screenRow = function (pos, session) { var row = session.documentToScreenPosition(pos).row; var afterEnd = pos.row - session.getLength() + 1; if (afterEnd > 0) { row += afterEnd; } return row; }; BaseDiffView.prototype.align = function () { }; BaseDiffView.prototype.onChangeWrapLimit = function (e, session) { }; BaseDiffView.prototype.onSelect = function (e, selection) { this.searchHighlight(selection); this.syncSelect(selection); }; BaseDiffView.prototype.syncSelect = function (selection) { if (this.$updatingSelection) return; var isOld = selection.session === this.sessionA; var selectionRange = selection.getRange(); var currSelectionRange = isOld ? this.selectionRangeA : this.selectionRangeB; if (currSelectionRange && selectionRange.isEqual(currSelectionRange)) return; if (isOld) { this.selectionRangeA = selectionRange; } else { this.selectionRangeB = selectionRange; } this.$updatingSelection = true; var newRange = this.transformRange(selectionRange, isOld); if (this.$syncSelections) { (isOld ? this.editorB : this.editorA).session.selection.setSelectionRange(newRange); } this.$updatingSelection = false; if (isOld) { this.selectionRangeA = selectionRange; this.selectionRangeB = newRange; } else { this.selectionRangeA = newRange; this.selectionRangeB = selectionRange; } this.updateSelectionMarker(this.syncSelectionMarkerA, this.sessionA, this.selectionRangeA); this.updateSelectionMarker(this.syncSelectionMarkerB, this.sessionB, this.selectionRangeB); }; BaseDiffView.prototype.updateSelectionMarker = function (marker, session, range) { marker.setRange(range); session._signal("changeFrontMarker"); }; BaseDiffView.prototype.onChangeFold = function (ev, session) { var fold = ev.data; if (this.$syncingFold || !fold || !ev.action) return; this.scheduleRealign(); var isOrig = session === this.sessionA; var other = isOrig ? this.sessionB : this.sessionA; if (ev.action === "remove") { if (fold.other) { fold.other.other = null; other.removeFold(fold.other); } else if (fold.lineWidget) { other.widgetManager.addLineWidget(fold.lineWidget); fold.lineWidget = null; if (other["$editor"]) { other["$editor"].renderer.updateBackMarkers(); } } } if (ev.action === "add") { var range = this.transformRange(fold.range, isOrig); if (range.isEmpty()) { var row = range.start.row + 1; if (other.lineWidgets[row]) { fold.lineWidget = other.lineWidgets[row]; other.widgetManager.removeLineWidget(fold.lineWidget); if (other["$editor"]) { other["$editor"].renderer.updateBackMarkers(); } } } else { this.$syncingFold = true; fold.other = other.addFold(fold.placeholder, range); if (fold.other) { fold.other.other = fold; } this.$syncingFold = false; } } }; BaseDiffView.prototype.scheduleRealign = function () { if (!this.realignPending) { this.realignPending = true; this.editorA.renderer.on("beforeRender", this.realign); this.editorB.renderer.on("beforeRender", this.realign); } }; BaseDiffView.prototype.realign = function () { this.realignPending = true; this.editorA.renderer.off("beforeRender", this.realign); this.editorB.renderer.off("beforeRender", this.realign); this.align(); this.realignPending = false; }; BaseDiffView.prototype.detach = function () { if (!this.editorA || !this.editorB) return; if (this.savedOptionsA) this.editorA.setOptions(this.savedOptionsA); if (this.savedOptionsB) this.editorB.setOptions(this.savedOptionsB); this.editorA.renderer.off("beforeRender", this.realign); this.editorB.renderer.off("beforeRender", this.realign); this.$detachEventHandlers(); this.$removeLineWidgets(this.sessionA); this.$removeLineWidgets(this.sessionB); this.gutterDecoratorA && this.gutterDecoratorA.dispose(); this.gutterDecoratorB && this.gutterDecoratorB.dispose(); this.sessionA.selection.clearSelection(); this.sessionB.selection.clearSelection(); if (this.savedOptionsA && this.savedOptionsA.customScrollbar) { this.$resetDecorators(this.editorA.renderer); } if (this.savedOptionsB && this.savedOptionsB.customScrollbar) { this.$resetDecorators(this.editorB.renderer); } }; BaseDiffView.prototype.$removeLineWidgets = function (session) { session.lineWidgets = []; session.widgetManager.lineWidgets = []; session._signal("changeFold", { data: { start: { row: 0 } } }); }; BaseDiffView.prototype.$detachEventHandlers = function () { }; BaseDiffView.prototype.destroy = function () { this.detach(); this.editorA && this.editorA.destroy(); this.editorB && this.editorB.destroy(); this.editorA = this.editorB = null; }; BaseDiffView.prototype.gotoNext = function (dir) { var ace = this.activeEditor || this.editorA; if (this.inlineDiffEditor) { ace = this.editorA; } var sideA = ace == this.editorA; var row = ace.selection.lead.row; var i = this.findChunkIndex(this.chunks, row, sideA); var chunk = this.chunks[i + dir] || this.chunks[i]; var scrollTop = ace.session.getScrollTop(); if (chunk) { var range = chunk[sideA ? "old" : "new"]; var line = Math.max(range.start.row, range.end.row - 1); ace.selection.setRange(new Range(line, 0, line, 0)); } ace.renderer.scrollSelectionIntoView(ace.selection.lead, ace.selection.anchor, 0.5); ace.renderer.animateScrolling(scrollTop); }; BaseDiffView.prototype.firstDiffSelected = function () { return this.currentDiffIndex <= 1; }; BaseDiffView.prototype.lastDiffSelected = function () { return this.currentDiffIndex > this.chunks.length - 1; }; BaseDiffView.prototype.transformRange = function (range, isOriginal) { return Range.fromPoints(this.transformPosition(range.start, isOriginal), this.transformPosition(range.end, isOriginal)); }; BaseDiffView.prototype.transformPosition = function (pos, isOriginal) { var chunkIndex = this.findChunkIndex(this.chunks, pos.row, isOriginal); var chunk = this.chunks[chunkIndex]; var clonePos = this.sessionB.doc.clonePos; var result = clonePos(pos); var _a = __read(isOriginal ? ["old", "new"] : ["new", "old"], 2), from = _a[0], to = _a[1]; var deltaChar = 0; var ignoreIndent = false; if (chunk) { if (chunk[from].end.row <= pos.row) { result.row -= chunk[from].end.row - chunk[to].end.row; } else if (chunk.charChanges) { for (var i = 0; i < chunk.charChanges.length; i++) { var change = chunk.charChanges[i]; var fromRange = change[from]; var toRange = change[to]; if (fromRange.end.row < pos.row) continue; if (fromRange.start.row > pos.row) break; if (fromRange.isMultiLine() && fromRange.contains(pos.row, pos.column)) { result.row = toRange.start.row + pos.row - fromRange.start.row; var maxRow = toRange.end.row; if (toRange.end.column === 0) maxRow--; if (result.row > maxRow) { result.row = maxRow; result.column = (isOriginal ? this.sessionB : this.sessionA).getLine(maxRow).length; ignoreIndent = true; } result.row = Math.min(result.row, maxRow); } else { result.row = toRange.start.row; if (fromRange.start.column > pos.column) break; ignoreIndent = true; if (!fromRange.isEmpty() && fromRange.contains(pos.row, pos.column)) { result.column = toRange.start.column; deltaChar = pos.column - fromRange.start.column; deltaChar = Math.min(deltaChar, toRange.end.column - toRange.start.column); } else { result = clonePos(toRange.end); deltaChar = pos.column - fromRange.end.column; } } } } else if (chunk[from].start.row <= pos.row) { result.row += chunk[to].start.row - chunk[from].start.row; if (result.row >= chunk[to].end.row) { result.row = chunk[to].end.row - 1; result.column = (isOriginal ? this.sessionB : this.sessionA).getLine(result.row).length; } } } if (!ignoreIndent) { //TODO: var _b = __read(isOriginal ? [this.sessionA, this.sessionB] : [ this.sessionB, this.sessionA ], 2), fromEditSession = _b[0], toEditSession = _b[1]; deltaChar -= this.$getDeltaIndent(fromEditSession, toEditSession, pos.row, result.row); } result.column += deltaChar; return result; }; BaseDiffView.prototype.$getDeltaIndent = function (fromEditSession, toEditSession, fromLine, toLine) { var origIndent = this.$getIndent(fromEditSession, fromLine); var editIndent = this.$getIndent(toEditSession, toLine); return origIndent - editIndent; }; BaseDiffView.prototype.$getIndent = function (editSession, line) { return editSession.getLine(line).match(/^\s*/)[0].length; }; BaseDiffView.prototype.printDiffs = function () { this.chunks.forEach(function (diff) { console.log(diff.toString()); }); }; BaseDiffView.prototype.findChunkIndex = function (chunks, row, isOriginal) { for (var i = 0; i < chunks.length; i++) { var ch = chunks[i]; var chunk = isOriginal ? ch.old : ch.new; if (chunk.end.row < row) continue; if (chunk.start.row > row) break; } this.currentDiffIndex = i; return i - 1; }; BaseDiffView.prototype.searchHighlight = function (selection) { if (this.$syncSelections || this.inlineDiffEditor) { return; } var currSession = selection.session; var otherSession = currSession === this.sessionA ? this.sessionB : this.sessionA; otherSession.highlight(currSession.$searchHighlight.regExp); otherSession._signal("changeBackMarker"); }; BaseDiffView.prototype.initSelectionMarkers = function () { this.syncSelectionMarkerA = new SyncSelectionMarker(); this.syncSelectionMarkerB = new SyncSelectionMarker(); this.sessionA.addDynamicMarker(this.syncSelectionMarkerA, true); this.sessionB.addDynamicMarker(this.syncSelectionMarkerB, true); }; BaseDiffView.prototype.clearSelectionMarkers = function () { this.sessionA.removeMarker(this.syncSelectionMarkerA.id); this.sessionB.removeMarker(this.syncSelectionMarkerB.id); }; return BaseDiffView; }()); config.defineOptions(BaseDiffView.prototype, "DiffView", { showOtherLineNumbers: { set: function (value) { if (this.gutterLayer) { this.gutterLayer.$renderer = value ? null : emptyGutterRenderer; this.editorA.renderer.updateFull(); } }, initialValue: true }, folding: { set: function (value) { this.editorA.setOption("showFoldWidgets", value); this.editorB.setOption("showFoldWidgets", value); if (!value) { var posA = []; var posB = []; if (this.chunks) { this.chunks.forEach(function (x) { posA.push(x.old.start, x.old.end); posB.push(x.new.start, x.new.end); }); } this.sessionA.unfold(posA); this.sessionB.unfold(posB); } } }, syncSelections: { set: function (value) { }, }, ignoreTrimWhitespace: { set: function (value) { this.scheduleOnInput(); }, }, wrap: { set: function (value) { this.sessionA.setOption("wrap", value); this.sessionB.setOption("wrap", value); } }, maxDiffs: { value: 5000, }, theme: { set: function (value) { this.setTheme(value); }, get: function () { return this.editorA.getTheme(); } }, }); var emptyGutterRenderer = { getText: function name(params) { return ""; }, getWidth: function () { return 0; } }; exports.BaseDiffView = BaseDiffView; var DiffChunk = /** @class */ (function () { function DiffChunk(originalRange, modifiedRange, charChanges) { this.old = originalRange; this.new = modifiedRange; this.charChanges = charChanges && charChanges.map(function (m) { return new DiffChunk(new Range(m.originalStartLineNumber, m.originalStartColumn, m.originalEndLineNumber, m.originalEndColumn), new Range(m.modifiedStartLineNumber, m.modifiedStartColumn, m.modifiedEndLineNumber, m.modifiedEndColumn)); }); } return DiffChunk; }()); var DiffHighlight = /** @class */ (function () { function DiffHighlight(diffView, type) { this.id; this.diffView = diffView; this.type = type; } DiffHighlight.prototype.update = function (html, markerLayer, session, config) { var dir, operation, opOperation; var diffView = this.diffView; if (this.type === -1) { // original editor dir = "old"; operation = "delete"; opOperation = "insert"; } else { //modified editor dir = "new"; operation = "insert"; opOperation = "delete"; } var ignoreTrimWhitespace = diffView.$ignoreTrimWhitespace; var lineChanges = diffView.chunks; if (session.lineWidgets && !diffView.inlineDiffEditor) { for (var row = config.firstRow; row <= config.lastRow; row++) { var lineWidget = session.lineWidgets[row]; if (!lineWidget || lineWidget.hidden) continue; var start = session.documentToScreenRow(row, 0); if (lineWidget.rowsAbove > 0) { var range = new Range(start - lineWidget.rowsAbove, 0, start - 1, Number.MAX_VALUE); markerLayer.drawFullLineMarker(html, range, "ace_diff aligned_diff", config); } var end = start + lineWidget.rowCount - (lineWidget.rowsAbove || 0); var range = new Range(start + 1, 0, end, Number.MAX_VALUE); markerLayer.drawFullLineMarker(html, range, "ace_diff aligned_diff", config); } } lineChanges.forEach(function (lineChange) { var startRow = lineChange[dir].start.row; var endRow = lineChange[dir].end.row; if (endRow < config.firstRow || startRow > config.lastRow) return; var range = new Range(startRow, 0, endRow - 1, 1 << 30); if (startRow !== endRow) { range = range.toScreenRange(session); markerLayer.drawFullLineMarker(html, range, "ace_diff " + operation, config); } if (lineChange.charChanges) { for (var i = 0; i < lineChange.charChanges.length; i++) { var changeRange = lineChange.charChanges[i][dir]; if (changeRange.end.column == 0 && changeRange.end.row > changeRange.start.row && changeRange.end.row == lineChange[dir].end.row) { changeRange.end.row--; changeRange.end.column = Number.MAX_VALUE; } if (ignoreTrimWhitespace) { for (var lineNumber = changeRange.start.row; lineNumber <= changeRange.end.row; lineNumber++) { var startColumn = void 0; var endColumn = void 0; var sessionLineStart = session.getLine(lineNumber).match(/^\s*/)[0].length; var sessionLineEnd = session.getLine(lineNumber).length; if (lineNumber === changeRange.start.row) { startColumn = changeRange.start.column; } else { startColumn = sessionLineStart; } if (lineNumber === changeRange.end.row) { endColumn = changeRange.end.column; } else { endColumn = sessionLineEnd; } var range_1 = new Range(lineNumber, startColumn, lineNumber, endColumn); var screenRange = range_1.toScreenRange(session); if (sessionLineStart === startColumn && sessionLineEnd === endColumn) { continue; } var cssClass = "inline " + operation; if (range_1.isEmpty() && startColumn !== 0) { cssClass = "inline " + opOperation + " empty"; } markerLayer.drawSingleLineMarker(html, screenRange, "ace_diff " + cssClass, config); } } else { var range_2 = new Range(changeRange.start.row, changeRange.start.column, changeRange.end.row, changeRange.end.column); var screenRange = range_2.toScreenRange(session); var cssClass = "inline " + operation; if (range_2.isEmpty() && changeRange.start.column !== 0) { cssClass = "inline empty " + opOperation; } if (screenRange.isMultiLine()) { markerLayer.drawTextMarker(html, screenRange, "ace_diff " + cssClass, config); } else { markerLayer.drawSingleLineMarker(html, screenRange, "ace_diff " + cssClass, config); } } } } }); }; return DiffHighlight; }()); var SyncSelectionMarker = /** @class */ (function () { function SyncSelectionMarker() { this.id; this.type = "fullLine"; this.clazz = "ace_diff-active-line"; } SyncSelectionMarker.prototype.update = function (html, markerLayer, session, config) { }; SyncSelectionMarker.prototype.setRange = function (range) { var newRange = range.clone(); newRange.end.column++; this.range = newRange; }; return SyncSelectionMarker; }()); exports.DiffChunk = DiffChunk; exports.DiffHighlight = DiffHighlight; }); ace.define("ace/ext/diff/inline_diff_view",["require","exports","module","ace/ext/diff/base_diff_view","ace/virtual_renderer","ace/config"], function(require, exports, module){"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var BaseDiffView = require("./base_diff_view").BaseDiffView; var Renderer = require("../../virtual_renderer").VirtualRenderer;