ol-wfst 4.0.5 → 4.0.6

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.
Files changed (49) hide show
  1. package/README.md +974 -974
  2. package/dist/@types.d.ts +6 -0
  3. package/dist/@types.d.ts.map +1 -1
  4. package/dist/Geoserver.d.ts +13 -5
  5. package/dist/Geoserver.d.ts.map +1 -1
  6. package/dist/WfsLayer.d.ts +5 -5
  7. package/dist/WfsLayer.d.ts.map +1 -1
  8. package/dist/WmsLayer.d.ts +6 -5
  9. package/dist/WmsLayer.d.ts.map +1 -1
  10. package/dist/css/ol-wfst.bootstrap5.css +40 -11
  11. package/dist/css/ol-wfst.bootstrap5.min.css +1 -1
  12. package/dist/modules/EditControlChanges.d.ts +1 -1
  13. package/dist/modules/EditControlChanges.d.ts.map +1 -1
  14. package/dist/modules/base/BaseLayer.d.ts +1 -1
  15. package/dist/modules/base/BaseLayer.d.ts.map +1 -1
  16. package/dist/modules/errors.d.ts +2 -1
  17. package/dist/modules/errors.d.ts.map +1 -1
  18. package/dist/ol-wfst.d.ts +11 -5
  19. package/dist/ol-wfst.d.ts.map +1 -1
  20. package/dist/ol-wfst.js +3317 -4099
  21. package/dist/ol-wfst.js.map +1 -1
  22. package/dist/ol-wfst.min.js +1 -1
  23. package/dist/ol-wfst.min.js.map +1 -1
  24. package/dist/tsconfig.tsbuildinfo +1 -0
  25. package/lib/@types.d.ts +6 -0
  26. package/lib/@types.d.ts.map +1 -1
  27. package/lib/Geoserver.d.ts +13 -5
  28. package/lib/Geoserver.d.ts.map +1 -1
  29. package/lib/WfsLayer.d.ts +5 -5
  30. package/lib/WfsLayer.d.ts.map +1 -1
  31. package/lib/WmsLayer.d.ts +6 -5
  32. package/lib/WmsLayer.d.ts.map +1 -1
  33. package/lib/modules/EditControlChanges.d.ts +1 -1
  34. package/lib/modules/EditControlChanges.d.ts.map +1 -1
  35. package/lib/modules/base/BaseLayer.d.ts +1 -1
  36. package/lib/modules/base/BaseLayer.d.ts.map +1 -1
  37. package/lib/modules/errors.d.ts +2 -1
  38. package/lib/modules/errors.d.ts.map +1 -1
  39. package/lib/ol-wfst.d.ts +11 -5
  40. package/lib/ol-wfst.d.ts.map +1 -1
  41. package/lib/ol-wfst.js +96 -66
  42. package/lib/ol-wfst.js.map +1 -1
  43. package/lib/style/css/ol-wfst.bootstrap5.css +40 -11
  44. package/lib/style/scss/-ol-wfst.bootstrap5.scss +10 -10
  45. package/lib/style/scss/_variables.scss +17 -17
  46. package/lib/style/scss/ol-wfst.scss +230 -230
  47. package/lib/tsconfig.tsbuildinfo +1 -0
  48. package/package.json +71 -72
  49. package/CHANGELOG.md +0 -103
package/lib/ol-wfst.js CHANGED
@@ -1,7 +1,13 @@
1
- import { Style, Stroke, Fill, Circle } from 'ol/style';
2
- import { Control } from 'ol/control';
3
- import { Modify, Snap, Select, Draw } from 'ol/interaction';
4
- import { Observable, Feature, Overlay, Collection } from 'ol';
1
+ import CircleStyle from 'ol/style/Circle';
2
+ import Fill$1 from 'ol/style/Fill';
3
+ import Stroke$1 from 'ol/style/Stroke';
4
+ import Style$1 from 'ol/style/Style';
5
+ import Control$1 from 'ol/control/Control';
6
+ import Draw from 'ol/interaction/Draw';
7
+ import Modify from 'ol/interaction/Modify';
8
+ import Select from 'ol/interaction/Select';
9
+ import Snap from 'ol/interaction/Snap';
10
+ import Collection from 'ol/Collection';
5
11
  import BaseEvent from 'ol/events/Event';
6
12
  import { primaryAction, never } from 'ol/events/condition';
7
13
  import { unByKey } from 'ol/Observable';
