@jupytergis/base 0.1.1
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/lib/commands.d.ts +11 -0
- package/lib/commands.js +809 -0
- package/lib/console/consoleview.d.ts +24 -0
- package/lib/console/consoleview.js +55 -0
- package/lib/console/index.d.ts +1 -0
- package/lib/console/index.js +1 -0
- package/lib/constants.d.ts +57 -0
- package/lib/constants.js +89 -0
- package/lib/dialogs/components/symbology/BandRendering.d.ts +4 -0
- package/lib/dialogs/components/symbology/BandRendering.js +29 -0
- package/lib/dialogs/components/symbology/BandRow.d.ts +10 -0
- package/lib/dialogs/components/symbology/BandRow.js +43 -0
- package/lib/dialogs/components/symbology/SingleBandPseudoColor.d.ts +20 -0
- package/lib/dialogs/components/symbology/SingleBandPseudoColor.js +281 -0
- package/lib/dialogs/components/symbology/StopRow.d.ts +11 -0
- package/lib/dialogs/components/symbology/StopRow.js +58 -0
- package/lib/dialogs/formdialog.d.ts +31 -0
- package/lib/dialogs/formdialog.js +68 -0
- package/lib/dialogs/layerBrowserDialog.d.ts +25 -0
- package/lib/dialogs/layerBrowserDialog.js +141 -0
- package/lib/dialogs/symbologyDialog.d.ts +23 -0
- package/lib/dialogs/symbologyDialog.js +68 -0
- package/lib/dialogs/terrainDialog.d.ts +21 -0
- package/lib/dialogs/terrainDialog.js +60 -0
- package/lib/formbuilder/creationform.d.ts +56 -0
- package/lib/formbuilder/creationform.js +117 -0
- package/lib/formbuilder/editform.d.ts +24 -0
- package/lib/formbuilder/editform.js +60 -0
- package/lib/formbuilder/formselectors.d.ts +5 -0
- package/lib/formbuilder/formselectors.js +38 -0
- package/lib/formbuilder/index.d.ts +6 -0
- package/lib/formbuilder/index.js +6 -0
- package/lib/formbuilder/objectform/baseform.d.ts +79 -0
- package/lib/formbuilder/objectform/baseform.js +167 -0
- package/lib/formbuilder/objectform/geojsonsource.d.ts +19 -0
- package/lib/formbuilder/objectform/geojsonsource.js +80 -0
- package/lib/formbuilder/objectform/hillshadeLayerForm.d.ts +8 -0
- package/lib/formbuilder/objectform/hillshadeLayerForm.js +12 -0
- package/lib/formbuilder/objectform/layerform.d.ts +19 -0
- package/lib/formbuilder/objectform/layerform.js +17 -0
- package/lib/formbuilder/objectform/tilesourceform.d.ts +7 -0
- package/lib/formbuilder/objectform/tilesourceform.js +60 -0
- package/lib/formbuilder/objectform/vectorlayerform.d.ts +15 -0
- package/lib/formbuilder/objectform/vectorlayerform.js +88 -0
- package/lib/formbuilder/objectform/webGlLayerForm.d.ts +8 -0
- package/lib/formbuilder/objectform/webGlLayerForm.js +10 -0
- package/lib/icons.d.ts +6 -0
- package/lib/icons.js +31 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +10 -0
- package/lib/mainview/index.d.ts +3 -0
- package/lib/mainview/index.js +3 -0
- package/lib/mainview/mainView.d.ts +113 -0
- package/lib/mainview/mainView.js +743 -0
- package/lib/mainview/mainviewmodel.d.ts +24 -0
- package/lib/mainview/mainviewmodel.js +34 -0
- package/lib/mainview/mainviewwidget.d.ts +14 -0
- package/lib/mainview/mainviewwidget.js +18 -0
- package/lib/mainview/spinner.d.ts +6 -0
- package/lib/mainview/spinner.js +5 -0
- package/lib/panelview/components/filter-panel/Filter.d.ts +19 -0
- package/lib/panelview/components/filter-panel/Filter.js +223 -0
- package/lib/panelview/components/filter-panel/FilterRow.d.ts +9 -0
- package/lib/panelview/components/filter-panel/FilterRow.js +61 -0
- package/lib/panelview/components/layers.d.ts +13 -0
- package/lib/panelview/components/layers.js +275 -0
- package/lib/panelview/components/sources.d.ts +10 -0
- package/lib/panelview/components/sources.js +147 -0
- package/lib/panelview/header.d.ts +11 -0
- package/lib/panelview/header.js +20 -0
- package/lib/panelview/index.d.ts +5 -0
- package/lib/panelview/index.js +5 -0
- package/lib/panelview/leftpanel.d.ts +51 -0
- package/lib/panelview/leftpanel.js +125 -0
- package/lib/panelview/model.d.ts +19 -0
- package/lib/panelview/model.js +30 -0
- package/lib/panelview/objectproperties.d.ts +17 -0
- package/lib/panelview/objectproperties.js +92 -0
- package/lib/panelview/rightpanel.d.ts +19 -0
- package/lib/panelview/rightpanel.js +45 -0
- package/lib/toolbar/index.d.ts +2 -0
- package/lib/toolbar/index.js +2 -0
- package/lib/toolbar/usertoolbaritem.d.ts +19 -0
- package/lib/toolbar/usertoolbaritem.js +57 -0
- package/lib/toolbar/widget.d.ts +22 -0
- package/lib/toolbar/widget.js +104 -0
- package/lib/tools.d.ts +25 -0
- package/lib/tools.js +215 -0
- package/lib/types.d.ts +11 -0
- package/lib/types.js +1 -0
- package/lib/widget.d.ts +49 -0
- package/lib/widget.js +144 -0
- package/package.json +95 -0
- package/style/base.css +55 -0
- package/style/colorExpression.css +36 -0
- package/style/dialog.css +8 -0
- package/style/filterPanel.css +70 -0
- package/style/icons/geojson.svg +12 -0
- package/style/icons/mound.svg +9 -0
- package/style/icons/nonvisibility.svg +8 -0
- package/style/icons/raster.svg +5 -0
- package/style/icons/visibility.svg +7 -0
- package/style/index.css +6 -0
- package/style/index.js +6 -0
- package/style/layerBrowser.css +256 -0
- package/style/leftPanel.css +150 -0
- package/style/symbologyDialog.css +86 -0
- package/style/terrainDialog.css +14 -0
package/lib/commands.js
ADDED
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
import { showErrorMessage } from '@jupyterlab/apputils';
|
|
2
|
+
import { CommandIDs, icons } from './constants';
|
|
3
|
+
import { CreationFormDialog } from './dialogs/formdialog';
|
|
4
|
+
import { LayerBrowserWidget } from './dialogs/layerBrowserDialog';
|
|
5
|
+
import { SymbologyWidget } from './dialogs/symbologyDialog';
|
|
6
|
+
import { TerrainDialogWidget } from './dialogs/terrainDialog';
|
|
7
|
+
/**
|
|
8
|
+
* Add the commands to the application's command registry.
|
|
9
|
+
*/
|
|
10
|
+
export function addCommands(app, tracker, translator, formSchemaRegistry, layerBrowserRegistry, state, completionProviderManager) {
|
|
11
|
+
var _a;
|
|
12
|
+
const trans = translator.load('jupyterlab');
|
|
13
|
+
const { commands } = app;
|
|
14
|
+
commands.addCommand(CommandIDs.symbology, Object.assign({ label: trans.__('Edit Symbology'), isEnabled: () => {
|
|
15
|
+
return tracker.currentWidget
|
|
16
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
17
|
+
: false;
|
|
18
|
+
}, execute: Private.createSymbologyDialog(tracker, state) }, icons.get(CommandIDs.symbology)));
|
|
19
|
+
commands.addCommand(CommandIDs.redo, Object.assign({ label: trans.__('Redo'), isEnabled: () => {
|
|
20
|
+
return tracker.currentWidget
|
|
21
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
22
|
+
: false;
|
|
23
|
+
}, execute: args => {
|
|
24
|
+
const current = tracker.currentWidget;
|
|
25
|
+
if (current) {
|
|
26
|
+
return current.context.model.sharedModel.redo();
|
|
27
|
+
}
|
|
28
|
+
} }, (_a = icons.get(CommandIDs.redo)) === null || _a === void 0 ? void 0 : _a.icon));
|
|
29
|
+
commands.addCommand(CommandIDs.undo, Object.assign({ label: trans.__('Undo'), isEnabled: () => {
|
|
30
|
+
return tracker.currentWidget
|
|
31
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
32
|
+
: false;
|
|
33
|
+
}, execute: args => {
|
|
34
|
+
const current = tracker.currentWidget;
|
|
35
|
+
if (current) {
|
|
36
|
+
return current.context.model.sharedModel.undo();
|
|
37
|
+
}
|
|
38
|
+
} }, icons.get(CommandIDs.undo)));
|
|
39
|
+
/**
|
|
40
|
+
* SOURCES and LAYERS creation commands.
|
|
41
|
+
*/
|
|
42
|
+
commands.addCommand(CommandIDs.openLayerBrowser, Object.assign({ label: trans.__('Open Layer Browser'), isEnabled: () => {
|
|
43
|
+
return tracker.currentWidget
|
|
44
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
45
|
+
: false;
|
|
46
|
+
}, execute: Private.createLayerBrowser(tracker, layerBrowserRegistry, formSchemaRegistry) }, icons.get(CommandIDs.openLayerBrowser)));
|
|
47
|
+
/**
|
|
48
|
+
* Source and layers
|
|
49
|
+
*/
|
|
50
|
+
commands.addCommand(CommandIDs.newRasterEntry, Object.assign({ label: trans.__('New Raster Layer'), isEnabled: () => {
|
|
51
|
+
return tracker.currentWidget
|
|
52
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
53
|
+
: false;
|
|
54
|
+
}, execute: Private.createEntry({
|
|
55
|
+
tracker,
|
|
56
|
+
formSchemaRegistry,
|
|
57
|
+
title: 'Create Raster Layer',
|
|
58
|
+
createLayer: true,
|
|
59
|
+
createSource: true,
|
|
60
|
+
sourceData: {
|
|
61
|
+
minZoom: 0,
|
|
62
|
+
maxZoom: 24
|
|
63
|
+
},
|
|
64
|
+
layerData: { name: 'Custom Raster Layer' },
|
|
65
|
+
sourceType: 'RasterSource',
|
|
66
|
+
layerType: 'RasterLayer'
|
|
67
|
+
}) }, icons.get(CommandIDs.newRasterEntry)));
|
|
68
|
+
commands.addCommand(CommandIDs.newVectorTileEntry, Object.assign({ label: trans.__('New Vector Tile Layer'), isEnabled: () => {
|
|
69
|
+
return tracker.currentWidget
|
|
70
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
71
|
+
: false;
|
|
72
|
+
}, execute: Private.createEntry({
|
|
73
|
+
tracker,
|
|
74
|
+
formSchemaRegistry,
|
|
75
|
+
title: 'Create Vector Tile Layer',
|
|
76
|
+
createLayer: true,
|
|
77
|
+
createSource: true,
|
|
78
|
+
sourceData: { minZoom: 0, maxZoom: 24 },
|
|
79
|
+
layerData: { name: 'Custom Vector Tile Layer' },
|
|
80
|
+
sourceType: 'VectorTileSource',
|
|
81
|
+
layerType: 'VectorTileLayer'
|
|
82
|
+
}) }, icons.get(CommandIDs.newVectorTileEntry)));
|
|
83
|
+
commands.addCommand(CommandIDs.newGeoJSONEntry, Object.assign({ label: trans.__('New GeoJSON layer'), isEnabled: () => {
|
|
84
|
+
return tracker.currentWidget
|
|
85
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
86
|
+
: false;
|
|
87
|
+
}, execute: Private.createEntry({
|
|
88
|
+
tracker,
|
|
89
|
+
formSchemaRegistry,
|
|
90
|
+
title: 'Create GeoJSON Layer',
|
|
91
|
+
createLayer: true,
|
|
92
|
+
createSource: true,
|
|
93
|
+
layerData: { name: 'Custom GeoJSON Layer' },
|
|
94
|
+
sourceType: 'GeoJSONSource',
|
|
95
|
+
layerType: 'VectorLayer'
|
|
96
|
+
}) }, icons.get(CommandIDs.newGeoJSONEntry)));
|
|
97
|
+
commands.addCommand(CommandIDs.newHillshadeEntry, Object.assign({ label: trans.__('New Hillshade layer'), isEnabled: () => {
|
|
98
|
+
return tracker.currentWidget
|
|
99
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
100
|
+
: false;
|
|
101
|
+
}, execute: Private.createEntry({
|
|
102
|
+
tracker,
|
|
103
|
+
formSchemaRegistry,
|
|
104
|
+
title: 'Create Hillshade Layer',
|
|
105
|
+
createLayer: true,
|
|
106
|
+
createSource: true,
|
|
107
|
+
layerData: { name: 'Custom Hillshade Layer' },
|
|
108
|
+
sourceType: 'RasterDemSource',
|
|
109
|
+
layerType: 'HillshadeLayer'
|
|
110
|
+
}) }, icons.get(CommandIDs.newHillshadeEntry)));
|
|
111
|
+
commands.addCommand(CommandIDs.newImageEntry, Object.assign({ label: trans.__('New Image layer'), isEnabled: () => {
|
|
112
|
+
return tracker.currentWidget
|
|
113
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
114
|
+
: false;
|
|
115
|
+
}, execute: Private.createEntry({
|
|
116
|
+
tracker,
|
|
117
|
+
formSchemaRegistry,
|
|
118
|
+
title: 'Create Image Layer',
|
|
119
|
+
createLayer: true,
|
|
120
|
+
createSource: true,
|
|
121
|
+
sourceData: {
|
|
122
|
+
name: 'Custom Image Source',
|
|
123
|
+
url: 'https://maplibre.org/maplibre-gl-js/docs/assets/radar.gif',
|
|
124
|
+
coordinates: [
|
|
125
|
+
[-80.425, 46.437],
|
|
126
|
+
[-71.516, 46.437],
|
|
127
|
+
[-71.516, 37.936],
|
|
128
|
+
[-80.425, 37.936]
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
layerData: { name: 'Custom Image Layer' },
|
|
132
|
+
sourceType: 'ImageSource',
|
|
133
|
+
layerType: 'ImageLayer'
|
|
134
|
+
}) }, icons.get(CommandIDs.newImageEntry)));
|
|
135
|
+
commands.addCommand(CommandIDs.newVideoEntry, Object.assign({ label: trans.__('New Video layer'), isEnabled: () => {
|
|
136
|
+
return tracker.currentWidget
|
|
137
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
138
|
+
: false;
|
|
139
|
+
}, execute: Private.createEntry({
|
|
140
|
+
tracker,
|
|
141
|
+
formSchemaRegistry,
|
|
142
|
+
title: 'Create Video Layer',
|
|
143
|
+
createLayer: true,
|
|
144
|
+
createSource: true,
|
|
145
|
+
sourceData: {
|
|
146
|
+
name: 'Custom Video Source',
|
|
147
|
+
urls: [
|
|
148
|
+
'https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4',
|
|
149
|
+
'https://static-assets.mapbox.com/mapbox-gl-js/drone.webm'
|
|
150
|
+
],
|
|
151
|
+
coordinates: [
|
|
152
|
+
[-122.51596391201019, 37.56238816766053],
|
|
153
|
+
[-122.51467645168304, 37.56410183312965],
|
|
154
|
+
[-122.51309394836426, 37.563391708549425],
|
|
155
|
+
[-122.51423120498657, 37.56161849366671]
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
layerData: { name: 'Custom Video Layer' },
|
|
159
|
+
sourceType: 'VideoSource',
|
|
160
|
+
layerType: 'RasterLayer'
|
|
161
|
+
}) }, icons.get(CommandIDs.newVideoEntry)));
|
|
162
|
+
commands.addCommand(CommandIDs.newShapefileSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
163
|
+
? trans.__('Shapefile')
|
|
164
|
+
: trans.__('Add Shapefile Source'), isEnabled: () => {
|
|
165
|
+
return tracker.currentWidget
|
|
166
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
167
|
+
: false;
|
|
168
|
+
}, execute: Private.createEntry({
|
|
169
|
+
tracker,
|
|
170
|
+
formSchemaRegistry,
|
|
171
|
+
title: 'Create Shapefile Source',
|
|
172
|
+
createLayer: false,
|
|
173
|
+
createSource: true,
|
|
174
|
+
sourceData: { name: 'Custom Shapefile Source' },
|
|
175
|
+
sourceType: 'ShapefileSource'
|
|
176
|
+
}) }, icons.get(CommandIDs.newShapefileSource)));
|
|
177
|
+
commands.addCommand(CommandIDs.newGeoTiffEntry, Object.assign({ label: trans.__('New GeoTiff layer'), isEnabled: () => {
|
|
178
|
+
return tracker.currentWidget
|
|
179
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
180
|
+
: false;
|
|
181
|
+
}, execute: Private.createEntry({
|
|
182
|
+
tracker,
|
|
183
|
+
formSchemaRegistry,
|
|
184
|
+
title: 'Create GeoTiff Layer',
|
|
185
|
+
createLayer: true,
|
|
186
|
+
createSource: true,
|
|
187
|
+
sourceData: {
|
|
188
|
+
name: 'Custom GeoTiff Source',
|
|
189
|
+
urls: [
|
|
190
|
+
{
|
|
191
|
+
url: 'https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/21/H/UB/2021/9/S2B_21HUB_20210915_0_L2A/B04.tif',
|
|
192
|
+
max: 10000
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
url: 'https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/21/H/UB/2021/9/S2B_21HUB_20210915_0_L2A/B08.tif',
|
|
196
|
+
max: 10000
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
layerData: { name: 'Custom GeoTiff Layer' },
|
|
201
|
+
sourceType: 'GeoTiffSource',
|
|
202
|
+
layerType: 'WebGlLayer'
|
|
203
|
+
}) }, icons.get(CommandIDs.newGeoTiffEntry)));
|
|
204
|
+
/**
|
|
205
|
+
* SOURCES only commands.
|
|
206
|
+
*/
|
|
207
|
+
commands.addCommand(CommandIDs.newRasterSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
208
|
+
? trans.__('Raster')
|
|
209
|
+
: trans.__('New Raster Source'), isEnabled: () => {
|
|
210
|
+
return tracker.currentWidget
|
|
211
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
212
|
+
: false;
|
|
213
|
+
}, execute: Private.createEntry({
|
|
214
|
+
tracker,
|
|
215
|
+
formSchemaRegistry,
|
|
216
|
+
title: 'Create Raster Source',
|
|
217
|
+
createLayer: false,
|
|
218
|
+
createSource: true,
|
|
219
|
+
sourceData: { name: 'Custom Raster Source', minZoom: 0, maxZoom: 24 },
|
|
220
|
+
sourceType: 'RasterSource'
|
|
221
|
+
}) }, icons.get(CommandIDs.newRasterSource)));
|
|
222
|
+
commands.addCommand(CommandIDs.newRasterDemSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
223
|
+
? trans.__('Raster DEM')
|
|
224
|
+
: trans.__('New Raster DEM Source'), isEnabled: () => {
|
|
225
|
+
return tracker.currentWidget
|
|
226
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
227
|
+
: false;
|
|
228
|
+
}, execute: Private.createEntry({
|
|
229
|
+
tracker,
|
|
230
|
+
formSchemaRegistry,
|
|
231
|
+
title: 'Create Raster Dem Source',
|
|
232
|
+
createLayer: false,
|
|
233
|
+
createSource: true,
|
|
234
|
+
sourceData: { name: 'Custom Raster DEM Source' },
|
|
235
|
+
sourceType: 'RasterDemSource'
|
|
236
|
+
}) }, icons.get(CommandIDs.newRasterDemSource)));
|
|
237
|
+
commands.addCommand(CommandIDs.newVectorSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
238
|
+
? trans.__('Vector')
|
|
239
|
+
: trans.__('New Vector Source'), isEnabled: () => {
|
|
240
|
+
return tracker.currentWidget
|
|
241
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
242
|
+
: false;
|
|
243
|
+
}, execute: Private.createEntry({
|
|
244
|
+
tracker,
|
|
245
|
+
formSchemaRegistry,
|
|
246
|
+
title: 'Create Vector Source',
|
|
247
|
+
createLayer: false,
|
|
248
|
+
createSource: true,
|
|
249
|
+
sourceData: { name: 'Custom Vector Source', minZoom: 0, maxZoom: 24 },
|
|
250
|
+
sourceType: 'VectorTileSource'
|
|
251
|
+
}) }, icons.get(CommandIDs.newVectorSource)));
|
|
252
|
+
commands.addCommand(CommandIDs.newGeoJSONSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
253
|
+
? trans.__('GeoJSON')
|
|
254
|
+
: trans.__('Add GeoJSON data from file'), isEnabled: () => {
|
|
255
|
+
return tracker.currentWidget
|
|
256
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
257
|
+
: false;
|
|
258
|
+
}, execute: Private.createEntry({
|
|
259
|
+
tracker,
|
|
260
|
+
formSchemaRegistry,
|
|
261
|
+
title: 'Create GeoJson Source',
|
|
262
|
+
createLayer: false,
|
|
263
|
+
createSource: true,
|
|
264
|
+
sourceData: { name: 'Custom GeoJSON Source' },
|
|
265
|
+
sourceType: 'GeoJSONSource'
|
|
266
|
+
}) }, icons.get(CommandIDs.newGeoJSONSource)));
|
|
267
|
+
commands.addCommand(CommandIDs.newImageSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
268
|
+
? trans.__('Image')
|
|
269
|
+
: trans.__('Add Image Source'), isEnabled: () => {
|
|
270
|
+
return tracker.currentWidget
|
|
271
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
272
|
+
: false;
|
|
273
|
+
}, execute: Private.createEntry({
|
|
274
|
+
tracker,
|
|
275
|
+
formSchemaRegistry,
|
|
276
|
+
title: 'Create Image Source',
|
|
277
|
+
createLayer: false,
|
|
278
|
+
createSource: true,
|
|
279
|
+
sourceData: { name: 'Custom Image Source' },
|
|
280
|
+
sourceType: 'ImageSource'
|
|
281
|
+
}) }, icons.get(CommandIDs.newImageSource)));
|
|
282
|
+
commands.addCommand(CommandIDs.newVideoSource, Object.assign({ label: args => args.from === 'contextMenu'
|
|
283
|
+
? trans.__('Video')
|
|
284
|
+
: trans.__('Add Video Source'), isEnabled: () => {
|
|
285
|
+
return tracker.currentWidget
|
|
286
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
287
|
+
: false;
|
|
288
|
+
}, execute: Private.createEntry({
|
|
289
|
+
tracker,
|
|
290
|
+
formSchemaRegistry,
|
|
291
|
+
title: 'Create Video Source',
|
|
292
|
+
createLayer: false,
|
|
293
|
+
createSource: true,
|
|
294
|
+
sourceData: { name: 'Custom Video Source' },
|
|
295
|
+
sourceType: 'VideoSource'
|
|
296
|
+
}) }, icons.get(CommandIDs.newVideoSource)));
|
|
297
|
+
// Layers only
|
|
298
|
+
commands.addCommand(CommandIDs.newRasterLayer, Object.assign({ label: args => args.from === 'contextMenu'
|
|
299
|
+
? trans.__('Raster')
|
|
300
|
+
: trans.__('Add Raster layer'), isEnabled: () => {
|
|
301
|
+
return tracker.currentWidget
|
|
302
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
303
|
+
: false;
|
|
304
|
+
}, execute: Private.createEntry({
|
|
305
|
+
tracker,
|
|
306
|
+
formSchemaRegistry,
|
|
307
|
+
title: 'Create Raster Layer',
|
|
308
|
+
createLayer: true,
|
|
309
|
+
createSource: false,
|
|
310
|
+
layerData: {
|
|
311
|
+
name: 'Custom Raster Layer'
|
|
312
|
+
},
|
|
313
|
+
sourceType: 'RasterSource',
|
|
314
|
+
layerType: 'RasterLayer'
|
|
315
|
+
}) }, icons.get(CommandIDs.newVectorLayer)));
|
|
316
|
+
commands.addCommand(CommandIDs.newVectorLayer, Object.assign({ label: args => args.from === 'contextMenu'
|
|
317
|
+
? trans.__('Vector')
|
|
318
|
+
: trans.__('Add New Vector layer'), isEnabled: () => {
|
|
319
|
+
return tracker.currentWidget
|
|
320
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
321
|
+
: false;
|
|
322
|
+
}, execute: Private.createEntry({
|
|
323
|
+
tracker,
|
|
324
|
+
formSchemaRegistry,
|
|
325
|
+
title: 'Create Vector Layer',
|
|
326
|
+
createLayer: true,
|
|
327
|
+
createSource: false,
|
|
328
|
+
layerData: {
|
|
329
|
+
name: 'Custom Vector Layer'
|
|
330
|
+
},
|
|
331
|
+
sourceType: 'VectorTileSource',
|
|
332
|
+
layerType: 'VectorTileLayer'
|
|
333
|
+
}) }, icons.get(CommandIDs.newVectorLayer)));
|
|
334
|
+
commands.addCommand(CommandIDs.newHillshadeLayer, Object.assign({ label: args => args.from === 'contextMenu'
|
|
335
|
+
? trans.__('Hillshade')
|
|
336
|
+
: trans.__('Add Hillshade layer'), isEnabled: () => {
|
|
337
|
+
return tracker.currentWidget
|
|
338
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
339
|
+
: false;
|
|
340
|
+
}, execute: Private.createEntry({
|
|
341
|
+
tracker,
|
|
342
|
+
formSchemaRegistry,
|
|
343
|
+
title: 'Create Hillshade Layer',
|
|
344
|
+
createLayer: true,
|
|
345
|
+
createSource: false,
|
|
346
|
+
layerData: {
|
|
347
|
+
name: 'Custom Hillshade Layer'
|
|
348
|
+
},
|
|
349
|
+
sourceType: 'RasterDemSource',
|
|
350
|
+
layerType: 'HillshadeLayer'
|
|
351
|
+
}) }, icons.get(CommandIDs.newHillshadeLayer)));
|
|
352
|
+
commands.addCommand(CommandIDs.newImageLayer, Object.assign({ label: args => args.from === 'contextMenu'
|
|
353
|
+
? trans.__('Image')
|
|
354
|
+
: trans.__('Add Image layer'), isEnabled: () => {
|
|
355
|
+
return tracker.currentWidget
|
|
356
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
357
|
+
: false;
|
|
358
|
+
}, execute: Private.createEntry({
|
|
359
|
+
tracker,
|
|
360
|
+
formSchemaRegistry,
|
|
361
|
+
title: 'Create Image Layer',
|
|
362
|
+
createLayer: true,
|
|
363
|
+
createSource: false,
|
|
364
|
+
layerData: {
|
|
365
|
+
name: 'Custom Image Layer'
|
|
366
|
+
},
|
|
367
|
+
sourceType: 'ImageSource',
|
|
368
|
+
layerType: 'RasterLayer'
|
|
369
|
+
}) }, icons.get(CommandIDs.newImageLayer)));
|
|
370
|
+
commands.addCommand(CommandIDs.newVideoLayer, Object.assign({ label: args => args.from === 'contextMenu'
|
|
371
|
+
? trans.__('Video')
|
|
372
|
+
: trans.__('Add Video layer'), isEnabled: () => {
|
|
373
|
+
return tracker.currentWidget
|
|
374
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
375
|
+
: false;
|
|
376
|
+
}, execute: Private.createEntry({
|
|
377
|
+
tracker,
|
|
378
|
+
formSchemaRegistry,
|
|
379
|
+
title: 'Create Video Layer',
|
|
380
|
+
createLayer: true,
|
|
381
|
+
createSource: false,
|
|
382
|
+
layerData: {
|
|
383
|
+
name: 'Custom Video Layer'
|
|
384
|
+
},
|
|
385
|
+
sourceType: 'VideoSource',
|
|
386
|
+
layerType: 'RasterLayer'
|
|
387
|
+
}) }, icons.get(CommandIDs.newVideoLayer)));
|
|
388
|
+
commands.addCommand(CommandIDs.newShapefileLayer, Object.assign({ label: trans.__('New Shapefile Layer'), isEnabled: () => {
|
|
389
|
+
return tracker.currentWidget
|
|
390
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
391
|
+
: false;
|
|
392
|
+
}, execute: Private.createEntry({
|
|
393
|
+
tracker,
|
|
394
|
+
formSchemaRegistry,
|
|
395
|
+
title: 'Create Shapefile Layer',
|
|
396
|
+
createLayer: true,
|
|
397
|
+
createSource: true,
|
|
398
|
+
sourceData: { name: 'Custom Shapefile Source' },
|
|
399
|
+
layerData: { name: 'Custom Shapefile Layer' },
|
|
400
|
+
sourceType: 'ShapefileSource',
|
|
401
|
+
layerType: 'VectorLayer'
|
|
402
|
+
}) }, icons.get(CommandIDs.newShapefileLayer)));
|
|
403
|
+
/**
|
|
404
|
+
* LAYERS and LAYER GROUP actions.
|
|
405
|
+
*/
|
|
406
|
+
commands.addCommand(CommandIDs.renameLayer, {
|
|
407
|
+
label: trans.__('Rename Layer'),
|
|
408
|
+
execute: async () => {
|
|
409
|
+
var _a;
|
|
410
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
411
|
+
await Private.renameSelectedItem(model, 'layer', (layerId, newName) => {
|
|
412
|
+
const layer = model === null || model === void 0 ? void 0 : model.getLayer(layerId);
|
|
413
|
+
if (layer) {
|
|
414
|
+
layer.name = newName;
|
|
415
|
+
model === null || model === void 0 ? void 0 : model.sharedModel.updateLayer(layerId, layer);
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
commands.addCommand(CommandIDs.removeLayer, {
|
|
421
|
+
label: trans.__('Remove Layer'),
|
|
422
|
+
execute: () => {
|
|
423
|
+
var _a;
|
|
424
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
425
|
+
Private.removeSelectedItems(model, 'layer', selection => {
|
|
426
|
+
model === null || model === void 0 ? void 0 : model.removeLayer(selection);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
commands.addCommand(CommandIDs.renameGroup, {
|
|
431
|
+
label: trans.__('Rename Group'),
|
|
432
|
+
execute: async () => {
|
|
433
|
+
var _a;
|
|
434
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
435
|
+
await Private.renameSelectedItem(model, 'group', (groupName, newName) => {
|
|
436
|
+
model === null || model === void 0 ? void 0 : model.renameLayerGroup(groupName, newName);
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
commands.addCommand(CommandIDs.removeGroup, {
|
|
441
|
+
label: trans.__('Remove Group'),
|
|
442
|
+
execute: async () => {
|
|
443
|
+
var _a;
|
|
444
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
445
|
+
Private.removeSelectedItems(model, 'group', selection => {
|
|
446
|
+
model === null || model === void 0 ? void 0 : model.removeLayerGroup(selection);
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
commands.addCommand(CommandIDs.moveLayersToGroup, {
|
|
451
|
+
label: args => args['label'] ? args['label'] : trans.__('Move to Root'),
|
|
452
|
+
execute: args => {
|
|
453
|
+
var _a, _b, _c;
|
|
454
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
455
|
+
const groupName = args['label'];
|
|
456
|
+
const selectedLayers = (_c = (_b = model === null || model === void 0 ? void 0 : model.localState) === null || _b === void 0 ? void 0 : _b.selected) === null || _c === void 0 ? void 0 : _c.value;
|
|
457
|
+
if (!selectedLayers) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
model.moveItemsToGroup(Object.keys(selectedLayers), groupName);
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
commands.addCommand(CommandIDs.moveLayerToNewGroup, {
|
|
464
|
+
label: trans.__('Move Selected Layers to New Group'),
|
|
465
|
+
execute: async () => {
|
|
466
|
+
var _a, _b, _c;
|
|
467
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
468
|
+
const selectedLayers = (_c = (_b = model === null || model === void 0 ? void 0 : model.localState) === null || _b === void 0 ? void 0 : _b.selected) === null || _c === void 0 ? void 0 : _c.value;
|
|
469
|
+
if (!selectedLayers) {
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
function newGroupName() {
|
|
473
|
+
const input = document.createElement('input');
|
|
474
|
+
input.classList.add('jp-gis-left-panel-input');
|
|
475
|
+
input.style.marginLeft = '26px';
|
|
476
|
+
const panel = document.getElementById('jp-gis-layer-tree');
|
|
477
|
+
if (!panel) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
panel.appendChild(input);
|
|
481
|
+
input.focus();
|
|
482
|
+
return new Promise(resolve => {
|
|
483
|
+
input.addEventListener('blur', () => {
|
|
484
|
+
panel.removeChild(input);
|
|
485
|
+
resolve(input.value);
|
|
486
|
+
});
|
|
487
|
+
input.addEventListener('keydown', (event) => {
|
|
488
|
+
if (event.key === 'Enter') {
|
|
489
|
+
event.stopPropagation();
|
|
490
|
+
event.preventDefault();
|
|
491
|
+
input.blur();
|
|
492
|
+
}
|
|
493
|
+
else if (event.key === 'Escape') {
|
|
494
|
+
event.stopPropagation();
|
|
495
|
+
event.preventDefault();
|
|
496
|
+
input.blur();
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
const newName = await newGroupName();
|
|
502
|
+
if (!newName) {
|
|
503
|
+
console.warn('New name cannot be empty');
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
const layers = [];
|
|
507
|
+
Object.keys(selectedLayers).forEach(key => {
|
|
508
|
+
layers.push(key);
|
|
509
|
+
});
|
|
510
|
+
const newLayerGroup = {
|
|
511
|
+
name: newName,
|
|
512
|
+
layers: layers
|
|
513
|
+
};
|
|
514
|
+
model.addNewLayerGroup(selectedLayers, newLayerGroup);
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
/**
|
|
518
|
+
* Source actions
|
|
519
|
+
*/
|
|
520
|
+
commands.addCommand(CommandIDs.renameSource, {
|
|
521
|
+
label: trans.__('Rename Source'),
|
|
522
|
+
execute: async () => {
|
|
523
|
+
var _a;
|
|
524
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
525
|
+
await Private.renameSelectedItem(model, 'source', (sourceId, newName) => {
|
|
526
|
+
const source = model === null || model === void 0 ? void 0 : model.getSource(sourceId);
|
|
527
|
+
if (source) {
|
|
528
|
+
source.name = newName;
|
|
529
|
+
model === null || model === void 0 ? void 0 : model.sharedModel.updateSource(sourceId, source);
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
commands.addCommand(CommandIDs.removeSource, {
|
|
535
|
+
label: trans.__('Remove Source'),
|
|
536
|
+
execute: () => {
|
|
537
|
+
var _a;
|
|
538
|
+
const model = (_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model;
|
|
539
|
+
Private.removeSelectedItems(model, 'source', selection => {
|
|
540
|
+
var _a;
|
|
541
|
+
if (!((_a = model === null || model === void 0 ? void 0 : model.getLayersBySource(selection).length) !== null && _a !== void 0 ? _a : true)) {
|
|
542
|
+
model === null || model === void 0 ? void 0 : model.sharedModel.removeSource(selection);
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
showErrorMessage('Remove source error', 'The source is used by a layer.');
|
|
546
|
+
}
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
/**
|
|
551
|
+
* Terrain commands
|
|
552
|
+
*/
|
|
553
|
+
commands.addCommand(CommandIDs.newTerrain, Object.assign({ label: trans.__('New Terrain'), isEnabled: () => {
|
|
554
|
+
return tracker.currentWidget
|
|
555
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
556
|
+
: false;
|
|
557
|
+
}, execute: Private.createTerrainDialog(tracker) }, icons.get(CommandIDs.newTerrain)));
|
|
558
|
+
commands.addCommand(CommandIDs.removeTerrain, {
|
|
559
|
+
label: trans.__('Remove Terrain'),
|
|
560
|
+
isEnabled: () => {
|
|
561
|
+
return tracker.currentWidget
|
|
562
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
563
|
+
: false;
|
|
564
|
+
},
|
|
565
|
+
execute: () => {
|
|
566
|
+
var _a;
|
|
567
|
+
(_a = tracker.currentWidget) === null || _a === void 0 ? void 0 : _a.context.model.setTerrain({
|
|
568
|
+
source: '',
|
|
569
|
+
exaggeration: 0
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
// Console commands
|
|
574
|
+
commands.addCommand(CommandIDs.toggleConsole, {
|
|
575
|
+
label: trans.__('Toggle console'),
|
|
576
|
+
isEnabled: () => {
|
|
577
|
+
return tracker.currentWidget
|
|
578
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
579
|
+
: false;
|
|
580
|
+
},
|
|
581
|
+
execute: async () => await Private.toggleConsole(tracker)
|
|
582
|
+
});
|
|
583
|
+
commands.addCommand(CommandIDs.executeConsole, {
|
|
584
|
+
label: trans.__('Execute console'),
|
|
585
|
+
isEnabled: () => {
|
|
586
|
+
return tracker.currentWidget
|
|
587
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
588
|
+
: false;
|
|
589
|
+
},
|
|
590
|
+
execute: () => Private.executeConsole(tracker)
|
|
591
|
+
});
|
|
592
|
+
commands.addCommand(CommandIDs.removeConsole, {
|
|
593
|
+
label: trans.__('Remove console'),
|
|
594
|
+
isEnabled: () => {
|
|
595
|
+
return tracker.currentWidget
|
|
596
|
+
? tracker.currentWidget.context.model.sharedModel.editable
|
|
597
|
+
: false;
|
|
598
|
+
},
|
|
599
|
+
execute: () => Private.removeConsole(tracker)
|
|
600
|
+
});
|
|
601
|
+
commands.addCommand(CommandIDs.invokeCompleter, {
|
|
602
|
+
label: trans.__('Display the completion helper.'),
|
|
603
|
+
execute: () => {
|
|
604
|
+
var _a;
|
|
605
|
+
const currentWidget = tracker.currentWidget;
|
|
606
|
+
if (!currentWidget || !completionProviderManager) {
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
const id = (_a = currentWidget.content.consolePanel) === null || _a === void 0 ? void 0 : _a.id;
|
|
610
|
+
if (id) {
|
|
611
|
+
return completionProviderManager.invoke(id);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
});
|
|
615
|
+
commands.addCommand(CommandIDs.selectCompleter, {
|
|
616
|
+
label: trans.__('Select the completion suggestion.'),
|
|
617
|
+
execute: () => {
|
|
618
|
+
var _a;
|
|
619
|
+
const currentWidget = tracker.currentWidget;
|
|
620
|
+
if (!currentWidget || !completionProviderManager) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
const id = (_a = currentWidget.content.consolePanel) === null || _a === void 0 ? void 0 : _a.id;
|
|
624
|
+
if (id) {
|
|
625
|
+
return completionProviderManager.select(id);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
var Private;
|
|
631
|
+
(function (Private) {
|
|
632
|
+
function createLayerBrowser(tracker, layerBrowserRegistry, formSchemaRegistry) {
|
|
633
|
+
return async () => {
|
|
634
|
+
const current = tracker.currentWidget;
|
|
635
|
+
if (!current) {
|
|
636
|
+
return;
|
|
637
|
+
}
|
|
638
|
+
const dialog = new LayerBrowserWidget({
|
|
639
|
+
context: current.context,
|
|
640
|
+
registry: layerBrowserRegistry.getRegistryLayers(),
|
|
641
|
+
formSchemaRegistry
|
|
642
|
+
});
|
|
643
|
+
await dialog.launch();
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
Private.createLayerBrowser = createLayerBrowser;
|
|
647
|
+
function createTerrainDialog(tracker) {
|
|
648
|
+
return async () => {
|
|
649
|
+
const current = tracker.currentWidget;
|
|
650
|
+
if (!current) {
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
const dialog = new TerrainDialogWidget({
|
|
654
|
+
context: current.context
|
|
655
|
+
});
|
|
656
|
+
await dialog.launch();
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
Private.createTerrainDialog = createTerrainDialog;
|
|
660
|
+
function createSymbologyDialog(tracker, state) {
|
|
661
|
+
return async () => {
|
|
662
|
+
const current = tracker.currentWidget;
|
|
663
|
+
if (!current) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
const dialog = new SymbologyWidget({
|
|
667
|
+
context: current.context,
|
|
668
|
+
state
|
|
669
|
+
});
|
|
670
|
+
await dialog.launch();
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
Private.createSymbologyDialog = createSymbologyDialog;
|
|
674
|
+
function createEntry({ tracker, formSchemaRegistry, title, createLayer, createSource, sourceData, layerData, sourceType, layerType }) {
|
|
675
|
+
return async () => {
|
|
676
|
+
const current = tracker.currentWidget;
|
|
677
|
+
if (!current) {
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
const dialog = new CreationFormDialog({
|
|
681
|
+
context: current.context,
|
|
682
|
+
title,
|
|
683
|
+
createLayer,
|
|
684
|
+
createSource,
|
|
685
|
+
sourceData,
|
|
686
|
+
sourceType,
|
|
687
|
+
layerData,
|
|
688
|
+
layerType,
|
|
689
|
+
formSchemaRegistry
|
|
690
|
+
});
|
|
691
|
+
await dialog.launch();
|
|
692
|
+
};
|
|
693
|
+
}
|
|
694
|
+
Private.createEntry = createEntry;
|
|
695
|
+
async function getUserInputForRename(text, input, original) {
|
|
696
|
+
const parent = text.parentElement;
|
|
697
|
+
parent.replaceChild(input, text);
|
|
698
|
+
input.value = original;
|
|
699
|
+
input.select();
|
|
700
|
+
input.focus();
|
|
701
|
+
return new Promise(resolve => {
|
|
702
|
+
input.addEventListener('blur', () => {
|
|
703
|
+
parent.replaceChild(text, input);
|
|
704
|
+
resolve(input.value);
|
|
705
|
+
});
|
|
706
|
+
input.addEventListener('keydown', (event) => {
|
|
707
|
+
if (event.key === 'Enter') {
|
|
708
|
+
event.stopPropagation();
|
|
709
|
+
event.preventDefault();
|
|
710
|
+
input.blur();
|
|
711
|
+
}
|
|
712
|
+
else if (event.key === 'Escape') {
|
|
713
|
+
event.stopPropagation();
|
|
714
|
+
event.preventDefault();
|
|
715
|
+
input.value = original;
|
|
716
|
+
input.blur();
|
|
717
|
+
text.focus();
|
|
718
|
+
}
|
|
719
|
+
});
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
Private.getUserInputForRename = getUserInputForRename;
|
|
723
|
+
function removeSelectedItems(model, itemTypeToRemove, removeFunction) {
|
|
724
|
+
var _a;
|
|
725
|
+
const selected = (_a = model === null || model === void 0 ? void 0 : model.localState) === null || _a === void 0 ? void 0 : _a.selected.value;
|
|
726
|
+
if (!selected) {
|
|
727
|
+
console.info('Nothing selected');
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
for (const selection in selected) {
|
|
731
|
+
if (selected[selection].type === itemTypeToRemove) {
|
|
732
|
+
removeFunction(selection);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
Private.removeSelectedItems = removeSelectedItems;
|
|
737
|
+
async function renameSelectedItem(model, itemType, callback) {
|
|
738
|
+
var _a;
|
|
739
|
+
const selectedItems = (_a = model === null || model === void 0 ? void 0 : model.localState) === null || _a === void 0 ? void 0 : _a.selected.value;
|
|
740
|
+
if (!selectedItems) {
|
|
741
|
+
console.error(`No ${itemType} selected`);
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
let itemId = '';
|
|
745
|
+
// If more then one item is selected, only rename the first
|
|
746
|
+
for (const id in selectedItems) {
|
|
747
|
+
if (selectedItems[id].type === itemType) {
|
|
748
|
+
itemId = id;
|
|
749
|
+
break;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
if (!itemId) {
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
const nodeId = selectedItems[itemId].selectedNodeId;
|
|
756
|
+
if (!nodeId) {
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
const node = document.getElementById(nodeId);
|
|
760
|
+
if (!node) {
|
|
761
|
+
console.warn(`Node with ID ${nodeId} not found`);
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
const edit = document.createElement('input');
|
|
765
|
+
edit.classList.add('jp-gis-left-panel-input');
|
|
766
|
+
const originalName = node.innerText;
|
|
767
|
+
const newName = await Private.getUserInputForRename(node, edit, originalName);
|
|
768
|
+
if (!newName) {
|
|
769
|
+
console.warn('New name cannot be empty');
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
if (newName !== originalName) {
|
|
773
|
+
callback(itemId, newName);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
Private.renameSelectedItem = renameSelectedItem;
|
|
777
|
+
function executeConsole(tracker) {
|
|
778
|
+
const current = tracker.currentWidget;
|
|
779
|
+
if (!current) {
|
|
780
|
+
return;
|
|
781
|
+
}
|
|
782
|
+
current.content.executeConsole();
|
|
783
|
+
}
|
|
784
|
+
Private.executeConsole = executeConsole;
|
|
785
|
+
function removeConsole(tracker) {
|
|
786
|
+
const current = tracker.currentWidget;
|
|
787
|
+
if (!current) {
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
current.content.removeConsole();
|
|
791
|
+
}
|
|
792
|
+
Private.removeConsole = removeConsole;
|
|
793
|
+
async function toggleConsole(tracker) {
|
|
794
|
+
const current = tracker.currentWidget;
|
|
795
|
+
if (!current) {
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
const currentPath = current.context.path.split(':');
|
|
799
|
+
let realPath = '';
|
|
800
|
+
if (currentPath.length > 1) {
|
|
801
|
+
realPath = currentPath[1];
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
realPath = currentPath[0];
|
|
805
|
+
}
|
|
806
|
+
await current.content.toggleConsole(realPath);
|
|
807
|
+
}
|
|
808
|
+
Private.toggleConsole = toggleConsole;
|
|
809
|
+
})(Private || (Private = {}));
|