@theia/bulk-edit 1.45.0 → 1.46.0-next.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -30
- package/lib/browser/bulk-edit-commands.d.ts +6 -6
- package/lib/browser/bulk-edit-commands.js +33 -33
- package/lib/browser/bulk-edit-contribution.d.ts +19 -19
- package/lib/browser/bulk-edit-contribution.js +115 -115
- package/lib/browser/bulk-edit-frontend-module.d.ts +4 -4
- package/lib/browser/bulk-edit-frontend-module.js +37 -37
- package/lib/browser/bulk-edit-tree/bulk-edit-node-selection.d.ts +14 -14
- package/lib/browser/bulk-edit-tree/bulk-edit-node-selection.js +35 -35
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-container.d.ts +4 -4
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-container.js +35 -35
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-model.d.ts +10 -10
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-model.js +58 -58
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-widget.d.ts +33 -33
- package/lib/browser/bulk-edit-tree/bulk-edit-tree-widget.js +231 -231
- package/lib/browser/bulk-edit-tree/bulk-edit-tree.d.ts +24 -24
- package/lib/browser/bulk-edit-tree/bulk-edit-tree.js +112 -112
- package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.d.ts +1 -1
- package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.js +62 -62
- package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.js.map +1 -1
- package/lib/browser/bulk-edit-tree/index.d.ts +5 -5
- package/lib/browser/bulk-edit-tree/index.js +32 -32
- package/lib/browser/bulk-edit-tree-label-provider.d.ts +15 -15
- package/lib/browser/bulk-edit-tree-label-provider.js +80 -80
- package/package.json +9 -9
- package/src/browser/bulk-edit-commands.ts +34 -34
- package/src/browser/bulk-edit-contribution.ts +112 -112
- package/src/browser/bulk-edit-frontend-module.ts +39 -39
- package/src/browser/bulk-edit-tree/bulk-edit-node-selection.ts +44 -44
- package/src/browser/bulk-edit-tree/bulk-edit-tree-container.ts +35 -35
- package/src/browser/bulk-edit-tree/bulk-edit-tree-model.ts +42 -42
- package/src/browser/bulk-edit-tree/bulk-edit-tree-widget.tsx +231 -231
- package/src/browser/bulk-edit-tree/bulk-edit-tree.spec.ts +73 -73
- package/src/browser/bulk-edit-tree/bulk-edit-tree.ts +114 -114
- package/src/browser/bulk-edit-tree/index.ts +21 -21
- package/src/browser/bulk-edit-tree-label-provider.ts +71 -71
- package/src/browser/style/bulk-edit.css +66 -66
|
@@ -1,232 +1,232 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
-
};
|
|
23
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
-
};
|
|
26
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
27
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
28
|
-
};
|
|
29
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.BulkEditTreeWidget = exports.BULK_EDIT_WIDGET_NAME = exports.BULK_EDIT_TREE_WIDGET_ID = void 0;
|
|
31
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
32
|
-
const browser_1 = require("@theia/core/lib/browser");
|
|
33
|
-
const React = require("@theia/core/shared/react");
|
|
34
|
-
const bulk_edit_tree_1 = require("./bulk-edit-tree");
|
|
35
|
-
const bulk_edit_tree_model_1 = require("./bulk-edit-tree-model");
|
|
36
|
-
const browser_2 = require("@theia/filesystem/lib/browser");
|
|
37
|
-
const uri_1 = require("@theia/core/lib/common/uri");
|
|
38
|
-
const browser_3 = require("@theia/editor/lib/browser");
|
|
39
|
-
const common_1 = require("@theia/core/lib/common");
|
|
40
|
-
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
41
|
-
const nls_1 = require("@theia/core/lib/common/nls");
|
|
42
|
-
exports.BULK_EDIT_TREE_WIDGET_ID = 'bulkedit';
|
|
43
|
-
exports.BULK_EDIT_WIDGET_NAME = nls_1.nls.localizeByDefault('Refactor Preview');
|
|
44
|
-
let BulkEditTreeWidget = class BulkEditTreeWidget extends browser_1.TreeWidget {
|
|
45
|
-
constructor(treeProps, model, contextMenuRenderer) {
|
|
46
|
-
super(treeProps, model, contextMenuRenderer);
|
|
47
|
-
this.treeProps = treeProps;
|
|
48
|
-
this.model = model;
|
|
49
|
-
this.contextMenuRenderer = contextMenuRenderer;
|
|
50
|
-
this.editorWidgets = [];
|
|
51
|
-
this.id = exports.BULK_EDIT_TREE_WIDGET_ID;
|
|
52
|
-
this.title.label = exports.BULK_EDIT_WIDGET_NAME;
|
|
53
|
-
this.title.caption = exports.BULK_EDIT_WIDGET_NAME;
|
|
54
|
-
this.title.closable = true;
|
|
55
|
-
this.addClass('theia-bulk-edit-container');
|
|
56
|
-
this.toDispose.push(disposable_1.Disposable.create(() => {
|
|
57
|
-
this.disposeEditors();
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
async initModel(edits) {
|
|
61
|
-
var _a;
|
|
62
|
-
await this.model.initModel(edits, await this.getFileContentsMap(edits));
|
|
63
|
-
(_a = this.quickView) === null || _a === void 0 ? void 0 : _a.showItem(exports.BULK_EDIT_WIDGET_NAME);
|
|
64
|
-
}
|
|
65
|
-
tapNode(node) {
|
|
66
|
-
super.tapNode(node);
|
|
67
|
-
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
68
|
-
this.doOpen(node);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
handleDown(event) {
|
|
72
|
-
const node = this.model.getNextSelectableNode();
|
|
73
|
-
super.handleDown(event);
|
|
74
|
-
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
75
|
-
this.doOpen(node);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
handleUp(event) {
|
|
79
|
-
const node = this.model.getPrevSelectableNode();
|
|
80
|
-
super.handleUp(event);
|
|
81
|
-
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
82
|
-
this.doOpen(node);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
renderTree(model) {
|
|
86
|
-
if (browser_1.CompositeTreeNode.is(model.root) && model.root.children.length > 0) {
|
|
87
|
-
return super.renderTree(model);
|
|
88
|
-
}
|
|
89
|
-
return React.createElement("div", { className: 'theia-widget-noInfo noEdits' }, nls_1.nls.localizeByDefault('Made no edits'));
|
|
90
|
-
}
|
|
91
|
-
renderCaption(node, props) {
|
|
92
|
-
if (bulk_edit_tree_1.BulkEditInfoNode.is(node)) {
|
|
93
|
-
return this.decorateBulkEditInfoNode(node);
|
|
94
|
-
}
|
|
95
|
-
else if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
96
|
-
return this.decorateBulkEditNode(node);
|
|
97
|
-
}
|
|
98
|
-
return 'caption';
|
|
99
|
-
}
|
|
100
|
-
decorateBulkEditNode(node) {
|
|
101
|
-
var _a, _b;
|
|
102
|
-
if ((node === null || node === void 0 ? void 0 : node.parent) && (node === null || node === void 0 ? void 0 : node.bulkEdit) && ('textEdit' in (node === null || node === void 0 ? void 0 : node.bulkEdit))) {
|
|
103
|
-
const bulkEdit = node.bulkEdit;
|
|
104
|
-
const parent = node.parent;
|
|
105
|
-
if (parent === null || parent === void 0 ? void 0 : parent.fileContents) {
|
|
106
|
-
const lines = parent.fileContents.split('\n');
|
|
107
|
-
const startLineNum = +((_b = (_a = bulkEdit.textEdit) === null || _a === void 0 ? void 0 : _a.range) === null || _b === void 0 ? void 0 : _b.startLineNumber);
|
|
108
|
-
if (lines.length > startLineNum) {
|
|
109
|
-
const startColumn = +bulkEdit.textEdit.range.startColumn;
|
|
110
|
-
const endColumn = +bulkEdit.textEdit.range.endColumn;
|
|
111
|
-
const lineText = lines[startLineNum - 1];
|
|
112
|
-
const beforeMatch = (startColumn > 26 ? '... ' : '') + lineText.substring(0, startColumn - 1).slice(-25);
|
|
113
|
-
const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
|
|
114
|
-
const afterMatch = lineText.substring(startColumn - 1 + replacedText.length, startColumn - 1 + replacedText.length + 75);
|
|
115
|
-
return React.createElement("div", { className: 'bulkEditNode' },
|
|
116
|
-
React.createElement("div", { className: 'message' },
|
|
117
|
-
beforeMatch,
|
|
118
|
-
React.createElement("span", { className: "replaced-text" }, replacedText),
|
|
119
|
-
React.createElement("span", { className: "inserted-text" }, bulkEdit.textEdit.text),
|
|
120
|
-
afterMatch));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
decorateBulkEditInfoNode(node) {
|
|
126
|
-
const icon = this.toNodeIcon(node);
|
|
127
|
-
const name = this.toNodeName(node);
|
|
128
|
-
const description = this.toNodeDescription(node);
|
|
129
|
-
const path = this.labelProvider.getLongName(node.uri.withScheme('bulkedit'));
|
|
130
|
-
return React.createElement("div", { title: path, className: 'bulkEditInfoNode' },
|
|
131
|
-
icon && React.createElement("div", { className: icon + ' file-icon' }),
|
|
132
|
-
React.createElement("div", { className: 'name' }, name),
|
|
133
|
-
React.createElement("div", { className: 'path' }, description));
|
|
134
|
-
}
|
|
135
|
-
async getFileContentsMap(edits) {
|
|
136
|
-
var _a;
|
|
137
|
-
const fileContentMap = new Map();
|
|
138
|
-
if (edits) {
|
|
139
|
-
for (const element of edits) {
|
|
140
|
-
if (element) {
|
|
141
|
-
const filePath = (('newResource' in element) && ((_a = element.newResource) === null || _a === void 0 ? void 0 : _a.path)) ||
|
|
142
|
-
(('resource' in element) && element.resource.path);
|
|
143
|
-
if (filePath && !fileContentMap.has(filePath)) {
|
|
144
|
-
const fileUri = new uri_1.default(filePath).withScheme('file');
|
|
145
|
-
const resource = await this.fileResourceResolver.resolve(fileUri);
|
|
146
|
-
fileContentMap.set(filePath, await resource.readContents());
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return fileContentMap;
|
|
152
|
-
}
|
|
153
|
-
async doOpen(node) {
|
|
154
|
-
if (node && node.parent && node.bulkEdit && ('edit' in node.bulkEdit)) {
|
|
155
|
-
const resultNode = node.parent;
|
|
156
|
-
const leftUri = node.uri;
|
|
157
|
-
const rightUri = await this.createReplacePreview(resultNode);
|
|
158
|
-
const diffUri = browser_1.DiffUris.encode(leftUri, rightUri);
|
|
159
|
-
const editorWidget = await this.editorManager.open(diffUri, this.getEditorOptions(node));
|
|
160
|
-
this.editorWidgets.push(editorWidget);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
async createReplacePreview(bulkEditInfoNode) {
|
|
164
|
-
const fileUri = bulkEditInfoNode.uri;
|
|
165
|
-
let lines = [];
|
|
166
|
-
if (bulkEditInfoNode === null || bulkEditInfoNode === void 0 ? void 0 : bulkEditInfoNode.fileContents) {
|
|
167
|
-
lines = bulkEditInfoNode.fileContents.split('\n');
|
|
168
|
-
bulkEditInfoNode.children.map((node) => {
|
|
169
|
-
if (node.bulkEdit && ('textEdit' in node.bulkEdit)) {
|
|
170
|
-
const startLineNum = node.bulkEdit.textEdit.range.startLineNumber;
|
|
171
|
-
if (lines.length > startLineNum) {
|
|
172
|
-
const startColumn = node.bulkEdit.textEdit.range.startColumn;
|
|
173
|
-
const endColumn = node.bulkEdit.textEdit.range.endColumn;
|
|
174
|
-
const lineText = lines[startLineNum - 1];
|
|
175
|
-
const beforeMatch = lineText.substring(0, startColumn - 1);
|
|
176
|
-
const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
|
|
177
|
-
const afterMatch = lineText.substring(startColumn - 1 + replacedText.length);
|
|
178
|
-
lines[startLineNum - 1] = beforeMatch + node.bulkEdit.textEdit.text + afterMatch;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
return fileUri.withScheme(common_1.MEMORY_TEXT).withQuery(lines.join('\n'));
|
|
184
|
-
}
|
|
185
|
-
getEditorOptions(node) {
|
|
186
|
-
var _a, _b;
|
|
187
|
-
let options = {};
|
|
188
|
-
if (('textEdit' in node.bulkEdit) && ((_b = (_a = node === null || node === void 0 ? void 0 : node.bulkEdit) === null || _a === void 0 ? void 0 : _a.textEdit) === null || _b === void 0 ? void 0 : _b.range)) {
|
|
189
|
-
options = {
|
|
190
|
-
selection: {
|
|
191
|
-
start: {
|
|
192
|
-
line: node.bulkEdit.textEdit.range.startLineNumber - 1,
|
|
193
|
-
character: node.bulkEdit.textEdit.range.startColumn - 1
|
|
194
|
-
},
|
|
195
|
-
end: {
|
|
196
|
-
line: node.bulkEdit.textEdit.range.endLineNumber - 1,
|
|
197
|
-
character: node.bulkEdit.textEdit.range.endColumn - 1
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
return options;
|
|
203
|
-
}
|
|
204
|
-
disposeEditors() {
|
|
205
|
-
var _a;
|
|
206
|
-
this.editorWidgets.forEach(w => w.dispose());
|
|
207
|
-
(_a = this.quickView) === null || _a === void 0 ? void 0 : _a.hideItem(exports.BULK_EDIT_WIDGET_NAME);
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
__decorate([
|
|
211
|
-
(0, inversify_1.inject)(browser_2.FileResourceResolver),
|
|
212
|
-
__metadata("design:type", browser_2.FileResourceResolver)
|
|
213
|
-
], BulkEditTreeWidget.prototype, "fileResourceResolver", void 0);
|
|
214
|
-
__decorate([
|
|
215
|
-
(0, inversify_1.inject)(browser_3.EditorManager),
|
|
216
|
-
__metadata("design:type", browser_3.EditorManager)
|
|
217
|
-
], BulkEditTreeWidget.prototype, "editorManager", void 0);
|
|
218
|
-
__decorate([
|
|
219
|
-
(0, inversify_1.inject)(browser_1.QuickViewService),
|
|
220
|
-
(0, inversify_1.optional)(),
|
|
221
|
-
__metadata("design:type", browser_1.QuickViewService)
|
|
222
|
-
], BulkEditTreeWidget.prototype, "quickView", void 0);
|
|
223
|
-
BulkEditTreeWidget = __decorate([
|
|
224
|
-
(0, inversify_1.injectable)(),
|
|
225
|
-
__param(0, (0, inversify_1.inject)(browser_1.TreeProps)),
|
|
226
|
-
__param(1, (0, inversify_1.inject)(bulk_edit_tree_model_1.BulkEditTreeModel)),
|
|
227
|
-
__param(2, (0, inversify_1.inject)(browser_1.ContextMenuRenderer)),
|
|
228
|
-
__metadata("design:paramtypes", [Object, bulk_edit_tree_model_1.BulkEditTreeModel,
|
|
229
|
-
browser_1.ContextMenuRenderer])
|
|
230
|
-
], BulkEditTreeWidget);
|
|
231
|
-
exports.BulkEditTreeWidget = BulkEditTreeWidget;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
27
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.BulkEditTreeWidget = exports.BULK_EDIT_WIDGET_NAME = exports.BULK_EDIT_TREE_WIDGET_ID = void 0;
|
|
31
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
32
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
33
|
+
const React = require("@theia/core/shared/react");
|
|
34
|
+
const bulk_edit_tree_1 = require("./bulk-edit-tree");
|
|
35
|
+
const bulk_edit_tree_model_1 = require("./bulk-edit-tree-model");
|
|
36
|
+
const browser_2 = require("@theia/filesystem/lib/browser");
|
|
37
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
38
|
+
const browser_3 = require("@theia/editor/lib/browser");
|
|
39
|
+
const common_1 = require("@theia/core/lib/common");
|
|
40
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
41
|
+
const nls_1 = require("@theia/core/lib/common/nls");
|
|
42
|
+
exports.BULK_EDIT_TREE_WIDGET_ID = 'bulkedit';
|
|
43
|
+
exports.BULK_EDIT_WIDGET_NAME = nls_1.nls.localizeByDefault('Refactor Preview');
|
|
44
|
+
let BulkEditTreeWidget = class BulkEditTreeWidget extends browser_1.TreeWidget {
|
|
45
|
+
constructor(treeProps, model, contextMenuRenderer) {
|
|
46
|
+
super(treeProps, model, contextMenuRenderer);
|
|
47
|
+
this.treeProps = treeProps;
|
|
48
|
+
this.model = model;
|
|
49
|
+
this.contextMenuRenderer = contextMenuRenderer;
|
|
50
|
+
this.editorWidgets = [];
|
|
51
|
+
this.id = exports.BULK_EDIT_TREE_WIDGET_ID;
|
|
52
|
+
this.title.label = exports.BULK_EDIT_WIDGET_NAME;
|
|
53
|
+
this.title.caption = exports.BULK_EDIT_WIDGET_NAME;
|
|
54
|
+
this.title.closable = true;
|
|
55
|
+
this.addClass('theia-bulk-edit-container');
|
|
56
|
+
this.toDispose.push(disposable_1.Disposable.create(() => {
|
|
57
|
+
this.disposeEditors();
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
async initModel(edits) {
|
|
61
|
+
var _a;
|
|
62
|
+
await this.model.initModel(edits, await this.getFileContentsMap(edits));
|
|
63
|
+
(_a = this.quickView) === null || _a === void 0 ? void 0 : _a.showItem(exports.BULK_EDIT_WIDGET_NAME);
|
|
64
|
+
}
|
|
65
|
+
tapNode(node) {
|
|
66
|
+
super.tapNode(node);
|
|
67
|
+
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
68
|
+
this.doOpen(node);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
handleDown(event) {
|
|
72
|
+
const node = this.model.getNextSelectableNode();
|
|
73
|
+
super.handleDown(event);
|
|
74
|
+
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
75
|
+
this.doOpen(node);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
handleUp(event) {
|
|
79
|
+
const node = this.model.getPrevSelectableNode();
|
|
80
|
+
super.handleUp(event);
|
|
81
|
+
if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
82
|
+
this.doOpen(node);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
renderTree(model) {
|
|
86
|
+
if (browser_1.CompositeTreeNode.is(model.root) && model.root.children.length > 0) {
|
|
87
|
+
return super.renderTree(model);
|
|
88
|
+
}
|
|
89
|
+
return React.createElement("div", { className: 'theia-widget-noInfo noEdits' }, nls_1.nls.localizeByDefault('Made no edits'));
|
|
90
|
+
}
|
|
91
|
+
renderCaption(node, props) {
|
|
92
|
+
if (bulk_edit_tree_1.BulkEditInfoNode.is(node)) {
|
|
93
|
+
return this.decorateBulkEditInfoNode(node);
|
|
94
|
+
}
|
|
95
|
+
else if (bulk_edit_tree_1.BulkEditNode.is(node)) {
|
|
96
|
+
return this.decorateBulkEditNode(node);
|
|
97
|
+
}
|
|
98
|
+
return 'caption';
|
|
99
|
+
}
|
|
100
|
+
decorateBulkEditNode(node) {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
if ((node === null || node === void 0 ? void 0 : node.parent) && (node === null || node === void 0 ? void 0 : node.bulkEdit) && ('textEdit' in (node === null || node === void 0 ? void 0 : node.bulkEdit))) {
|
|
103
|
+
const bulkEdit = node.bulkEdit;
|
|
104
|
+
const parent = node.parent;
|
|
105
|
+
if (parent === null || parent === void 0 ? void 0 : parent.fileContents) {
|
|
106
|
+
const lines = parent.fileContents.split('\n');
|
|
107
|
+
const startLineNum = +((_b = (_a = bulkEdit.textEdit) === null || _a === void 0 ? void 0 : _a.range) === null || _b === void 0 ? void 0 : _b.startLineNumber);
|
|
108
|
+
if (lines.length > startLineNum) {
|
|
109
|
+
const startColumn = +bulkEdit.textEdit.range.startColumn;
|
|
110
|
+
const endColumn = +bulkEdit.textEdit.range.endColumn;
|
|
111
|
+
const lineText = lines[startLineNum - 1];
|
|
112
|
+
const beforeMatch = (startColumn > 26 ? '... ' : '') + lineText.substring(0, startColumn - 1).slice(-25);
|
|
113
|
+
const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
|
|
114
|
+
const afterMatch = lineText.substring(startColumn - 1 + replacedText.length, startColumn - 1 + replacedText.length + 75);
|
|
115
|
+
return React.createElement("div", { className: 'bulkEditNode' },
|
|
116
|
+
React.createElement("div", { className: 'message' },
|
|
117
|
+
beforeMatch,
|
|
118
|
+
React.createElement("span", { className: "replaced-text" }, replacedText),
|
|
119
|
+
React.createElement("span", { className: "inserted-text" }, bulkEdit.textEdit.text),
|
|
120
|
+
afterMatch));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
decorateBulkEditInfoNode(node) {
|
|
126
|
+
const icon = this.toNodeIcon(node);
|
|
127
|
+
const name = this.toNodeName(node);
|
|
128
|
+
const description = this.toNodeDescription(node);
|
|
129
|
+
const path = this.labelProvider.getLongName(node.uri.withScheme('bulkedit'));
|
|
130
|
+
return React.createElement("div", { title: path, className: 'bulkEditInfoNode' },
|
|
131
|
+
icon && React.createElement("div", { className: icon + ' file-icon' }),
|
|
132
|
+
React.createElement("div", { className: 'name' }, name),
|
|
133
|
+
React.createElement("div", { className: 'path' }, description));
|
|
134
|
+
}
|
|
135
|
+
async getFileContentsMap(edits) {
|
|
136
|
+
var _a;
|
|
137
|
+
const fileContentMap = new Map();
|
|
138
|
+
if (edits) {
|
|
139
|
+
for (const element of edits) {
|
|
140
|
+
if (element) {
|
|
141
|
+
const filePath = (('newResource' in element) && ((_a = element.newResource) === null || _a === void 0 ? void 0 : _a.path)) ||
|
|
142
|
+
(('resource' in element) && element.resource.path);
|
|
143
|
+
if (filePath && !fileContentMap.has(filePath)) {
|
|
144
|
+
const fileUri = new uri_1.default(filePath).withScheme('file');
|
|
145
|
+
const resource = await this.fileResourceResolver.resolve(fileUri);
|
|
146
|
+
fileContentMap.set(filePath, await resource.readContents());
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return fileContentMap;
|
|
152
|
+
}
|
|
153
|
+
async doOpen(node) {
|
|
154
|
+
if (node && node.parent && node.bulkEdit && ('edit' in node.bulkEdit)) {
|
|
155
|
+
const resultNode = node.parent;
|
|
156
|
+
const leftUri = node.uri;
|
|
157
|
+
const rightUri = await this.createReplacePreview(resultNode);
|
|
158
|
+
const diffUri = browser_1.DiffUris.encode(leftUri, rightUri);
|
|
159
|
+
const editorWidget = await this.editorManager.open(diffUri, this.getEditorOptions(node));
|
|
160
|
+
this.editorWidgets.push(editorWidget);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async createReplacePreview(bulkEditInfoNode) {
|
|
164
|
+
const fileUri = bulkEditInfoNode.uri;
|
|
165
|
+
let lines = [];
|
|
166
|
+
if (bulkEditInfoNode === null || bulkEditInfoNode === void 0 ? void 0 : bulkEditInfoNode.fileContents) {
|
|
167
|
+
lines = bulkEditInfoNode.fileContents.split('\n');
|
|
168
|
+
bulkEditInfoNode.children.map((node) => {
|
|
169
|
+
if (node.bulkEdit && ('textEdit' in node.bulkEdit)) {
|
|
170
|
+
const startLineNum = node.bulkEdit.textEdit.range.startLineNumber;
|
|
171
|
+
if (lines.length > startLineNum) {
|
|
172
|
+
const startColumn = node.bulkEdit.textEdit.range.startColumn;
|
|
173
|
+
const endColumn = node.bulkEdit.textEdit.range.endColumn;
|
|
174
|
+
const lineText = lines[startLineNum - 1];
|
|
175
|
+
const beforeMatch = lineText.substring(0, startColumn - 1);
|
|
176
|
+
const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
|
|
177
|
+
const afterMatch = lineText.substring(startColumn - 1 + replacedText.length);
|
|
178
|
+
lines[startLineNum - 1] = beforeMatch + node.bulkEdit.textEdit.text + afterMatch;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return fileUri.withScheme(common_1.MEMORY_TEXT).withQuery(lines.join('\n'));
|
|
184
|
+
}
|
|
185
|
+
getEditorOptions(node) {
|
|
186
|
+
var _a, _b;
|
|
187
|
+
let options = {};
|
|
188
|
+
if (('textEdit' in node.bulkEdit) && ((_b = (_a = node === null || node === void 0 ? void 0 : node.bulkEdit) === null || _a === void 0 ? void 0 : _a.textEdit) === null || _b === void 0 ? void 0 : _b.range)) {
|
|
189
|
+
options = {
|
|
190
|
+
selection: {
|
|
191
|
+
start: {
|
|
192
|
+
line: node.bulkEdit.textEdit.range.startLineNumber - 1,
|
|
193
|
+
character: node.bulkEdit.textEdit.range.startColumn - 1
|
|
194
|
+
},
|
|
195
|
+
end: {
|
|
196
|
+
line: node.bulkEdit.textEdit.range.endLineNumber - 1,
|
|
197
|
+
character: node.bulkEdit.textEdit.range.endColumn - 1
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return options;
|
|
203
|
+
}
|
|
204
|
+
disposeEditors() {
|
|
205
|
+
var _a;
|
|
206
|
+
this.editorWidgets.forEach(w => w.dispose());
|
|
207
|
+
(_a = this.quickView) === null || _a === void 0 ? void 0 : _a.hideItem(exports.BULK_EDIT_WIDGET_NAME);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
__decorate([
|
|
211
|
+
(0, inversify_1.inject)(browser_2.FileResourceResolver),
|
|
212
|
+
__metadata("design:type", browser_2.FileResourceResolver)
|
|
213
|
+
], BulkEditTreeWidget.prototype, "fileResourceResolver", void 0);
|
|
214
|
+
__decorate([
|
|
215
|
+
(0, inversify_1.inject)(browser_3.EditorManager),
|
|
216
|
+
__metadata("design:type", browser_3.EditorManager)
|
|
217
|
+
], BulkEditTreeWidget.prototype, "editorManager", void 0);
|
|
218
|
+
__decorate([
|
|
219
|
+
(0, inversify_1.inject)(browser_1.QuickViewService),
|
|
220
|
+
(0, inversify_1.optional)(),
|
|
221
|
+
__metadata("design:type", browser_1.QuickViewService)
|
|
222
|
+
], BulkEditTreeWidget.prototype, "quickView", void 0);
|
|
223
|
+
BulkEditTreeWidget = __decorate([
|
|
224
|
+
(0, inversify_1.injectable)(),
|
|
225
|
+
__param(0, (0, inversify_1.inject)(browser_1.TreeProps)),
|
|
226
|
+
__param(1, (0, inversify_1.inject)(bulk_edit_tree_model_1.BulkEditTreeModel)),
|
|
227
|
+
__param(2, (0, inversify_1.inject)(browser_1.ContextMenuRenderer)),
|
|
228
|
+
__metadata("design:paramtypes", [Object, bulk_edit_tree_model_1.BulkEditTreeModel,
|
|
229
|
+
browser_1.ContextMenuRenderer])
|
|
230
|
+
], BulkEditTreeWidget);
|
|
231
|
+
exports.BulkEditTreeWidget = BulkEditTreeWidget;
|
|
232
232
|
//# sourceMappingURL=bulk-edit-tree-widget.js.map
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { TreeNode, CompositeTreeNode, SelectableTreeNode, ExpandableTreeNode, TreeImpl } from '@theia/core/lib/browser';
|
|
2
|
-
import { UriSelection } from '@theia/core/lib/common/selection';
|
|
3
|
-
import { ResourceEdit, ResourceFileEdit as MonacoResourceFileEdit, ResourceTextEdit as MonacoResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
|
|
4
|
-
export declare class BulkEditTree extends TreeImpl {
|
|
5
|
-
initTree(edits: ResourceEdit[], fileContents: Map<string, string>): Promise<void>;
|
|
6
|
-
private getChildren;
|
|
7
|
-
private createBulkEditNode;
|
|
8
|
-
private createBulkEditInfo;
|
|
9
|
-
private getResourcePath;
|
|
10
|
-
}
|
|
11
|
-
export interface BulkEditNode extends UriSelection, SelectableTreeNode {
|
|
12
|
-
parent: CompositeTreeNode;
|
|
13
|
-
bulkEdit: MonacoResourceFileEdit | MonacoResourceTextEdit;
|
|
14
|
-
}
|
|
15
|
-
export declare namespace BulkEditNode {
|
|
16
|
-
function is(node: TreeNode | undefined): node is BulkEditNode;
|
|
17
|
-
}
|
|
18
|
-
export interface BulkEditInfoNode extends UriSelection, SelectableTreeNode, ExpandableTreeNode {
|
|
19
|
-
parent: CompositeTreeNode;
|
|
20
|
-
fileContents?: string;
|
|
21
|
-
}
|
|
22
|
-
export declare namespace BulkEditInfoNode {
|
|
23
|
-
function is(node: unknown): node is BulkEditInfoNode;
|
|
24
|
-
}
|
|
1
|
+
import { TreeNode, CompositeTreeNode, SelectableTreeNode, ExpandableTreeNode, TreeImpl } from '@theia/core/lib/browser';
|
|
2
|
+
import { UriSelection } from '@theia/core/lib/common/selection';
|
|
3
|
+
import { ResourceEdit, ResourceFileEdit as MonacoResourceFileEdit, ResourceTextEdit as MonacoResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
|
|
4
|
+
export declare class BulkEditTree extends TreeImpl {
|
|
5
|
+
initTree(edits: ResourceEdit[], fileContents: Map<string, string>): Promise<void>;
|
|
6
|
+
private getChildren;
|
|
7
|
+
private createBulkEditNode;
|
|
8
|
+
private createBulkEditInfo;
|
|
9
|
+
private getResourcePath;
|
|
10
|
+
}
|
|
11
|
+
export interface BulkEditNode extends UriSelection, SelectableTreeNode {
|
|
12
|
+
parent: CompositeTreeNode;
|
|
13
|
+
bulkEdit: MonacoResourceFileEdit | MonacoResourceTextEdit;
|
|
14
|
+
}
|
|
15
|
+
export declare namespace BulkEditNode {
|
|
16
|
+
function is(node: TreeNode | undefined): node is BulkEditNode;
|
|
17
|
+
}
|
|
18
|
+
export interface BulkEditInfoNode extends UriSelection, SelectableTreeNode, ExpandableTreeNode {
|
|
19
|
+
parent: CompositeTreeNode;
|
|
20
|
+
fileContents?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare namespace BulkEditInfoNode {
|
|
23
|
+
function is(node: unknown): node is BulkEditInfoNode;
|
|
24
|
+
}
|
|
25
25
|
//# sourceMappingURL=bulk-edit-tree.d.ts.map
|