@@ -14,11 +20,19 @@ import VectorSource, { VectorSourceEvent } from 'ol/source/Vector';
14
20
  import { transformExtent } from 'ol/proj';
15
21
  import { bbox } from 'ol/loadingstrategy';
16
22
  import TileLayer from 'ol/layer/Tile';
17
- import { GeoJSON as GeoJSON$1, WFS, KML } from 'ol/format';
18
23
  import TileWMS from 'ol/source/TileWMS';
19
24
  import TileState from 'ol/TileState';
20
- import { MultiPolygon, MultiLineString, MultiPoint, GeometryCollection, Polygon, Circle as Circle$1 } from 'ol/geom';
25
+ import { Observable, Overlay } from 'ol';
26
+ import { MultiPolygon, MultiLineString, MultiPoint, GeometryCollection, Polygon } from 'ol/geom';
27
+ import { WFS, GeoJSON as GeoJSON$1, KML } from 'ol/format';
28
+ import { Control } from 'ol/control';
29
+ import { Style, Stroke, Fill, Circle } from 'ol/style';
21
30
  import BaseObject from 'ol/Object';
31
+ import Circle$1 from 'ol/geom/Circle';
32
+ import GeometryCollection$1 from 'ol/geom/GeometryCollection';
33
+ import Feature from 'ol/Feature';
34
+ import KML$1 from 'ol/format/KML';
35
+ import WFS$1 from 'ol/format/WFS';
22
36
  import { fromCircle } from 'ol/geom/Polygon';
23
37
  import { getCenter } from 'ol/extent';
24
38
 
@@ -29,9 +43,11 @@ const isError = new Set();
29
43
  const initModal = (opts) => {
30
44
  options = opts;
31
45
  };
