react-spatial 1.0.37-beta.2 → 1.1.2-beta.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.
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-param-reassign */
1
2
  function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; }
2
3
  import React, { PureComponent } from 'react';
3
4
  import PropTypes from 'prop-types';
@@ -200,32 +201,43 @@ var CanvasSaveButton = /*@__PURE__*/(function (PureComponent) {
200
201
  return destContext.font;
201
202
  };
202
203
 
203
- // If minimal fontsize is reached, divide copyright in two lines.
204
- CanvasSaveButton.prototype.splitCopyrightLine = function splitCopyrightLine (destContext, destCanvas, maxWidth, copyright, scale) {
205
- var newCopyright = copyright;
206
- var wordNumber = copyright.split(' ').length;
204
+ // eslint-disable-next-line class-methods-use-this
205
+ CanvasSaveButton.prototype.drawTextBackground = function drawTextBackground (
206
+ destContext,
207
+ textMeasure,
208
+ textX,
209
+ textY,
210
+ padding,
211
+ styleOptions
212
+ ) {
213
+ if ( styleOptions === void 0 ) styleOptions = {};
214
+
215
+ /// get width of text
216
+ var width = textMeasure.width;
217
+ var height = textMeasure.height;
218
+ var actualBoundingBoxAscent = textMeasure.actualBoundingBoxAscent;
219
+ destContext.save();
220
+ // Dflt is a white background
221
+ destContext.fillStyle = 'rgba(255,255,255,.8)';
207
222
 
208
- for (var i = 0; i < wordNumber; i += 1) {
209
- newCopyright = newCopyright.substring(0, newCopyright.lastIndexOf(' '));
210
- // Stop removing word when fits within one line.
211
- if (destContext.measureText(newCopyright).width * scale < maxWidth) {
212
- break;
213
- }
214
- }
223
+ // To simplify usability the user could pass a boolean to use only default values.
224
+ if (typeof styleOptions === 'object') {
225
+ Object.entries(styleOptions).forEach(function (ref) {
226
+ var key = ref[0];
227
+ var value = ref[1];
215
228
 
216
- // Draw fist line (line break isn't supported for fillText).
217
- destContext.fillText(
218
- newCopyright,
219
- this.padding,
220
- destCanvas.height / scale - 3 * this.padding
221
- );
229
+ destContext[key] = value;
230
+ });
231
+ }
222
232
 
223
- // Draw second line.
224
- destContext.fillText(
225
- copyright.replace(newCopyright, ''),
226
- this.padding,
227
- destCanvas.height / scale - this.padding
233
+ /// draw background rect assuming height of font
234
+ destContext.fillRect(
235
+ textX - padding,
236
+ textY - actualBoundingBoxAscent - padding,
237
+ width + padding * 2,
238
+ height + padding * 2
228
239
  );
240
+ destContext.restore();
229
241
  };
230
242
 
231
243
  CanvasSaveButton.prototype.drawCopyright = function drawCopyright (destContext, destCanvas, maxWidth) {
@@ -236,33 +248,83 @@ var CanvasSaveButton = /*@__PURE__*/(function (PureComponent) {
236
248
  var text = ref$1.text;
237
249
  var font = ref$1.font;
238
250
  var fillStyle = ref$1.fillStyle;
251
+ var background = ref$1.background;
239
252
  var copyright = typeof text === 'function' ? text() : text;
240
- this.multilineCopyright = false;
241
253
 
242
254
  destContext.save();
243
255
  destContext.scale(scale, scale);
244
- // eslint-disable-next-line no-param-reassign
245
256
  destContext.font = font || '12px Arial';
246
- // eslint-disable-next-line no-param-reassign
257
+ destContext.font = this.decreaseFontSize(
258
+ destContext,
259
+ maxWidth,
260
+ copyright,
261
+ scale
262
+ );
263
+
264
+ destContext.scale(scale, scale);
247
265
  destContext.fillStyle = fillStyle || 'black';
248
266
 
249
- this.decreaseFontSize(destContext, maxWidth, copyright, scale);
267
+ // We search if the display on 2 line is necessary
268
+ var firstLine = copyright;
269
+ var wordNumber = copyright.split(' ').length;
250
270
 
271
+ // If the text is bigger than the max width we split itinto 2 lines
251
272
  if (this.multilineCopyright) {
252
- this.splitCopyrightLine(
273
+ for (var i = 0; i < wordNumber; i += 1) {
274
+ firstLine = firstLine.substring(0, firstLine.lastIndexOf(' '));
275
+ // Stop removing word when fits within one line.
276
+ if (destContext.measureText(firstLine).width * scale < maxWidth) {
277
+ break;
278
+ }
279
+ }
280
+ }
281
+ var secondLine = copyright.replace(firstLine, '');
282
+
283
+ // Draw first line (line break isn't supported for fillText).
284
+ var textX = this.padding;
285
+ var textMeasure = destContext.measureText(firstLine);
286
+ textMeasure.height =
287
+ textMeasure.actualBoundingBoxAscent +
288
+ textMeasure.actualBoundingBoxDescent;
289
+ var firstLineY = destCanvas.height / scale - this.padding;
290
+ var secondLineY = firstLineY;
291
+ var paddingBetweenLines = 3;
292
+ var paddingBackground = paddingBetweenLines / 2;
293
+
294
+ if (secondLine) {
295
+ firstLineY -= textMeasure.height + paddingBetweenLines;
296
+ }
297
+ if (background) {
298
+ this.drawTextBackground(
253
299
  destContext,
254
- destCanvas,
255
- maxWidth,
256
- copyright,
257
- scale
258
- );
259
- } else {
260
- destContext.fillText(
261
- copyright,
262
- this.padding,
263
- destCanvas.height / scale - this.padding
300
+ textMeasure,
301
+ textX,
302
+ firstLineY,
303
+ paddingBackground,
304
+ background
264
305
  );
265
306
  }
307
+ destContext.fillText(firstLine, textX, firstLineY);
308
+
309
+ // Draw second line.
310
+ if (secondLine) {
311
+ textMeasure = destContext.measureText(secondLine);
312
+ textMeasure.height =
313
+ textMeasure.actualBoundingBoxAscent +
314
+ textMeasure.actualBoundingBoxDescent;
315
+ if (background) {
316
+ this.drawTextBackground(
317
+ destContext,
318
+ textMeasure,
319
+ textX,
320
+ secondLineY,
321
+ paddingBackground,
322
+ background
323
+ );
324
+ }
325
+ destContext.fillText(secondLine, textX, secondLineY);
326
+ }
327
+
266
328
  destContext.restore();
267
329
  };
268
330
 
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasSaveButton.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\nimport { getTopLeft, getBottomRight } from 'ol/extent';\nimport NorthArrowSimple from '../../images/northArrow.url.svg';\nimport NorthArrowCircle from '../../images/northArrowCircle.url.svg';\n\nconst propTypes = {\n /**\n * Automatically download the image saved.\n */\n autoDownload: PropTypes.bool,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.node,\n\n /**\n * Output format of the image.\n */\n format: PropTypes.oneOf(['image/jpeg', 'image/png']),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Extent for the export. If no extent is given, the whole map is exported.\n */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Array of 4 [ol/Coordinate](https://openlayers.org/en/latest/apidoc/module-ol_coordinate.html#~Coordinate).\n * If no coordinates and no extent are given, the whole map is exported.\n * This property must be used to export rotated map.\n * If you don't need to export rotated map the extent property can be used as well.\n * If extent is specified, coordinates property is ignored.\n */\n coordinates: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),\n\n /**\n * Scale the map for better quality. Possible values: 1, 2 or 3.\n * WARNING: The tiled layer with a WMTS or XYZ source must provides an url\n * for each scale in the config file.\n */\n scale: PropTypes.number,\n\n /**\n * Function called before the dowload process begins.\n */\n onSaveStart: PropTypes.func,\n\n /**\n * Function called after the dowload process ends.\n *\n * @param {object} error Error message the process fails.\n */\n onSaveEnd: PropTypes.func,\n\n /**\n * Extra data, such as copyright, north arrow configuration.\n * All extra data is optional.\n *\n * Example 1:\n *\n {\n copyright: {\n text: 'Example copyright', // Copyright text or function\n font: '10px Arial', // Font, default is '12px Arial'\n fillStyle: 'blue', // Fill style, default is 'black'\n },\n northArrow, // True if the north arrow\n // should be placed with default configuration\n // (default image, rotation=0, circled=False)\n }\n * Example 2:\n *\n {\n northArrow: {\n src: NorthArrowCustom,\n width: 60, // Width in px, default is 80\n height: 100, // Height in px, default is 80\n rotation: 25, // Absolute rotation in degrees as number or function\n\n }\n }\n * Example 3:\n *\n {\n copyright: {\n text: () => { // Copyright as function\n return this.copyright;\n },\n },\n northArrow: {\n rotation: () => { // Rotation as function\n return NorthArrow.radToDeg(this.map.getView().getRotation());\n },\n circled, // Display circle around the north arrow (Does not work for custom src)\n },\n }\n */\n extraData: PropTypes.object,\n};\n\nconst defaultProps = {\n autoDownload: true,\n children: null,\n map: null,\n format: 'image/png',\n extent: null,\n extraData: null,\n coordinates: null,\n scale: 1,\n onSaveStart: (map) => {\n return Promise.resolve(map);\n },\n onSaveEnd: () => {},\n};\n\n/**\n * The CanvasSaveButton component creates a button to save\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n * canvas as an image.\n */\nclass CanvasSaveButton extends PureComponent {\n constructor(props) {\n super(props);\n const { format } = this.props;\n this.fileExt = format === 'image/jpeg' ? 'jpg' : 'png';\n this.padding = 5;\n }\n\n onClick(evt) {\n const { map, onSaveStart, onSaveEnd, autoDownload } = this.props;\n if (window.navigator.msSaveBlob) {\n // ie only\n evt.preventDefault();\n evt.stopPropagation();\n }\n onSaveStart(map).then((mapToExport) => {\n return this.createCanvasImage(mapToExport || map)\n .then((canvas) => {\n if (autoDownload) {\n this.downloadCanvasImage(canvas).then((blob) => {\n onSaveEnd(mapToExport, canvas, blob);\n });\n } else {\n onSaveEnd(mapToExport, canvas);\n }\n })\n .catch((err) => {\n if (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n onSaveEnd(mapToExport, err);\n });\n });\n }\n\n getDownloadImageName() {\n return (\n `${window.document.title.replace(/ /g, '_').toLowerCase()}` +\n `.${this.fileExt}`\n );\n }\n\n // Ensure the font size fita with the image width.\n decreaseFontSize(destContext, maxWidth, copyright, scale) {\n const minFontSize = 8;\n let sizeMatch;\n let fontSize;\n do {\n sizeMatch = destContext.font.match(/[0-9]+(?:\\.[0-9]+)?(px)/i);\n fontSize = parseInt(sizeMatch[0].replace(sizeMatch[1], ''), 10);\n\n // eslint-disable-next-line no-param-reassign\n destContext.font = destContext.font.replace(fontSize, fontSize - 1);\n\n if (fontSize - 1 === minFontSize) {\n this.multilineCopyright = true;\n }\n } while (\n fontSize - 1 > minFontSize &&\n destContext.measureText(copyright).width * scale > maxWidth\n );\n return destContext.font;\n }\n\n // If minimal fontsize is reached, divide copyright in two lines.\n splitCopyrightLine(destContext, destCanvas, maxWidth, copyright, scale) {\n let newCopyright = copyright;\n const wordNumber = copyright.split(' ').length;\n\n for (let i = 0; i < wordNumber; i += 1) {\n newCopyright = newCopyright.substring(0, newCopyright.lastIndexOf(' '));\n // Stop removing word when fits within one line.\n if (destContext.measureText(newCopyright).width * scale < maxWidth) {\n break;\n }\n }\n\n // Draw fist line (line break isn't supported for fillText).\n destContext.fillText(\n newCopyright,\n this.padding,\n destCanvas.height / scale - 3 * this.padding,\n );\n\n // Draw second line.\n destContext.fillText(\n copyright.replace(newCopyright, ''),\n this.padding,\n destCanvas.height / scale - this.padding,\n );\n }\n\n drawCopyright(destContext, destCanvas, maxWidth) {\n const { extraData, scale } = this.props;\n const { text, font, fillStyle } = extraData.copyright;\n const copyright = typeof text === 'function' ? text() : text;\n this.multilineCopyright = false;\n\n destContext.save();\n destContext.scale(scale, scale);\n // eslint-disable-next-line no-param-reassign\n destContext.font = font || '12px Arial';\n // eslint-disable-next-line no-param-reassign\n destContext.fillStyle = fillStyle || 'black';\n\n this.decreaseFontSize(destContext, maxWidth, copyright, scale);\n\n if (this.multilineCopyright) {\n this.splitCopyrightLine(\n destContext,\n destCanvas,\n maxWidth,\n copyright,\n scale,\n );\n } else {\n destContext.fillText(\n copyright,\n this.padding,\n destCanvas.height / scale - this.padding,\n );\n }\n destContext.restore();\n }\n\n drawElement(data, destCanvas, previousItemSize = [0, 0]) {\n const destContext = destCanvas.getContext('2d');\n const { scale } = this.props;\n const { src, width, height, rotation } = data;\n\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = src;\n img.onload = () => {\n destContext.save();\n const elementWidth = (width || 80) * scale;\n const elementHeight = (height || 80) * scale;\n destContext.translate(\n destCanvas.width - 2 * this.padding - elementWidth / 2,\n destCanvas.height -\n 2 * this.padding -\n elementHeight / 2 -\n previousItemSize[1],\n );\n\n if (rotation) {\n const angle = typeof rotation === 'function' ? rotation() : rotation;\n destContext.rotate(angle * (Math.PI / 180));\n }\n\n destContext.drawImage(\n img,\n -elementWidth / 2,\n -elementHeight / 2,\n elementWidth,\n elementHeight,\n );\n destContext.restore();\n\n // Return the pixels width of the arrow and the margin right,\n // that must not be occupied by the copyright.\n resolve([\n elementWidth + 2 * this.padding,\n elementHeight + 2 * this.padding,\n ]);\n };\n\n img.onerror = () => {\n resolve();\n };\n });\n }\n\n calculatePixelsToExport(mapToExport) {\n const { extent, coordinates } = this.props;\n let firstCoordinate;\n let oppositeCoordinate;\n\n if (extent) {\n firstCoordinate = getTopLeft(extent);\n oppositeCoordinate = getBottomRight(extent);\n } else if (coordinates) {\n // In case of coordinates coming from DragBox interaction:\n // firstCoordinate is the first coordinate drawn by the user.\n // oppositeCoordinate is the coordinate of the point dragged by the user.\n [firstCoordinate, , oppositeCoordinate] = coordinates;\n }\n\n if (firstCoordinate && oppositeCoordinate) {\n const firstPixel = mapToExport.getPixelFromCoordinate(firstCoordinate);\n const oppositePixel =\n mapToExport.getPixelFromCoordinate(oppositeCoordinate);\n const pixelTopLeft = [\n firstPixel[0] <= oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] <= oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n const pixelBottomRight = [\n firstPixel[0] > oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] > oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n\n return {\n x: pixelTopLeft[0],\n y: pixelTopLeft[1],\n w: pixelBottomRight[0] - pixelTopLeft[0],\n h: pixelBottomRight[1] - pixelTopLeft[1],\n };\n }\n return null;\n }\n\n createCanvasImage(mapToExport) {\n const { extraData } = this.props;\n\n return new Promise((resolve) => {\n mapToExport.once('rendercomplete', () => {\n // Find all layer canvases and add it to dest canvas.\n const canvases = mapToExport\n .getTargetElement()\n .getElementsByTagName('canvas');\n\n // Create the canvas to export with the good size.\n let destCanvas;\n let destContext;\n\n // canvases is an HTMLCollection, we don't try to transform to array because some compilers like cra doesn't translate it right.\n for (let i = 0; i < canvases.length; i += 1) {\n const canvas = canvases[i];\n if (!canvas.width || !canvas.height) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const clip = this.calculatePixelsToExport(mapToExport) || {\n x: 0,\n y: 0,\n w: canvas.width,\n h: canvas.height,\n };\n\n if (!destCanvas) {\n destCanvas = document.createElement('canvas');\n destCanvas.width = clip.w;\n destCanvas.height = clip.h;\n destContext = destCanvas.getContext('2d');\n }\n\n // Draw canvas to the canvas to export.\n destContext.drawImage(\n canvas,\n clip.x,\n clip.y,\n clip.w,\n clip.h,\n 0,\n 0,\n destCanvas.width,\n destCanvas.height,\n );\n }\n\n // Custom info\n let logoPromise = Promise.resolve();\n if (destContext && extraData && extraData.logo) {\n logoPromise = this.drawElement(extraData.logo, destCanvas);\n }\n\n logoPromise.then((customItemSize = [0, 0]) => {\n // North arrow\n let arrowPromise = Promise.resolve();\n if (destContext && extraData && extraData.northArrow) {\n arrowPromise = this.drawElement(\n {\n src: extraData.northArrow.circled\n ? NorthArrowCircle\n : NorthArrowSimple,\n ...extraData.northArrow,\n },\n destCanvas,\n customItemSize,\n );\n }\n\n // Copyright\n arrowPromise.then((arrowWidth) => {\n const widestElement = Math.max(customItemSize[0], arrowWidth);\n if (\n destContext &&\n extraData &&\n extraData.copyright &&\n extraData.copyright.text\n ) {\n const maxWidth = widestElement\n ? destContext.canvas.width - widestElement\n : destContext.canvas.width;\n this.drawCopyright(destContext, destCanvas, maxWidth);\n }\n resolve(destCanvas);\n });\n });\n });\n mapToExport.renderSync();\n });\n }\n\n downloadCanvasImage(canvas) {\n // Use blob for large images\n const promise = new Promise((resolve) => {\n const { format } = this.props;\n if (/msie (9|10)/gi.test(window.navigator.userAgent.toLowerCase())) {\n // ie 9 and 10\n const url = canvas.toDataURL(format);\n const w = window.open('about:blank', '');\n w.document.write(`<img src=\"${url}\" alt=\"from canvas\"/>`);\n resolve(url);\n }\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n let image;\n try {\n image = canvas.msToBlob();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n }\n const blob = new Blob([image], {\n type: format,\n });\n resolve(blob);\n window.navigator.msSaveBlob(blob, this.getDownloadImageName());\n } else {\n canvas.toBlob((blob) => {\n const link = document.createElement('a');\n link.download = this.getDownloadImageName();\n link.href = URL.createObjectURL(blob);\n // append child to document for firefox to be able to download.\n document.body.appendChild(link);\n link.click();\n resolve(blob);\n }, format);\n }\n });\n return promise;\n }\n\n render() {\n const { children, ...other } = this.props;\n\n delete other.onSaveStart;\n delete other.onSaveEnd;\n delete other.extraData;\n delete other.extent;\n delete other.format;\n delete other.map;\n delete other.coordinates;\n delete other.autoDownload;\n delete other.scale;\n\n return (\n <div\n role=\"button\"\n className=\"rs-canvas-save-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={(e) => {\n return this.onClick(e);\n }}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick(e);\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nCanvasSaveButton.propTypes = propTypes;\nCanvasSaveButton.defaultProps = defaultProps;\n\nexport default CanvasSaveButton;\n"],"names":["const","super","this","let"],"mappings":"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"}
1
+ {"version":3,"file":"CanvasSaveButton.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.js"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\nimport { getTopLeft, getBottomRight } from 'ol/extent';\nimport NorthArrowSimple from '../../images/northArrow.url.svg';\nimport NorthArrowCircle from '../../images/northArrowCircle.url.svg';\n\nconst propTypes = {\n /**\n * Automatically download the image saved.\n */\n autoDownload: PropTypes.bool,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.node,\n\n /**\n * Output format of the image.\n */\n format: PropTypes.oneOf(['image/jpeg', 'image/png']),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Extent for the export. If no extent is given, the whole map is exported.\n */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Array of 4 [ol/Coordinate](https://openlayers.org/en/latest/apidoc/module-ol_coordinate.html#~Coordinate).\n * If no coordinates and no extent are given, the whole map is exported.\n * This property must be used to export rotated map.\n * If you don't need to export rotated map the extent property can be used as well.\n * If extent is specified, coordinates property is ignored.\n */\n coordinates: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),\n\n /**\n * Scale the map for better quality. Possible values: 1, 2 or 3.\n * WARNING: The tiled layer with a WMTS or XYZ source must provides an url\n * for each scale in the config file.\n */\n scale: PropTypes.number,\n\n /**\n * Function called before the dowload process begins.\n */\n onSaveStart: PropTypes.func,\n\n /**\n * Function called after the dowload process ends.\n *\n * @param {object} error Error message the process fails.\n */\n onSaveEnd: PropTypes.func,\n\n /**\n * Extra data, such as copyright, north arrow configuration.\n * All extra data is optional.\n *\n * Example 1:\n *\n {\n copyright: {\n text: 'Example copyright', // Copyright text or function\n font: '10px Arial', // Font, default is '12px Arial'\n fillStyle: 'blue', // Fill style, default is 'black'\n },\n northArrow, // True if the north arrow\n // should be placed with default configuration\n // (default image, rotation=0, circled=False)\n }\n * Example 2:\n *\n {\n northArrow: {\n src: NorthArrowCustom,\n width: 60, // Width in px, default is 80\n height: 100, // Height in px, default is 80\n rotation: 25, // Absolute rotation in degrees as number or function\n\n }\n }\n * Example 3:\n *\n {\n copyright: {\n text: () => { // Copyright as function\n return this.copyright;\n },\n },\n northArrow: {\n rotation: () => { // Rotation as function\n return NorthArrow.radToDeg(this.map.getView().getRotation());\n },\n circled, // Display circle around the north arrow (Does not work for custom src)\n },\n }\n */\n extraData: PropTypes.object,\n};\n\nconst defaultProps = {\n autoDownload: true,\n children: null,\n map: null,\n format: 'image/png',\n extent: null,\n extraData: null,\n coordinates: null,\n scale: 1,\n onSaveStart: (map) => {\n return Promise.resolve(map);\n },\n onSaveEnd: () => {},\n};\n\n/**\n * The CanvasSaveButton component creates a button to save\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n * canvas as an image.\n */\nclass CanvasSaveButton extends PureComponent {\n constructor(props) {\n super(props);\n const { format } = this.props;\n this.fileExt = format === 'image/jpeg' ? 'jpg' : 'png';\n this.padding = 5;\n }\n\n onClick(evt) {\n const { map, onSaveStart, onSaveEnd, autoDownload } = this.props;\n if (window.navigator.msSaveBlob) {\n // ie only\n evt.preventDefault();\n evt.stopPropagation();\n }\n onSaveStart(map).then((mapToExport) => {\n return this.createCanvasImage(mapToExport || map)\n .then((canvas) => {\n if (autoDownload) {\n this.downloadCanvasImage(canvas).then((blob) => {\n onSaveEnd(mapToExport, canvas, blob);\n });\n } else {\n onSaveEnd(mapToExport, canvas);\n }\n })\n .catch((err) => {\n if (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n onSaveEnd(mapToExport, err);\n });\n });\n }\n\n getDownloadImageName() {\n return (\n `${window.document.title.replace(/ /g, '_').toLowerCase()}` +\n `.${this.fileExt}`\n );\n }\n\n // Ensure the font size fita with the image width.\n decreaseFontSize(destContext, maxWidth, copyright, scale) {\n const minFontSize = 8;\n let sizeMatch;\n let fontSize;\n do {\n sizeMatch = destContext.font.match(/[0-9]+(?:\\.[0-9]+)?(px)/i);\n fontSize = parseInt(sizeMatch[0].replace(sizeMatch[1], ''), 10);\n\n // eslint-disable-next-line no-param-reassign\n destContext.font = destContext.font.replace(fontSize, fontSize - 1);\n\n if (fontSize - 1 === minFontSize) {\n this.multilineCopyright = true;\n }\n } while (\n fontSize - 1 > minFontSize &&\n destContext.measureText(copyright).width * scale > maxWidth\n );\n return destContext.font;\n }\n\n // eslint-disable-next-line class-methods-use-this\n drawTextBackground(\n destContext,\n textMeasure,\n textX,\n textY,\n padding,\n styleOptions = {},\n ) {\n /// get width of text\n const { width, height, actualBoundingBoxAscent } = textMeasure;\n destContext.save();\n // Dflt is a white background\n destContext.fillStyle = 'rgba(255,255,255,.8)';\n\n // To simplify usability the user could pass a boolean to use only default values.\n if (typeof styleOptions === 'object') {\n Object.entries(styleOptions).forEach(([key, value]) => {\n destContext[key] = value;\n });\n }\n\n /// draw background rect assuming height of font\n destContext.fillRect(\n textX - padding,\n textY - actualBoundingBoxAscent - padding,\n width + padding * 2,\n height + padding * 2,\n );\n destContext.restore();\n }\n\n drawCopyright(destContext, destCanvas, maxWidth) {\n const { extraData, scale } = this.props;\n const { text, font, fillStyle, background } = extraData.copyright;\n const copyright = typeof text === 'function' ? text() : text;\n\n destContext.save();\n destContext.scale(scale, scale);\n destContext.font = font || '12px Arial';\n destContext.font = this.decreaseFontSize(\n destContext,\n maxWidth,\n copyright,\n scale,\n );\n\n destContext.scale(scale, scale);\n destContext.fillStyle = fillStyle || 'black';\n\n // We search if the display on 2 line is necessary\n let firstLine = copyright;\n const wordNumber = copyright.split(' ').length;\n\n // If the text is bigger than the max width we split itinto 2 lines\n if (this.multilineCopyright) {\n for (let i = 0; i < wordNumber; i += 1) {\n firstLine = firstLine.substring(0, firstLine.lastIndexOf(' '));\n // Stop removing word when fits within one line.\n if (destContext.measureText(firstLine).width * scale < maxWidth) {\n break;\n }\n }\n }\n const secondLine = copyright.replace(firstLine, '');\n\n // Draw first line (line break isn't supported for fillText).\n const textX = this.padding;\n let textMeasure = destContext.measureText(firstLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n let firstLineY = destCanvas.height / scale - this.padding;\n const secondLineY = firstLineY;\n const paddingBetweenLines = 3;\n const paddingBackground = paddingBetweenLines / 2;\n\n if (secondLine) {\n firstLineY -= textMeasure.height + paddingBetweenLines;\n }\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n firstLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(firstLine, textX, firstLineY);\n\n // Draw second line.\n if (secondLine) {\n textMeasure = destContext.measureText(secondLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n secondLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(secondLine, textX, secondLineY);\n }\n\n destContext.restore();\n }\n\n drawElement(data, destCanvas, previousItemSize = [0, 0]) {\n const destContext = destCanvas.getContext('2d');\n const { scale } = this.props;\n const { src, width, height, rotation } = data;\n\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = src;\n img.onload = () => {\n destContext.save();\n const elementWidth = (width || 80) * scale;\n const elementHeight = (height || 80) * scale;\n destContext.translate(\n destCanvas.width - 2 * this.padding - elementWidth / 2,\n destCanvas.height -\n 2 * this.padding -\n elementHeight / 2 -\n previousItemSize[1],\n );\n\n if (rotation) {\n const angle = typeof rotation === 'function' ? rotation() : rotation;\n destContext.rotate(angle * (Math.PI / 180));\n }\n\n destContext.drawImage(\n img,\n -elementWidth / 2,\n -elementHeight / 2,\n elementWidth,\n elementHeight,\n );\n destContext.restore();\n\n // Return the pixels width of the arrow and the margin right,\n // that must not be occupied by the copyright.\n resolve([\n elementWidth + 2 * this.padding,\n elementHeight + 2 * this.padding,\n ]);\n };\n\n img.onerror = () => {\n resolve();\n };\n });\n }\n\n calculatePixelsToExport(mapToExport) {\n const { extent, coordinates } = this.props;\n let firstCoordinate;\n let oppositeCoordinate;\n\n if (extent) {\n firstCoordinate = getTopLeft(extent);\n oppositeCoordinate = getBottomRight(extent);\n } else if (coordinates) {\n // In case of coordinates coming from DragBox interaction:\n // firstCoordinate is the first coordinate drawn by the user.\n // oppositeCoordinate is the coordinate of the point dragged by the user.\n [firstCoordinate, , oppositeCoordinate] = coordinates;\n }\n\n if (firstCoordinate && oppositeCoordinate) {\n const firstPixel = mapToExport.getPixelFromCoordinate(firstCoordinate);\n const oppositePixel =\n mapToExport.getPixelFromCoordinate(oppositeCoordinate);\n const pixelTopLeft = [\n firstPixel[0] <= oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] <= oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n const pixelBottomRight = [\n firstPixel[0] > oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] > oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n\n return {\n x: pixelTopLeft[0],\n y: pixelTopLeft[1],\n w: pixelBottomRight[0] - pixelTopLeft[0],\n h: pixelBottomRight[1] - pixelTopLeft[1],\n };\n }\n return null;\n }\n\n createCanvasImage(mapToExport) {\n const { extraData } = this.props;\n\n return new Promise((resolve) => {\n mapToExport.once('rendercomplete', () => {\n // Find all layer canvases and add it to dest canvas.\n const canvases = mapToExport\n .getTargetElement()\n .getElementsByTagName('canvas');\n\n // Create the canvas to export with the good size.\n let destCanvas;\n let destContext;\n\n // canvases is an HTMLCollection, we don't try to transform to array because some compilers like cra doesn't translate it right.\n for (let i = 0; i < canvases.length; i += 1) {\n const canvas = canvases[i];\n if (!canvas.width || !canvas.height) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const clip = this.calculatePixelsToExport(mapToExport) || {\n x: 0,\n y: 0,\n w: canvas.width,\n h: canvas.height,\n };\n\n if (!destCanvas) {\n destCanvas = document.createElement('canvas');\n destCanvas.width = clip.w;\n destCanvas.height = clip.h;\n destContext = destCanvas.getContext('2d');\n }\n\n // Draw canvas to the canvas to export.\n destContext.drawImage(\n canvas,\n clip.x,\n clip.y,\n clip.w,\n clip.h,\n 0,\n 0,\n destCanvas.width,\n destCanvas.height,\n );\n }\n\n // Custom info\n let logoPromise = Promise.resolve();\n if (destContext && extraData && extraData.logo) {\n logoPromise = this.drawElement(extraData.logo, destCanvas);\n }\n\n logoPromise.then((customItemSize = [0, 0]) => {\n // North arrow\n let arrowPromise = Promise.resolve();\n if (destContext && extraData && extraData.northArrow) {\n arrowPromise = this.drawElement(\n {\n src: extraData.northArrow.circled\n ? NorthArrowCircle\n : NorthArrowSimple,\n ...extraData.northArrow,\n },\n destCanvas,\n customItemSize,\n );\n }\n\n // Copyright\n arrowPromise.then((arrowWidth) => {\n const widestElement = Math.max(customItemSize[0], arrowWidth);\n if (\n destContext &&\n extraData &&\n extraData.copyright &&\n extraData.copyright.text\n ) {\n const maxWidth = widestElement\n ? destContext.canvas.width - widestElement\n : destContext.canvas.width;\n this.drawCopyright(destContext, destCanvas, maxWidth);\n }\n resolve(destCanvas);\n });\n });\n });\n mapToExport.renderSync();\n });\n }\n\n downloadCanvasImage(canvas) {\n // Use blob for large images\n const promise = new Promise((resolve) => {\n const { format } = this.props;\n if (/msie (9|10)/gi.test(window.navigator.userAgent.toLowerCase())) {\n // ie 9 and 10\n const url = canvas.toDataURL(format);\n const w = window.open('about:blank', '');\n w.document.write(`<img src=\"${url}\" alt=\"from canvas\"/>`);\n resolve(url);\n }\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n let image;\n try {\n image = canvas.msToBlob();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n }\n const blob = new Blob([image], {\n type: format,\n });\n resolve(blob);\n window.navigator.msSaveBlob(blob, this.getDownloadImageName());\n } else {\n canvas.toBlob((blob) => {\n const link = document.createElement('a');\n link.download = this.getDownloadImageName();\n link.href = URL.createObjectURL(blob);\n // append child to document for firefox to be able to download.\n document.body.appendChild(link);\n link.click();\n resolve(blob);\n }, format);\n }\n });\n return promise;\n }\n\n render() {\n const { children, ...other } = this.props;\n\n delete other.onSaveStart;\n delete other.onSaveEnd;\n delete other.extraData;\n delete other.extent;\n delete other.format;\n delete other.map;\n delete other.coordinates;\n delete other.autoDownload;\n delete other.scale;\n\n return (\n <div\n role=\"button\"\n className=\"rs-canvas-save-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={(e) => {\n return this.onClick(e);\n }}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick(e);\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nCanvasSaveButton.propTypes = propTypes;\nCanvasSaveButton.defaultProps = defaultProps;\n\nexport default CanvasSaveButton;\n"],"names":["const","super","this","let"],"mappings":"AAAA;;AACA,OAAO,KAAK,IAAI,aAAa,QAAQ,OAAO,CAAC;AAC7C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,MAAM,QAAQ,CAAC;AAC3B,SAAS,UAAU,EAAE,cAAc,QAAQ,WAAW,CAAC;AACvD,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,uCAAuC,CAAC;AACrE;AACAA,GAAK,CAAC,SAAS,GAAG;AAClB;AACA;AACA;AACA,EAAE,YAAY,EAAE,SAAS,CAAC,IAAI;AAC9B;AACA;AACA;AACA;AACA,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI;AAC1B;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACtD;AACA;AACA,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;AAClC;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM;AACzB;AACA;AACA;AACA;AACA,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM;AAC7B,CAAC,CAAC;AACF;AACAA,GAAK,CAAC,YAAY,GAAG;AACrB,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,MAAM,EAAE,WAAW;AACrB,EAAE,MAAM,EAAE,IAAI;AACd,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,WAAW,EAAE,IAAI;AACnB,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,WAAW,WAAE,CAAC,GAAG,EAAK;AACxB,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,GAAG;AACH,EAAE,SAAS,WAAE,GAAM,EAAE;AACrB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,gBAAgB,GAAsB;EAC1C,yBAAW,CAAC,KAAK,EAAE;AACrB,IAAIC,kBAAK,OAAC,KAAK,CAAC,CAAC;AACjB,WAAoB,GAAG,IAAI,CAAC;IAAhB,wBAAsB;AAClC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,KAAK,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;AAC3D,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACrB;;;;4DAAG;AACH;AACA,6BAAE,2BAAO,CAAC,GAAG,EAAE;;AAAC;AAChB,WAAuD,GAAG,IAAI,CAAC;IAAnD;IAAK;IAAa;IAAW,oCAA4B;AACrE,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;AACrC;AACA,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;AAC3B,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;AAC5B,KAAK;AACL,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,UAAC,CAAC,WAAW,EAAK;AAC3C,MAAM,OAAOC,MAAI,CAAC,iBAAiB,CAAC,WAAW,IAAI,GAAG,CAAC;AACvD,SAAS,IAAI,UAAC,CAAC,MAAM,EAAK;AAC1B,UAAU,IAAI,YAAY,EAAE;AAC5B,YAAYA,MAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,UAAC,CAAC,IAAI,EAAK;AAC5D,cAAc,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACnD,aAAa,CAAC,CAAC;AACf,WAAW,MAAM;AACjB,YAAY,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3C,WAAW;AACX,SAAS,CAAC;AACV,SAAS,KAAK,UAAC,CAAC,GAAG,EAAK;AACxB,UAAU,IAAI,GAAG,EAAE;AACnB;AACA,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B,WAAW;AACX,UAAU,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACtC,SAAS,CAAC,CAAC;AACX,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,6BAAE,qDAAoB,GAAG;AACzB,IAAI,OAAO;AACX,MAAM,MAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,GAAI;AACjE,MAAM,OAAI,IAAI,CAAC,QAAS;AACxB,KAAK,CAAC;AACN,IAAG;AACH;AACA;AACA,6BAAE,6CAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;AAC5D,IAAIF,GAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AAC1B,IAAIG,GAAG,CAAC,SAAS,CAAC;AAClB,IAAIA,GAAG,CAAC,QAAQ,CAAC;AACjB,IAAI,GAAG;AACP,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE;AACA;AACA,MAAM,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC1E;AACA,MAAM,IAAI,QAAQ,GAAG,CAAC,KAAK,WAAW,EAAE;AACxC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACvC,OAAO;AACP,KAAK;AACL,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW;AAChC,MAAM,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,QAAQ;AACjE,MAAM;AACN,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B,IAAG;AACH;AACA;AACA,6BAAE,iDAAkB;AACpB,IAAI,WAAW;AACf,IAAI,WAAW;AACf,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,OAAO;AACX,IAAI,YAAkB;AACtB,IAAI;+CADY,GAAG;AACd;AACL;AACA,IAAY;IAAO;IAAQ,kEAAwC;AACnE,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;AACvB;AACA,IAAI,WAAW,CAAC,SAAS,GAAG,sBAAsB,CAAC;AACnD;AACA;AACA,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;AAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,UAAC,IAAa,EAAK,CAAhB;yBAAK;;AAAY;AAC9D,QAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjC,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,WAAW,CAAC,QAAQ;AACxB,MAAM,KAAK,GAAG,OAAO;AACrB,MAAM,KAAK,GAAG,uBAAuB,GAAG,OAAO;AAC/C,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC;AACzB,MAAM,MAAM,GAAG,OAAO,GAAG,CAAE;AAC3B,KAAK,CAAC;AACN,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;AAC1B,IAAG;AACH;AACA,6BAAE,uCAAa,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE;AACnD,WAA8B,GAAG,IAAI,CAAC;IAA1B;IAAW,sBAAqB;AAC5C,aAA+C,GAAG,SAAS,CAAC;IAAhD;IAAM;IAAM;IAAW,kCAAmC;AACtE,IAAIH,GAAK,CAAC,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AACjE;AACA,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;AACvB,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpC,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;AAC5C,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB;AAC5C,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,KAAM;AACZ,KAAK,CAAC;AACN;AACA,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpC,IAAI,WAAW,CAAC,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC;AACjD;AACA;AACA,IAAIG,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,IAAIH,GAAK,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACnD;AACA;AACA,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjC,MAAM,KAAKG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9C,QAAQ,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE;AACA,QAAQ,IAAI,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,QAAQ,EAAE;AACzE,UAAU,MAAM;AAChB,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAIH,GAAK,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACxD;AACA;AACA,IAAIA,GAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,IAAIG,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACzD,IAAI,WAAW,CAAC,MAAM;AACtB,MAAM,WAAW,CAAC,uBAAuB;AACzC,MAAM,WAAW,CAAC,wBAAwB,CAAC;AAC3C,IAAIA,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9D,IAAIH,GAAK,CAAC,WAAW,GAAG,UAAU,CAAC;AACnC,IAAIA,GAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAClC,IAAIA,GAAK,CAAC,iBAAiB,GAAG,mBAAmB,GAAG,CAAC,CAAC;AACtD;AACA,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,GAAG,mBAAmB,CAAC;AAC7D,KAAK;AACL,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,IAAI,CAAC,kBAAkB;AAC7B,QAAQ,WAAW;AACnB,QAAQ,WAAW;AACnB,QAAQ,KAAK;AACb,QAAQ,UAAU;AAClB,QAAQ,iBAAiB;AACzB,QAAQ,UAAW;AACnB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AACvD;AACA;AACA,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACxD,MAAM,WAAW,CAAC,MAAM;AACxB,QAAQ,WAAW,CAAC,uBAAuB;AAC3C,QAAQ,WAAW,CAAC,wBAAwB,CAAC;AAC7C,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,IAAI,CAAC,kBAAkB;AAC/B,UAAU,WAAW;AACrB,UAAU,WAAW;AACrB,UAAU,KAAK;AACf,UAAU,WAAW;AACrB,UAAU,iBAAiB;AAC3B,UAAU,UAAW;AACrB,SAAS,CAAC;AACV,OAAO;AACP,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;AAC1B,IAAG;AACH;AACA,6BAAE,mCAAW,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAyB,EAAE;;uDAAX,GAAG,CAAC,CAAC,EAAE,CAAC;AAAI;AAC5D,IAAIA,GAAK,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACpD,WAAmB,GAAG,IAAI,CAAC;IAAf,sBAAqB;AACjC,IAAY;IAAK;IAAO;IAAQ,6BAAkB;AAClD;AACA,IAAI,OAAO,IAAI,OAAO,UAAC,CAAC,OAAO,EAAK;AACpC,MAAMA,GAAK,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAC9B,MAAM,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;AACpC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACpB,MAAM,GAAG,CAAC,MAAM,YAAG,GAAM;AACzB,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAQA,GAAK,CAAC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;AACnD,QAAQA,GAAK,CAAC,aAAa,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;AACrD,QAAQ,WAAW,CAAC,SAAS;AAC7B,UAAU,UAAU,CAAC,KAAK,GAAG,CAAC,GAAGE,MAAI,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC;AAChE,UAAU,UAAU,CAAC,MAAM;AAC3B,YAAY,CAAC,GAAGA,MAAI,CAAC,OAAO;AAC5B,YAAY,aAAa,GAAG,CAAC;AAC7B,YAAY,gBAAgB,CAAC,CAAC,CAAE;AAChC,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,QAAQ,EAAE;AACtB,UAAUF,GAAK,CAAC,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC/E,UAAU,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACtD,SAAS;AACT;AACA,QAAQ,WAAW,CAAC,SAAS;AAC7B,UAAU,GAAG;AACb,UAAU,CAAC,YAAY,GAAG,CAAC;AAC3B,UAAU,CAAC,aAAa,GAAG,CAAC;AAC5B,UAAU,YAAY;AACtB,UAAU,aAAc;AACxB,SAAS,CAAC;AACV,QAAQ,WAAW,CAAC,OAAO,EAAE,CAAC;AAC9B;AACA;AACA;AACA,QAAQ,OAAO,CAAC;AAChB,UAAU,YAAY,GAAG,CAAC,GAAGE,MAAI,CAAC,OAAO;AACzC,UAAU,aAAa,GAAG,CAAC,GAAGA,MAAI,CAAC,OAAO,CAClC,CAAC,CAAC,CAAC;AACX,OAAO,CAAC;AACR;AACA,MAAM,GAAG,CAAC,OAAO,YAAG,GAAM;AAC1B,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,6BAAE,2DAAuB,CAAC,WAAW,EAAE;;AAAC;AACxC,WAAiC,GAAG,IAAI,CAAC;IAA7B;IAAQ,kCAA2B;AAC/C,IAAIC,GAAG,CAAC,eAAe,CAAC;AACxB,IAAIA,GAAG,CAAC,kBAAkB,CAAC;AAC3B;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAClD,KAAK,MAAM,IAAI,WAAW,EAAE;AAC5B;AACA;AACA;AACA,aAA6C,GAAG,aAAzC,6BAAmB,+BAAiC,CAAC;AAC5D,KAAK;AACL;AACA,IAAI,IAAI,eAAe,IAAI,kBAAkB,EAAE;AAC/C,MAAMH,GAAK,CAAC,UAAU,GAAG,WAAW,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;AAC7E,MAAMA,GAAK,CAAC,aAAa;AACzB,QAAQ,WAAW,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;AAC/D,MAAMA,GAAK,CAAC,YAAY,GAAG;AAC3B,QAAQ,UAAU,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5E,QAAQ,UAAU,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CACtE,CAAC,CAAC;AACR,MAAMA,GAAK,CAAC,gBAAgB,GAAG;AAC/B,QAAQ,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AAC3E,QAAQ,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CACrE,CAAC,CAAC;AACR;AACA,MAAM,OAAO;AACb,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAChD,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAChD,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,IAAG;AACH;AACA,6BAAE,+CAAiB,CAAC,WAAW,EAAE;;AAAC;AAClC,WAAuB,GAAG,IAAI,CAAC;IAAnB,8BAAyB;AACrC;AACA,IAAI,OAAO,IAAI,OAAO,UAAC,CAAC,OAAO,EAAK;AACpC,MAAM,WAAW,CAAC,IAAI,CAAC,gBAAgB,WAAE,GAAM;AAC/C;AACA,QAAQA,GAAK,CAAC,QAAQ,GAAG,WAAW;AACpC,WAAW,gBAAgB,EAAE;AAC7B,WAAW,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC1C;AACA;AACA,QAAQG,GAAG,CAAC,UAAU,CAAC;AACvB,QAAQA,GAAG,CAAC,WAAW,CAAC;AACxB;AACA;AACA,QAAQ,KAAKA,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACrD,UAAUH,GAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/C;AACA,YAAY,SAAS;AACrB,WAAW;AACX,UAAUA,GAAK,CAAC,IAAI,GAAGE,MAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI;AACpE,YAAY,CAAC,EAAE,CAAC;AAChB,YAAY,CAAC,EAAE,CAAC;AAChB,YAAY,CAAC,EAAE,MAAM,CAAC,KAAK;AAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM;AAC5B,WAAW,CAAC;AACZ;AACA,UAAU,IAAI,CAAC,UAAU,EAAE;AAC3B,YAAY,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1D,YAAY,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACtC,YAAY,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACvC,YAAY,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtD,WAAW;AACX;AACA;AACA,UAAU,WAAW,CAAC,SAAS;AAC/B,YAAY,MAAM;AAClB,YAAY,IAAI,CAAC,CAAC;AAClB,YAAY,IAAI,CAAC,CAAC;AAClB,YAAY,IAAI,CAAC,CAAC;AAClB,YAAY,IAAI,CAAC,CAAC;AAClB,YAAY,CAAC;AACb,YAAY,CAAC;AACb,YAAY,UAAU,CAAC,KAAK;AAC5B,YAAY,UAAU,CAAC,MAAO;AAC9B,WAAW,CAAC;AACZ,SAAS;AACT;AACA;AACA,QAAQC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5C,QAAQ,IAAI,WAAW,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE;AACxD,UAAU,WAAW,GAAGD,MAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACrE,SAAS;AACT;AACA,QAAQ,WAAW,CAAC,IAAI,UAAC,CAAC,cAAuB,EAAK;yDAAd,GAAG,CAAC,CAAC,EAAE,CAAC;AAAO;AACvD;AACA,UAAUC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAC/C,UAAU,IAAI,WAAW,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;AAChE,YAAY,YAAY,GAAGD,MAAI,CAAC,WAAW;AAC3C,cAAc,mBACE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,OAAO;AACjD,oBAAoB,gBAAgB;AACpC,oBAAoB,iBAAgB;AACpC,gBAAmB,SAAS,CAAC,UAAU,CACxB;AACf,cAAc,UAAU;AACxB,cAAc,cAAe;AAC7B,aAAa,CAAC;AACd,WAAW;AACX;AACA;AACA,UAAU,YAAY,CAAC,IAAI,UAAC,CAAC,UAAU,EAAK;AAC5C,YAAYF,GAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1E,YAAY;AACZ,cAAc,WAAW;AACzB,cAAc,SAAS;AACvB,cAAc,SAAS,CAAC,SAAS;AACjC,cAAc,SAAS,CAAC,SAAS,CAAC,IAAI;AACtC,cAAc;AACd,cAAcA,GAAK,CAAC,QAAQ,GAAG,aAAa;AAC5C,kBAAkB,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa;AAC1D,kBAAkB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3C,cAAcE,MAAI,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpE,aAAa;AACb,YAAY,OAAO,CAAC,UAAU,CAAC,CAAC;AAChC,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,CAAC;AACX,OAAO,CAAC,CAAC;AACT,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,6BAAE,mDAAmB,CAAC,MAAM,EAAE;;AAAC;AAC/B;AACA,IAAIF,GAAK,CAAC,OAAO,GAAG,IAAI,OAAO,UAAC,CAAC,OAAO,EAAK;AAC7C,aAAsB,GAAGE,MAAI,CAAC;MAAhB,wBAAsB;AACpC,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE;AAC1E;AACA,QAAQF,GAAK,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7C,QAAQA,GAAK,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACjD,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAa,GAAG,8BAAuB,CAAC,CAAC;AAClE,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC;AACrB,OAAO;AACP,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;AACvC;AACA,QAAQG,GAAG,CAAC,KAAK,CAAC;AAClB,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpC,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB;AACA,UAAU,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,SAAS;AACT,QAAQH,GAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;AACvC,UAAU,IAAI,EAAE,MAAM;AACtB,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,QAAQ,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAEE,MAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACvE,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,MAAM,UAAC,CAAC,IAAI,EAAK;AAChC,UAAUF,GAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACnD,UAAU,IAAI,CAAC,QAAQ,GAAGE,MAAI,CAAC,oBAAoB,EAAE,CAAC;AACtD,UAAU,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAChD;AACA,UAAU,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1C,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;AACvB,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,SAAS,EAAE,MAAM,CAAC,CAAC;AACnB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC;AACnB,IAAG;AACH;AACA,6BAAE,yBAAM,GAAG;;AAAC;AACZ,WAAgC,GAAG,IAAI,CAAC;IAA5B;IAAU;IAAG,iBAAqB;AAC9C;AACA,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC;AAC3B,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC;AAC3B,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC;AACrB,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,IAAI,OAAO,KAAK,CAAC,YAAY,CAAC;AAC9B,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC;AACvB;AACA,IAAI,OAAO;AACX,MAAM,sBAAC,uBAAG;AACV,UAAQ,MAAK,QAAQ,EACb,WAAU,uBAAuB,EACjC,UAAU,GAAE,EAER,KAAM,IACV,kBAAS,CAAC,CAAC,EAAK;AACxB,UAAU,OAAOA,MAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,SAAU,EACF,qBAAY,CAAC,CAAC,EAAK;AAC3B,UAAU,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,IAAIA,MAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnD,aACO;AACP,QAAS,QAAS;AAClB,MAAM,CAAM;AACZ,KAAK,CAAC;AACN;;;EA7a+B,gBA8a9B;AACD;AACA,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;AACvC,gBAAgB,CAAC,YAAY,GAAG,YAAY,CAAC;AAC7C;AACA,eAAe,gBAAgB,CAAC;"}
@@ -116,7 +116,6 @@ describe('CanvasSaveButton', function () {
116
116
  });
117
117
  var spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');
118
118
  var spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');
119
- var spy4 = jest.spyOn(CanvasSaveButton.prototype, 'splitCopyrightLine');
120
119
  jest
121
120
  .spyOn(olMap.getTargetElement(), 'getElementsByTagName')
122
121
  .mockReturnValue([canvas]);
@@ -135,11 +134,9 @@ describe('CanvasSaveButton', function () {
135
134
  expect(link.href).toBe('http://localhost/fooblob');
136
135
  expect(link.download).toBe('.jpg');
137
136
  expect(link.click).toHaveBeenCalledTimes(1);
138
- expect(spy4).toHaveBeenCalledTimes(1);
139
137
  spy.mockRestore();
140
138
  spy2.mockRestore();
141
139
  spy3.mockRestore();
142
- spy4.mockRestore();
143
140
  done();
144
141
  });
145
142
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasSaveButton.test.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport { TiImage } from 'react-icons/ti';\nimport RenderEvent from 'ol/render/Event';\nimport CanvasSaveButton from './CanvasSaveButton';\n\nconfigure({ adapter: new Adapter() });\n\ndescribe('CanvasSaveButton', () => {\n let olMap;\n const conf = {\n title: 'Karte als Bild speichern.',\n icon: <TiImage focusable={false} />,\n className: 'ta-example',\n saveFormat: 'image/jpeg',\n };\n\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n target.style.width = '100px';\n target.style.height = '100px';\n olMap = new Map({\n target,\n controls: [],\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n });\n olMap.getView().setCenter([1, 1]);\n });\n\n afterEach(() => {\n if (olMap.getTargetElement()) {\n document.body.removeChild(olMap.getTargetElement());\n }\n olMap.setTarget(null);\n });\n\n test('should match snapshot.', () => {\n const component = renderer.create(\n <CanvasSaveButton format={conf.saveFormat} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should match snapshot with a different attributes', () => {\n const component = renderer.create(\n // eslint-disable-next-line jsx-a11y/tabindex-no-positive\n <CanvasSaveButton title={conf.title} className=\"foo\" tabIndex=\"1\">\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should call onSaveBefore then download then onSaveEnd function on click.', async (done) => {\n const saveStart = jest.fn((m) => {\n return Promise.resolve(m);\n });\n const saveEnd = jest.fn();\n const wrapper = shallow(\n <CanvasSaveButton\n className=\"ta-example\"\n map={olMap}\n format={conf.saveFormat}\n onSaveStart={saveStart}\n onSaveEnd={saveEnd}\n extraData={{\n copyright: {\n text: () => {\n return (\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)'\n );\n },\n },\n }}\n >\n {conf.icon}\n </CanvasSaveButton>,\n );\n const link = document.createElement('a');\n link.click = jest.fn();\n const div = document.createElement('div');\n const canvas = document.createElement('canvas');\n canvas.toBlob = jest.fn((callback) => {\n return callback();\n });\n global.URL.createObjectURL = jest.fn(() => {\n return 'fooblob';\n });\n // We use a spy here to be able to correctly restore the initial function\n const spy3 = jest\n .spyOn(global.document, 'createElement')\n .mockImplementation((elt) => {\n if (elt === 'canvas') {\n return canvas;\n }\n if (elt === 'div') {\n return div;\n }\n if (elt === 'a') {\n return link;\n }\n return {};\n });\n const spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');\n const spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');\n const spy4 = jest.spyOn(CanvasSaveButton.prototype, 'splitCopyrightLine');\n jest\n .spyOn(olMap.getTargetElement(), 'getElementsByTagName')\n .mockReturnValue([canvas]);\n await wrapper.find('.ta-example').simulate('click');\n await olMap.dispatchEvent(\n new RenderEvent('rendercomplete', undefined, undefined, {\n canvas,\n }),\n );\n await window.setTimeout(() => {\n expect(spy).toHaveBeenCalledTimes(1);\n expect(saveStart).toHaveBeenCalledTimes(1);\n expect(saveEnd).toHaveBeenCalledTimes(1);\n expect(spy2.mock.calls[0][0]).toBe(canvas);\n expect(spy2.mock.calls[0][0].toBlob).toHaveBeenCalledTimes(1);\n expect(link.href).toBe('http://localhost/fooblob');\n expect(link.download).toBe('.jpg');\n expect(link.click).toHaveBeenCalledTimes(1);\n expect(spy4).toHaveBeenCalledTimes(1);\n spy.mockRestore();\n spy2.mockRestore();\n spy3.mockRestore();\n spy4.mockRestore();\n done();\n });\n });\n\n test('stops click event propagation on ie.', () => {\n const wrapper = shallow(\n <CanvasSaveButton className=\"ta-example\" title={conf.title} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n\n const evt = {\n stopPropagation: jest.fn(),\n preventDefault: jest.fn(),\n };\n window.navigator.msSaveBlob = true;\n\n const canvas = document.createElement('canvas');\n const p = new Promise((resolve) => {\n resolve(canvas);\n });\n jest\n .spyOn(CanvasSaveButton.prototype, 'createCanvasImage')\n .mockReturnValue(p);\n\n wrapper.find('.ta-example').simulate('click', evt);\n expect(evt.stopPropagation).toHaveBeenCalledTimes(1);\n expect(evt.preventDefault).toHaveBeenCalledTimes(1);\n\n window.navigator.msSaveBlob = false;\n });\n});\n"],"names":["let","const"],"mappings":"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"}
1
+ {"version":3,"file":"CanvasSaveButton.test.js","sources":["../../../src/components/CanvasSaveButton/CanvasSaveButton.test.js"],"sourcesContent":["import 'jest-canvas-mock';\nimport React from 'react';\nimport renderer from 'react-test-renderer';\nimport { configure, shallow } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport Map from 'ol/Map';\nimport View from 'ol/View';\nimport { TiImage } from 'react-icons/ti';\nimport RenderEvent from 'ol/render/Event';\nimport CanvasSaveButton from './CanvasSaveButton';\n\nconfigure({ adapter: new Adapter() });\n\ndescribe('CanvasSaveButton', () => {\n let olMap;\n const conf = {\n title: 'Karte als Bild speichern.',\n icon: <TiImage focusable={false} />,\n className: 'ta-example',\n saveFormat: 'image/jpeg',\n };\n\n beforeEach(() => {\n const target = document.createElement('div');\n document.body.appendChild(target);\n target.style.width = '100px';\n target.style.height = '100px';\n olMap = new Map({\n target,\n controls: [],\n view: new View({\n center: [0, 0],\n zoom: 0,\n }),\n });\n olMap.getView().setCenter([1, 1]);\n });\n\n afterEach(() => {\n if (olMap.getTargetElement()) {\n document.body.removeChild(olMap.getTargetElement());\n }\n olMap.setTarget(null);\n });\n\n test('should match snapshot.', () => {\n const component = renderer.create(\n <CanvasSaveButton format={conf.saveFormat} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should match snapshot with a different attributes', () => {\n const component = renderer.create(\n // eslint-disable-next-line jsx-a11y/tabindex-no-positive\n <CanvasSaveButton title={conf.title} className=\"foo\" tabIndex=\"1\">\n {conf.icon}\n </CanvasSaveButton>,\n );\n const tree = component.toJSON();\n expect(tree).toMatchSnapshot();\n });\n\n test('should call onSaveBefore then download then onSaveEnd function on click.', async (done) => {\n const saveStart = jest.fn((m) => {\n return Promise.resolve(m);\n });\n const saveEnd = jest.fn();\n const wrapper = shallow(\n <CanvasSaveButton\n className=\"ta-example\"\n map={olMap}\n format={conf.saveFormat}\n onSaveStart={saveStart}\n onSaveEnd={saveEnd}\n extraData={{\n copyright: {\n text: () => {\n return (\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)' +\n 'contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)'\n );\n },\n },\n }}\n >\n {conf.icon}\n </CanvasSaveButton>,\n );\n const link = document.createElement('a');\n link.click = jest.fn();\n const div = document.createElement('div');\n const canvas = document.createElement('canvas');\n canvas.toBlob = jest.fn((callback) => {\n return callback();\n });\n global.URL.createObjectURL = jest.fn(() => {\n return 'fooblob';\n });\n // We use a spy here to be able to correctly restore the initial function\n const spy3 = jest\n .spyOn(global.document, 'createElement')\n .mockImplementation((elt) => {\n if (elt === 'canvas') {\n return canvas;\n }\n if (elt === 'div') {\n return div;\n }\n if (elt === 'a') {\n return link;\n }\n return {};\n });\n const spy = jest.spyOn(CanvasSaveButton.prototype, 'createCanvasImage');\n const spy2 = jest.spyOn(CanvasSaveButton.prototype, 'downloadCanvasImage');\n jest\n .spyOn(olMap.getTargetElement(), 'getElementsByTagName')\n .mockReturnValue([canvas]);\n await wrapper.find('.ta-example').simulate('click');\n await olMap.dispatchEvent(\n new RenderEvent('rendercomplete', undefined, undefined, {\n canvas,\n }),\n );\n await window.setTimeout(() => {\n expect(spy).toHaveBeenCalledTimes(1);\n expect(saveStart).toHaveBeenCalledTimes(1);\n expect(saveEnd).toHaveBeenCalledTimes(1);\n expect(spy2.mock.calls[0][0]).toBe(canvas);\n expect(spy2.mock.calls[0][0].toBlob).toHaveBeenCalledTimes(1);\n expect(link.href).toBe('http://localhost/fooblob');\n expect(link.download).toBe('.jpg');\n expect(link.click).toHaveBeenCalledTimes(1);\n spy.mockRestore();\n spy2.mockRestore();\n spy3.mockRestore();\n done();\n });\n });\n\n test('stops click event propagation on ie.', () => {\n const wrapper = shallow(\n <CanvasSaveButton className=\"ta-example\" title={conf.title} map={olMap}>\n {conf.icon}\n </CanvasSaveButton>,\n );\n\n const evt = {\n stopPropagation: jest.fn(),\n preventDefault: jest.fn(),\n };\n window.navigator.msSaveBlob = true;\n\n const canvas = document.createElement('canvas');\n const p = new Promise((resolve) => {\n resolve(canvas);\n });\n jest\n .spyOn(CanvasSaveButton.prototype, 'createCanvasImage')\n .mockReturnValue(p);\n\n wrapper.find('.ta-example').simulate('click', evt);\n expect(evt.stopPropagation).toHaveBeenCalledTimes(1);\n expect(evt.preventDefault).toHaveBeenCalledTimes(1);\n\n window.navigator.msSaveBlob = false;\n });\n});\n"],"names":["let","const"],"mappings":"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"}
@@ -183,7 +183,7 @@ var LayerTree = /*@__PURE__*/(function (Component) {
183
183
  LayerTree.prototype.componentWillUnmount = function componentWillUnmount () {
184
184
  var ref = this.props;
185
185
  var layerService = ref.layerService;
186
- layerService.un('change:visible', this.updateLayers);
186
+ layerService.un('change', this.updateLayers);
187
187
  };
188
188
 
189
189
  LayerTree.prototype.onInputClick = function onInputClick (layer, toggle) {
@@ -235,9 +235,9 @@ var LayerTree = /*@__PURE__*/(function (Component) {
235
235
  var ref = this.props;
236
236
  var layerService = ref.layerService;
237
237
  if (layerService) {
238
- layerService.un('change:visible', this.updateLayers);
238
+ layerService.un('change', this.updateLayers);
239
239
  this.updateLayers();
240
- layerService.on('change:visible', this.updateLayers);
240
+ layerService.on('change', this.updateLayers);
241
241
  }
242
242
  };
243
243
 
@@ -1 +1 @@
1
- {"version":3,"file":"LayerTree.js","sources":["../../../src/components/LayerTree/LayerTree.js"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n /**\n * Layers provider.\n */\n layerService: PropTypes.object,\n\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\n\n /**\n * Determine if the item is hidden in the tree or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the tree\n */\n isItemHidden: PropTypes.func,\n\n /**\n * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\n\n /**\n * Custom function to render an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItem: PropTypes.func,\n\n /**\n * Custom function to render only the content of an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItemContent: PropTypes.func,\n\n /**\n * Custom function to render custom content before the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderBeforeItem: PropTypes.func,\n\n /**\n * Custom function to render custom content after the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderAfterItem: PropTypes.func,\n\n /**\n * Object holding title for the layer tree's buttons.\n */\n titles: PropTypes.shape({\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * aria-label on checkbox to hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n }),\n\n /**\n * Boolean determining whether children collapse/expand when their parent is toggled\n * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.\n * @return {boolean} True or false\n */\n expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: PropTypes.func,\n};\n\nconst defaultProps = {\n layerService: undefined,\n className: 'rs-layer-tree',\n padding: 30,\n isItemHidden: () => {\n return false;\n },\n getParentClassName: () => {\n return undefined;\n },\n renderItem: null,\n renderItemContent: null,\n renderBeforeItem: null,\n renderAfterItem: null,\n titles: {\n layerShow: 'Show layer',\n layerHide: 'Hide layer',\n subLayerShow: 'Show sublayer',\n subLayerHide: 'Hide sublayer',\n },\n t: (s) => {\n return s;\n },\n expandChildren: false,\n};\n\n/**\n * The LayerTree component renders an interface for toggling\n * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n constructor(props) {\n super(props);\n const { layerService, isItemHidden } = this.props;\n const initialExpandedLayers =\n layerService && layerService.getLayers()\n ? this.getExpandedLayers(\n layerService.getLayers().filter((l) => {\n return (\n !isItemHidden(l) &&\n l.getVisibleChildren().filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n layers: layerService ? layerService.getLayers() : [],\n expandedLayers: initialExpandedLayers,\n };\n this.updateLayers = this.updateLayers.bind(this);\n this.olKeys = [];\n }\n\n componentDidMount() {\n this.updateLayerService();\n }\n\n componentDidUpdate(prevProps) {\n const { layerService } = this.props;\n\n if (layerService !== prevProps.layerService) {\n this.updateLayerService();\n }\n }\n\n componentWillUnmount() {\n const { layerService } = this.props;\n layerService.un('change:visible', this.updateLayers);\n }\n\n onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else {\n layer.setVisible(!layer.visible);\n }\n }\n\n onToggle(layer) {\n const { expandedLayers } = this.state;\n const pos = expandedLayers.indexOf(layer);\n if (pos > -1) {\n expandedLayers.splice(pos, 1);\n } else {\n expandedLayers.push(...this.getExpandedLayers([layer]));\n }\n\n this.setState({ expandedLayers });\n }\n\n /**\n * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers\n * together with the (given) initially expanded layers\n *\n * @param {Layer} layers Initially expanded layers\n * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors\n */\n getExpandedLayers(layers) {\n const { isItemHidden } = this.props;\n const children = layers.flatMap((l) => {\n return l.children.filter((c) => {\n return !isItemHidden(c) && c.get('isAlwaysExpanded');\n });\n });\n\n if (!children.length) {\n return layers;\n }\n return [...layers, this.getExpandedLayers(children)].flat();\n }\n\n updateLayerService() {\n const { layerService } = this.props;\n if (layerService) {\n layerService.un('change:visible', this.updateLayers);\n this.updateLayers();\n layerService.on('change:visible', this.updateLayers);\n }\n }\n\n updateLayers() {\n const { layerService, expandChildren } = this.props;\n const layers = layerService.getLayers();\n if (\n typeof expandChildren === 'function'\n ? expandChildren(layers)\n : expandChildren\n ) {\n this.setState({\n expandedLayers: layers.flatMap((l) => {\n return this.expandLayer(l);\n }),\n });\n }\n this.setState({\n layers,\n });\n }\n\n expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (layer.visible && !isItemHidden(layer)) {\n const children = layer.children\n .filter((c) => {\n return !isItemHidden(c) && !c.get('isAlwaysExpanded');\n })\n .flatMap((c) => {\n return this.expandLayer(c, expLayers);\n });\n return [...expLayers, ...children, layer];\n }\n return expLayers;\n }\n\n renderInput(layer) {\n const { titles, isItemHidden } = this.props;\n let tabIndex = 0;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length\n ) {\n // We forbid focus on keypress event for first level layers and layers without children.\n tabIndex = -1;\n }\n\n const inputType = layer.get('radioGroup') ? 'radio' : 'checkbox';\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n >\n <input\n type={inputType}\n tabIndex={-1}\n checked={layer.visible}\n readOnly\n onClick={() => {\n return this.onInputClick(layer);\n }}\n />\n <span />\n </label>\n );\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length ||\n layer.get('isAlwaysExpanded')\n ) {\n return null;\n }\n\n return (\n <div\n className={`rs-layer-tree-arrow rs-layer-tree-arrow-${\n !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'\n }`}\n />\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n // or simulate a click on the input otherwise.\n renderToggleButton(layer) {\n const { t, titles, isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const onInputClick = () => {\n this.onInputClick(\n layer,\n layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get('isAlwaysExpanded'),\n );\n };\n const title = `${t(layer.name)} ${\n !expandedLayers.includes(layer)\n ? titles.subLayerShow\n : titles.subLayerHide\n }`;\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-layer-tree-toggle\"\n title={title}\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n onClick={onInputClick}\n onKeyPress={onInputClick}\n >\n <div>{t(layer.name)}</div>\n {this.renderArrow(layer)}\n </div>\n );\n }\n\n renderItemContent(layer) {\n return (\n <>\n {this.renderInput(layer)}\n {this.renderToggleButton(layer)}\n </>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const {\n renderItem,\n renderItemContent,\n renderBeforeItem,\n renderAfterItem,\n padding,\n getParentClassName,\n } = this.props;\n const { expandedLayers } = this.state;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...layer.children.filter((c) => {\n return !isItemHidden(c);\n }),\n ]\n : [];\n\n if (renderItem) {\n return renderItem(layer, this.onInputClick, this.onToggle);\n }\n\n return (\n <div className={getParentClassName()} key={layer.key}>\n <div\n className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}\n style={{\n paddingLeft: `${padding * level}px`,\n }}\n >\n {renderItemContent\n ? renderItemContent(layer, this)\n : this.renderItemContent(layer)}\n </div>\n {renderBeforeItem && renderBeforeItem(layer, level, this)}\n {[...children].reverse().map((child) => {\n return this.renderItem(child, level + 1);\n })}\n {renderAfterItem && renderAfterItem(layer, level, this)}\n </div>\n );\n }\n\n renderTree() {\n const { isItemHidden } = this.props;\n const { layers } = this.state;\n\n if (!layers) {\n return null;\n }\n\n return (\n <>\n {layers\n .filter((l) => {\n return !isItemHidden(l);\n })\n .reverse()\n .map((l) => {\n return this.renderItem(l, 0);\n })}\n </>\n );\n }\n\n render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],"names":["const","super","this","let"],"mappings":"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"}
1
+ {"version":3,"file":"LayerTree.js","sources":["../../../src/components/LayerTree/LayerTree.js"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n /**\n * Layers provider.\n */\n layerService: PropTypes.object,\n\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\n\n /**\n * Determine if the item is hidden in the tree or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the tree\n */\n isItemHidden: PropTypes.func,\n\n /**\n * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\n\n /**\n * Custom function to render an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItem: PropTypes.func,\n\n /**\n * Custom function to render only the content of an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItemContent: PropTypes.func,\n\n /**\n * Custom function to render custom content before the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderBeforeItem: PropTypes.func,\n\n /**\n * Custom function to render custom content after the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderAfterItem: PropTypes.func,\n\n /**\n * Object holding title for the layer tree's buttons.\n */\n titles: PropTypes.shape({\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * aria-label on checkbox to hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n }),\n\n /**\n * Boolean determining whether children collapse/expand when their parent is toggled\n * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.\n * @return {boolean} True or false\n */\n expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: PropTypes.func,\n};\n\nconst defaultProps = {\n layerService: undefined,\n className: 'rs-layer-tree',\n padding: 30,\n isItemHidden: () => {\n return false;\n },\n getParentClassName: () => {\n return undefined;\n },\n renderItem: null,\n renderItemContent: null,\n renderBeforeItem: null,\n renderAfterItem: null,\n titles: {\n layerShow: 'Show layer',\n layerHide: 'Hide layer',\n subLayerShow: 'Show sublayer',\n subLayerHide: 'Hide sublayer',\n },\n t: (s) => {\n return s;\n },\n expandChildren: false,\n};\n\n/**\n * The LayerTree component renders an interface for toggling\n * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n constructor(props) {\n super(props);\n const { layerService, isItemHidden } = this.props;\n const initialExpandedLayers =\n layerService && layerService.getLayers()\n ? this.getExpandedLayers(\n layerService.getLayers().filter((l) => {\n return (\n !isItemHidden(l) &&\n l.getVisibleChildren().filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n layers: layerService ? layerService.getLayers() : [],\n expandedLayers: initialExpandedLayers,\n };\n this.updateLayers = this.updateLayers.bind(this);\n this.olKeys = [];\n }\n\n componentDidMount() {\n this.updateLayerService();\n }\n\n componentDidUpdate(prevProps) {\n const { layerService } = this.props;\n\n if (layerService !== prevProps.layerService) {\n this.updateLayerService();\n }\n }\n\n componentWillUnmount() {\n const { layerService } = this.props;\n layerService.un('change', this.updateLayers);\n }\n\n onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else {\n layer.setVisible(!layer.visible);\n }\n }\n\n onToggle(layer) {\n const { expandedLayers } = this.state;\n const pos = expandedLayers.indexOf(layer);\n if (pos > -1) {\n expandedLayers.splice(pos, 1);\n } else {\n expandedLayers.push(...this.getExpandedLayers([layer]));\n }\n\n this.setState({ expandedLayers });\n }\n\n /**\n * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers\n * together with the (given) initially expanded layers\n *\n * @param {Layer} layers Initially expanded layers\n * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors\n */\n getExpandedLayers(layers) {\n const { isItemHidden } = this.props;\n const children = layers.flatMap((l) => {\n return l.children.filter((c) => {\n return !isItemHidden(c) && c.get('isAlwaysExpanded');\n });\n });\n\n if (!children.length) {\n return layers;\n }\n return [...layers, this.getExpandedLayers(children)].flat();\n }\n\n updateLayerService() {\n const { layerService } = this.props;\n if (layerService) {\n layerService.un('change', this.updateLayers);\n this.updateLayers();\n layerService.on('change', this.updateLayers);\n }\n }\n\n updateLayers() {\n const { layerService, expandChildren } = this.props;\n const layers = layerService.getLayers();\n if (\n typeof expandChildren === 'function'\n ? expandChildren(layers)\n : expandChildren\n ) {\n this.setState({\n expandedLayers: layers.flatMap((l) => {\n return this.expandLayer(l);\n }),\n });\n }\n this.setState({\n layers,\n });\n }\n\n expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (layer.visible && !isItemHidden(layer)) {\n const children = layer.children\n .filter((c) => {\n return !isItemHidden(c) && !c.get('isAlwaysExpanded');\n })\n .flatMap((c) => {\n return this.expandLayer(c, expLayers);\n });\n return [...expLayers, ...children, layer];\n }\n return expLayers;\n }\n\n renderInput(layer) {\n const { titles, isItemHidden } = this.props;\n let tabIndex = 0;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length\n ) {\n // We forbid focus on keypress event for first level layers and layers without children.\n tabIndex = -1;\n }\n\n const inputType = layer.get('radioGroup') ? 'radio' : 'checkbox';\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n >\n <input\n type={inputType}\n tabIndex={-1}\n checked={layer.visible}\n readOnly\n onClick={() => {\n return this.onInputClick(layer);\n }}\n />\n <span />\n </label>\n );\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length ||\n layer.get('isAlwaysExpanded')\n ) {\n return null;\n }\n\n return (\n <div\n className={`rs-layer-tree-arrow rs-layer-tree-arrow-${\n !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'\n }`}\n />\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n // or simulate a click on the input otherwise.\n renderToggleButton(layer) {\n const { t, titles, isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const onInputClick = () => {\n this.onInputClick(\n layer,\n layer.children.filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get('isAlwaysExpanded'),\n );\n };\n const title = `${t(layer.name)} ${\n !expandedLayers.includes(layer)\n ? titles.subLayerShow\n : titles.subLayerHide\n }`;\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-layer-tree-toggle\"\n title={title}\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n onClick={onInputClick}\n onKeyPress={onInputClick}\n >\n <div>{t(layer.name)}</div>\n {this.renderArrow(layer)}\n </div>\n );\n }\n\n renderItemContent(layer) {\n return (\n <>\n {this.renderInput(layer)}\n {this.renderToggleButton(layer)}\n </>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const {\n renderItem,\n renderItemContent,\n renderBeforeItem,\n renderAfterItem,\n padding,\n getParentClassName,\n } = this.props;\n const { expandedLayers } = this.state;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...layer.children.filter((c) => {\n return !isItemHidden(c);\n }),\n ]\n : [];\n\n if (renderItem) {\n return renderItem(layer, this.onInputClick, this.onToggle);\n }\n\n return (\n <div className={getParentClassName()} key={layer.key}>\n <div\n className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}\n style={{\n paddingLeft: `${padding * level}px`,\n }}\n >\n {renderItemContent\n ? renderItemContent(layer, this)\n : this.renderItemContent(layer)}\n </div>\n {renderBeforeItem && renderBeforeItem(layer, level, this)}\n {[...children].reverse().map((child) => {\n return this.renderItem(child, level + 1);\n })}\n {renderAfterItem && renderAfterItem(layer, level, this)}\n </div>\n );\n }\n\n renderTree() {\n const { isItemHidden } = this.props;\n const { layers } = this.state;\n\n if (!layers) {\n return null;\n }\n\n return (\n <>\n {layers\n .filter((l) => {\n return !isItemHidden(l);\n })\n .reverse()\n .map((l) => {\n return this.renderItem(l, 0);\n })}\n </>\n );\n }\n\n render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],"names":["const","super","this","let"],"mappings":"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"}
@@ -112,7 +112,7 @@ var defaultRenderStation = function (ref) {
112
112
  React.createElement( 'div', {
113
113
  // Train line can go in circle so begin and end have the same id,
114
114
  // using the time in the key should fix the issue.
115
- key: stationId + arrivalTime + departureTime, role: "button", className: [
115
+ key: (stationId || stationName) + arrivalTime + departureTime, role: "button", className: [
116
116
  'rt-route-station',
117
117
  isStationPassed ? ' rt-passed' : '',
118
118
  isNotStation ? ' rt-no-stop' : '' ].join(''), onClick: function (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"RouteSchedule.js","sources":["../../../src/components/RouteSchedule/RouteSchedule.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\nimport { getBgColor } from 'mobility-toolbox-js/common/trackerConfig';\nimport { getHoursAndMinutes, getDelayString } from '../../utils/timeUtils';\nimport ReactTransitPropTypes from '../../propTypes';\nimport firstStation from '../../images/RouteSchedule/firstStation.png';\nimport station from '../../images/RouteSchedule/station.png';\nimport lastStation from '../../images/RouteSchedule/lastStation.png';\nimport line from '../../images/RouteSchedule/line.png';\n\n/**\n * Returns a color class to display the delay.\n * @param {Number} time Delay time in milliseconds.\n */\nconst getDelayColor = (time) => {\n const secs = Math.round(((time / 1800 / 2) * 3600) / 1000);\n if (secs >= 3600) {\n return 'dark-red';\n }\n if (secs >= 500) {\n return 'middle-red';\n }\n if (secs >= 300) {\n return 'light-red';\n }\n if (secs >= 180) {\n return 'orange';\n }\n return 'green';\n};\n\n/**\n * Returns true if the train doesn't stop to the station.\n * @param {Object} stop Station information.\n */\nconst isNotStop = (stop) => {\n return !stop.arrivalTime && !stop.departureTime;\n};\n\n/**\n * Returns if the station has already been passed by the vehicule.\n * @param {Object} stop Station information.\n * @param {number} time The current time to test in ms.\n * @param {Array<Object>} stops the list of all stops of the train.\n * @param {idx} idx The index of the stop object in the stops array.\n */\nconst isPassed = (stop, time, stops, idx) => {\n // If the train doesn't stop to the stop object, we test if the stop just before has been passed or not.\n // if yes the current stop is considered as passed.\n if (isNotStop(stop)) {\n if (stops[idx - 1] && idx > 0) {\n return isPassed(stops[idx - 1], time, stops, idx);\n }\n return true;\n }\n\n // Sometimes stop.departureDelay is undefined.\n const timeToCompare = stop.departureTime || stop.arrivalTime || 0;\n const delayToCompare = stop.departureDelay || stop.arrivalDelay || 0;\n return timeToCompare + delayToCompare <= time;\n};\n\n/**\n * Returns an image for first, middle or last stations.\n * @param {Number} stations The stations list.\n * @param {Number} index Index of the station in the list.\n * @param {Boolean} isStationPassed If the train is already passed at this station.\n * @param {Boolean} isNotStation If the train doesn't stop to this station.\n */\nconst defaultRenderStationImg = (\n stations,\n index,\n isStationPassed,\n isNotStation,\n) => {\n const { length } = stations;\n let src = station;\n if (index === 0) {\n src = firstStation;\n } else if (index === length - 1) {\n src = lastStation;\n } else if (isNotStation) {\n src = line;\n }\n return <img src={src} alt=\"routeScheduleLine\" className=\"rt-route-icon\" />;\n};\n\nconst defaultRenderStation = ({\n lineInfos,\n onStationClick,\n trackerLayer,\n renderStationImg,\n stop,\n idx,\n}) => {\n const {\n stationId,\n arrivalDelay,\n departureDelay,\n arrivalTime,\n departureTime,\n cancelled,\n stationName,\n } = stop;\n const { stations } = lineInfos;\n const isFirstStation = idx === 0;\n const isLastStation = idx === stations.length - 1;\n const isStationPassed = isPassed(stop, trackerLayer.time, stations, idx);\n const isNotStation = isNotStop(stop);\n return (\n <div\n // Train line can go in circle so begin and end have the same id,\n // using the time in the key should fix the issue.\n key={stationId + arrivalTime + departureTime}\n role=\"button\"\n className={[\n 'rt-route-station',\n isStationPassed ? ' rt-passed' : '',\n isNotStation ? ' rt-no-stop' : '',\n ].join('')}\n onClick={(e) => {\n return onStationClick(stop, e);\n }}\n tabIndex={0}\n onKeyPress={(e) => {\n return e.which === 13 && onStationClick(stop, e);\n }}\n >\n <div className=\"rt-route-delay\">\n {typeof arrivalDelay === 'undefined' || isFirstStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-arrival${` ${getDelayColor(\n arrivalDelay,\n )}`}`}\n >\n {`+${getDelayString(arrivalDelay)}`}\n </span>\n )}\n {typeof departureDelay === 'undefined' || isLastStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-departure${` ${getDelayColor(\n departureDelay,\n )}`}`}\n >\n {`+${getDelayString(departureDelay)}`}\n </span>\n )}\n </div>\n <div className=\"rt-route-times\">\n <span\n className={`rt-route-time-arrival ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(arrivalTime)}\n </span>\n <span\n className={`rt-route-time-departure ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(departureTime)}\n </span>\n </div>\n {renderStationImg(stations, idx, isStationPassed, isNotStation)}\n <div className={cancelled ? 'rt-route-cancelled' : ''}>{stationName}</div>\n </div>\n );\n};\n\nconst renderRouteIdentifier = ({ routeIdentifier, longName }) => {\n if (routeIdentifier) {\n // first part of the id, without leading zeros.\n const id = parseInt(routeIdentifier.split('.')[0], 10);\n if (!longName.includes(id)) {\n return ` (${id})`;\n }\n }\n return null;\n};\n\nconst defaultRenderHeader = ({ lineInfos, renderHeaderButtons }) => {\n const {\n type,\n vehicleType,\n shortName,\n longName,\n stroke,\n destination,\n routeIdentifier,\n text_color: textColor,\n } = lineInfos;\n return (\n <div className=\"rt-route-header\">\n <span\n className=\"rt-route-icon\"\n style={{\n /* stylelint-disable-next-line value-keyword-case */\n backgroundColor: stroke || getBgColor(type || vehicleType),\n color: textColor || 'black',\n }}\n >\n {shortName}\n </span>\n <div className=\"rt-route-title\">\n <span className=\"rt-route-name\">{destination}</span>\n <span>\n {longName}\n {renderRouteIdentifier(lineInfos)}\n </span>\n </div>\n <div className=\"rt-route-buttons\">\n {renderHeaderButtons(routeIdentifier)}\n </div>\n </div>\n );\n};\n\nconst defaultRenderFooter = (props) => {\n const { lineInfos, renderCopyright } = props;\n if (!lineInfos.operator && !lineInfos.publisher) {\n return null;\n }\n return <div className=\"rt-route-footer\">{renderCopyright({ ...props })}</div>;\n};\n\nconst defaultRenderLink = (text, url) => {\n return (\n <div className=\"rt-route-copyright-link\">\n {url ? (\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {text}\n </a>\n ) : (\n <>{text}</>\n )}\n </div>\n );\n};\n\nconst defaultRenderCopyright = ({ lineInfos }) => {\n return (\n <span className=\"rt-route-copyright\">\n {lineInfos.operator &&\n defaultRenderLink(lineInfos.operator, lineInfos.operatorUrl)}\n {lineInfos.operator && lineInfos.publisher && <span>&nbsp;-&nbsp;</span>}\n {lineInfos.publisher &&\n defaultRenderLink(lineInfos.publisher, lineInfos.publisherUrl)}\n {lineInfos.license && <span>&nbsp;(</span>}\n {lineInfos.license &&\n defaultRenderLink(lineInfos.license, lineInfos.licenseUrl)}\n {lineInfos.license && ')'}\n </span>\n );\n};\n\nconst propTypes = {\n /**\n * CSS class of the route schedule wrapper.\n */\n className: PropTypes.string,\n\n /**\n * Trajectory stations informations.\n */\n lineInfos: ReactTransitPropTypes.lineInfos,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Render Header of the route scheduler.\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render Footer of the route scheduler.\n */\n renderFooter: PropTypes.func,\n\n /**\n * Render Copyright of the route scheduler.\n */\n renderCopyright: PropTypes.func,\n\n /**\n * Render the status of the station image.\n */\n renderStationImg: PropTypes.func,\n\n /**\n * Render a station.\n */\n renderStation: PropTypes.func,\n\n /**\n * Function triggered on station's click event.\n */\n onStationClick: PropTypes.func,\n\n /**\n * Function to render header buttons.\n */\n renderHeaderButtons: PropTypes.func,\n};\n\nconst defaultProps = {\n className: 'rt-route-schedule',\n lineInfos: null,\n renderHeader: defaultRenderHeader,\n renderStation: defaultRenderStation,\n renderStationImg: defaultRenderStationImg,\n renderCopyright: defaultRenderCopyright,\n renderFooter: defaultRenderFooter,\n renderHeaderButtons: () => {\n return null;\n },\n onStationClick: () => {},\n};\n\n/**\n * RouteSchedule displays information, stops and punctuality about the clicked route.\n */\nfunction RouteSchedule(props) {\n const { lineInfos, className, renderStation, renderHeader, renderFooter } =\n props;\n\n if (!lineInfos) {\n return null;\n }\n\n return (\n <div className={className}>\n {renderHeader({ ...props })}\n <div className=\"rt-route-body\">\n {lineInfos.stations.map((stop, idx) => {\n return renderStation({ ...props, stop, idx });\n })}\n </div>\n {renderFooter({ ...props })}\n </div>\n );\n}\n\nRouteSchedule.propTypes = propTypes;\nRouteSchedule.defaultProps = defaultProps;\n\nexport default React.memo(RouteSchedule);\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"RouteSchedule.js","sources":["../../../src/components/RouteSchedule/RouteSchedule.js"],"sourcesContent":["/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { TrackerLayer } from 'mobility-toolbox-js/ol';\nimport { getBgColor } from 'mobility-toolbox-js/common/trackerConfig';\nimport { getHoursAndMinutes, getDelayString } from '../../utils/timeUtils';\nimport ReactTransitPropTypes from '../../propTypes';\nimport firstStation from '../../images/RouteSchedule/firstStation.png';\nimport station from '../../images/RouteSchedule/station.png';\nimport lastStation from '../../images/RouteSchedule/lastStation.png';\nimport line from '../../images/RouteSchedule/line.png';\n\n/**\n * Returns a color class to display the delay.\n * @param {Number} time Delay time in milliseconds.\n */\nconst getDelayColor = (time) => {\n const secs = Math.round(((time / 1800 / 2) * 3600) / 1000);\n if (secs >= 3600) {\n return 'dark-red';\n }\n if (secs >= 500) {\n return 'middle-red';\n }\n if (secs >= 300) {\n return 'light-red';\n }\n if (secs >= 180) {\n return 'orange';\n }\n return 'green';\n};\n\n/**\n * Returns true if the train doesn't stop to the station.\n * @param {Object} stop Station information.\n */\nconst isNotStop = (stop) => {\n return !stop.arrivalTime && !stop.departureTime;\n};\n\n/**\n * Returns if the station has already been passed by the vehicule.\n * @param {Object} stop Station information.\n * @param {number} time The current time to test in ms.\n * @param {Array<Object>} stops the list of all stops of the train.\n * @param {idx} idx The index of the stop object in the stops array.\n */\nconst isPassed = (stop, time, stops, idx) => {\n // If the train doesn't stop to the stop object, we test if the stop just before has been passed or not.\n // if yes the current stop is considered as passed.\n if (isNotStop(stop)) {\n if (stops[idx - 1] && idx > 0) {\n return isPassed(stops[idx - 1], time, stops, idx);\n }\n return true;\n }\n\n // Sometimes stop.departureDelay is undefined.\n const timeToCompare = stop.departureTime || stop.arrivalTime || 0;\n const delayToCompare = stop.departureDelay || stop.arrivalDelay || 0;\n return timeToCompare + delayToCompare <= time;\n};\n\n/**\n * Returns an image for first, middle or last stations.\n * @param {Number} stations The stations list.\n * @param {Number} index Index of the station in the list.\n * @param {Boolean} isStationPassed If the train is already passed at this station.\n * @param {Boolean} isNotStation If the train doesn't stop to this station.\n */\nconst defaultRenderStationImg = (\n stations,\n index,\n isStationPassed,\n isNotStation,\n) => {\n const { length } = stations;\n let src = station;\n if (index === 0) {\n src = firstStation;\n } else if (index === length - 1) {\n src = lastStation;\n } else if (isNotStation) {\n src = line;\n }\n return <img src={src} alt=\"routeScheduleLine\" className=\"rt-route-icon\" />;\n};\n\nconst defaultRenderStation = ({\n lineInfos,\n onStationClick,\n trackerLayer,\n renderStationImg,\n stop,\n idx,\n}) => {\n const {\n stationId,\n arrivalDelay,\n departureDelay,\n arrivalTime,\n departureTime,\n cancelled,\n stationName,\n } = stop;\n const { stations } = lineInfos;\n const isFirstStation = idx === 0;\n const isLastStation = idx === stations.length - 1;\n const isStationPassed = isPassed(stop, trackerLayer.time, stations, idx);\n const isNotStation = isNotStop(stop);\n return (\n <div\n // Train line can go in circle so begin and end have the same id,\n // using the time in the key should fix the issue.\n key={(stationId || stationName) + arrivalTime + departureTime}\n role=\"button\"\n className={[\n 'rt-route-station',\n isStationPassed ? ' rt-passed' : '',\n isNotStation ? ' rt-no-stop' : '',\n ].join('')}\n onClick={(e) => {\n return onStationClick(stop, e);\n }}\n tabIndex={0}\n onKeyPress={(e) => {\n return e.which === 13 && onStationClick(stop, e);\n }}\n >\n <div className=\"rt-route-delay\">\n {typeof arrivalDelay === 'undefined' || isFirstStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-arrival${` ${getDelayColor(\n arrivalDelay,\n )}`}`}\n >\n {`+${getDelayString(arrivalDelay)}`}\n </span>\n )}\n {typeof departureDelay === 'undefined' || isLastStation || cancelled ? (\n ''\n ) : (\n <span\n className={`rt-route-delay-departure${` ${getDelayColor(\n departureDelay,\n )}`}`}\n >\n {`+${getDelayString(departureDelay)}`}\n </span>\n )}\n </div>\n <div className=\"rt-route-times\">\n <span\n className={`rt-route-time-arrival ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(arrivalTime)}\n </span>\n <span\n className={`rt-route-time-departure ${\n cancelled ? 'rt-route-cancelled' : ''\n }`}\n >\n {getHoursAndMinutes(departureTime)}\n </span>\n </div>\n {renderStationImg(stations, idx, isStationPassed, isNotStation)}\n <div className={cancelled ? 'rt-route-cancelled' : ''}>{stationName}</div>\n </div>\n );\n};\n\nconst renderRouteIdentifier = ({ routeIdentifier, longName }) => {\n if (routeIdentifier) {\n // first part of the id, without leading zeros.\n const id = parseInt(routeIdentifier.split('.')[0], 10);\n if (!longName.includes(id)) {\n return ` (${id})`;\n }\n }\n return null;\n};\n\nconst defaultRenderHeader = ({ lineInfos, renderHeaderButtons }) => {\n const {\n type,\n vehicleType,\n shortName,\n longName,\n stroke,\n destination,\n routeIdentifier,\n text_color: textColor,\n } = lineInfos;\n return (\n <div className=\"rt-route-header\">\n <span\n className=\"rt-route-icon\"\n style={{\n /* stylelint-disable-next-line value-keyword-case */\n backgroundColor: stroke || getBgColor(type || vehicleType),\n color: textColor || 'black',\n }}\n >\n {shortName}\n </span>\n <div className=\"rt-route-title\">\n <span className=\"rt-route-name\">{destination}</span>\n <span>\n {longName}\n {renderRouteIdentifier(lineInfos)}\n </span>\n </div>\n <div className=\"rt-route-buttons\">\n {renderHeaderButtons(routeIdentifier)}\n </div>\n </div>\n );\n};\n\nconst defaultRenderFooter = (props) => {\n const { lineInfos, renderCopyright } = props;\n if (!lineInfos.operator && !lineInfos.publisher) {\n return null;\n }\n return <div className=\"rt-route-footer\">{renderCopyright({ ...props })}</div>;\n};\n\nconst defaultRenderLink = (text, url) => {\n return (\n <div className=\"rt-route-copyright-link\">\n {url ? (\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n {text}\n </a>\n ) : (\n <>{text}</>\n )}\n </div>\n );\n};\n\nconst defaultRenderCopyright = ({ lineInfos }) => {\n return (\n <span className=\"rt-route-copyright\">\n {lineInfos.operator &&\n defaultRenderLink(lineInfos.operator, lineInfos.operatorUrl)}\n {lineInfos.operator && lineInfos.publisher && <span>&nbsp;-&nbsp;</span>}\n {lineInfos.publisher &&\n defaultRenderLink(lineInfos.publisher, lineInfos.publisherUrl)}\n {lineInfos.license && <span>&nbsp;(</span>}\n {lineInfos.license &&\n defaultRenderLink(lineInfos.license, lineInfos.licenseUrl)}\n {lineInfos.license && ')'}\n </span>\n );\n};\n\nconst propTypes = {\n /**\n * CSS class of the route schedule wrapper.\n */\n className: PropTypes.string,\n\n /**\n * Trajectory stations informations.\n */\n lineInfos: ReactTransitPropTypes.lineInfos,\n\n /**\n * Trackerlayer.\n */\n trackerLayer: PropTypes.instanceOf(TrackerLayer).isRequired,\n\n /**\n * Render Header of the route scheduler.\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render Footer of the route scheduler.\n */\n renderFooter: PropTypes.func,\n\n /**\n * Render Copyright of the route scheduler.\n */\n renderCopyright: PropTypes.func,\n\n /**\n * Render the status of the station image.\n */\n renderStationImg: PropTypes.func,\n\n /**\n * Render a station.\n */\n renderStation: PropTypes.func,\n\n /**\n * Function triggered on station's click event.\n */\n onStationClick: PropTypes.func,\n\n /**\n * Function to render header buttons.\n */\n renderHeaderButtons: PropTypes.func,\n};\n\nconst defaultProps = {\n className: 'rt-route-schedule',\n lineInfos: null,\n renderHeader: defaultRenderHeader,\n renderStation: defaultRenderStation,\n renderStationImg: defaultRenderStationImg,\n renderCopyright: defaultRenderCopyright,\n renderFooter: defaultRenderFooter,\n renderHeaderButtons: () => {\n return null;\n },\n onStationClick: () => {},\n};\n\n/**\n * RouteSchedule displays information, stops and punctuality about the clicked route.\n */\nfunction RouteSchedule(props) {\n const { lineInfos, className, renderStation, renderHeader, renderFooter } =\n props;\n\n if (!lineInfos) {\n return null;\n }\n\n return (\n <div className={className}>\n {renderHeader({ ...props })}\n <div className=\"rt-route-body\">\n {lineInfos.stations.map((stop, idx) => {\n return renderStation({ ...props, stop, idx });\n })}\n </div>\n {renderFooter({ ...props })}\n </div>\n );\n}\n\nRouteSchedule.propTypes = propTypes;\nRouteSchedule.defaultProps = defaultProps;\n\nexport default React.memo(RouteSchedule);\n"],"names":["const","let"],"mappings":"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"}
@@ -27,7 +27,7 @@ var propTypes = {
27
27
  */
28
28
  titles: PropTypes.shape({
29
29
  zoomIn: PropTypes.string,
30
- zoomOut: PropTypes.stirng,
30
+ zoomOut: PropTypes.string,
31
31
  }),
32
32
 
33
33
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Zoom.js","sources":["../../../src/components/Zoom/Zoom.js"],"sourcesContent":["import React, {\n useEffect,\n useRef,\n useCallback,\n useState,\n useMemo,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { FaPlus, FaMinus } from 'react-icons/fa';\nimport { ZoomSlider } from 'ol/control';\nimport OLMap from 'ol/Map';\n\nconst propTypes = {\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap).isRequired,\n\n /**\n * The zoom delta applied on each click.\n */\n delta: PropTypes.number,\n\n /**\n * Titles HTML attribtues for button.\n */\n titles: PropTypes.shape({\n zoomIn: PropTypes.string,\n zoomOut: PropTypes.stirng,\n }),\n\n /**\n * Children content of the zoom in button.\n */\n zoomInChildren: PropTypes.node,\n\n /**\n * Children content of the zoom out button.\n */\n zoomOutChildren: PropTypes.node,\n\n /**\n * Display a slider to zoom.\n */\n zoomSlider: PropTypes.bool,\n};\n\nconst defaultProps = {\n titles: {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n },\n zoomInChildren: <FaPlus focusable={false} />,\n zoomOutChildren: <FaMinus focusable={false} />,\n zoomSlider: false,\n delta: 1,\n};\n\nconst updateZoom = (map, zoomAction) => {\n map.getView().cancelAnimations();\n const zoom = map.getView().getZoom();\n\n map.getView().animate({ zoom: zoom + zoomAction });\n};\n\n/**\n * The Zoom component creates a zoom wrapper containing zoom-in and zoom-out buttons\n * and an optional [ol/ZoomSlider](https://openlayers.org/en/latest/apidoc/module-ol_control_ZoomSlider-ZoomSlider.html).\n */\nfunction Zoom({\n map,\n titles,\n zoomInChildren,\n zoomOutChildren,\n zoomSlider,\n delta,\n ...other\n}) {\n const ref = useRef();\n const [currentZoom, setZoom] = useState();\n\n const zoomIn = useCallback(\n (evt) => {\n if (!evt.which || evt.which === 13) {\n updateZoom(map, delta);\n }\n },\n [delta, map],\n );\n\n const zoomOut = useCallback(\n (evt) => {\n if (!evt.which || evt.which === 13) {\n updateZoom(map, -delta);\n }\n },\n [delta, map],\n );\n\n const zoomInDisabled = useMemo(() => {\n return (\n currentZoom >=\n map.getView().getConstrainedZoom(map.getView().getMaxZoom())\n );\n }, [currentZoom, map]);\n\n const zoomOutDisabled = useMemo(() => {\n return (\n currentZoom <=\n map.getView().getConstrainedZoom(map.getView().getMinZoom())\n );\n }, [currentZoom, map]);\n\n useEffect(() => {\n /* Trigger zoom update to disable zooms on max and min */\n const zoomListener = () => {\n return setZoom(map.getView().getZoom());\n };\n map.on('moveend', zoomListener);\n\n let control;\n if (zoomSlider && ref.current) {\n control = new ZoomSlider();\n // We don't want to navigate to the zoom slider using TAB navigation.\n control.element.firstElementChild.tabIndex = -1;\n // Set the zoom slider in the custom control wrapper.\n control.setTarget(ref.current);\n map.addControl(control);\n }\n return () => {\n map.un('moveend', zoomListener);\n if (control) {\n map.removeControl(control);\n }\n };\n }, [map, zoomSlider]);\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div className=\"rs-zooms-bar\" {...other}>\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rs-zoom-in\"\n title={titles.zoomIn}\n onClick={zoomIn}\n onKeyPress={zoomIn}\n disabled={zoomInDisabled}\n >\n {zoomInChildren}\n </button>\n {zoomSlider ? <div className=\"rs-zoomslider-wrapper\" ref={ref} /> : null}\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rs-zoom-out\"\n title={titles.zoomOut}\n onClick={zoomOut}\n onKeyPress={zoomOut}\n disabled={zoomOutDisabled}\n >\n {zoomOutChildren}\n </button>\n </div>\n );\n}\n\nZoom.propTypes = propTypes;\nZoom.defaultProps = defaultProps;\n\nexport default React.memo(Zoom);\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"Zoom.js","sources":["../../../src/components/Zoom/Zoom.js"],"sourcesContent":["import React, {\n useEffect,\n useRef,\n useCallback,\n useState,\n useMemo,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { FaPlus, FaMinus } from 'react-icons/fa';\nimport { ZoomSlider } from 'ol/control';\nimport OLMap from 'ol/Map';\n\nconst propTypes = {\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap).isRequired,\n\n /**\n * The zoom delta applied on each click.\n */\n delta: PropTypes.number,\n\n /**\n * Titles HTML attribtues for button.\n */\n titles: PropTypes.shape({\n zoomIn: PropTypes.string,\n zoomOut: PropTypes.string,\n }),\n\n /**\n * Children content of the zoom in button.\n */\n zoomInChildren: PropTypes.node,\n\n /**\n * Children content of the zoom out button.\n */\n zoomOutChildren: PropTypes.node,\n\n /**\n * Display a slider to zoom.\n */\n zoomSlider: PropTypes.bool,\n};\n\nconst defaultProps = {\n titles: {\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n },\n zoomInChildren: <FaPlus focusable={false} />,\n zoomOutChildren: <FaMinus focusable={false} />,\n zoomSlider: false,\n delta: 1,\n};\n\nconst updateZoom = (map, zoomAction) => {\n map.getView().cancelAnimations();\n const zoom = map.getView().getZoom();\n\n map.getView().animate({ zoom: zoom + zoomAction });\n};\n\n/**\n * The Zoom component creates a zoom wrapper containing zoom-in and zoom-out buttons\n * and an optional [ol/ZoomSlider](https://openlayers.org/en/latest/apidoc/module-ol_control_ZoomSlider-ZoomSlider.html).\n */\nfunction Zoom({\n map,\n titles,\n zoomInChildren,\n zoomOutChildren,\n zoomSlider,\n delta,\n ...other\n}) {\n const ref = useRef();\n const [currentZoom, setZoom] = useState();\n\n const zoomIn = useCallback(\n (evt) => {\n if (!evt.which || evt.which === 13) {\n updateZoom(map, delta);\n }\n },\n [delta, map],\n );\n\n const zoomOut = useCallback(\n (evt) => {\n if (!evt.which || evt.which === 13) {\n updateZoom(map, -delta);\n }\n },\n [delta, map],\n );\n\n const zoomInDisabled = useMemo(() => {\n return (\n currentZoom >=\n map.getView().getConstrainedZoom(map.getView().getMaxZoom())\n );\n }, [currentZoom, map]);\n\n const zoomOutDisabled = useMemo(() => {\n return (\n currentZoom <=\n map.getView().getConstrainedZoom(map.getView().getMinZoom())\n );\n }, [currentZoom, map]);\n\n useEffect(() => {\n /* Trigger zoom update to disable zooms on max and min */\n const zoomListener = () => {\n return setZoom(map.getView().getZoom());\n };\n map.on('moveend', zoomListener);\n\n let control;\n if (zoomSlider && ref.current) {\n control = new ZoomSlider();\n // We don't want to navigate to the zoom slider using TAB navigation.\n control.element.firstElementChild.tabIndex = -1;\n // Set the zoom slider in the custom control wrapper.\n control.setTarget(ref.current);\n map.addControl(control);\n }\n return () => {\n map.un('moveend', zoomListener);\n if (control) {\n map.removeControl(control);\n }\n };\n }, [map, zoomSlider]);\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <div className=\"rs-zooms-bar\" {...other}>\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rs-zoom-in\"\n title={titles.zoomIn}\n onClick={zoomIn}\n onKeyPress={zoomIn}\n disabled={zoomInDisabled}\n >\n {zoomInChildren}\n </button>\n {zoomSlider ? <div className=\"rs-zoomslider-wrapper\" ref={ref} /> : null}\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rs-zoom-out\"\n title={titles.zoomOut}\n onClick={zoomOut}\n onKeyPress={zoomOut}\n disabled={zoomOutDisabled}\n >\n {zoomOutChildren}\n </button>\n </div>\n );\n}\n\nZoom.propTypes = propTypes;\nZoom.defaultProps = defaultProps;\n\nexport default React.memo(Zoom);\n"],"names":["const","let"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "react-spatial",
3
3
  "description": "Components to build React map apps.",
4
- "version": "1.0.37-beta.2",
4
+ "version": "1.1.2-beta.1",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
- "@geops/geops-ui": "0.1.12",
7
+ "@geops/geops-ui": "0.1.13",
8
8
  "@material-ui/core": "4.12.3",
9
9
  "@material-ui/icons": "4.11.2",
10
10
  "@material-ui/lab": "4.0.0-alpha.60",