32
- const parseError = (geoserverError) => {
33
- if ('exceptions' in geoserverError) {
34
- return geoserverError.exceptions.map((e) => e.text).join(',');
46
+ const parseError = (geoserverResponse) => {
47
+ if ('exceptions' in geoserverResponse) {
48
+ return geoserverResponse.exceptions
49
+ .map((e) => e.text)
50
+ .join(',');
35
51
  }
36
52
  else {
37
53
  return '';
@@ -50,7 +66,7 @@ const showError = (msg, originalError = null, layerName = '') => {
50
66
  }
51
67
  isError.add(layerName);
52
68
  let err_msg = `<b>Error: ${msg}</b>`;
53
- if (originalError) {
69
+ if (originalError && originalError.message !== msg) {
54
70
  err_msg += `. ${originalError.message}`;
55
71
  }
56
72
  const al = Modal.alert(err_msg, options);
@@ -94,9 +110,9 @@ const es = {
94
110
  geoserver: 'No se pudieron obtener datos desde el GeoServer',
95
111
  badFormat: 'Formato no soportado',
96
112
  badFile: 'Error al leer elementos del archivo',
97
- lockFeature: 'No se pudieron bloquear elementos en el GeoServer.',
98
- transaction: 'Error al hacer transacción con el GeoServer.',
99
- getFeatures: 'Error al obtener elemento desde el GeoServer.'
113
+ lockFeature: 'No se pudieron bloquear elementos en el GeoServer',
114
+ transaction: 'Error al hacer transacción con el GeoServer',
115
+ getFeatures: 'Error al obtener elemento desde el GeoServer'
100
116
  }
101
117
  };
102
118
 
@@ -134,9 +150,9 @@ const en = {
134
150
  geoserver: 'Failed to get data from GeoServer',
135
151
  badFormat: 'Unsupported format',
136
152
  badFile: 'Error reading items from file',
137
- lockFeature: 'Could not lock items on the GeoServer.',
138
- transaction: 'Error when doing Transaction with GeoServer.',
139
- getFeatures: 'Error getting elements from GeoServer.'
153
+ lockFeature: 'Could not lock items on the GeoServer',
154
+ transaction: 'Error when doing Transaction with GeoServer',
155
+ getFeatures: 'Error getting elements from GeoServer'
140
156
  }
141
157
  };
142
158
 
@@ -293,7 +309,7 @@ class BaseLayer extends Layer {
293
309
  this.getAndUpdateDescribeFeatureType();
294
310
  }
295
311
  else {
296
- geoserver.on('change:capabilities', () => {
312
+ geoserver.on('change:capabilities', async () => {
297
313
  this.getAndUpdateDescribeFeatureType();
298
314
  });
299
315
  }
@@ -328,6 +344,9 @@ class BaseLayer extends Layer {
328
344
  if (!data) {
329
345
  throw new Error('');
330
346
  }
347
+ if (data.exceptions) {
348
+ throw new Error(parseError(data));
349
+ }
331
350
  const targetNamespace = data.targetNamespace;
332
351
  const properties = data.featureTypes[0].properties;
333
352
  // Find the geometry field
@@ -342,7 +361,7 @@ class BaseLayer extends Layer {
342
361
  }
343
362
  catch (err) {
344
363
  console.error(err);
345
- throw new Error(`${I18N.errors.layer} "${layerLabel}"`);
364
+ showError(`${I18N.errors.layer} "${layerLabel}"`, err, layerName);
346
365
  }
347
366
  }
348
367
  /**
@@ -635,7 +654,7 @@ class WmsLayer extends Mixin(BaseLayer, (TileLayer)) {
635
654
  if (options.beforeTransactFeature) {
636
655
  this.beforeTransactFeature = options.beforeTransactFeature;
637
656
  }
638
- this._formatGeoJSON = new GeoJSON$1();
657
+ this._formatGeoJSON = new GeoJSON();
639
658
  const geoserver = options.geoserver;
640
659
  const source = new WmsSource({
641
660
  name: options.name,
@@ -826,8 +845,8 @@ class LayersControl extends Observable {
826
845
  const layerName = layer.get(BaseLayerProperty.NAME);
827
846
  const checked = layer === getActiveLayerToInsertEls() ? { checked: 'checked' } : {};
828
847
  const input = (createElement("input", { value: layerName, id: `wfst--${layerName}`, type: "radio", className: "ol-wfst--tools-control-input", name: "wfst--select-layer", ...checked, onchange: (evt) => this._layerChangeHandler(evt, layer) }));
829
- const layerDom = (createElement("div", { className: `wfst--layer-control
830
- ${layer.getVisible() ? 'ol-wfst--visible-on' : ''}
848
+ const layerDom = (createElement("div", { className: `wfst--layer-control
849
+ ${layer.getVisible() ? 'ol-wfst--visible-on' : ''}
831
850
  ${layer === getActiveLayerToInsertEls()
832
851
  ? 'ol-wfst--selected-on'
833
852
  : ''}`, "data-layer": layerName },
@@ -1053,8 +1072,8 @@ class Uploads extends Observable {
1053
1072
  else {
1054
1073
  resetStateButtons();
1055
1074
  this.dispatchEvent(new VectorSourceEvent('loadedFeatures', null, featuresToInsert));
1056
- const content = `
1057
- ${I18N.labels.validFeatures}: ${validFeaturesCount}<br>
1075
+ const content = `
1076
+ ${I18N.labels.validFeatures}: ${validFeaturesCount}<br>
1058
1077
  ${invalidFeaturesCount
1059
1078
  ? `${I18N.labels.invalidFeatures}: ${invalidFeaturesCount}`
1060
1079
  : ''}`;
@@ -1150,13 +1169,13 @@ class Uploads extends Observable {
1150
1169
  * @private
1151
1170
  */
1152
1171
  _initModal(content, featuresToInsert) {
1153
- const footer = `
1154
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">
1155
- ${I18N.labels.cancel}
1156
- </button>
1157
- <button type="button" class="btn btn-sm btn-primary" data-action="save" data-dismiss="modal">
1158
- ${I18N.labels.upload}
1159
- </button>
1172
+ const footer = `
1173
+ <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">
1174
+ ${I18N.labels.cancel}
1175
+ </button>
1176
+ <button type="button" class="btn btn-sm btn-primary" data-action="save" data-dismiss="modal">
1177
+ ${I18N.labels.upload}
1178
+ </button>
1160
1179
  `;
1161
1180
  const modal = new Modal({
1162
1181
  ...this._options.modal,
@@ -1405,16 +1424,16 @@ class EditFieldsModal extends Observable {
1405
1424
  constructor(options) {
1406
1425
  super();
1407
1426
  this._options = options;
1408
- const footer = `
1409
- <button type="button" class="btn btn-sm btn-link btn-third" data-action="delete" data-dismiss="modal">
1410
- ${I18N.labels.delete}
1411
- </button>
1412
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">
1413
- ${I18N.labels.cancel}
1414
- </button>
1415
- <button type="button" class="btn btn-sm btn-primary" data-action="save" data-dismiss="modal">
1416
- ${I18N.labels.save}
1417
- </button>
1427
+ const footer = `
1428
+ <button type="button" class="btn btn-sm btn-link btn-third" data-action="delete" data-dismiss="modal">
1429
+ ${I18N.labels.delete}
1430
+ </button>
1431
+ <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">
1432
+ ${I18N.labels.cancel}
1433
+ </button>
1434
+ <button type="button" class="btn btn-sm btn-primary" data-action="save" data-dismiss="modal">
1435
+ ${I18N.labels.save}
1436
+ </button>
1418
1437
  `;
1419
1438
  this._modal = new Modal({
1420
1439
  ...this._options,
@@ -1472,10 +1491,10 @@ class EditFieldsModal extends Observable {
1472
1491
  type = 'text';
1473
1492
  }
1474
1493
  if (type) {
1475
- content += `
1476
- <div class="ol-wfst--input-field-container">
1477
- <label class="ol-wfst--input-field-label" for="${key}">${key}</label>
1478
- <input placeholder="NULL" class="ol-wfst--input-field-input" type="${type}" name="${key}" value="${properties[key] || ''}">
1494
+ content += `
1495
+ <div class="ol-wfst--input-field-container">
1496
+ <label class="ol-wfst--input-field-label" for="${key}">${key}</label>
1497
+ <input placeholder="NULL" class="ol-wfst--input-field-input" type="${type}" name="${key}" value="${properties[key] || ''}">
1479
1498
  </div>`;
1480
1499
  }
1481
1500
  }
@@ -1540,9 +1559,9 @@ class Geoserver extends BaseObject {
1540
1559
  this._updateFeatures = [];
1541
1560
  this._deleteFeatures = [];
1542
1561
  // Formats
1543
- this._formatWFS = new WFS();
1544
- this._formatGeoJSON = new GeoJSON$1();
1545
- this._formatKml = new KML({
1562
+ this._formatWFS = new WFS$1();
1563
+ this._formatGeoJSON = new GeoJSON();
1564
+ this._formatKml = new KML$1({
1546
1565
  extractStyles: false,
1547
1566
  showPointNames: false
1548
1567
  });
@@ -1740,7 +1759,7 @@ class Geoserver extends BaseObject {
1740
1759
  * @private
1741
1760
  */
1742
1761
  async transact(transactionType, features, layerName) {
1743
- features = Array.isArray(features) ? features : [features];
1762
+ features = (Array.isArray(features) ? features : [features]);
1744
1763
  const clonedFeatures = [];
1745
1764
  const geoLayer = getStoredLayer(layerName);
1746
1765
  for (const feature of features) {
@@ -1748,7 +1767,7 @@ class Geoserver extends BaseObject {
1748
1767
  const cloneGeom = clone.getGeometry();
1749
1768
  // Ugly fix to support GeometryCollection on GML
1750
1769
  // See https://github.com/openlayers/openlayers/issues/4220
1751
- if (cloneGeom instanceof GeometryCollection) {
1770
+ if (cloneGeom instanceof GeometryCollection$1) {
1752
1771
  this._transformGeoemtryCollectionToGeometries(clone, cloneGeom);
1753
1772
  }
1754
1773
  else if (cloneGeom instanceof Circle$1) {
@@ -1804,10 +1823,10 @@ class Geoserver extends BaseObject {
1804
1823
  srs === 'EPSG:4326'
1805
1824
  ? 'urn:x-ogc:def:crs:EPSG:4326'
1806
1825
  : srs;
1807
- const describeFeatureType = geoLayer.getDescribeFeatureType()._parsed;
1808
- if (!geoLayer) {
1809
- throw new Error(I18N.errors.layerNotFound);
1826
+ if (!geoLayer || !geoLayer.getDescribeFeatureType()) {
1827
+ throw new Error(`${I18N.errors.layerNotFound}: "${layerName}"`);
1810
1828
  }
1829
+ const describeFeatureType = geoLayer.getDescribeFeatureType()._parsed;
1811
1830
  const options = {
1812
1831
  featureNS: describeFeatureType.namespace,
1813
1832
  featureType: layerName,
@@ -1860,20 +1879,22 @@ class Geoserver extends BaseObject {
1860
1879
  if (!response.ok) {
1861
1880
  throw new Error(I18N.errors.transaction + ' ' + response.status);
1862
1881
  }
1863
- const parseResponse = this._formatWFS.readTransactionResponse(await response.text());
1882
+ const responseStr = await response.text();
1883
+ const parseResponse = this._formatWFS.readTransactionResponse(responseStr);
1884
+ const wlayer = getStoredLayer(layerName);
1864
1885
  if (!Object.keys(parseResponse).length) {
1865
- const responseStr = await response.text();
1866
1886
  const findError = String(responseStr).match(/<ows:ExceptionText>([\s\S]*?)<\/ows:ExceptionText>/);
1867
1887
  if (findError) {
1888
+ if (wlayer instanceof WmsLayer) {
1889
+ this._removeFeatures(features);
1890
+ }
1891
+ // maybe remove tmp wms features here
1868
1892
  throw new Error(findError[1]);
1869
1893
  }
1870
1894
  }
1871
1895
  if (transactionType !== TransactionType.Delete) {
1872
- for (const feature of features) {
1873
- getEditLayer().getSource().removeFeature(feature);
1874
- }
1896
+ this._removeFeatures(features);
1875
1897
  }
1876
- const wlayer = getStoredLayer(layerName);
1877
1898
  wlayer.refresh();
1878
1899
  showLoading(false);
1879
1900
  this._insertFeatures = [];
@@ -1891,6 +1912,14 @@ class Geoserver extends BaseObject {
1891
1912
  }, 0);
1892
1913
  });
1893
1914
  }
1915
+ /**
1916
+ * @privatwe
1917
+ */
1918
+ _removeFeatures(features) {
1919
+ for (const feature of features) {
1920
+ getEditLayer().getSource().removeFeature(feature);
1921
+ }
1922
+ }
1894
1923
  /**
1895
1924
  *
1896
1925
  * @param feature
@@ -1964,6 +1993,7 @@ class Geoserver extends BaseObject {
1964
1993
  // First, check if is a JSON (with errors)
1965
1994
  const dataParsed = JSON.parse(data);
1966
1995
  if ('exceptions' in dataParsed) {
1996
+ const error = new Error(parseError(dataParsed));
1967
1997
  const exceptions = dataParsed.exceptions;
1968
1998
  if (exceptions[0].code === 'CannotLockAllFeatures') {
1969
1999
  // Maybe the Feature is already blocked, ant thats trigger error, so, we try one locking more time again
@@ -1971,11 +2001,11 @@ class Geoserver extends BaseObject {
1971
2001
  this.lockFeature(featureId, layerName, 1);
1972
2002
  }
1973
2003
  else {
1974
- showError(I18N.errors.lockFeature, exceptions);
2004
+ throw error;
1975
2005
  }
1976
2006
  }
1977
2007
  else {
1978
- showError(exceptions[0].text, exceptions);
2008
+ throw error;
1979
2009
  }
1980
2010
  }
1981
2011
  }
@@ -2062,7 +2092,7 @@ const controlElement = document.createElement('div');
2062
2092
  * @extends {ol/control/Control~Control}
2063
2093
  * @param options Wfst options, see [Wfst Options](#options) for more details.
2064
2094
  */
2065
- class Wfst extends Control {
2095
+ class Wfst extends Control$1 {
2066
2096
  _options;
2067
2097
  _i18n;
2068
2098
  // Ol
@@ -2338,13 +2368,13 @@ class Wfst extends Control {
2338
2368
  this._interactionModify = new Modify({
2339
2369
  style: () => {
2340
2370
  if (getMode() === Modes.Edit) {
2341
- return new Style({
2342
- image: new Circle({
2371
+ return new Style$1({
2372
+ image: new CircleStyle({
2343
2373
  radius: 6,
2344
- fill: new Fill({
2374
+ fill: new Fill$1({
2345
2375
  color: '#ff0000'
2346
2376
  }),
2347
- stroke: new Stroke({
2377
+ stroke: new Stroke$1({
2348
2378
  width: 2,
2349
2379
  color: 'rgba(5, 5, 5, 0.9)'
2350
2380
  })
@@ -2766,5 +2796,5 @@ class WfstEvent extends BaseEvent {
2766
2796
  }
2767
2797
  }
2768
2798
 
2769
- export { Geoserver, WfsLayer, WmsLayer, Wfst as default };
2799
+ export { Geoserver, WfsLayer, WfstEvent, WmsLayer, Wfst as default };
2770
2800
  //# sourceMappingURL=ol-wfst.js.map