{"version":3,"file":"sitna.js","mappings":"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","sources":["webpack://SITNA/./TC/control|eager|/^/.*$/|groupOptions: {}|namespace object","webpack://SITNA/./TC/control|lazy|/^/.*$/|groupOptions: {}|namespace object","webpack://SITNA/./SITNA/ui/Button.js","webpack://SITNA/./SITNA/ui/Component.js","webpack://SITNA/./SITNA/ui/Toggle.js","webpack://SITNA/./TC.js","webpack://SITNA/./node_modules/base64-js/index.js","webpack://SITNA/./node_modules/buffer/index.js","webpack://SITNA/./node_modules/ieee754/index.js","webpack://SITNA/./node_modules/inherits/inherits_browser.js","webpack://SITNA/./node_modules/jsnlog/jsnlog.ts","webpack://SITNA/./node_modules/jszip/dist/jszip.min.js","webpack://SITNA/./node_modules/loadjs/dist/loadjs.umd.js","webpack://SITNA/./node_modules/localforage/dist/localforage.js","webpack://SITNA/./node_modules/proj4/lib/constants/values.js","webpack://SITNA/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://SITNA/./node_modules/proj4/lib/constants/units.js","webpack://SITNA/./node_modules/proj4/lib/match.js","webpack://SITNA/./node_modules/proj4/lib/projString.js","webpack://SITNA/./node_modules/wkt-parser/parser.js","webpack://SITNA/./node_modules/wkt-parser/process.js","webpack://SITNA/./node_modules/wkt-parser/index.js","webpack://SITNA/./node_modules/proj4/lib/defs.js","webpack://SITNA/./node_modules/proj4/lib/global.js","webpack://SITNA/./node_modules/proj4/lib/parseCode.js","webpack://SITNA/./node_modules/proj4/lib/extend.js","webpack://SITNA/./node_modules/proj4/lib/common/msfnz.js","webpack://SITNA/./node_modules/proj4/lib/common/sign.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_lon.js","webpack://SITNA/./node_modules/proj4/lib/common/tsfnz.js","webpack://SITNA/./node_modules/proj4/lib/common/phi2z.js","webpack://SITNA/./node_modules/proj4/lib/projections/longlat.js","webpack://SITNA/./node_modules/proj4/lib/projections.js","webpack://SITNA/./node_modules/proj4/lib/projections/merc.js","webpack://SITNA/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://SITNA/./node_modules/proj4/lib/constants/Datum.js","webpack://SITNA/./node_modules/proj4/lib/datum.js","webpack://SITNA/./node_modules/proj4/lib/nadgrid.js","webpack://SITNA/./node_modules/proj4/lib/Proj.js","webpack://SITNA/./node_modules/proj4/lib/deriveConstants.js","webpack://SITNA/./node_modules/proj4/lib/datumUtils.js","webpack://SITNA/./node_modules/proj4/lib/datum_transform.js","webpack://SITNA/./node_modules/proj4/lib/adjust_axis.js","webpack://SITNA/./node_modules/proj4/lib/common/toPoint.js","webpack://SITNA/./node_modules/proj4/lib/checkSanity.js","webpack://SITNA/./node_modules/proj4/lib/transform.js","webpack://SITNA/./node_modules/proj4/lib/core.js","webpack://SITNA/./node_modules/mgrs/mgrs.js","webpack://SITNA/./node_modules/proj4/lib/Point.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_enfn.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://SITNA/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://SITNA/./node_modules/proj4/lib/projections/tmerc.js","webpack://SITNA/./node_modules/proj4/lib/common/sinh.js","webpack://SITNA/./node_modules/proj4/lib/common/hypot.js","webpack://SITNA/./node_modules/proj4/lib/common/asinhy.js","webpack://SITNA/./node_modules/proj4/lib/common/log1py.js","webpack://SITNA/./node_modules/proj4/lib/common/gatg.js","webpack://SITNA/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://SITNA/./node_modules/proj4/lib/common/cosh.js","webpack://SITNA/./node_modules/proj4/lib/projections/etmerc.js","webpack://SITNA/./node_modules/proj4/lib/common/clens.js","webpack://SITNA/./node_modules/proj4/lib/projections/utm.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_zone.js","webpack://SITNA/./node_modules/proj4/lib/common/srat.js","webpack://SITNA/./node_modules/proj4/lib/projections/gauss.js","webpack://SITNA/./node_modules/proj4/lib/projections/sterea.js","webpack://SITNA/./node_modules/proj4/lib/projections/stere.js","webpack://SITNA/./node_modules/proj4/lib/projections/somerc.js","webpack://SITNA/./node_modules/proj4/lib/projections/omerc.js","webpack://SITNA/./node_modules/proj4/lib/projections/lcc.js","webpack://SITNA/./node_modules/proj4/lib/projections/krovak.js","webpack://SITNA/./node_modules/proj4/lib/common/mlfn.js","webpack://SITNA/./node_modules/proj4/lib/common/e0fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e1fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e2fn.js","webpack://SITNA/./node_modules/proj4/lib/common/e3fn.js","webpack://SITNA/./node_modules/proj4/lib/common/gN.js","webpack://SITNA/./node_modules/proj4/lib/common/adjust_lat.js","webpack://SITNA/./node_modules/proj4/lib/common/imlfn.js","webpack://SITNA/./node_modules/proj4/lib/projections/cass.js","webpack://SITNA/./node_modules/proj4/lib/common/qsfnz.js","webpack://SITNA/./node_modules/proj4/lib/projections/laea.js","webpack://SITNA/./node_modules/proj4/lib/common/asinz.js","webpack://SITNA/./node_modules/proj4/lib/projections/aea.js","webpack://SITNA/./node_modules/proj4/lib/projections/gnom.js","webpack://SITNA/./node_modules/proj4/lib/projections/cea.js","webpack://SITNA/./node_modules/proj4/lib/common/iqsfnz.js","webpack://SITNA/./node_modules/proj4/lib/projections/eqc.js","webpack://SITNA/./node_modules/proj4/lib/projections/poly.js","webpack://SITNA/./node_modules/proj4/lib/projections/nzmg.js","webpack://SITNA/./node_modules/proj4/lib/projections/mill.js","webpack://SITNA/./node_modules/proj4/lib/projections/sinu.js","webpack://SITNA/./node_modules/proj4/lib/projections/moll.js","webpack://SITNA/./node_modules/proj4/lib/projections/eqdc.js","webpack://SITNA/./node_modules/proj4/lib/projections/vandg.js","webpack://SITNA/./node_modules/proj4/lib/projections/aeqd.js","webpack://SITNA/./node_modules/proj4/lib/projections/ortho.js","webpack://SITNA/./node_modules/proj4/lib/projections/qsc.js","webpack://SITNA/./node_modules/proj4/lib/projections/robin.js","webpack://SITNA/./node_modules/proj4/lib/projections/geocent.js","webpack://SITNA/./node_modules/proj4/lib/projections/tpers.js","webpack://SITNA/./node_modules/proj4/lib/index.js","webpack://SITNA/./node_modules/proj4/projs.js","webpack://SITNA/./node_modules/rbush/rbush.min.js","webpack://SITNA/./node_modules/ua-parser-js/src/ua-parser.js","webpack://SITNA/./node_modules/util/support/isBufferBrowser.js","webpack://SITNA/./node_modules/util/util.js","webpack://SITNA/./node_modules/wkx/lib/binaryreader.js","webpack://SITNA/./node_modules/wkx/lib/binarywriter.js","webpack://SITNA/./node_modules/wkx/lib/geometry.js","webpack://SITNA/./node_modules/wkx/lib/geometrycollection.js","webpack://SITNA/./node_modules/wkx/lib/linestring.js","webpack://SITNA/./node_modules/wkx/lib/multilinestring.js","webpack://SITNA/./node_modules/wkx/lib/multipoint.js","webpack://SITNA/./node_modules/wkx/lib/multipolygon.js","webpack://SITNA/./node_modules/wkx/lib/point.js","webpack://SITNA/./node_modules/wkx/lib/polygon.js","webpack://SITNA/./node_modules/wkx/lib/types.js","webpack://SITNA/./node_modules/wkx/lib/wktparser.js","webpack://SITNA/./node_modules/wkx/lib/wkx.js","webpack://SITNA/./node_modules/wkx/lib/zigzag.js","webpack://SITNA/./TC/Cfg.js","webpack://SITNA/./TC/Consts.js","webpack://SITNA/./TC/Control.js","webpack://SITNA/./TC/EventTarget.js","webpack://SITNA/./TC/Feature.js","webpack://SITNA/./TC/Geometry.js","webpack://SITNA/./TC/Layer.js","webpack://SITNA/./TC/layer/Raster.js","webpack://SITNA/./TC/Map.js","webpack://SITNA/./TC/Util.js","webpack://SITNA/./TC/control/Attribution.js","webpack://SITNA/./TC/control/BasemapSelector.js","webpack://SITNA/./TC/control/CacheBuilder.js","webpack://SITNA/./TC/control/Click.js","webpack://SITNA/./TC/control/Container.js","webpack://SITNA/./TC/control/ControlContainer.js","webpack://SITNA/./TC/control/Coordinates.js","webpack://SITNA/./TC/control/DataLoader.js","webpack://SITNA/./TC/control/Download.js","webpack://SITNA/./TC/control/Draw.js","webpack://SITNA/./TC/control/DrawMeasureModify.js","webpack://SITNA/./TC/control/Edit.js","webpack://SITNA/./TC/control/Elevation.js","webpack://SITNA/./TC/control/ExternalWMS.js","webpack://SITNA/./TC/control/FeatureDownloadDialog.js","webpack://SITNA/./TC/control/FeatureInfo.js","webpack://SITNA/./TC/control/FeatureInfoCommons.js","webpack://SITNA/./TC/control/FeatureTools.js","webpack://SITNA/./TC/control/FileEdit.js","webpack://SITNA/./TC/control/FileImport.js","webpack://SITNA/./TC/control/FullScreen.js","webpack://SITNA/./TC/control/Geolocation.js","webpack://SITNA/./TC/control/GeometryFeatureInfo.js","webpack://SITNA/./TC/control/LanguageSelector.js","webpack://SITNA/./TC/control/LayerCatalog.js","webpack://SITNA/./TC/control/Legend.js","webpack://SITNA/./TC/control/LineFeatureInfo.js","webpack://SITNA/./TC/control/ListTOC.js","webpack://SITNA/./TC/control/LoadingIndicator.js","webpack://SITNA/./TC/control/MapContents.js","webpack://SITNA/./TC/control/MapInfo.js","webpack://SITNA/./TC/control/Measure.js","webpack://SITNA/./TC/control/Modify.js","webpack://SITNA/./TC/control/MultiFeatureInfo.js","webpack://SITNA/./TC/control/NavBar.js","webpack://SITNA/./TC/control/NavBarHome.js","webpack://SITNA/./TC/control/OfflineMapMaker.js","webpack://SITNA/./TC/control/OverviewMap.js","webpack://SITNA/./TC/control/PolygonFeatureInfo.js","webpack://SITNA/./TC/control/Popup.js","webpack://SITNA/./TC/control/Print.js","webpack://SITNA/./TC/control/PrintMap.js","webpack://SITNA/./TC/control/ProjectionSelector.js","webpack://SITNA/./TC/control/ResultsPanel.js","webpack://SITNA/./TC/control/SWCacheClient.js","webpack://SITNA/./TC/control/Scale.js","webpack://SITNA/./TC/control/ScaleBar.js","webpack://SITNA/./TC/control/ScaleSelector.js","webpack://SITNA/./TC/control/Search.js","webpack://SITNA/./TC/control/SelectContainer.js","webpack://SITNA/./TC/control/Share.js","webpack://SITNA/./TC/control/StreetView.js","webpack://SITNA/./TC/control/TOC.js","webpack://SITNA/./TC/control/TabContainer.js","webpack://SITNA/./TC/control/ThreeD.js","webpack://SITNA/./TC/control/WFSEdit.js","webpack://SITNA/./TC/control/WFSQuery.js","webpack://SITNA/./TC/control/WebComponentControl.js","webpack://SITNA/./TC/control/WorkLayerManager.js","webpack://SITNA/./TC/control/infoShare.js","webpack://SITNA/./TC/control/itemToolContainer.js","webpack://SITNA/./TC/control/layerOwner.js","webpack://SITNA/./TC/feature/Marker.js","webpack://SITNA/./TC/feature/MultiMarker.js","webpack://SITNA/./TC/feature/MultiPoint.js","webpack://SITNA/./TC/feature/MultiPolygon.js","webpack://SITNA/./TC/feature/MultiPolyline.js","webpack://SITNA/./TC/feature/Point.js","webpack://SITNA/./TC/feature/Polygon.js","webpack://SITNA/./TC/feature/Polyline.js","webpack://SITNA/./TC/filter.js","webpack://SITNA/./TC/i18n.js","webpack://SITNA/./TC/feature/Circle.js","webpack://SITNA/./TC/layer/Vector.js","webpack://SITNA/./node_modules/ol/src/util.js","webpack://SITNA/./node_modules/ol/src/Disposable.js","webpack://SITNA/./node_modules/ol/src/array.js","webpack://SITNA/./node_modules/ol/src/functions.js","webpack://SITNA/./node_modules/ol/src/has.js","webpack://SITNA/./node_modules/ol/src/AssertionError.js","webpack://SITNA/./node_modules/ol/src/asserts.js","webpack://SITNA/./node_modules/ol/src/transform.js","webpack://SITNA/./node_modules/ol/src/extent/Corner.js","webpack://SITNA/./node_modules/ol/src/extent/Relationship.js","webpack://SITNA/./node_modules/ol/src/extent.js","webpack://SITNA/./node_modules/ol/src/math.js","webpack://SITNA/./node_modules/ol/src/color.js","webpack://SITNA/./node_modules/ol/src/style/IconImageCache.js","webpack://SITNA/./node_modules/ol/src/events/Event.js","webpack://SITNA/./node_modules/ol/src/ObjectEventType.js","webpack://SITNA/./node_modules/ol/src/obj.js","webpack://SITNA/./node_modules/ol/src/events/Target.js","webpack://SITNA/./node_modules/ol/src/events/EventType.js","webpack://SITNA/./node_modules/ol/src/events.js","webpack://SITNA/./node_modules/ol/src/Observable.js","webpack://SITNA/./node_modules/ol/src/Object.js","webpack://SITNA/./node_modules/ol/src/layer/Property.js","webpack://SITNA/./node_modules/ol/src/layer/Base.js","webpack://SITNA/./node_modules/ol/src/render/EventType.js","webpack://SITNA/./node_modules/ol/src/source/State.js","webpack://SITNA/./node_modules/ol/src/layer/Layer.js","webpack://SITNA/./node_modules/ol/src/coordinate.js","webpack://SITNA/./node_modules/ol/src/renderer/Map.js","webpack://SITNA/./node_modules/ol/src/render/Event.js","webpack://SITNA/./node_modules/ol/src/css.js","webpack://SITNA/./node_modules/ol/src/dom.js","webpack://SITNA/./node_modules/ol/src/render/canvas.js","webpack://SITNA/./node_modules/ol/src/renderer/Composite.js","webpack://SITNA/./node_modules/ol/src/CollectionEventType.js","webpack://SITNA/./node_modules/ol/src/Collection.js","webpack://SITNA/./node_modules/ol/src/layer/Group.js","webpack://SITNA/./node_modules/ol/src/MapEvent.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEvent.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEventType.js","webpack://SITNA/./node_modules/ol/src/pointer/EventType.js","webpack://SITNA/./node_modules/ol/src/MapBrowserEventHandler.js","webpack://SITNA/./node_modules/ol/src/MapEventType.js","webpack://SITNA/./node_modules/ol/src/MapProperty.js","webpack://SITNA/./node_modules/ol/src/structs/PriorityQueue.js","webpack://SITNA/./node_modules/ol/src/TileState.js","webpack://SITNA/./node_modules/ol/src/TileQueue.js","webpack://SITNA/./node_modules/ol/src/geom/GeometryType.js","webpack://SITNA/./node_modules/ol/src/proj/Units.js","webpack://SITNA/./node_modules/ol/src/ViewHint.js","webpack://SITNA/./node_modules/ol/src/ViewProperty.js","webpack://SITNA/./node_modules/ol/src/tilegrid/common.js","webpack://SITNA/./node_modules/ol/src/proj/Projection.js","webpack://SITNA/./node_modules/ol/src/proj/epsg3857.js","webpack://SITNA/./node_modules/ol/src/proj/epsg4326.js","webpack://SITNA/./node_modules/ol/src/proj/projections.js","webpack://SITNA/./node_modules/ol/src/proj/transforms.js","webpack://SITNA/./node_modules/ol/src/sphere.js","webpack://SITNA/./node_modules/ol/src/proj.js","webpack://SITNA/./node_modules/ol/src/centerconstraint.js","webpack://SITNA/./node_modules/ol/src/resolutionconstraint.js","webpack://SITNA/./node_modules/ol/src/rotationconstraint.js","webpack://SITNA/./node_modules/ol/src/easing.js","webpack://SITNA/./node_modules/ol/src/geom/GeometryLayout.js","webpack://SITNA/./node_modules/ol/src/geom/flat/transform.js","webpack://SITNA/./node_modules/ol/src/geom/Geometry.js","webpack://SITNA/./node_modules/ol/src/geom/SimpleGeometry.js","webpack://SITNA/./node_modules/ol/src/geom/flat/closest.js","webpack://SITNA/./node_modules/ol/src/geom/flat/deflate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/simplify.js","webpack://SITNA/./node_modules/ol/src/geom/flat/inflate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/area.js","webpack://SITNA/./node_modules/ol/src/geom/LinearRing.js","webpack://SITNA/./node_modules/ol/src/geom/Point.js","webpack://SITNA/./node_modules/ol/src/geom/flat/contains.js","webpack://SITNA/./node_modules/ol/src/geom/flat/interiorpoint.js","webpack://SITNA/./node_modules/ol/src/geom/flat/segments.js","webpack://SITNA/./node_modules/ol/src/geom/flat/intersectsextent.js","webpack://SITNA/./node_modules/ol/src/geom/flat/reverse.js","webpack://SITNA/./node_modules/ol/src/geom/flat/orient.js","webpack://SITNA/./node_modules/ol/src/geom/Polygon.js","webpack://SITNA/./node_modules/ol/src/View.js","webpack://SITNA/./node_modules/ol/src/size.js","webpack://SITNA/./node_modules/ol/src/PluggableMap.js","webpack://SITNA/./node_modules/ol/src/control/Control.js","webpack://SITNA/./node_modules/ol/src/control/Attribution.js","webpack://SITNA/./node_modules/ol/src/control/Rotate.js","webpack://SITNA/./node_modules/ol/src/control/Zoom.js","webpack://SITNA/./node_modules/ol/src/interaction/Property.js","webpack://SITNA/./node_modules/ol/src/interaction/Interaction.js","webpack://SITNA/./node_modules/ol/src/interaction/DoubleClickZoom.js","webpack://SITNA/./node_modules/ol/src/interaction/Pointer.js","webpack://SITNA/./node_modules/ol/src/events/condition.js","webpack://SITNA/./node_modules/ol/src/interaction/DragPan.js","webpack://SITNA/./node_modules/ol/src/interaction/DragRotate.js","webpack://SITNA/./node_modules/ol/src/render/Box.js","webpack://SITNA/./node_modules/ol/src/interaction/DragBox.js","webpack://SITNA/./node_modules/ol/src/interaction/DragZoom.js","webpack://SITNA/./node_modules/ol/src/events/KeyCode.js","webpack://SITNA/./node_modules/ol/src/interaction/KeyboardPan.js","webpack://SITNA/./node_modules/ol/src/interaction/KeyboardZoom.js","webpack://SITNA/./node_modules/ol/src/Kinetic.js","webpack://SITNA/./node_modules/ol/src/interaction/MouseWheelZoom.js","webpack://SITNA/./node_modules/ol/src/interaction/PinchRotate.js","webpack://SITNA/./node_modules/ol/src/interaction/PinchZoom.js","webpack://SITNA/./node_modules/ol/src/interaction.js","webpack://SITNA/./node_modules/ol/src/Map.js","webpack://SITNA/./node_modules/ol/src/control.js","webpack://SITNA/./node_modules/ol/src/OverlayPositioning.js","webpack://SITNA/./node_modules/ol/src/Overlay.js","webpack://SITNA/./node_modules/ol/src/string.js","webpack://SITNA/./node_modules/ol/src/control/OverviewMap.js","webpack://SITNA/./node_modules/ol/src/control/ScaleLine.js","webpack://SITNA/./node_modules/ol/src/control/ZoomToExtent.js","webpack://SITNA/./node_modules/ol/src/control/ZoomSlider.js","webpack://SITNA/./node_modules/ol/src/Feature.js","webpack://SITNA/./node_modules/ol/src/geom/MultiPoint.js","webpack://SITNA/./node_modules/ol/src/geom/flat/interpolate.js","webpack://SITNA/./node_modules/ol/src/geom/flat/length.js","webpack://SITNA/./node_modules/ol/src/geom/LineString.js","webpack://SITNA/./node_modules/ol/src/geom/MultiLineString.js","webpack://SITNA/./node_modules/ol/src/geom/MultiPolygon.js","webpack://SITNA/./node_modules/ol/src/geom/flat/center.js","webpack://SITNA/./node_modules/ol/src/geom/Circle.js","webpack://SITNA/./node_modules/ol/src/geom/GeometryCollection.js","webpack://SITNA/./node_modules/ol/src/format/FormatType.js","webpack://SITNA/./node_modules/ol/src/featureloader.js","webpack://SITNA/./node_modules/ol/src/format/Feature.js","webpack://SITNA/./node_modules/ol/src/xml.js","webpack://SITNA/./node_modules/ol/src/format/XMLFeature.js","webpack://SITNA/./node_modules/ol/src/format/GMLBase.js","webpack://SITNA/./lib/ol/format/GMLBase.js","webpack://SITNA/./node_modules/ol/src/format/xsd.js","webpack://SITNA/./node_modules/ol/src/format/GML2.js","webpack://SITNA/./node_modules/ol/src/format/GML3.js","webpack://SITNA/./node_modules/ol/src/format/GML.js","webpack://SITNA/./node_modules/ol/src/format/GML32.js","webpack://SITNA/./node_modules/ol/src/format/filter/Filter.js","webpack://SITNA/./node_modules/ol/src/format/filter/LogicalNary.js","webpack://SITNA/./node_modules/ol/src/format/filter/And.js","webpack://SITNA/./node_modules/ol/src/format/filter/Bbox.js","webpack://SITNA/./node_modules/ol/src/format/WFS.js","webpack://SITNA/./node_modules/ol/src/format/filter.js","webpack://SITNA/./node_modules/ol/src/format/TextFeature.js","webpack://SITNA/./node_modules/ol/src/format/WKT.js","webpack://SITNA/./node_modules/ol/src/format/XML.js","webpack://SITNA/./node_modules/ol/src/format/xlink.js","webpack://SITNA/./node_modules/ol/src/format/WMSCapabilities.js","webpack://SITNA/./node_modules/ol/src/format/WMSGetFeatureInfo.js","webpack://SITNA/./node_modules/ol/src/format/OWS.js","webpack://SITNA/./node_modules/ol/src/format/WMTSCapabilities.js","webpack://SITNA/./node_modules/ol/src/format/JSONFeature.js","webpack://SITNA/./node_modules/ol/src/format/TopoJSON.js","webpack://SITNA/./node_modules/ol/src/format/GeoJSON.js","webpack://SITNA/./lib/ol/format/GeoJSON.js","webpack://SITNA/./lib/ol/format/GPX.js","webpack://SITNA/./node_modules/ol/src/style/Fill.js","webpack://SITNA/./node_modules/ol/src/style/IconAnchorUnits.js","webpack://SITNA/./node_modules/ol/src/style/IconOrigin.js","webpack://SITNA/./node_modules/ol/src/ImageState.js","webpack://SITNA/./node_modules/ol/src/style/Image.js","webpack://SITNA/./node_modules/ol/src/ImageBase.js","webpack://SITNA/./node_modules/ol/src/Image.js","webpack://SITNA/./node_modules/ol/src/style/IconImage.js","webpack://SITNA/./node_modules/ol/src/style/Icon.js","webpack://SITNA/./node_modules/ol/src/style/Stroke.js","webpack://SITNA/./node_modules/ol/src/colorlike.js","webpack://SITNA/./node_modules/ol/src/style/RegularShape.js","webpack://SITNA/./node_modules/ol/src/style/Circle.js","webpack://SITNA/./node_modules/ol/src/style/Style.js","webpack://SITNA/./node_modules/ol/src/style/TextPlacement.js","webpack://SITNA/./node_modules/ol/src/style/Text.js","webpack://SITNA/./node_modules/ol/src/format/KML.js","webpack://SITNA/./lib/ol/format/KML.js","webpack://SITNA/./node_modules/ol/src/layer/BaseVector.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Instruction.js","webpack://SITNA/./node_modules/ol/src/render/VectorContext.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Builder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/ImageBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/LineStringBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/PolygonBuilder.js","webpack://SITNA/./node_modules/ol/src/geom/flat/straightchunk.js","webpack://SITNA/./node_modules/ol/src/render/canvas/TextBuilder.js","webpack://SITNA/./node_modules/ol/src/render/canvas/BuilderGroup.js","webpack://SITNA/./node_modules/ol/src/renderer/Layer.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/Layer.js","webpack://SITNA/./node_modules/ol/src/render/canvas/BuilderType.js","webpack://SITNA/./node_modules/ol/src/geom/flat/textpath.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Executor.js","webpack://SITNA/./node_modules/ol/src/render/canvas/ExecutorGroup.js","webpack://SITNA/./node_modules/ol/src/render/canvas/Immediate.js","webpack://SITNA/./node_modules/ol/src/render/canvas/hitdetect.js","webpack://SITNA/./node_modules/ol/src/renderer/vector.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/VectorLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Vector.js","webpack://SITNA/./node_modules/ol/src/structs/RBush.js","webpack://SITNA/./node_modules/ol/src/source/Source.js","webpack://SITNA/./node_modules/ol/src/source/VectorEventType.js","webpack://SITNA/./node_modules/ol/src/loadingstrategy.js","webpack://SITNA/./node_modules/ol/src/source/Vector.js","webpack://SITNA/./node_modules/ol/src/interaction/Draw.js","webpack://SITNA/./node_modules/ol/src/interaction/Translate.js","webpack://SITNA/./node_modules/ol/src/interaction/Snap.js","webpack://SITNA/./node_modules/ol/src/interaction/Select.js","webpack://SITNA/./node_modules/ol/src/interaction/Modify.js","webpack://SITNA/./node_modules/ol/src/interaction/DragAndDrop.js","webpack://SITNA/./lib/ol/interaction/DragAndDrop.js","webpack://SITNA/./node_modules/ol/src/layer/TileProperty.js","webpack://SITNA/./node_modules/ol/src/layer/BaseTile.js","webpack://SITNA/./node_modules/ol/src/Tile.js","webpack://SITNA/./node_modules/ol/src/ImageTile.js","webpack://SITNA/./node_modules/ol/src/reproj/Triangulation.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/common.js","webpack://SITNA/./node_modules/ol/src/reproj.js","webpack://SITNA/./node_modules/ol/src/reproj/Tile.js","webpack://SITNA/./node_modules/ol/src/reproj/common.js","webpack://SITNA/./node_modules/ol/src/TileRange.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/TileLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Tile.js","webpack://SITNA/./node_modules/ol/src/layer/BaseImage.js","webpack://SITNA/./node_modules/ol/src/renderer/canvas/ImageLayer.js","webpack://SITNA/./node_modules/ol/src/layer/Image.js","webpack://SITNA/./node_modules/ol/src/webgl.js","webpack://SITNA/./node_modules/ol/src/webgl/Buffer.js","webpack://SITNA/./node_modules/ol/src/webgl/ContextEventType.js","webpack://SITNA/./node_modules/ol/src/webgl/PostProcessingPass.js","webpack://SITNA/./node_modules/ol/src/vec/mat4.js","webpack://SITNA/./node_modules/ol/src/webgl/Helper.js","webpack://SITNA/./node_modules/ol/src/renderer/webgl/Layer.js","webpack://SITNA/./node_modules/ol/src/webgl/RenderTarget.js","webpack://SITNA/./node_modules/ol/src/renderer/webgl/PointsLayer.js","webpack://SITNA/./node_modules/ol/src/worker/webgl.js","webpack://SITNA/./node_modules/ol/src/layer/Heatmap.js","webpack://SITNA/./node_modules/ol/src/tilecoord.js","webpack://SITNA/./node_modules/ol/src/tilegrid/TileGrid.js","webpack://SITNA/./node_modules/ol/src/source/Cluster.js","webpack://SITNA/./node_modules/ol/src/source/common.js","webpack://SITNA/./node_modules/ol/src/reproj/Image.js","webpack://SITNA/./node_modules/ol/src/source/Image.js","webpack://SITNA/./node_modules/ol/src/source/WMSServerType.js","webpack://SITNA/./node_modules/ol/src/uri.js","webpack://SITNA/./node_modules/ol/src/source/ImageWMS.js","webpack://SITNA/./node_modules/ol/src/structs/LRUCache.js","webpack://SITNA/./node_modules/ol/src/TileCache.js","webpack://SITNA/./node_modules/ol/src/source/TileEventType.js","webpack://SITNA/./node_modules/ol/src/tilegrid.js","webpack://SITNA/./node_modules/ol/src/source/Tile.js","webpack://SITNA/./node_modules/ol/src/tileurlfunction.js","webpack://SITNA/./node_modules/ol/src/source/UrlTile.js","webpack://SITNA/./node_modules/ol/src/source/TileImage.js","webpack://SITNA/./node_modules/ol/src/source/WMTSRequestEncoding.js","webpack://SITNA/./node_modules/ol/src/tilegrid/WMTS.js","webpack://SITNA/./node_modules/ol/src/source/WMTS.js","webpack://SITNA/./node_modules/ol/src/ImageCanvas.js","webpack://SITNA/./node_modules/ol/src/source/ImageCanvas.js","webpack://SITNA/./TC/ol/ol.js","webpack://SITNA/./node_modules/ol/src/proj/proj4.js","webpack://SITNA/./node_modules/ol/src/render.js","webpack://SITNA/./TC/tool/Proxification.js","webpack://SITNA/./TC/ui/autocomplete.js","webpack://SITNA/./TC/view/ThreeD.js","webpack://SITNA/./TC/wrap.js","webpack://SITNA/webpack/bootstrap","webpack://SITNA/webpack/runtime/create fake namespace object","webpack://SITNA/webpack/runtime/load script","webpack://SITNA/webpack/runtime/compat get default export","webpack://SITNA/webpack/runtime/define property getters","webpack://SITNA/webpack/runtime/ensure chunk","webpack://SITNA/webpack/runtime/get javascript chunk filename","webpack://SITNA/webpack/runtime/global","webpack://SITNA/webpack/runtime/hasOwnProperty shorthand","webpack://SITNA/webpack/runtime/make namespace object","webpack://SITNA/webpack/runtime/publicPath","webpack://SITNA/webpack/runtime/jsonp chunk loading","webpack://SITNA/./SITNA/Map.js","webpack://SITNA/./SITNA/feature/Marker.js","webpack://SITNA/./sitna.js"],"sourcesContent":["var map = {\n\t\"./Attribution\": 7738,\n\t\"./Attribution.js\": 7738,\n\t\"./BasemapSelector\": 1370,\n\t\"./BasemapSelector.js\": 1370,\n\t\"./CacheBuilder\": 9014,\n\t\"./CacheBuilder.js\": 9014,\n\t\"./Click\": 1432,\n\t\"./Click.js\": 1432,\n\t\"./Container\": 2273,\n\t\"./Container.js\": 2273,\n\t\"./ControlContainer\": 9306,\n\t\"./ControlContainer.js\": 9306,\n\t\"./Coordinates\": 1977,\n\t\"./Coordinates.js\": 1977,\n\t\"./DataLoader\": 3192,\n\t\"./DataLoader.js\": 3192,\n\t\"./Download\": 5153,\n\t\"./Download.js\": 5153,\n\t\"./Draw\": 2791,\n\t\"./Draw.js\": 2791,\n\t\"./DrawMeasureModify\": 4313,\n\t\"./DrawMeasureModify.js\": 4313,\n\t\"./Edit\": 3054,\n\t\"./Edit.js\": 3054,\n\t\"./Elevation\": 2890,\n\t\"./Elevation.js\": 2890,\n\t\"./ExternalWMS\": 7648,\n\t\"./ExternalWMS.js\": 7648,\n\t\"./FeatureDownloadDialog\": 5539,\n\t\"./FeatureDownloadDialog.js\": 5539,\n\t\"./FeatureInfo\": 8144,\n\t\"./FeatureInfo.js\": 8144,\n\t\"./FeatureInfoCommons\": 128,\n\t\"./FeatureInfoCommons.js\": 128,\n\t\"./FeatureTools\": 8703,\n\t\"./FeatureTools.js\": 8703,\n\t\"./FileEdit\": 3908,\n\t\"./FileEdit.js\": 3908,\n\t\"./FileImport\": 7757,\n\t\"./FileImport.js\": 7757,\n\t\"./FullScreen\": 1115,\n\t\"./FullScreen.js\": 1115,\n\t\"./Geolocation\": 8924,\n\t\"./Geolocation.js\": 8924,\n\t\"./GeometryFeatureInfo\": 8410,\n\t\"./GeometryFeatureInfo.js\": 8410,\n\t\"./LanguageSelector\": 8325,\n\t\"./LanguageSelector.js\": 8325,\n\t\"./LayerCatalog\": 1231,\n\t\"./LayerCatalog.js\": 1231,\n\t\"./Legend\": 7746,\n\t\"./Legend.js\": 7746,\n\t\"./LineFeatureInfo\": 3011,\n\t\"./LineFeatureInfo.js\": 3011,\n\t\"./ListTOC\": 3571,\n\t\"./ListTOC.js\": 3571,\n\t\"./LoadingIndicator\": 273,\n\t\"./LoadingIndicator.js\": 273,\n\t\"./MapContents\": 6595,\n\t\"./MapContents.js\": 6595,\n\t\"./MapInfo\": 2000,\n\t\"./MapInfo.js\": 2000,\n\t\"./Measure\": 3731,\n\t\"./Measure.js\": 3731,\n\t\"./Modify\": 1797,\n\t\"./Modify.js\": 1797,\n\t\"./MultiFeatureInfo\": 122,\n\t\"./MultiFeatureInfo.js\": 122,\n\t\"./NavBar\": 2582,\n\t\"./NavBar.js\": 2582,\n\t\"./NavBarHome\": 3739,\n\t\"./NavBarHome.js\": 3739,\n\t\"./OfflineMapMaker\": 2721,\n\t\"./OfflineMapMaker.js\": 2721,\n\t\"./OverviewMap\": 5277,\n\t\"./OverviewMap.js\": 5277,\n\t\"./PolygonFeatureInfo\": 8418,\n\t\"./PolygonFeatureInfo.js\": 8418,\n\t\"./Popup\": 6200,\n\t\"./Popup.js\": 6200,\n\t\"./Print\": 3905,\n\t\"./Print.js\": 3905,\n\t\"./PrintMap\": 6145,\n\t\"./PrintMap.js\": 6145,\n\t\"./ProjectionSelector\": 1926,\n\t\"./ProjectionSelector.js\": 1926,\n\t\"./ResultsPanel\": 9158,\n\t\"./ResultsPanel.js\": 9158,\n\t\"./SWCacheClient\": 2197,\n\t\"./SWCacheClient.js\": 2197,\n\t\"./Scale\": 9555,\n\t\"./Scale.js\": 9555,\n\t\"./ScaleBar\": 3068,\n\t\"./ScaleBar.js\": 3068,\n\t\"./ScaleSelector\": 7570,\n\t\"./ScaleSelector.js\": 7570,\n\t\"./Search\": 907,\n\t\"./Search.js\": 907,\n\t\"./SelectContainer\": 2780,\n\t\"./SelectContainer.js\": 2780,\n\t\"./Share\": 956,\n\t\"./Share.js\": 956,\n\t\"./StreetView\": 1475,\n\t\"./StreetView.js\": 1475,\n\t\"./TOC\": 3869,\n\t\"./TOC.js\": 3869,\n\t\"./TabContainer\": 8719,\n\t\"./TabContainer.js\": 8719,\n\t\"./ThreeD\": 7381,\n\t\"./ThreeD.js\": 7381,\n\t\"./WFSEdit\": 1373,\n\t\"./WFSEdit.js\": 1373,\n\t\"./WFSQuery\": 3698,\n\t\"./WFSQuery.js\": 3698,\n\t\"./WebComponentControl\": 5850,\n\t\"./WebComponentControl.js\": 5850,\n\t\"./WorkLayerManager\": 8633,\n\t\"./WorkLayerManager.js\": 8633,\n\t\"./infoShare\": 7901,\n\t\"./infoShare.js\": 7901,\n\t\"./itemToolContainer\": 7435,\n\t\"./itemToolContainer.js\": 7435,\n\t\"./layerOwner\": 8330,\n\t\"./layerOwner.js\": 8330\n};\n\n\nfunction webpackAsyncContext(req) {\n\treturn webpackAsyncContextResolve(req).then(__webpack_require__);\n}\nfunction webpackAsyncContextResolve(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\treturn map[req];\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.resolve = webpackAsyncContextResolve;\nwebpackAsyncContext.id = 837;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Attribution\": 7738,\n\t\"./Attribution.js\": 7738,\n\t\"./BasemapSelector\": 1370,\n\t\"./BasemapSelector.js\": 1370,\n\t\"./CacheBuilder\": 9014,\n\t\"./CacheBuilder.js\": 9014,\n\t\"./Click\": 1432,\n\t\"./Click.js\": 1432,\n\t\"./Container\": 2273,\n\t\"./Container.js\": 2273,\n\t\"./ControlContainer\": 9306,\n\t\"./ControlContainer.js\": 9306,\n\t\"./Coordinates\": 1977,\n\t\"./Coordinates.js\": 1977,\n\t\"./DataLoader\": 3192,\n\t\"./DataLoader.js\": 3192,\n\t\"./Download\": 5153,\n\t\"./Download.js\": 5153,\n\t\"./Draw\": 2791,\n\t\"./Draw.js\": 2791,\n\t\"./DrawMeasureModify\": 4313,\n\t\"./DrawMeasureModify.js\": 4313,\n\t\"./Edit\": 3054,\n\t\"./Edit.js\": 3054,\n\t\"./Elevation\": 2890,\n\t\"./Elevation.js\": 2890,\n\t\"./ExternalWMS\": 7648,\n\t\"./ExternalWMS.js\": 7648,\n\t\"./FeatureDownloadDialog\": 5539,\n\t\"./FeatureDownloadDialog.js\": 5539,\n\t\"./FeatureInfo\": 8144,\n\t\"./FeatureInfo.js\": 8144,\n\t\"./FeatureInfoCommons\": 128,\n\t\"./FeatureInfoCommons.js\": 128,\n\t\"./FeatureTools\": 8703,\n\t\"./FeatureTools.js\": 8703,\n\t\"./FileEdit\": 3908,\n\t\"./FileEdit.js\": 3908,\n\t\"./FileImport\": 7757,\n\t\"./FileImport.js\": 7757,\n\t\"./FullScreen\": 1115,\n\t\"./FullScreen.js\": 1115,\n\t\"./Geolocation\": 8924,\n\t\"./Geolocation.js\": 8924,\n\t\"./GeometryFeatureInfo\": 8410,\n\t\"./GeometryFeatureInfo.js\": 8410,\n\t\"./LanguageSelector\": 8325,\n\t\"./LanguageSelector.js\": 8325,\n\t\"./LayerCatalog\": 1231,\n\t\"./LayerCatalog.js\": 1231,\n\t\"./Legend\": 7746,\n\t\"./Legend.js\": 7746,\n\t\"./LineFeatureInfo\": 3011,\n\t\"./LineFeatureInfo.js\": 3011,\n\t\"./ListTOC\": 3571,\n\t\"./ListTOC.js\": 3571,\n\t\"./LoadingIndicator\": 273,\n\t\"./LoadingIndicator.js\": 273,\n\t\"./MapContents\": 6595,\n\t\"./MapContents.js\": 6595,\n\t\"./MapInfo\": 2000,\n\t\"./MapInfo.js\": 2000,\n\t\"./Measure\": 3731,\n\t\"./Measure.js\": 3731,\n\t\"./Modify\": 1797,\n\t\"./Modify.js\": 1797,\n\t\"./MultiFeatureInfo\": 122,\n\t\"./MultiFeatureInfo.js\": 122,\n\t\"./NavBar\": 2582,\n\t\"./NavBar.js\": 2582,\n\t\"./NavBarHome\": 3739,\n\t\"./NavBarHome.js\": 3739,\n\t\"./OfflineMapMaker\": 2721,\n\t\"./OfflineMapMaker.js\": 2721,\n\t\"./OverviewMap\": 5277,\n\t\"./OverviewMap.js\": 5277,\n\t\"./PolygonFeatureInfo\": 8418,\n\t\"./PolygonFeatureInfo.js\": 8418,\n\t\"./Popup\": 6200,\n\t\"./Popup.js\": 6200,\n\t\"./Print\": 3905,\n\t\"./Print.js\": 3905,\n\t\"./PrintMap\": 6145,\n\t\"./PrintMap.js\": 6145,\n\t\"./ProjectionSelector\": 1926,\n\t\"./ProjectionSelector.js\": 1926,\n\t\"./ResultsPanel\": 9158,\n\t\"./ResultsPanel.js\": 9158,\n\t\"./SWCacheClient\": 2197,\n\t\"./SWCacheClient.js\": 2197,\n\t\"./Scale\": 9555,\n\t\"./Scale.js\": 9555,\n\t\"./ScaleBar\": 3068,\n\t\"./ScaleBar.js\": 3068,\n\t\"./ScaleSelector\": 7570,\n\t\"./ScaleSelector.js\": 7570,\n\t\"./Search\": 907,\n\t\"./Search.js\": 907,\n\t\"./SelectContainer\": 2780,\n\t\"./SelectContainer.js\": 2780,\n\t\"./Share\": 956,\n\t\"./Share.js\": 956,\n\t\"./StreetView\": 1475,\n\t\"./StreetView.js\": 1475,\n\t\"./TOC\": 3869,\n\t\"./TOC.js\": 3869,\n\t\"./TabContainer\": 8719,\n\t\"./TabContainer.js\": 8719,\n\t\"./ThreeD\": 7381,\n\t\"./ThreeD.js\": 7381,\n\t\"./WFSEdit\": 1373,\n\t\"./WFSEdit.js\": 1373,\n\t\"./WFSQuery\": 3698,\n\t\"./WFSQuery.js\": 3698,\n\t\"./WebComponentControl\": 5850,\n\t\"./WebComponentControl.js\": 5850,\n\t\"./WorkLayerManager\": 8633,\n\t\"./WorkLayerManager.js\": 8633,\n\t\"./infoShare\": 7901,\n\t\"./infoShare.js\": 7901,\n\t\"./itemToolContainer\": 7435,\n\t\"./itemToolContainer.js\": 7435,\n\t\"./layerOwner\": 8330,\n\t\"./layerOwner.js\": 8330\n};\n\nfunction webpackAsyncContext(req) {\n\treturn Promise.resolve().then(() => {\n\t\tif(!__webpack_require__.o(map, req)) {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\n\t\tvar id = map[req];\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 8949;\nmodule.exports = webpackAsyncContext;","import Component from './Component';\r\n\r\nconst elementName = \"sitna-button\";\r\n\r\nclass Button extends Component {\r\n\r\n #button;\r\n #variant = Button.variant.DEFAULT;\r\n #active = false;\r\n\r\n static variant = {\r\n DEFAULT: 'default',\r\n ICON: 'icon',\r\n ICONLEFT: 'iconleft',\r\n LINK: 'link',\r\n MINIMAL: 'minimal'\r\n }\r\n\r\n static action = {\r\n CLOSE: 'close',\r\n DELETE: 'delete',\r\n DOWNLOAD: 'download',\r\n DOWNLOAD_ALL: 'download_all',\r\n EDIT: 'edit',\r\n SHARE: 'share'\r\n }\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.#button = document.createElement('button');\r\n self.#button.setAttribute('type', 'button');\r\n self.shadowRoot.appendChild(self.#button);\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.text = self.text;\r\n self.variant = self.variant;\r\n self.active = self.active;\r\n self.disabled = self.disabled;\r\n self.icon = self.icon;\r\n self.iconText = self.iconText;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['text', 'icon', 'variant', 'disabled', 'active', 'icon-text'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'disabled') {\r\n self.disabled = self.hasAttribute(name);\r\n }\r\n else if (name === 'active') {\r\n self.active = self.hasAttribute(name);\r\n }\r\n if (oldValue !== newValue) {\r\n if (name === 'text') {\r\n self.text = newValue;\r\n }\r\n if (name === 'icon') {\r\n self.icon = newValue;\r\n }\r\n if (name === 'variant') {\r\n self.variant = newValue;\r\n }\r\n if (name === 'icon-text') {\r\n self.iconText = newValue;\r\n }\r\n }\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n get variant() {\r\n return this.#variant;\r\n }\r\n\r\n set variant(value) {\r\n const self = this;\r\n\r\n self.#button.classList.remove(self.#variant);\r\n if (value && value !== Button.variant.DEFAULT) {\r\n self.#button.classList.add(value);\r\n self.setAttribute('variant', value);\r\n }\r\n else {\r\n self.removeAttribute('variant');\r\n }\r\n if (value === Button.variant.ICON || value === Button.variant.MINIMAL || value === Button.variant.LINK) {\r\n self.#button.setAttribute('title', self.text);\r\n }\r\n else {\r\n self.#button.removeAttribute('title');\r\n }\r\n self.#variant = value || Button.variant.DEFAULT;\r\n }\r\n\r\n get text() {\r\n return this.getAttribute('text');\r\n }\r\n\r\n set text(value) {\r\n const self = this;\r\n self.#button.innerHTML = value;\r\n self.setAttribute('text', value);\r\n }\r\n\r\n get iconText() {\r\n return this.getAttribute('icon-text');\r\n }\r\n\r\n #setDataValue(name, value) {\r\n const self = this;\r\n if (value) {\r\n self.#button.setAttribute('data-' + name, value);\r\n self.setAttribute(name, value);\r\n }\r\n else {\r\n delete self.#button.removeAttribute('data-' + name);\r\n self.removeAttribute(name);\r\n }\r\n }\r\n\r\n set iconText(value) {\r\n const self = this;\r\n self.#setDataValue('icon-text', value);\r\n }\r\n\r\n get icon() {\r\n return this.getAttribute('icon');\r\n }\r\n\r\n set icon(value) {\r\n const self = this;\r\n self.#setDataValue('icon', value);\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('disabled', boolValue);\r\n self.#button.disabled = boolValue;\r\n }\r\n\r\n get active() {\r\n return this.#active;\r\n }\r\n\r\n set active(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('active', boolValue);\r\n self.#button.classList.toggle('active', boolValue);\r\n }}\r\n\r\ncustomElements.define(elementName, Button);\r\nexport default Button;","import TC from '../../TC';\r\n\r\nconst elementName = 'sitna-component';\r\n\r\nclass Component extends HTMLElement {\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.attachShadow({ mode: 'open' });\r\n const link = document.createElement('link');\r\n link.setAttribute('rel', 'stylesheet');\r\n link.href = `${TC.apiLocation}css/ui/${self.elementName}.css`;\r\n self.shadowRoot.appendChild(link);\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n}\r\n\r\nexport default Component;","import Component from './Component';\r\n\r\nconst elementName = \"sitna-toggle\";\r\n\r\nclass Toggle extends Component {\r\n\r\n #checkbox;\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n self.#checkbox = document.createElement('input');\r\n self.#checkbox.setAttribute('type', 'checkbox');\r\n self.#checkbox.addEventListener('change', function (_e) {\r\n self.checked = self.#checkbox.checked;\r\n const event = new Event('change', { bubbles: true });\r\n self.dispatchEvent(event);\r\n });\r\n self.shadowRoot.appendChild(self.#checkbox);\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.text = self.text;\r\n self.checked = self.checked;\r\n self.checkedIconText = self.checkedIconText;\r\n self.uncheckedIconText = self.uncheckedIconText;\r\n self.disabled = self.disabled;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['text', 'disabled', 'checked', 'checked-icon-text', 'unchecked-icon-text'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'disabled') {\r\n self.disabled = self.disabled;\r\n }\r\n else if (name === 'checked') {\r\n self.checked = self.checked;\r\n }\r\n if (oldValue !== newValue) {\r\n if (name === 'text') {\r\n self.text = newValue;\r\n }\r\n if (name === 'checked-icon-text') {\r\n self.checkedIconText = newValue;\r\n }\r\n if (name === 'unchecked-icon-text') {\r\n self.uncheckedIconText = newValue;\r\n }\r\n }\r\n }\r\n\r\n get elementName() {\r\n return elementName;\r\n }\r\n\r\n get text() {\r\n return this.getAttribute('text');\r\n }\r\n\r\n set text(value) {\r\n const self = this;\r\n self.#checkbox.setAttribute('title', value);\r\n self.setAttribute('text', value);\r\n }\r\n\r\n get checkedIconText() {\r\n return this.getAttribute('checked-icon-text');\r\n }\r\n\r\n get uncheckedIconText() {\r\n return this.getAttribute('unchecked-icon-text');\r\n }\r\n\r\n #setDataValue(name, value) {\r\n const self = this;\r\n if (value) {\r\n self.#checkbox.setAttribute('data-' + name, value);\r\n self.setAttribute(name, value);\r\n }\r\n else {\r\n delete self.#checkbox.removeAttribute('data-' + name);\r\n self.removeAttribute(name);\r\n }\r\n }\r\n\r\n set checkedIconText(value) {\r\n const self = this;\r\n self.#setDataValue('checked-icon-text', value);\r\n }\r\n\r\n set uncheckedIconText(value) {\r\n const self = this;\r\n self.#setDataValue('unchecked-icon-text', value);\r\n }\r\n\r\n get checked() {\r\n return this.hasAttribute('checked');\r\n }\r\n\r\n set checked(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('checked', boolValue);\r\n self.#checkbox.checked = boolValue;\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n set disabled(value) {\r\n const self = this;\r\n const boolValue = !!value;\r\n self.toggleAttribute('disabled', boolValue);\r\n self.#checkbox.disabled = boolValue;\r\n }\r\n}\r\n\r\ncustomElements.define(elementName, Toggle);\r\nexport default Toggle;","import loadjs from 'loadjs';\r\nimport proj4 from 'proj4';\r\n\r\nvar TC = TC || {};\r\n\r\n(function () {\r\n if (!TC.apiLocation) {\r\n var script;\r\n if (document.currentScript) {\r\n script = document.currentScript;\r\n }\r\n else {\r\n var scripts = document.getElementsByTagName('script');\r\n script = scripts[scripts.length - 1];\r\n }\r\n var src = script.getAttribute('src');\r\n TC.apiLocation = src.substr(0, src.lastIndexOf('/') + 1);\r\n }\r\n})();\r\n\r\nTC.control = {};\r\nTC.capabilities = {};\r\nTC.capabilitiesWFS = {};\r\nTC.describeFeatureType = {};\r\n\r\nTC.cache = {};\r\n\r\nif (typeof TC.isDebug !== \"boolean\") {\r\n TC.isDebug = true;\r\n}\r\n\r\nTC.alert = function (text) {\r\n alert(text);\r\n};\r\n\r\nTC.prompt = function (text, value, callback) {\r\n var newValue = prompt(text, value);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(newValue);\r\n }\r\n};\r\n\r\nTC.confirm = function (text, accept, cancel) {\r\n if (confirm(text)) {\r\n if (TC.Util.isFunction(accept)) {\r\n accept();\r\n }\r\n }\r\n else {\r\n if (TC.Util.isFunction(cancel)) {\r\n cancel();\r\n }\r\n }\r\n};\r\n\r\nTC.error = function (text) {\r\n if (window.console) {\r\n console.error(text);\r\n }\r\n};\r\n\r\n/* \r\n * proxify: returns cross-origin safe URL\r\n */\r\nTC.proxify = function (url) {\r\n url = url.trim();\r\n var result = url;\r\n const cfgProxy = window.TC.Cfg.proxy;\r\n if (cfgProxy) {\r\n var prevent = false;\r\n const cfgProxyExceptions = window.TC.Cfg.proxyExceptions;\r\n if (cfgProxyExceptions) {\r\n for (var i = 0; i < cfgProxyExceptions.length; i++) {\r\n if (url.indexOf(cfgProxyExceptions[i]) > -1) {\r\n prevent = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!prevent && !TC.Util.isSameOrigin(url)) {\r\n if (typeof cfgProxy === \"function\") {\r\n result = cfgProxy(url);\r\n } else {\r\n result = cfgProxy;\r\n if (url.substr(0, 4) !== \"http\") result += window.location.protocol;\r\n result += encodeURIComponent(url);\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nconst getHead = function () {\r\n var result;\r\n var d = document;\r\n var ah = d.getElementsByTagName(\"head\");\r\n if (ah.length === 0) {\r\n result = d.createElement(\"head\");\r\n d.documentElement.insertBefore(result, document.body);\r\n }\r\n else {\r\n result = ah[0];\r\n }\r\n return result;\r\n};\r\n\r\nvar _showLoadFailedError = function (url) {\r\n let stack = \"\";\r\n try {\r\n throw new Error();\r\n } catch (error) {\r\n stack = error && error.stack ? error.stack : error.toString();\r\n }\r\n\r\n const mapObj = TC.Map.get(document.querySelector('.' + TC.Consts.classes.MAP));\r\n const subject = \"Error al cargar \" + url;\r\n const body = TC.Util.getLocaleString(mapObj ? mapObj.options.locale : 'es-ES', \"urlFailedToLoad\", { url: url });\r\n\r\n // tostada sin la pila\r\n TC.error(\r\n body,\r\n [TC.Consts.msgErrorMode.TOAST],\r\n subject);\r\n // email con pila\r\n TC.error(\r\n `${body}. Pila de la llamada al recurso: \r\n${stack && stack.length > 0 ? stack : \"\"}`,\r\n [TC.Consts.msgErrorMode.EMAIL],\r\n subject);\r\n};\r\n\r\nTC.syncLoadJS = function (url) {\r\n var _sendRequest = function (url, callbackErrorFn) {\r\n var req = new XMLHttpRequest();\r\n req.open(\"GET\", url, false); // 'false': synchronous.\r\n var result;\r\n\r\n req.onreadystatechange = function (e) {\r\n if (req.readyState === 4) {\r\n if (req.status === 404) {\r\n result = false;\r\n callbackErrorFn(true);\r\n } else if (req.status !== 200) {\r\n callbackErrorFn();\r\n result = false;\r\n } else {\r\n result = req.responseText;\r\n }\r\n }\r\n };\r\n\r\n\r\n try {\r\n req.send(null);\r\n } catch (error) {\r\n result = false;\r\n callbackErrorFn();\r\n }\r\n\r\n return result;\r\n };\r\n\r\n if (!/(\\.js|\\/)$/i.test(url)) { // Si pedimos un archivo sin extensión se la ponemos según el entorno\r\n url = url + (TC.isDebug ? '.js' : '.min.js');\r\n }\r\n\r\n var reqResult = _sendRequest(url, function (is404) {\r\n if (is404) {\r\n _showLoadFailedError(url);\r\n return false;\r\n } else {\r\n return _sendRequest(url, function () {\r\n _showLoadFailedError(url);\r\n });\r\n }\r\n });\r\n\r\n if (reqResult) {\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.text = reqResult;\r\n getHead().appendChild(script);\r\n }\r\n};\r\n\r\nTC.loadJSInOrder = function (condition, url, callback) {\r\n TC.loadJS(condition, url, callback, true);\r\n};\r\n\r\nconst addCrossOriginAttr = function (path, scriptEl) {\r\n if (!TC.Util.isSameOrigin(path)) {\r\n scriptEl.crossOrigin = \"anonymous\";\r\n }\r\n};\r\n\r\nTC.loadJS = function (condition, url, callback, inOrder, notCrossOrigin) {\r\n if (arguments.length < 4) {\r\n inOrder = false;\r\n }\r\n\r\n var urls = Array.isArray(url) ? url : [url];\r\n urls = urls.map(function (elm) {\r\n if (!/\\.js$/i.test(elm) && elm.indexOf(TC.apiLocation) === 0) { // Si pedimos un archivo sin extensión y es nuestro se la ponemos según el entorno\r\n return elm + (TC.isDebug ? '.js' : '.min.js');\r\n }\r\n return elm;\r\n });\r\n\r\n if (condition) {\r\n urls = urls instanceof Array ? urls : [urls];\r\n\r\n var name = \"\";\r\n const getName = function (path) {\r\n return path.split('/').reverse().slice(0, 2).reverse().join('_').toLowerCase();\r\n };\r\n if (urls.length > 1) {\r\n var toReduce = urls.slice(0).filter(function (path, index) {\r\n if (loadjs.isDefined(getName(path))) {\r\n urls.splice(index, 1);\r\n loadjs.ready(getName(path), callback);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n if (toReduce.length === 1) {\r\n name = getName(toReduce[0]);\r\n } else if (toReduce.length > 0) {\r\n name = toReduce.reduce(function (prev, curr) {\r\n return getName(prev) + \"_\" + getName(curr);\r\n });\r\n }\r\n } else {\r\n name = getName(urls[0]);\r\n }\r\n\r\n if (name.length > 0) {\r\n if (!loadjs.isDefined(name)) {\r\n var options = {\r\n async: !inOrder,\r\n numRetries: 1\r\n };\r\n\r\n if (!notCrossOrigin && !TC.Util.detectIE()) {\r\n options.before = addCrossOriginAttr;\r\n }\r\n\r\n loadjs(urls, name, options);\r\n loadjs.ready(name, {\r\n success: function () {\r\n callback();\r\n },\r\n error: function (pathsNotFound) {\r\n _showLoadFailedError(pathsNotFound);\r\n }\r\n });\r\n } else {\r\n // Esto vuelve a añadir el script al head si se está pidiendo un script cargado previamente.\r\n //urls.forEach(function (url) {\r\n // const urlObj = new URL(url, location.href);\r\n // const script = Array.from(document.scripts).filter((scr) => scr.src === urlObj.href)[0];\r\n // if (script) {\r\n // document.head.appendChild(script.cloneNode());\r\n // }\r\n //});\r\n loadjs.ready(name, callback);\r\n }\r\n }\r\n }\r\n else {\r\n callback();\r\n }\r\n};\r\n\r\nTC.loadCSS = function (url) {\r\n const getName = function (path) {\r\n return path.split('/').reverse().slice(0, 2).reverse().join('_').toLowerCase();\r\n };\r\n\r\n const name = getName(url);\r\n if (!loadjs.isDefined(name)) {\r\n loadjs(url, name, {\r\n error: function (pathsNotFound) {\r\n _showLoadFailedError(pathsNotFound);\r\n },\r\n numRetries: 1\r\n });\r\n } else {\r\n loadjs.ready(name, {});\r\n }\r\n};\r\n\r\n// Transformación de petición AJAX de jQuery a promesa nativa\r\nTC.ajax = function (options) {\r\n return new Promise(function (resolve, reject) {\r\n options = options || {};\r\n const method = options.method || 'GET';\r\n const isGET = method === 'GET';\r\n var data;\r\n if (options.data) {\r\n if (typeof options.data === 'string') {\r\n data = options.data;\r\n }\r\n else if (typeof options.data === 'object') {\r\n if (isGET && (options.contentType || typeof options.contentType === 'boolean')) {\r\n data = TC.Util.getParamString(options.data);\r\n } else {\r\n const paramArray = [];\r\n for (var key in options.data) {\r\n paramArray.push(key + '=' + options.data[key].toString());\r\n }\r\n data = paramArray.join('&');\r\n }\r\n }\r\n }\r\n var url = options.url;\r\n if (isGET && data) {\r\n url = url + '?' + data;\r\n }\r\n if (options.cache === false) {\r\n url += (url.indexOf('?') < 0 ? '?' : '&') + 'ts=' + Date.now();\r\n }\r\n\r\n const fetchOptions = {\r\n method: method,\r\n headers: new Headers()\r\n };\r\n if (options.contentType || typeof options.contentType === 'boolean') {\r\n if (options.contentType) {\r\n fetchOptions.headers.append('Content-Type', options.contentType + '; charset=UTF-8');\r\n }\r\n }\r\n else {\r\n fetchOptions.headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\r\n }\r\n if (method === 'POST') {\r\n fetchOptions.body = data;\r\n }\r\n\r\n fetch(url, fetchOptions)\r\n .then(async response => {\r\n if (response.ok) {\r\n try {\r\n let responseData;\r\n switch (options.responseType) {\r\n case TC.Consts.mimeType.JSON:\r\n //URI: Compruebo que la respuesta no es un XML de excepción\r\n responseData = await response.json();\r\n break;\r\n case TC.Consts.mimeType.XML:\r\n responseData = await response.text();\r\n responseData = new DOMParser().parseFromString(responseData, 'application/xml');\r\n break;\r\n default:\r\n responseData = await response.text();\r\n break;\r\n }\r\n resolve({ data: responseData, contentType: response.headers.get(\"Content-type\") });\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n else {\r\n reject({\r\n status: response.status,\r\n msg: response.statusText,\r\n url: url\r\n });\r\n }\r\n })\r\n .catch(err => reject(err));\r\n });\r\n};\r\n\r\nvar projectionDataCache = {};\r\n\r\nTC.getProjectionData = function (options) {\r\n options = options || {};\r\n const crs = options.crs || '';\r\n const match = crs.match(/\\d{4,5}$/g);\r\n let code = match ? match[0] : '';\r\n const url = TC.Consts.url.EPSG + '?format=json&q=' + code;\r\n let projData = projectionDataCache[code];\r\n if (projData) {\r\n if (options.sync) {\r\n return projData;\r\n }\r\n return Promise.resolve(projData);\r\n }\r\n if (options.sync) {\r\n let result;\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = function (e) {\r\n if (xhr.readyState == 4) {\r\n if (xhr.status == 404) {\r\n result = false;\r\n } else if (xhr.status != 200) {\r\n result = false;\r\n } else {\r\n result = xhr.responseText;\r\n }\r\n }\r\n };\r\n xhr.open('GET', url, false);\r\n\r\n try {\r\n xhr.send(null);\r\n } catch (error) {\r\n result = false;\r\n }\r\n if (result) {\r\n result = JSON.parse(result);\r\n }\r\n return result;\r\n }\r\n return new Promise(function (resolve, reject) {\r\n const toolProxification = new TC.tool.Proxification(TC.proxify);\r\n toolProxification.fetchJSON(url, options).then(function (data) {\r\n projectionDataCache[code] = data;\r\n resolve(data);\r\n }).catch(function (error) {\r\n reject(error instanceof Error ? error : Error(error));\r\n });\r\n });\r\n};\r\n\r\nTC.loadProjDef = function (options) {\r\n options = options || {};\r\n const crs = options.crs;\r\n const epsgPrefix = 'EPSG:';\r\n const urnPrefix = 'urn:ogc:def:crs:EPSG::';\r\n const urnxPrefix = 'urn:x-ogc:def:crs:EPSG:';\r\n const ogcHttpUrlPrefix = 'http://www.opengis.net/gml/srs/epsg.xml#';\r\n const ogcHttpUriPrefix = 'http://www.opengis.net/def/crs/EPSG/0/';\r\n\r\n const fromHTTPURIToURN = function (name) {\r\n var match = /http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/\\d\\/(\\d{4,5})/.exec(name);\r\n if (match && match.length === 2) {\r\n return urnPrefix + match[1];\r\n }\r\n\r\n return name;\r\n };\r\n\r\n var getDef;\r\n getDef = function (name) {\r\n name = fromHTTPURIToURN(name);\r\n return proj4.defs(name);\r\n };\r\n const isFunction = function (obj) {\r\n return typeof obj === 'function';\r\n };\r\n const loadDef = function (code, def, name) {\r\n // Lista sacada de https://docs.geoserver.org/stable/en/user/services/wfs/webadmin.html#gml\r\n const epsgCode = epsgPrefix + code;\r\n const urnCode = urnPrefix + code;\r\n const urnxCode = urnxPrefix + code;\r\n const ogcHttpUrlCode = ogcHttpUrlPrefix + code;\r\n const ogcHttpUriCode = ogcHttpUriPrefix + code;\r\n var axisUnawareDef;\r\n if (typeof def === 'object') {\r\n axisUnawareDef = TC.Util.extend({}, def);\r\n def = TC.Util.extend({}, def);\r\n if (axisUnawareDef.axis) {\r\n delete axisUnawareDef.axis;\r\n }\r\n }\r\n else if (typeof def === 'string') {\r\n axisUnawareDef = def.replace('+axis=neu', '');\r\n }\r\n proj4.defs(epsgCode, def);\r\n proj4.defs(urnCode, def);\r\n proj4.defs(urnxCode, def);\r\n // Por convención, los CRS definidos por URL siempre tienen orden de coordenadas X-Y.\r\n proj4.defs(ogcHttpUrlCode, axisUnawareDef);\r\n proj4.defs(ogcHttpUriCode, def);\r\n if (crs.indexOf(ogcHttpUrlPrefix) === 0) {\r\n // El CRS es tipo URL, usado seguramente en un GML.\r\n proj4.defs(crs, axisUnawareDef);\r\n getDef(crs).name = name;\r\n }\r\n if (window.ol && ol.proj && !options.silent) {\r\n // https://openlayers.org/en/latest/apidoc/module-ol_proj_proj4.html\r\n ol.proj.proj4.register(proj4);\r\n }\r\n getDef(epsgCode).name = name;\r\n getDef(ogcHttpUrlCode).name = name;\r\n getDef(ogcHttpUriCode).name = name;\r\n };\r\n const loadDefResponse = function (data) {\r\n const result = data && data.status === 'ok' && data.number_result === 1;\r\n if (result) {\r\n var def = data.results[0];\r\n loadDef(def.code, def.proj4, def.name);\r\n }\r\n return result;\r\n };\r\n\r\n var idx = crs.lastIndexOf('#');\r\n if (idx < 0) {\r\n idx = crs.lastIndexOf('/');\r\n }\r\n if (idx < 0) {\r\n idx = crs.lastIndexOf(':');\r\n }\r\n var code = crs.substr(idx + 1);\r\n var def = getDef(crs);\r\n if (def) {\r\n loadDef(code, def, options.name);\r\n if (isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n else {\r\n if (options.def) {\r\n loadDef(code, options.def, options.name);\r\n if (isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n else {\r\n const loadDataAndExecCallback = function (data) {\r\n if (loadDefResponse(data) && isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n };\r\n if (options.sync) {\r\n const data = TC.getProjectionData(options);\r\n loadDataAndExecCallback(data);\r\n }\r\n else {\r\n TC.getProjectionData(options).then(loadDataAndExecCallback).catch(e => console.error(e));\r\n }\r\n }\r\n }\r\n};\r\n\r\nTC.inherit = function (childCtor, parentCtor) {\r\n childCtor.prototype = Object.create(parentCtor.prototype);\r\n childCtor.prototype.constructor = childCtor;\r\n childCtor._super = parentCtor.prototype;\r\n};\r\n\r\nTC.mix = function (targetCtor, ...mixins) {\r\n Object.assign(targetCtor.prototype, ...mixins);\r\n};\r\n\r\nconst uids = new Map();\r\nTC.getUID = function (options) {\r\n const opts = options || {};\r\n const prefix = opts.prefix || '';\r\n let value = uids.get(prefix);\r\n if (!value) {\r\n value = 1;\r\n }\r\n var result = prefix + value;\r\n uids.set(prefix, value + 1);\r\n if (opts.banlist && opts.banlist.includes(result)) {\r\n return TC.getUID(options);\r\n }\r\n return result;\r\n};\r\n\r\nTC.setUIDStart = function (count, options) {\r\n const opts = options || {};\r\n const prefix = opts.prefix || '';\r\n let currentValue = uids.get(prefix);\r\n if (!currentValue) {\r\n currentValue = 1;\r\n }\r\n if (count > currentValue) {\r\n uids.set(prefix, count);\r\n return count;\r\n }\r\n return currentValue;\r\n};\r\n\r\nconst prefixes = ['', '-webkit-', '-moz-', '-o-', '-ms-'];\r\nconst randomText = ':-)';\r\nconst urlString = 'http://sitna.tracasa.es/';\r\nvar touch;\r\nvar inputTypeColor;\r\nvar urlParser;\r\nTC.browserFeatures = {\r\n touch: function () {\r\n if (touch === undefined) {\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\r\n touch = true;\r\n return true;\r\n }\r\n const query = prefixes\r\n .map(function (prefix) { return '(' + prefix + 'touch-enabled)'; })\r\n .join();\r\n touch = matchMedia(query).matches;\r\n }\r\n return touch;\r\n },\r\n inputTypeColor: function () {\r\n if (inputTypeColor === undefined) {\r\n const elm = document.createElement('input');\r\n elm.setAttribute('type', 'color');\r\n inputTypeColor = elm.type !== 'text' && 'style' in elm;\r\n if (inputTypeColor) {\r\n elm.value = randomText;\r\n inputTypeColor = elm.value !== randomText;\r\n }\r\n }\r\n return inputTypeColor;\r\n },\r\n urlParser: function () {\r\n if (urlParser === undefined) {\r\n try {\r\n // have to actually try use it, because Safari defines a dud constructor\r\n const url = new URL(urlString);\r\n urlParser = url.href === urlString;\r\n } catch (e) {\r\n urlParser = false;\r\n }\r\n }\r\n return urlParser;\r\n }\r\n};\r\n\r\nconst pluses = /\\+/g;\r\nfunction raw(s) {\r\n return s;\r\n}\r\nfunction decoded(s) {\r\n return decodeURIComponent(s.replace(pluses, ' '));\r\n}\r\n\r\nTC.cookie = function (key, value, options) {\r\n\r\n // key and at least value given, set cookie...\r\n if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null)) {\r\n options = TC.Util.extend({}, options);\r\n\r\n if (value === null) {\r\n options.expires = -1;\r\n }\r\n\r\n if (typeof options.expires === 'number') {\r\n var days = options.expires, t = options.expires = new Date();\r\n t.setDate(t.getDate() + days);\r\n }\r\n\r\n value = String(value);\r\n\r\n return (document.cookie = [\r\n encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),\r\n options.expires ? ';expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n options.path ? ';path=' + options.path : '',\r\n options.domain ? ';domain=' + options.domain : '',\r\n options.secure ? ';secure' : ''\r\n ].join(''));\r\n }\r\n\r\n // key and possibly options given, get cookie...\r\n options = value || {};\r\n var decode = options.raw ? raw : decoded;\r\n var cookies = document.cookie.split('; ');\r\n for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) {\r\n if (decode(parts.shift()) === key) {\r\n return decode(parts.join('='));\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport default TC;","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/// \r\n\r\nimport JSNLogAppender = JL.JSNLogAppender\r\nimport JSNLogAppenderOptions = JL.JSNLogAppenderOptions\r\nimport JSNLogAjaxAppender = JL.JSNLogAjaxAppender\r\nimport JSNLogAjaxAppenderOptions = JL.JSNLogAjaxAppenderOptions\r\nimport JSNLogConsoleAppender = JL.JSNLogConsoleAppender\r\nimport JSNLogFilterOptions = JL.JSNLogFilterOptions\r\nimport JSNLogLogger = JL.JSNLogLogger\r\nimport JSNLogLoggerOptions = JL.JSNLogLoggerOptions\r\nimport JSNLogOptions = JL.JSNLogOptions\r\n\r\n// Ambient definition of XDomainRequest (only used with IE8 and 9), to prevent TypeScript compiler \"name not found\" error.\r\ndeclare class XDomainRequest\r\n{\r\n\topen(method: string, url: string);\r\n}\r\n\r\nfunction JL(loggerName?: string): JSNLogLogger\r\n{\r\n // If name is empty, return the root logger\r\n if (!loggerName)\r\n {\r\n return JL.__;\r\n }\r\n\r\n // Implements Array.reduce. JSNLog supports IE8+ and reduce is not supported in that browser.\r\n // Same interface as the standard reduce, except that \r\n if (!Array.prototype.reduce)\r\n {\r\n Array.prototype.reduce = function (callback: (previousValue: any, currentValue: any, currentIndex: number, array: any[]) => any, initialValue?: any)\r\n {\r\n var previousValue = initialValue;\r\n for (var i = 0; i < this.length; i++)\r\n {\r\n previousValue = callback(previousValue, this[i], i, this);\r\n }\r\n\r\n return previousValue;\r\n };\r\n }\r\n\r\n var accumulatedLoggerName = '';\r\n var logger: JL.Logger = ('.' + loggerName).split('.').reduce(\r\n function (prev: JL.Logger, curr: string, idx: number, arr: string[])\r\n {\r\n // if loggername is a.b.c, than currentLogger will be set to the loggers\r\n // root (prev: JL, curr: '')\r\n // a (prev: JL.__, curr: 'a')\r\n // a.b (prev: JL.__.__a, curr: 'b')\r\n // a.b.c (prev: JL.__.__a.__a.b, curr: 'c')\r\n\r\n // Note that when a new logger name is encountered (such as 'a.b.c'),\r\n // a new logger object is created and added as a property to the parent ('a.b').\r\n // The root logger is added as a property of the JL object itself.\r\n\r\n // It is essential that the name of the property containing the child logger\r\n // contains the full 'path' name of the child logger ('a.b.c') instead of\r\n // just the bit after the last period ('c').\r\n // This is because the parent inherits properties from its ancestors.\r\n // So if the root has a child logger 'c' (stored in a property 'c' of the root logger),\r\n // then logger 'a.b' has that same property 'c' through inheritance.\r\n\r\n // The names of the logger properties start with __, so the root logger \r\n // (which has name ''), has a nice property name '__'. \r\n\r\n // accumulatedLoggerName evaluates false ('' is falsy) in first iteration when prev is the root logger.\r\n // accumulatedLoggerName will be the logger name corresponding with the logger in currentLogger.\r\n // Keep in mind that the currentLogger may not be defined yet, so can't get the name from\r\n // the currentLogger object itself. \r\n if (accumulatedLoggerName)\r\n {\r\n accumulatedLoggerName += '.' + curr;\r\n } else\r\n {\r\n accumulatedLoggerName = curr;\r\n }\r\n\r\n var currentLogger = prev['__' + accumulatedLoggerName];\r\n\r\n // If the currentLogger (or the actual logger being sought) does not yet exist, \r\n // create it now.\r\n if (currentLogger === undefined)\r\n {\r\n\r\n // Set the prototype of the Logger constructor function to the parent of the logger\r\n // to be created. This way, __proto of the new logger object will point at the parent.\r\n // When logger.level is evaluated and is not present, the JavaScript runtime will \r\n // walk down the prototype chain to find the first ancestor with a level property.\r\n //\r\n // Note that prev at this point refers to the parent logger.\r\n\r\n JL.Logger.prototype = prev;\r\n\r\n currentLogger = new JL.Logger(accumulatedLoggerName);\r\n prev['__' + accumulatedLoggerName] = currentLogger;\r\n }\r\n\r\n return currentLogger;\r\n }, JL.__);\r\n\r\n return logger;\r\n}\r\n\r\nmodule JL\r\n{\r\n\r\n export var enabled: boolean;\r\n export var maxMessages: number;\r\n export var defaultAjaxUrl: string;\r\n export var clientIP: string;\r\n export var defaultBeforeSend: any;\r\n\r\n // Initialise requestId to empty string. If you don't do this and the user\r\n // does not set it via setOptions, then the JSNLog-RequestId header will\r\n // have value \"undefined\", which doesn't look good in a log.\r\n //\r\n // Note that you always want to send a requestId as part of log requests,\r\n // otherwise the server side component doesn't know this is a log request\r\n // and may create a new request id for the log request, causing confusion\r\n // in the log.\r\n export var requestId: string = '';\r\n\r\n /**\r\n Copies the value of a property from one object to the other.\r\n This is used to copy property values as part of setOption for loggers and appenders.\r\n\r\n Because loggers inherit property values from their parents, it is important never to\r\n create a property on a logger if the intent is to inherit from the parent.\r\n\r\n Copying rules:\r\n 1) if the from property is undefined (for example, not mentioned in a JSON object), the\r\n to property is not affected at all.\r\n 2) if the from property is null, the to property is deleted (so the logger will inherit from\r\n its parent).\r\n 3) Otherwise, the from property is copied to the to property.\r\n */\r\n function copyProperty(propertyName: string, from: any, to: any): void\r\n {\r\n if (from[propertyName] === undefined) { return; }\r\n if (from[propertyName] === null) { delete to[propertyName]; return; }\r\n to[propertyName] = from[propertyName];\r\n }\r\n\r\n /**\r\n Returns true if a log should go ahead.\r\n Does not check level.\r\n\r\n @param filters\r\n Filters that determine whether a log can go ahead.\r\n */\r\n function allow(filters: JSNLogFilterOptions): boolean\r\n {\r\n // If enabled is not null or undefined, then if it is false, then return false\r\n // Note that undefined==null (!)\r\n if (!(JL.enabled == null))\r\n {\r\n if (!JL.enabled) { return false; }\r\n }\r\n\r\n // If maxMessages is not null or undefined, then if it is 0, then return false.\r\n // Note that maxMessages contains number of messages that are still allowed to send.\r\n // It is decremented each time messages are sent. It can be negative when batch size > 1.\r\n // Note that undefined==null (!)\r\n if (!(JL.maxMessages == null))\r\n {\r\n if (JL.maxMessages < 1) { return false; }\r\n }\r\n\r\n // If the regex contains a bug, that will throw an exception.\r\n // Ignore this, and pass the log item (better too much than too little).\r\n\r\n try\r\n {\r\n if (filters.userAgentRegex)\r\n {\r\n if (!new RegExp(filters.userAgentRegex).test(navigator.userAgent)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n try\r\n {\r\n if (filters.ipRegex && JL.clientIP)\r\n {\r\n if (!new RegExp(filters.ipRegex).test(JL.clientIP)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n Returns true if a log should go ahead, based on the message.\r\n\r\n @param filters\r\n Filters that determine whether a log can go ahead.\r\n\r\n @param message\r\n Message to be logged.\r\n */\r\n function allowMessage(filters: JSNLogFilterOptions, message: string): boolean\r\n {\r\n // If the regex contains a bug, that will throw an exception.\r\n // Ignore this, and pass the log item (better too much than too little).\r\n\r\n try\r\n {\r\n if (filters.disallow)\r\n {\r\n if (new RegExp(filters.disallow).test(message)) { return false; }\r\n }\r\n } catch (e) { }\r\n\r\n return true;\r\n }\r\n\r\n // If logObject is a function, the function is evaluated (without parameters)\r\n // and the result returned.\r\n // Otherwise, logObject itself is returned.\r\n function stringifyLogObjectFunction(logObject: any): any\r\n {\r\n if (typeof logObject == \"function\") \r\n {\r\n if (logObject instanceof RegExp)\r\n {\r\n return logObject.toString();\r\n }\r\n else\r\n {\r\n return logObject();\r\n }\r\n }\r\n\r\n return logObject;\r\n }\r\n\r\n class StringifiedLogObject\r\n {\r\n // * msg - \r\n // if the logObject is a scalar (after possible function evaluation), this is set to\r\n // string representing the scalar. Otherwise it is left undefined.\r\n // * meta -\r\n // if the logObject is an object (after possible function evaluation), this is set to\r\n // that object. Otherwise it is left undefined.\r\n // * finalString -\r\n // This is set to the string representation of logObject (after possible function evaluation),\r\n // regardless of whether it is an scalar or an object. An object is stringified to a JSON string.\r\n // Note that you can't call this field \"final\", because as some point this was a reserved\r\n // JavaScript keyword and using final trips up some minifiers.\r\n constructor(public msg?: string, public meta?: any, public finalString?: string) { }\r\n }\r\n\r\n // Takes a logObject, which can be \r\n // * a scalar\r\n // * an object\r\n // * a parameterless function, which returns the scalar or object to log.\r\n // Returns a stringifiedLogObject\r\n function stringifyLogObject(logObject: any): StringifiedLogObject\r\n {\r\n // Note that this works if logObject is null.\r\n // typeof null is object.\r\n // JSON.stringify(null) returns \"null\".\r\n\r\n var actualLogObject = stringifyLogObjectFunction(logObject);\r\n var finalString;\r\n\r\n // Note that typeof actualLogObject should not be \"function\", because that has \r\n // been resolved with stringifyLogObjectFunction.\r\n\r\n switch (typeof actualLogObject)\r\n {\r\n case \"string\":\r\n return new StringifiedLogObject(actualLogObject, null, actualLogObject);\r\n case \"number\":\r\n finalString = actualLogObject.toString(); \r\n return new StringifiedLogObject(finalString, null, finalString);\r\n case \"boolean\":\r\n finalString = actualLogObject.toString(); \r\n return new StringifiedLogObject(finalString, null, finalString);\r\n case \"undefined\":\r\n return new StringifiedLogObject(\"undefined\", null, \"undefined\");\r\n case \"object\":\r\n if ((actualLogObject instanceof RegExp) ||\r\n (actualLogObject instanceof String) ||\r\n (actualLogObject instanceof Number) ||\r\n (actualLogObject instanceof Boolean))\r\n {\r\n finalString = actualLogObject.toString();\r\n return new StringifiedLogObject(finalString, null, finalString);\r\n }\r\n else\r\n {\r\n return new StringifiedLogObject(null, actualLogObject, JSON.stringify(actualLogObject));\r\n }\r\n default:\r\n return new StringifiedLogObject(\"unknown\", null, \"unknown\");\r\n }\r\n }\r\n\r\n export function setOptions(options: JSNLogOptions): void\r\n {\r\n copyProperty(\"enabled\", options, this);\r\n copyProperty(\"maxMessages\", options, this);\r\n copyProperty(\"defaultAjaxUrl\", options, this);\r\n copyProperty(\"clientIP\", options, this);\r\n copyProperty(\"requestId\", options, this);\r\n copyProperty(\"defaultBeforeSend\", options, this);\r\n return this;\r\n }\r\n\r\n export function getAllLevel(): number { return -2147483648; }\r\n export function getTraceLevel(): number { return 1000; }\r\n export function getDebugLevel(): number { return 2000; }\r\n export function getInfoLevel(): number { return 3000; }\r\n export function getWarnLevel(): number { return 4000; }\r\n export function getErrorLevel(): number { return 5000; }\r\n export function getFatalLevel(): number { return 6000; }\r\n export function getOffLevel(): number { return 2147483647; }\r\n\r\n function levelToString(level: number): string\r\n {\r\n if (level <= 1000) { return \"trace\"; }\r\n if (level <= 2000) { return \"debug\"; }\r\n if (level <= 3000) { return \"info\"; }\r\n if (level <= 4000) { return \"warn\"; }\r\n if (level <= 5000) { return \"error\"; }\r\n return \"fatal\";\r\n }\r\n\r\n // ---------------------\r\n\r\n export class Exception\r\n {\r\n public name: string;\r\n public message: string;\r\n\r\n // data replaces message. It takes not just strings, but also objects and functions, just like the log function.\r\n // internally, the string representation is stored in the message property (inherited from Error)\r\n //\r\n // inner: inner exception. Can be null or undefined. \r\n constructor(data: any, public inner?: any)\r\n {\r\n this.name = \"JL.Exception\";\r\n this.message = stringifyLogObject(data).finalString;\r\n }\r\n }\r\n\r\n // Derive Exception from Error (a Host object), so browsers\r\n // are more likely to produce a stack trace for it in their console.\r\n //\r\n // Note that instanceof against an object created with this constructor\r\n // will return true in these cases:\r\n // instanceof JL.Exception);\r\n // instanceof Error);\r\n\r\n Exception.prototype = new Error();\r\n\r\n // ---------------------\r\n\r\n export class LogItem\r\n {\r\n // l: level\r\n // m: message\r\n // n: logger name\r\n // t (timeStamp) is number of milliseconds since 1 January 1970 00:00:00 UTC\r\n //\r\n // Keeping the property names really short, because they will be sent in the\r\n // JSON payload to the server.\r\n constructor(public l: number, public m: string,\r\n public n: string, public t: number) { }\r\n }\r\n\r\n // ---------------------\r\n\r\n export class Appender implements JSNLogAppender, JSNLogFilterOptions\r\n {\r\n public level: number = JL.getTraceLevel();\r\n public ipRegex: string;\r\n public userAgentRegex: string;\r\n public disallow: string;\r\n\r\n // set to super high level, so if user increases level, level is unlikely to get \r\n // above sendWithBufferLevel\r\n private sendWithBufferLevel: number = 2147483647;\r\n\r\n private storeInBufferLevel: number = -2147483648;\r\n private bufferSize: number = 0; // buffering switch off by default\r\n private batchSize: number = 1;\r\n\r\n // Holds all log items with levels higher than storeInBufferLevel \r\n // but lower than level. These items may never be sent.\r\n private buffer: LogItem[] = [];\r\n\r\n // Holds all items that we do want to send, until we have a full\r\n // batch (as determined by batchSize).\r\n private batchBuffer: LogItem[] = [];\r\n\r\n // sendLogItems takes an array of log items. It will be called when\r\n // the appender has items to process (such as, send to the server).\r\n // Note that after sendLogItems returns, the appender may truncate\r\n // the LogItem array, so the function has to copy the content of the array\r\n // in some fashion (eg. serialize) before returning.\r\n\r\n constructor(\r\n public appenderName: string,\r\n public sendLogItems: (logItems: LogItem[]) => void)\r\n {\r\n }\r\n\r\n public setOptions(options: JSNLogAppenderOptions): JSNLogAppender\r\n {\r\n copyProperty(\"level\", options, this);\r\n copyProperty(\"ipRegex\", options, this);\r\n copyProperty(\"userAgentRegex\", options, this);\r\n copyProperty(\"disallow\", options, this);\r\n copyProperty(\"sendWithBufferLevel\", options, this);\r\n copyProperty(\"storeInBufferLevel\", options, this);\r\n copyProperty(\"bufferSize\", options, this);\r\n copyProperty(\"batchSize\", options, this);\r\n\r\n if (this.bufferSize < this.buffer.length) { this.buffer.length = this.bufferSize; }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n Called by a logger to log a log item.\r\n If in response to this call one or more log items need to be processed\r\n (eg., sent to the server), this method calls this.sendLogItems\r\n with an array with all items to be processed.\r\n\r\n Note that the name and parameters of this function must match those of the log function of\r\n a Winston transport object, so that users can use these transports as appenders.\r\n That is why there are many parameters that are not actually used by this function.\r\n\r\n level - string with the level (\"trace\", \"debug\", etc.) Only used by Winston transports.\r\n msg - human readable message. Undefined if the log item is an object. Only used by Winston transports.\r\n meta - log object. Always defined, because at least it contains the logger name. Only used by Winston transports.\r\n callback - function that is called when the log item has been logged. Only used by Winston transports.\r\n levelNbr - level as a number. Not used by Winston transports.\r\n message - log item. If the user logged an object, this is the JSON string. Not used by Winston transports.\r\n loggerName: name of the logger. Not used by Winston transports.\r\n */\r\n public log(\r\n level: string, msg: string, meta: any, callback: () => void,\r\n levelNbr: number, message: string, loggerName: string): void\r\n {\r\n var logItem: LogItem;\r\n\r\n if (!allow(this)) { return; }\r\n if (!allowMessage(this, message)) { return; }\r\n\r\n if (levelNbr < this.storeInBufferLevel)\r\n {\r\n // Ignore the log item completely\r\n return;\r\n }\r\n\r\n logItem = new LogItem(levelNbr, message, loggerName, (new Date).getTime());\r\n\r\n if (levelNbr < this.level)\r\n {\r\n // Store in the hold buffer. Do not send.\r\n if (this.bufferSize > 0)\r\n {\r\n this.buffer.push(logItem);\r\n\r\n // If we exceeded max buffer size, remove oldest item\r\n if (this.buffer.length > this.bufferSize)\r\n {\r\n this.buffer.shift();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (levelNbr < this.sendWithBufferLevel)\r\n {\r\n // Want to send the item, but not the contents of the buffer\r\n this.batchBuffer.push(logItem);\r\n\r\n } else\r\n {\r\n // Want to send both the item and the contents of the buffer.\r\n // Send contents of buffer first, because logically they happened first.\r\n if (this.buffer.length)\r\n {\r\n this.batchBuffer = this.batchBuffer.concat(this.buffer);\r\n this.buffer.length = 0;\r\n }\r\n this.batchBuffer.push(logItem);\r\n }\r\n\r\n if (this.batchBuffer.length >= this.batchSize)\r\n {\r\n this.sendBatch();\r\n return;\r\n }\r\n }\r\n\r\n // Processes the batch buffer\r\n private sendBatch(): void\r\n {\r\n if (this.batchBuffer.length == 0)\r\n {\r\n return;\r\n }\r\n\r\n if (!(JL.maxMessages == null))\r\n {\r\n if (JL.maxMessages < 1) { return; }\r\n }\r\n\r\n\r\n\r\n // If maxMessages is not null or undefined, then decrease it by the batch size.\r\n // This can result in a negative maxMessages.\r\n // Note that undefined==null (!)\r\n if (!(JL.maxMessages == null))\r\n {\r\n JL.maxMessages -= this.batchBuffer.length;\r\n }\r\n\r\n this.sendLogItems(this.batchBuffer);\r\n this.batchBuffer.length = 0;\r\n }\r\n }\r\n\r\n // ---------------------\r\n\r\n export class AjaxAppender extends Appender implements JSNLogAjaxAppender\r\n {\r\n private url: string;\r\n private beforeSend: any;\r\n\r\n public setOptions(options: JSNLogAjaxAppenderOptions): JSNLogAjaxAppender\r\n {\r\n copyProperty(\"url\", options, this);\r\n copyProperty(\"beforeSend\", options, this);\r\n super.setOptions(options);\r\n return this;\r\n }\r\n\r\n public sendLogItemsAjax(logItems: LogItem[]): void\r\n {\r\n // JSON.stringify is only supported on IE8+\r\n // Use try-catch in case we get an exception here.\r\n //\r\n // The \"r\" field is now obsolete. When writing a server side component, \r\n // read the HTTP header \"JSNLog-RequestId\"\r\n // to get the request id.\r\n //\r\n // The .Net server side component\r\n // now uses the JSNLog-RequestId HTTP Header, because this allows it to\r\n // detect whether the incoming request has a request id.\r\n // If the request id were in the json payload, it would have to read the json\r\n // from the stream, interfering with normal non-logging requests.\r\n //\r\n // To see what characters you can use in the HTTP header, visit:\r\n // http://stackoverflow.com/questions/3561381/custom-http-headers-naming-conventions/3561399#3561399\r\n //\r\n // It needs this ability, so users of NLog can set a requestId variable in NLog\r\n // before the server side component tries to log the client side log message\r\n // through an NLog logger.\r\n // Unlike Log4Net, NLog doesn't allow you to register an object whose ToString()\r\n // is only called when it tries to log something, so the requestId has to be \r\n // determined right at the start of request processing.\r\n try\r\n {\r\n // Only determine the url right before you send a log request.\r\n // Do not set the url when constructing the appender.\r\n //\r\n // This is because the server side component sets defaultAjaxUrl\r\n // in a call to setOptions, AFTER the JL object and the default appender\r\n // have been created. \r\n\r\n var ajaxUrl: string = \"/jsnlog.logger\";\r\n\r\n // This evaluates to true if defaultAjaxUrl is null or undefined\r\n if (!(JL.defaultAjaxUrl == null))\r\n {\r\n ajaxUrl = JL.defaultAjaxUrl;\r\n }\r\n\r\n if (this.url)\r\n {\r\n ajaxUrl = this.url;\r\n }\r\n\r\n // Send the json to the server. \r\n // Note that there is no event handling here. If the send is not\r\n // successful, nothing can be done about it.\r\n\r\n var xhr = this.getXhr(ajaxUrl);\r\n\r\n var json: any = {\r\n r: JL.requestId,\r\n lg: logItems\r\n };\r\n\r\n // call beforeSend callback\r\n // first try the callback on the appender\r\n // then the global defaultBeforeSend callback\r\n if (typeof this.beforeSend === 'function')\r\n {\r\n this.beforeSend.call(this, xhr, json);\r\n } else if (typeof JL.defaultBeforeSend === 'function')\r\n {\r\n JL.defaultBeforeSend.call(this, xhr, json);\r\n }\r\n\r\n var finalmsg = JSON.stringify(json);\r\n xhr.send(finalmsg);\r\n } catch (e) { }\r\n }\r\n\r\n\t\t// Creates the Xhr object to use to send the log request.\r\n\t\t// Sets out to create an Xhr object that can be used for CORS.\r\n\t\t// However, if there seems to be no CORS support on the browser,\r\n\t\t// returns a non-CORS capable Xhr.\r\n\t\tprivate getXhr(ajaxUrl: string): any\r\n {\r\n\t\t var xhr = new XMLHttpRequest();\r\n\r\n\t\t\t// Check whether this xhr is CORS capable by checking whether it has\r\n\t\t\t// withCredentials. \r\n\t\t\t// \"withCredentials\" only exists on XMLHTTPRequest2 objects.\r\n\t\r\n\t\t\tif (!(\"withCredentials\" in xhr)) {\r\n\r\n\t\t\t\t// Just found that no XMLHttpRequest2 available.\r\n\t\t\t\t// Check if XDomainRequest is available.\r\n\t\t\t\t// This only exists in IE, and is IE's way of making CORS requests.\r\n\r\n\t\t\t\tif (typeof XDomainRequest != \"undefined\") {\r\n\r\n\t\t\t\t\t// Note that here we're not setting request headers on the XDomainRequest\r\n\t\t\t\t\t// object. This is because this object doesn't let you do that:\r\n\t\t\t\t\t// http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\r\n\t\t\t\t\t// This means that for IE8 and IE9, CORS logging requests do not carry request ids.\r\n\r\n\t\t\t\t\tvar xdr = new XDomainRequest();\r\n\t\t\t\t\txdr.open('POST', ajaxUrl);\r\n\t\t\t\t\treturn xdr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// At this point, we're going with XMLHttpRequest, whether it is CORS capable or not.\r\n\t\t\t// If it is not CORS capable, at least will handle the non-CORS requests.\r\n\r\n\t\t\txhr.open('POST', ajaxUrl);\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.setRequestHeader('JSNLog-RequestId', JL.requestId);\r\n\r\n\t\t\treturn xhr;\r\n\t\t}\r\n\r\n constructor(appenderName: string)\r\n {\r\n super(appenderName, AjaxAppender.prototype.sendLogItemsAjax);\r\n }\r\n }\r\n // ---------------------\r\n\r\n export class ConsoleAppender extends Appender implements JSNLogConsoleAppender\r\n {\r\n\r\n private clog(logEntry: string)\r\n {\r\n console.log(logEntry);\r\n }\r\n\r\n private cerror(logEntry: string)\r\n {\r\n if (console.error)\r\n {\r\n console.error(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n private cwarn(logEntry: string)\r\n {\r\n if (console.warn)\r\n {\r\n console.warn(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n private cinfo(logEntry: string)\r\n {\r\n if (console.info)\r\n {\r\n console.info(logEntry);\r\n } else\r\n {\r\n this.clog(logEntry);\r\n }\r\n }\r\n\r\n // IE11 has a console.debug function. But its console doesn't have \r\n // the option to show/hide debug messages (the same way Chrome and FF do),\r\n // even though it does have such buttons for Error, Warn, Info.\r\n //\r\n // For now, this means that debug messages can not be hidden on IE.\r\n // Live with this, seeing that it works fine on FF and Chrome, which\r\n // will be much more popular with developers.\r\n private cdebug(logEntry: string)\r\n {\r\n if (console.debug)\r\n {\r\n console.debug(logEntry);\r\n } else\r\n {\r\n this.cinfo(logEntry);\r\n }\r\n }\r\n\r\n public sendLogItemsConsole(logItems: LogItem[]): void\r\n {\r\n try\r\n {\r\n if (!console) { return; }\r\n\r\n var i;\r\n for (i = 0; i < logItems.length; ++i)\r\n {\r\n var li = logItems[i];\r\n var msg = li.n + \": \" + li.m;\r\n\r\n // Only log the timestamp if we're on the server\r\n // (window is undefined). On the browser, the user\r\n // sees the log entry probably immediately, so in that case\r\n // the timestamp is clutter.\r\n if (typeof window === 'undefined')\r\n {\r\n msg = new Date(li.t) + \" | \" + msg;\r\n }\r\n\r\n if (li.l <= JL.getDebugLevel())\r\n {\r\n this.cdebug(msg);\r\n } else if (li.l <= JL.getInfoLevel())\r\n {\r\n this.cinfo(msg);\r\n } else if (li.l <= JL.getWarnLevel())\r\n {\r\n this.cwarn(msg);\r\n } else\r\n {\r\n this.cerror(msg);\r\n }\r\n }\r\n } catch (e)\r\n {\r\n }\r\n }\r\n\r\n constructor(appenderName: string)\r\n {\r\n super(appenderName, ConsoleAppender.prototype.sendLogItemsConsole);\r\n }\r\n }\r\n\r\n // --------------------\r\n\r\n export class Logger implements JSNLogLogger, JSNLogFilterOptions\r\n {\r\n public appenders: Appender[];\r\n\r\n // Array of strings with regular expressions. Used to stop duplicate messages.\r\n // If a message matches a regex\r\n // that has been matched before, that message will not be sent.\r\n public onceOnly: string[];\r\n\r\n public level: number;\r\n public userAgentRegex: string;\r\n public ipRegex: string;\r\n public disallow: string;\r\n\r\n // Used to remember which regexes in onceOnly have been successfully \r\n // matched against a message. Index into this array is same as index\r\n // in onceOnly of the corresponding regex.\r\n // When a regex has never been matched, the corresponding entry in this\r\n // array is undefined, which is falsey.\r\n private seenRegexes: boolean[];\r\n\r\n constructor(public loggerName: string)\r\n {\r\n // Create seenRexes, otherwise this logger will use the seenRexes\r\n // of its parent via the prototype chain.\r\n this.seenRegexes = [];\r\n }\r\n\r\n public setOptions(options: JSNLogLoggerOptions): JSNLogLogger\r\n {\r\n copyProperty(\"level\", options, this);\r\n copyProperty(\"userAgentRegex\", options, this);\r\n copyProperty(\"disallow\", options, this);\r\n copyProperty(\"ipRegex\", options, this);\r\n copyProperty(\"appenders\", options, this);\r\n copyProperty(\"onceOnly\", options, this);\r\n\r\n // Reset seenRegexes, in case onceOnly has been changed.\r\n this.seenRegexes = [];\r\n\r\n return this;\r\n }\r\n\r\n // Turns an exception into an object that can be sent to the server.\r\n private buildExceptionObject(e: any): any\r\n {\r\n var excObject: any = {};\r\n\r\n if (e.stack) { excObject.stack = e.stack; } else { excObject.e = e; }\r\n if (e.message) { excObject.message = e.message; }\r\n if (e.name) { excObject.name = e.name; }\r\n if (e.data) { excObject.data = e.data; }\r\n if (e.inner) { excObject.inner = this.buildExceptionObject(e.inner); }\r\n\r\n return excObject;\r\n }\r\n\r\n // Logs a log item.\r\n // Parameter e contains an exception (or null or undefined).\r\n //\r\n // Reason that processing exceptions is done at this low level is that\r\n // 1) no need to spend the cpu cycles if the logger is switched off\r\n // 2) fatalException takes both a logObject and an exception, and the logObject\r\n // may be a function that should only be executed if the logger is switched on.\r\n //\r\n // If an exception is passed in, the contents of logObject is attached to the exception\r\n // object in a new property logData.\r\n // The resulting exception object is than worked into a message to the server.\r\n //\r\n // If there is no exception, logObject itself is worked into the message to the server.\r\n public log(level: number, logObject: any, e?: any): JSNLogLogger\r\n {\r\n var i: number = 0;\r\n var compositeMessage: StringifiedLogObject;\r\n var excObject: any;\r\n\r\n // If we can't find any appenders, do nothing\r\n if (!this.appenders) { return this; }\r\n\r\n if (((level >= this.level)) && allow(this))\r\n {\r\n if (e) \r\n {\r\n excObject = this.buildExceptionObject(e);\r\n excObject.logData = stringifyLogObjectFunction(logObject);\r\n }\r\n else\r\n {\r\n excObject = logObject;\r\n }\r\n\r\n compositeMessage = stringifyLogObject(excObject);\r\n\r\n if (allowMessage(this, compositeMessage.finalString))\r\n {\r\n\r\n // See whether message is a duplicate\r\n\r\n if (this.onceOnly)\r\n {\r\n i = this.onceOnly.length - 1;\r\n while (i >= 0)\r\n {\r\n if (new RegExp(this.onceOnly[i]).test(compositeMessage.finalString))\r\n {\r\n if (this.seenRegexes[i])\r\n {\r\n return this;\r\n }\r\n\r\n this.seenRegexes[i] = true;\r\n }\r\n\r\n i--;\r\n }\r\n }\r\n\r\n // Pass message to all appenders\r\n\r\n // Note that these appenders could be Winston transports\r\n // https://github.com/flatiron/winston\r\n //\r\n // These transports do not take the logger name as a parameter.\r\n // So add it to the meta information, so even Winston transports will\r\n // store this info.\r\n\r\n compositeMessage.meta = compositeMessage.meta || {};\r\n compositeMessage.meta.loggerName = this.loggerName;\r\n\r\n i = this.appenders.length - 1;\r\n while (i >= 0)\r\n {\r\n this.appenders[i].log(\r\n levelToString(level), compositeMessage.msg, compositeMessage.meta, function () { },\r\n level, compositeMessage.finalString, this.loggerName);\r\n i--;\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public trace(logObject: any): JSNLogLogger { return this.log(getTraceLevel(), logObject); }\r\n public debug(logObject: any): JSNLogLogger { return this.log(getDebugLevel(), logObject); }\r\n public info(logObject: any): JSNLogLogger { return this.log(getInfoLevel(), logObject); }\r\n public warn(logObject: any): JSNLogLogger { return this.log(getWarnLevel(), logObject); }\r\n public error(logObject: any): JSNLogLogger { return this.log(getErrorLevel(), logObject); }\r\n public fatal(logObject: any): JSNLogLogger { return this.log(getFatalLevel(), logObject); }\r\n public fatalException(logObject: any, e: any): JSNLogLogger { return this.log(getFatalLevel(), logObject, e); }\r\n }\r\n\r\n export function createAjaxAppender(appenderName: string): JSNLogAjaxAppender\r\n {\r\n return new AjaxAppender(appenderName);\r\n }\r\n\r\n export function createConsoleAppender(appenderName: string): JSNLogConsoleAppender\r\n {\r\n return new ConsoleAppender(appenderName);\r\n }\r\n\r\n // -----------------------\r\n // In the browser, the default appender is the AjaxAppender.\r\n // Under nodejs (where there is no \"window\"), use the ConsoleAppender instead.\r\n\r\n var defaultAppender: Appender = new AjaxAppender(\"\");\r\n if (typeof window === 'undefined')\r\n {\r\n defaultAppender = new ConsoleAppender(\"\");\r\n }\r\n\r\n // Create root logger\r\n //\r\n // Note that this is the parent of all other loggers.\r\n // Logger \"x\" will be stored at\r\n // JL.__.x\r\n // Logger \"x.y\" at\r\n // JL.__.x.y\r\n export var __ = new JL.Logger(\"\");\r\n JL.__.setOptions(\r\n {\r\n level: JL.getDebugLevel(),\r\n appenders: [defaultAppender]\r\n });\r\n}\r\n \r\n// Support CommonJS module format \r\n\r\ndeclare var exports: any;\r\nif (typeof exports !== 'undefined')\r\n{\r\n exports.JL = JL;\r\n}\r\n\r\n// Support AMD module format\r\n\r\nvar define: any;\r\nif (typeof define == 'function' && define.amd)\r\n{\r\n define('jsnlog', [], function () {\r\n return JL;\r\n });\r\n}\r\n\r\n// If the __jsnlog_configure global function has been\r\n// created, call it now. This allows you to create a global function\r\n// setting logger options etc. inline in the page before jsnlog.js\r\n// has been loaded.\r\n\r\nif (typeof __jsnlog_configure == 'function') { __jsnlog_configure(JL); }\r\n\r\n\r\n","/*!\n\nJSZip v3.7.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=t()}}(function(){return function s(a,o,h){function u(r,t){if(!o[r]){if(!a[r]){var e=\"function\"==typeof require&&require;if(!t&&e)return e(r,!0);if(l)return l(r,!0);var i=new Error(\"Cannot find module '\"+r+\"'\");throw i.code=\"MODULE_NOT_FOUND\",i}var n=o[r]={exports:{}};a[r][0].call(n.exports,function(t){var e=a[r][1][t];return u(e||t)},n,n.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,t=0;t>2,s=(3&e)<<4|r>>4,a=1>6:64,o=2>4,r=(15&n)<<4|(s=p.indexOf(t.charAt(o++)))>>2,i=(3&s)<<6|(a=p.indexOf(t.charAt(o++))),l[h++]=e,64!==s&&(l[h++]=r),64!==a&&(l[h++]=i);return l}},{\"./support\":30,\"./utils\":32}],2:[function(t,e,r){\"use strict\";var i=t(\"./external\"),n=t(\"./stream/DataWorker\"),s=t(\"./stream/Crc32Probe\"),a=t(\"./stream/DataLengthProbe\");function o(t,e,r,i,n){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var t=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),e=this;return t.on(\"end\",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),t},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(t,e,r){return t.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(e.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",e)},e.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(t,e,r){\"use strict\";var i=t(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(t){return new i(\"STORE compression\")},uncompressWorker:function(){return new i(\"STORE decompression\")}},r.DEFLATE=t(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(t,e,r){\"use strict\";var i=t(\"./utils\");var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?\"string\"!==i.getTypeOf(t)?function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a>>8^n[255&(t^e[a])];return-1^t}(0|e,t,t.length,0):function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a>>8^n[255&(t^e.charCodeAt(a))];return-1^t}(0|e,t,t.length,0):0}},{\"./utils\":32}],5:[function(t,e,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){\"use strict\";var i=null;i=\"undefined\"!=typeof Promise?Promise:t(\"lie\"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,r){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,n=t(\"pako\"),s=t(\"./utils\"),a=t(\"./stream/GenericWorker\"),o=i?\"uint8array\":\"array\";function h(t,e){a.call(this,\"FlateWorker/\"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,t.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(t){return new h(\"Deflate\",t)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(t,e,r){\"use strict\";function A(t,e){var r,i=\"\";for(r=0;r>>=8;return i}function i(t,e,r,i,n,s){var a,o,h=t.file,u=t.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),d=I.transformTo(\"string\",O.utf8encode(h.name)),c=h.comment,p=I.transformTo(\"string\",s(c)),m=I.transformTo(\"string\",O.utf8encode(c)),_=d.length!==h.name.length,g=m.length!==c.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(x.crc32=t.crc32,x.compressedSize=t.compressedSize,x.uncompressedSize=t.uncompressedSize);var S=0;e&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===n?(C=798,z|=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(t){return 63&(t||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+d,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(i,4)+f+b+p}}var I=t(\"../utils\"),n=t(\"../stream/GenericWorker\"),O=t(\"../utf8\"),B=t(\"../crc32\"),R=t(\"../signature\");function s(t,e,r,i){n.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,n),s.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,n.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-i-1))/r:100}}))},s.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return R.DATA_DESCRIPTOR+A(t.crc32,4)+A(t.compressedSize,4)+A(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo(\"string\",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{\"../utils\":32}],19:[function(t,e,r){\"use strict\";var i=t(\"./Uint8ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(t,e,r){\"use strict\";var i=t(\"./DataReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./DataReader\":18}],21:[function(t,e,r){\"use strict\";var i=t(\"./ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"../support\"),s=t(\"./ArrayReader\"),a=t(\"./StringReader\"),o=t(\"./NodeBufferReader\"),h=t(\"./Uint8ArrayReader\");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),\"string\"!==e||n.uint8array?\"nodebuffer\"===e?new o(t):n.uint8array?new h(i.transformTo(\"uint8array\",t)):new s(i.transformTo(\"array\",t)):new a(t)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(t,e,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../utils\");function s(t){i.call(this,\"ConvertWorker to \"+t),this.destType=t}n.inherits(s,i),s.prototype.processChunk=function(t){this.push({data:n.transformTo(this.destType,t.data),meta:t.meta})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../crc32\");function s(){i.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}t(\"../utils\").inherits(s,i),s.prototype.processChunk=function(t){this.streamInfo.crc32=n(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataLengthProbe for \"+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(s,n),s.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}n.prototype.processChunk.call(this,t)},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataWorker\");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":t=this.data.substring(this.index,e);break;case\"uint8array\":t=this.data.subarray(this.index,e);break;case\"array\":case\"nodebuffer\":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(t,e,r){\"use strict\";function i(t){this.name=t||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit(\"data\",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit(\"error\",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit(\"error\",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r \"+t:t}},e.exports=i},{}],29:[function(t,e,r){\"use strict\";var h=t(\"../utils\"),n=t(\"./ConvertWorker\"),s=t(\"./GenericWorker\"),u=t(\"../base64\"),i=t(\"../support\"),a=t(\"../external\"),o=null;if(i.nodestream)try{o=t(\"../nodejs/NodejsStreamOutputAdapter\")}catch(t){}function l(t,o){return new a.Promise(function(e,r){var i=[],n=t._internalType,s=t._outputType,a=t._mimeType;t.on(\"data\",function(t,e){i.push(t),o&&o(e)}).on(\"error\",function(t){i=[],r(t)}).on(\"end\",function(){try{var t=function(t,e,r){switch(t){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",e),r);case\"base64\":return u.encode(e);default:return h.transformTo(t,e)}}(s,function(t,e){var r,i=0,n=null,s=0;for(r=0;r>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},s.utf8decode=function(t){return h.nodebuffer?o.transformTo(\"nodebuffer\",t).toString(\"utf-8\"):function(t){var e,r,i,n,s=t.length,a=new Array(2*s);for(e=r=0;e>10&1023,a[r++]=56320|1023&i)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(t=o.transformTo(h.uint8array?\"uint8array\":\"array\",t))},o.inherits(a,i),a.prototype.processChunk=function(t){var e=o.transformTo(h.uint8array?\"uint8array\":\"array\",t.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=e;(e=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}(e),n=e;i!==e.length&&(h.uint8array?(n=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(n=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:s.utf8decode(n),meta:t.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,i),l.prototype.processChunk=function(t){this.push({data:s.utf8encode(t.data),meta:t.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(t,e,a){\"use strict\";var o=t(\"./support\"),h=t(\"./base64\"),r=t(\"./nodejsUtils\"),i=t(\"set-immediate-shim\"),u=t(\"./external\");function n(t){return t}function l(t,e){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,i,n=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return l(t,t.length)},r.binstring2buf=function(t){for(var e=new h.Buf8(t.length),r=0,i=e.length;r>10&1023,o[i++]=56320|1023&n)}return l(o,i)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}},{\"./common\":41}],43:[function(t,e,r){\"use strict\";e.exports=function(t,e,r,i){for(var n=65535&t|0,s=t>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a>>8^n[255&(t^e[a])];return-1^t}},{}],46:[function(t,e,r){\"use strict\";var h,d=t(\"../utils/common\"),u=t(\"./trees\"),c=t(\"./adler32\"),p=t(\"./crc32\"),i=t(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,n=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(t,e){return t.msg=i[e],e}function T(t){return(t<<1)-(4t.avail_out&&(r=t.avail_out),0!==r&&(d.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function N(t,e){u._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,F(t.strm)}function U(t,e){t.pending_buf[t.pending++]=e}function P(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function L(t,e){var r,i,n=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-z?t.strstart-(t.w_size-z):0,u=t.window,l=t.w_mask,f=t.prev,d=t.strstart+S,c=u[s+a-1],p=u[s+a];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(u[(r=e)+a]===p&&u[r+a-1]===c&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--n);return a<=t.lookahead?a:t.lookahead}function j(t){var e,r,i,n,s,a,o,h,u,l,f=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-z)){for(d.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;i=t.head[--e],t.head[e]=f<=i?i-f:0,--r;);for(e=r=f;i=t.prev[--e],t.prev[e]=f<=i?i-f:0,--r;);n+=f}if(0===t.strm.avail_in)break;if(a=t.strm,o=t.window,h=t.strstart+t.lookahead,u=n,l=void 0,l=a.avail_in,u=x)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=(t.ins_h<=x&&(t.ins_h=(t.ins_h<=x)if(i=u._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=x&&(t.ins_h=(t.ins_h<=x&&t.match_length<=t.prev_length){for(n=t.strstart+t.lookahead-x,i=u._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=n&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(j(t),0===t.lookahead&&e===l)return A;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,N(t,!1),0===t.strm.avail_out))return A;if(t.strstart-t.block_start>=t.w_size-z&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):(t.strstart>t.block_start&&(N(t,!1),t.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(t,e){return Y(t,e,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?_:(t.state.gzhead=e,m):_},r.deflate=function(t,e){var r,i,n,s;if(!t||!t.state||5>8&255),U(i,i.gzhead.time>>16&255),U(i,i.gzhead.time>>24&255),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(U(i,255&i.gzhead.extra.length),U(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=p(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(U(i,0),U(i,0),U(i,0),U(i,0),U(i,0),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,3),i.status=E);else{var a=v+(i.w_bits-8<<4)<<8;a|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=E,P(i,a),0!==i.strstart&&(P(i,t.adler>>>16),P(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending!==i.pending_buf_size));)U(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindexn&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindexn&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&F(t),i.pending+2<=i.pending_buf_size&&(U(i,255&t.adler),U(i,t.adler>>8&255),t.adler=0,i.status=E)):i.status=E),0!==i.pending){if(F(t),0===t.avail_out)return i.last_flush=-1,m}else if(0===t.avail_in&&T(e)<=T(r)&&e!==f)return R(t,-5);if(666===i.status&&0!==t.avail_in)return R(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var o=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(j(t),0===t.lookahead)){if(e===l)return A;break}if(t.match_length=0,r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):3===i.strategy?function(t,e){for(var r,i,n,s,a=t.window;;){if(t.lookahead<=S){if(j(t),t.lookahead<=S&&e===l)return A;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=u._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):h[i.level].func(i,e);if(o!==O&&o!==B||(i.status=666),o===A||o===O)return 0===t.avail_out&&(i.last_flush=-1),m;if(o===I&&(1===e?u._tr_align(i):5!==e&&(u._tr_stored_block(i,0,0,!1),3===e&&(D(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),F(t),0===t.avail_out))return i.last_flush=-1,m}return e!==f?m:i.wrap<=0?1:(2===i.wrap?(U(i,255&t.adler),U(i,t.adler>>8&255),U(i,t.adler>>16&255),U(i,t.adler>>24&255),U(i,255&t.total_in),U(i,t.total_in>>8&255),U(i,t.total_in>>16&255),U(i,t.total_in>>24&255)):(P(i,t.adler>>>16),P(i,65535&t.adler)),F(t),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new d.Buf8(r.w_size),d.arraySet(u,e,l-r.w_size,r.w_size,0),e=u,l=r.w_size),a=t.avail_in,o=t.next_in,h=t.input,t.avail_in=l,t.next_in=0,t.input=e,j(r);r.lookahead>=x;){for(i=r.strstart,n=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(c&(1<>>=y,p-=y),p<15&&(c+=z[i++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<>>=y,p-=y,(y=s-a)>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){t.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<>>16^65535)){t.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){t.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg=\"invalid bit length repeat\",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg=\"invalid distance too far back\",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(hc?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u>=7;i>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{\"../utils/common\":41}],53:[function(t,e,r){\"use strict\";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){\"use strict\";e.exports=\"function\"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathname = path.replace(/[\\?|#].*$/, ''),\n pathStripped = path.replace(/^(css|img)!/, ''),\n isLegacyIECss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped;\n\n // tag IE9+\n isLegacyIECss = 'hideFocus' in e;\n\n // use preload in IE Edge (to detect load errors)\n if (isLegacyIECss && e.relList) {\n isLegacyIECss = 0;\n e.rel = 'preload';\n e.as = 'style';\n }\n } else if (/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(pathname)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n if (isLegacyIECss) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n } else if (e.rel == 'preload' && e.as == 'style') {\n // activate preloaded stylesheets\n return e.rel = 'stylesheet'; // jshint ignore:line\n }\n \n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n * callback or (3) object literal with success/error arguments, numRetries,\n * etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n * literal with success/error arguments, numRetries, etc.\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n \n // resolve Promise\n if (resolve) {\n executeCallbacks({success: resolve, error: reject}, pathsNotFound);\n }\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n }\n \n if (args.returnPromise) return new Promise(loadFn);\n else loadFn();\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.7.3\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support (#5572)\n // since Safari 10.1 shipped with fetch, we can use that to detect it\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n resolve(openreq.result);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback retuns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = req.onblocked = function (err) {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(err);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n ft: {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n gamma: function(v) {\n self.rectified_grid_angle = parseFloat(v);\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n },\n approx: function() {\n self.approx = true;\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'ENGINEERINGCRS':\n case 'ENGCRS':\n case 'FITTED_CS':\n case 'LOCAL_DATUM':\n case 'DATUM':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\n\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n } else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n } else {\n if (typeof wkt.PROJECTION === 'object') {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n } else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.AXIS) {\n var axisOrder = '';\n for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n axisOrder += 'n';\n } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n axisOrder += 's';\n } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n axisOrder += 'e';\n } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n axisOrder += 'w';\n }\n }\n if (axisOrder.length === 2) {\n axisOrder += 'u';\n }\n if (axisOrder.length === 3) {\n wkt.axis = axisOrder;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = wkt.UNIT.convert;\n }\n }\n }\n var geogcs = wkt.GEOGCS;\n if (wkt.type === 'GEOGCS') {\n geogcs = wkt;\n }\n if (geogcs) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (geogcs.DATUM) {\n wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n } else {\n wkt.datumCode = geogcs.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = 'rnb72';\n }\n if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n wkt.ellps = 'intl';\n }\n\n wkt.a = geogcs.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n }\n\n if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n wkt.datum_params = geogcs.DATUM.TOWGS84;\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = 'osgb36';\n }\n if (~wkt.datumCode.indexOf('osni_1952')) {\n wkt.datumCode = 'osni52';\n }\n if (~wkt.datumCode.indexOf('tm65')\n || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n wkt.datumCode = 'ire65';\n }\n if (wkt.datumCode === 'ch1903+') {\n wkt.datumCode = 'ch1903';\n }\n if (~wkt.datumCode.indexOf('israel')) {\n wkt.datumCode = 'isr93';\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return input * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n ['false_easting', 'False_Easting'],\n ['false_easting', 'False easting'],\n ['false-easting', 'Easting at false origin'],\n ['false_northing', 'False_Northing'],\n ['false_northing', 'False northing'],\n ['false_northing', 'Northing at false origin'],\n ['central_meridian', 'Central_Meridian'],\n ['central_meridian', 'Longitude of natural origin'],\n ['central_meridian', 'Longitude of false origin'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['latitude_of_origin', 'Latitude of natural origin'],\n ['latitude_of_origin', 'Latitude of false origin'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_Of_Center'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longitude_of_center', 'Longitude_of_center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['azimuth', 'Azimuth'],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\nvar codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n towgs84: \"598.1,73.7,418.2,0.202,0.045,-2.455,6.7\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n towgs84: \"577.326,90.129,463.919,5.137,1.474,5.297,2.4232\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n};\n\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\n\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\n\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\n\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\n\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\n\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n if (nadgrids) {\n out.datum_type = PJD_GRIDSHIFT;\n out.grids = nadgrids;\n }\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\nvar loadedNadgrids = {};\n\n/**\n * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=. Pass the NTv2 file\n * as an ArrayBuffer.\n */\nexport default function nadgrid(key, data) {\n var view = new DataView(data);\n var isLittleEndian = detectLittleEndian(view);\n var header = readHeader(view, isLittleEndian);\n if (header.nSubgrids > 1) {\n console.log('Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored');\n }\n var subgrids = readSubgrids(view, header, isLittleEndian);\n var nadgrid = {header: header, subgrids: subgrids};\n loadedNadgrids[key] = nadgrid;\n return nadgrid;\n}\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n */\nexport function getNadgrids(nadgrids) {\n // Format details: http://proj.maptools.org/gen_parms.html\n if (nadgrids === undefined) { return null; }\n var grids = nadgrids.split(',');\n return grids.map(parseNadgridString);\n}\n\nfunction parseNadgridString(value) {\n if (value.length === 0) {\n return null;\n }\n var optional = value[0] === '@';\n if (optional) {\n value = value.slice(1);\n }\n if (value === 'null') {\n return {name: 'null', mandatory: !optional, grid: null, isNull: true};\n }\n return {\n name: value,\n mandatory: !optional,\n grid: loadedNadgrids[value] || null,\n isNull: false\n };\n}\n\nfunction secondsToRadians(seconds) {\n return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n var nFields = view.getInt32(8, false);\n if (nFields === 11) {\n return false;\n }\n nFields = view.getInt32(8, true);\n if (nFields !== 11) {\n console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n }\n return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n return {\n nFields: view.getInt32(8, isLittleEndian),\n nSubgridFields: view.getInt32(24, isLittleEndian),\n nSubgrids: view.getInt32(40, isLittleEndian),\n shiftType: decodeString(view, 56, 56 + 8).trim(),\n fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n toSemiMinorAxis: view.getFloat64(168, isLittleEndian),\n };\n}\n\nfunction decodeString(view, start, end) {\n return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian) {\n var gridOffset = 176;\n var grids = [];\n for (var i = 0; i < header.nSubgrids; i++) {\n var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);\n var lngColumnCount = Math.round(\n 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n var latColumnCount = Math.round(\n 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n grids.push({\n ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n lim: [lngColumnCount, latColumnCount],\n count: subHeader.gridNodeCount,\n cvs: mapNodes(nodes)\n });\n }\n return grids;\n}\n\nfunction mapNodes(nodes) {\n return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n return {\n name: decodeString(view, offset + 8, offset + 16).trim(),\n parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian) {\n var nodesOffset = offset + 176;\n var gridRecordLength = 16;\n var gridShiftRecords = [];\n for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n var record = {\n latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),\n latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),\n longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),\n };\n gridShiftRecords.push(record);\n }\n return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport {getNadgrids} from \"./nadgrid\";\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback(srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var nadgrids = getNadgrids(json.nadgrids);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n nadgrids);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calulated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {\n PJD_3PARAM,\n PJD_7PARAM,\n PJD_GRIDSHIFT,\n PJD_NODATUM,\n R2D,\n SRS_WGS84_ESQUARED,\n SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nimport adjust_lon from \"./common/adjust_lon\";\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n var source_a = source.a;\n var source_es = source.es;\n if (source.datum_type === PJD_GRIDSHIFT) {\n var gridShiftCode = applyGridShift(source, false, point);\n if (gridShiftCode !== 0) {\n return undefined;\n }\n source_a = SRS_WGS84_SEMIMAJOR;\n source_es = SRS_WGS84_ESQUARED;\n }\n\n var dest_a = dest.a;\n var dest_b = dest.b;\n var dest_es = dest.es;\n if (dest.datum_type === PJD_GRIDSHIFT) {\n dest_a = SRS_WGS84_SEMIMAJOR;\n dest_b = SRS_WGS84_SEMIMINOR;\n dest_es = SRS_WGS84_ESQUARED;\n }\n\n // Do we need to go through geocentric coordinates?\n if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source_es, source_a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n if (dest.datum_type === PJD_GRIDSHIFT) {\n var destGridShiftResult = applyGridShift(dest, true, point);\n if (destGridShiftResult !== 0) {\n return undefined;\n }\n }\n\n return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n if (source.grids === null || source.grids.length === 0) {\n console.log('Grid shift grids not found');\n return -1;\n }\n var input = {x: -point.x, y: point.y};\n var output = {x: Number.NaN, y: Number.NaN};\n var onlyMandatoryGrids = false;\n var attemptedGrids = [];\n for (var i = 0; i < source.grids.length; i++) {\n var grid = source.grids[i];\n attemptedGrids.push(grid.name);\n if (grid.isNull) {\n output = input;\n break;\n }\n onlyMandatoryGrids = grid.mandatory;\n if (grid.grid === null) {\n if (grid.mandatory) {\n console.log(\"Unable to find mandatory grid '\" + grid.name + \"'\");\n return -1;\n }\n continue;\n }\n var subgrid = grid.grid.subgrids[0];\n // skip tables that don't match our point at all\n var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n var minX = subgrid.ll[0] - epsilon;\n var minY = subgrid.ll[1] - epsilon;\n var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {\n continue;\n }\n output = applySubgridShift(input, inverse, subgrid);\n if (!isNaN(output.x)) {\n break;\n }\n }\n if (isNaN(output.x)) {\n console.log(\"Failed to find a grid shift table for location '\"+\n -input.x * R2D + \" \" + input.y * R2D + \" tried: '\" + attemptedGrids + \"'\");\n return -1;\n }\n point.x = -output.x;\n point.y = output.y;\n return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n var val = {x: Number.NaN, y: Number.NaN};\n if (isNaN(pin.x)) { return val; }\n var tb = {x: pin.x, y: pin.y};\n tb.x -= ct.ll[0];\n tb.y -= ct.ll[1];\n tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n var t = nadInterpolate(tb, ct);\n if (inverse) {\n if (isNaN(t.x)) {\n return val;\n }\n t.x = tb.x - t.x;\n t.y = tb.y - t.y;\n var i = 9, tol = 1e-12;\n var dif, del;\n do {\n del = nadInterpolate(t, ct);\n if (isNaN(del.x)) {\n console.log(\"Inverse grid shift iteration failed, presumably at grid edge. Using first approximation.\");\n break;\n }\n dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};\n t.x += dif.x;\n t.y += dif.y;\n } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n if (i < 0) {\n console.log(\"Inverse grid shift iterator failed to converge.\");\n return val;\n }\n val.x = adjust_lon(t.x + ct.ll[0]);\n val.y = t.y + ct.ll[1];\n } else {\n if (!isNaN(t.x)) {\n val.x = pin.x + t.x;\n val.y = pin.y + t.y;\n }\n }\n return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};\n var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};\n var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};\n var val= {x: Number.NaN, y: Number.NaN};\n var inx;\n if (indx.x < 0 || indx.x >= ct.lim[0]) {\n return val;\n }\n if (indx.y < 0 || indx.y >= ct.lim[1]) {\n return val;\n }\n inx = (indx.y * ct.lim[0]) + indx.x;\n var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx++;\n var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx += ct.lim[0];\n var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n inx--;\n var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};\n var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n return val;\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n out[t] = v;\n break;\n case 'w':\n out[t] = -v;\n break;\n case 'n':\n out[t] = v;\n break;\n case 's':\n out[t] = -v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point, enforceAxis) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n }\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point, enforceAxis);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (enforceAxis && source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n if (!point) {\n return;\n }\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (enforceAxis && dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords, enforceAxis) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords, enforceAxis);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords, enforceAxis) {\n return transformer(fromProj, toProj, coords, enforceAxis);\n },\n inverse: function (coords, enforceAxis) {\n return transformer(toProj, fromProj, coords, enforceAxis);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Fast_Transverse_Mercator\", \"Fast Transverse Mercator\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n }\n if (this.approx) {\n // When '+approx' is set, use tmerc instead\n tmerc.init.apply(this);\n this.forward = tmerc.forward;\n this.inverse = tmerc.inverse;\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\", \"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { D2R, EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n var projectionName = typeof P.PROJECTION === \"object\" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION;\n \n return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1;\n}\n\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() { \n var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0, AB;\n \n // only Type A uses the no_off or no_uoff property\n // https://github.com/OSGeo/proj.4/issues/104\n this.no_off = isTypeA(this);\n this.no_rot = 'no_rot' in this;\n \n var alp = false;\n if (\"alpha\" in this) {\n alp = true;\n }\n\n var gam = false;\n if (\"rectified_grid_angle\" in this) {\n gam = true;\n }\n\n if (alp) {\n alpha_c = this.alpha;\n }\n \n if (gam) {\n gamma = (this.rectified_grid_angle * D2R);\n }\n \n if (alp || gam) {\n lamc = this.longc;\n } else {\n lam1 = this.long1;\n phi1 = this.lat1;\n lam2 = this.long2;\n phi2 = this.lat2;\n \n if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL ||\n Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL ||\n Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n throw new Error();\n }\n }\n \n var one_es = 1.0 - this.es;\n com = Math.sqrt(one_es);\n \n if (Math.abs(this.lat0) > EPSLN) {\n sinph0 = Math.sin(this.lat0);\n cosph0 = Math.cos(this.lat0);\n con = 1 - this.es * sinph0 * sinph0;\n this.B = cosph0 * cosph0;\n this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n this.A = this.B * this.k0 * com / con;\n D = this.B * com / (cosph0 * Math.sqrt(con));\n F = D * D -1;\n \n if (F <= 0) {\n F = 0;\n } else {\n F = Math.sqrt(F);\n if (this.lat0 < 0) {\n F = -F;\n }\n }\n \n this.E = F += D;\n this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n } else {\n this.B = 1 / com;\n this.A = this.k0;\n this.E = D = F = 1;\n }\n \n if (alp || gam) {\n if (alp) {\n gamma0 = Math.asin(Math.sin(alpha_c) / D);\n if (!gam) {\n gamma = alpha_c;\n }\n } else {\n gamma0 = gamma;\n alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n } else {\n H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n F = this.E / H;\n p = (L - H) / (L + H);\n J = this.E * this.E;\n J = (J - L * H) / (J + L * H);\n con = lam1 - lam2;\n \n if (con < -Math.pi) {\n lam2 -=TWO_PI;\n } else if (con > Math.pi) {\n lam2 += TWO_PI;\n }\n \n this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B);\n gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F));\n gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n }\n \n this.singam = Math.sin(gamma0);\n this.cosgam = Math.cos(gamma0);\n this.sinrot = Math.sin(gamma);\n this.cosrot = Math.cos(gamma);\n \n this.rB = 1 / this.B;\n this.ArB = this.A * this.rB;\n this.BrA = 1 / this.ArB;\n AB = this.A * this.B;\n \n if (this.no_off) {\n this.u_0 = 0;\n } else {\n this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n \n if (this.lat0 < 0) {\n this.u_0 = - this.u_0;\n } \n }\n \n F = 0.5 * gamma0;\n this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var coords = {};\n var S, T, U, V, W, temp, u, v;\n p.x = p.x - this.lam0;\n \n if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n \n temp = 1 / W;\n S = 0.5 * (W - temp);\n T = 0.5 * (W + temp);\n V = Math.sin(this.B * p.x);\n U = (S * this.singam - V * this.cosgam) / T;\n \n if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n throw new Error();\n }\n \n v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U));\n temp = Math.cos(this.B * p.x);\n \n if (Math.abs(temp) < TOL) {\n u = this.A * p.x;\n } else {\n u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n } \n } else {\n v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n u = this.ArB * p.y;\n }\n \n if (this.no_rot) {\n coords.x = u;\n coords.y = v;\n } else {\n u -= this.u_0;\n coords.x = v * this.cosrot + u * this.sinrot;\n coords.y = u * this.cosrot - v * this.sinrot;\n }\n \n coords.x = (this.a * coords.x + this.x0);\n coords.y = (this.a * coords.y + this.y0);\n \n return coords;\n}\n\nexport function inverse(p) {\n var u, v, Qp, Sp, Tp, Vp, Up;\n var coords = {};\n \n p.x = (p.x - this.x0) * (1.0 / this.a);\n p.y = (p.y - this.y0) * (1.0 / this.a);\n\n if (this.no_rot) {\n v = p.y;\n u = p.x;\n } else {\n v = p.x * this.cosrot - p.y * this.sinrot;\n u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n }\n \n Qp = Math.exp(-this.BrA * v);\n Sp = 0.5 * (Qp - 1 / Qp);\n Tp = 0.5 * (Qp + 1 / Qp);\n Vp = Math.sin(this.BrA * u);\n Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n \n if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n coords.x = 0;\n coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n } else {\n coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n \n if (coords.y === Infinity) {\n throw new Error();\n }\n \n coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n }\n \n coords.x += this.lam0;\n \n return coords;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"Oblique_Mercator\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n \n //double lat0; /* the reference latitude */\n //double long0; /* the reference longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n \n //the above value can be set with proj4.defs\n //example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\n \"Lambert Tangential Conformal Conic Projection\",\n \"Lambert_Conformal_Conic\",\n \"Lambert_Conformal_Conic_1SP\",\n \"Lambert_Conformal_Conic_2SP\",\n \"lcc\"\n];\n\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","\nvar mode = {\n N_POLE: 0,\n S_POLE: 1,\n EQUIT: 2,\n OBLIQ: 3\n};\n\nimport { D2R, HALF_PI, EPSLN } from \"../constants/values\";\nimport hypot from \"../common/hypot\";\n\nvar params = {\n h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n azi: { def: 0, num: true, degrees: true }, // default is North\n tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\nexport function init() {\n Object.keys(params).forEach(function (p) {\n if (typeof this[p] === \"undefined\") {\n this[p] = params[p].def;\n } else if (params[p].num && isNaN(this[p])) {\n throw new Error(\"Invalid parameter value, must be numeric \" + p + \" = \" + this[p]);\n } else if (params[p].num) {\n this[p] = parseFloat(this[p]);\n }\n if (params[p].degrees) {\n this[p] = this[p] * D2R;\n }\n }.bind(this));\n\n if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n } else if (Math.abs(this.lat0) < EPSLN) {\n this.mode = mode.EQUIT;\n } else {\n this.mode = mode.OBLIQ;\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n\n this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n if (this.pn1 <= 0 || this.pn1 > 1e10) {\n throw new Error(\"Invalid height\");\n }\n \n this.p = 1 + this.pn1;\n this.rp = 1 / this.p;\n this.h1 = 1 / this.pn1;\n this.pfact = (this.p + 1) * this.h1;\n this.es = 0;\n\n var omega = this.tilt;\n var gamma = this.azi;\n this.cg = Math.cos(gamma);\n this.sg = Math.sin(gamma);\n this.cw = Math.cos(omega);\n this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n p.x -= this.long0;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var coslam = Math.cos(p.x);\n var x, y;\n switch (this.mode) {\n case mode.OBLIQ:\n y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y = cosphi * coslam;\n break;\n case mode.S_POLE:\n y = -sinphi;\n break;\n case mode.N_POLE:\n y = sinphi;\n break;\n }\n y = this.pn1 / (this.p - y);\n x = y * cosphi * Math.sin(p.x);\n\n switch (this.mode) {\n case mode.OBLIQ:\n y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n break;\n case mode.EQUIT:\n y *= sinphi;\n break;\n case mode.N_POLE:\n y *= -(cosphi * coslam);\n break;\n case mode.S_POLE:\n y *= cosphi * coslam;\n break;\n }\n\n // Tilt \n var yt, ba;\n yt = y * this.cg + x * this.sg;\n ba = 1 / (yt * this.sw * this.h1 + this.cw);\n x = (x * this.cg - y * this.sg) * this.cw * ba;\n y = yt * ba;\n\n p.x = x * this.a;\n p.y = y * this.a;\n return p;\n}\n\nexport function inverse(p) {\n p.x /= this.a;\n p.y /= this.a;\n var r = { x: p.x, y: p.y };\n\n // Un-Tilt\n var bm, bq, yt;\n yt = 1 / (this.pn1 - p.y * this.sw);\n bm = this.pn1 * p.x * yt;\n bq = this.pn1 * p.y * this.cw * yt;\n p.x = bm * this.cg + bq * this.sg;\n p.y = bq * this.cg - bm * this.sg;\n\n var rh = hypot(p.x, p.y);\n if (Math.abs(rh) < EPSLN) {\n r.x = 0;\n r.y = p.y;\n } else {\n var cosz, sinz;\n sinz = 1 - rh * rh * this.pfact;\n sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n cosz = Math.sqrt(1 - sinz * sinz);\n switch (this.mode) {\n case mode.OBLIQ:\n r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n p.x *= sinz * this.cosph0;\n break;\n case mode.EQUIT:\n r.y = Math.asin(p.y * sinz / rh);\n p.y = cosz * rh;\n p.x *= sinz;\n break;\n case mode.N_POLE:\n r.y = Math.asin(cosz);\n p.y = -p.y;\n break;\n case mode.S_POLE:\n r.y = -Math.asin(cosz);\n break;\n }\n r.x = Math.atan2(p.x, p.y);\n }\n\n p.x = r.x + this.long0;\n p.y = r.y;\n return p;\n}\n\nexport var names = [\"Tilted_Perspective\", \"tpers\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport nadgrid from \"./nadgrid\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.nadgrid = nadgrid;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n proj4.Proj.projections.add(tpers);\n}","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","/*!\n * UAParser.js v0.7.21\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2019 Faisal Salman \n * Licensed under MIT License\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.21',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser\n /(bidubrowser|baidubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]*)/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n ], [NAME, VERSION], [\n\n /(konqueror)\\/([\\w\\.]+)/i // Konqueror\n ], [[NAME, 'Konqueror'], VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge|edgios|edga|edg)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [[NAME, 'Edge'], VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(Avast)\\/([\\w\\.]+)/i // Avast Secure Browser\n ], [[NAME, 'Avast Secure Browser'], VERSION], [\n\n /(AVG)\\/([\\w\\.]+)/i // AVG Secure Browser\n ], [[NAME, 'AVG Secure Browser'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /(focus)\\/([\\w\\.]+)/i // Firefox Focus\n ], [[NAME, 'Firefox Focus'], VERSION], [\n\n /(opt)\\/([\\w\\.]+)/i // Opera Touch\n ], [[NAME, 'Opera Touch'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(windowswechat qbcore)\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [[NAME, 'WeChat(Win) Desktop'], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(brave)\\/([\\w\\.]+)/i // Brave browser\n ], [[NAME, 'Brave'], VERSION], [\n\n /(qqbrowserlite)\\/([\\w\\.]+)/i // QQBrowserLite\n ], [NAME, VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /(baiduboxapp)[\\/\\s]?([\\w\\.]+)/i // Baidu App\n ], [NAME, VERSION], [\n\n /(2345Explorer)[\\/\\s]?([\\w\\.]+)/i // 2345 Browser\n ], [NAME, VERSION], [\n\n /(MetaSr)[\\/\\s]?([\\w\\.]+)/i // SouGouBrowser\n ], [NAME], [\n\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /android.+(line)\\/([\\w\\.]+)\\/iab/i // Line App for Android\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(sailfishbrowser)\\/([\\w\\.]+)/i // Sailfish Browser\n ], [[NAME, 'Sailfish Browser'], VERSION], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i,\n\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+[;l]))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\),;-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/.+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/.+silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n /android.+aft([bms])\\sbuild/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone|p00c)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n /(zte)-(\\w*)/i, // ZTE\n /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i\n // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /android.+(bah2?-a?[lw]\\d{2})/i // Huawei MediaPad\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w*)/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]*)/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w*)/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n /(lenovo)[_\\s-]?([\\w-]+)/i\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel( [23])?( xl)?)[\\s)]/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+;\\s(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d?\\w?)[\\s_]*(?:plus)?)\\s+build/i, \n // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+))\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)(?:[\\s_]*[\\w\\s]+))\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n /(mz)-([\\w-]{2,})/i\n ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [\n\n /android.+a000(1)\\s+build/i, // OnePlus\n /android.+oneplus\\s(a\\d{4})[\\s)]/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/\\s]+(Venue[\\d\\s]{2,7})\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2})\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?\\w{0,9})\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+;\\s(PH-1)\\s/i\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(\\w{1,9})\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q\\w{1,9})\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /[\\s\\/\\(](smart-?tv)[;\\)]/i // SmartTV\n ], [[TYPE, SMARTTV]], [\n\n /(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, \n // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9}).+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]*)/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]{2,4}(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === 'function' && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","module.exports = BinaryReader;\r\n\r\nfunction BinaryReader(buffer, isBigEndian) {\r\n this.buffer = buffer;\r\n this.position = 0;\r\n this.isBigEndian = isBigEndian || false;\r\n}\r\n\r\nfunction _read(readLE, readBE, size) {\r\n return function () {\r\n var value;\r\n\r\n if (this.isBigEndian)\r\n value = readBE.call(this.buffer, this.position);\r\n else\r\n value = readLE.call(this.buffer, this.position);\r\n\r\n this.position += size;\r\n\r\n return value;\r\n };\r\n}\r\n\r\nBinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1);\r\nBinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2);\r\nBinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4);\r\nBinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1);\r\nBinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2);\r\nBinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4);\r\nBinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4);\r\nBinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8);\r\n\r\nBinaryReader.prototype.readVarInt = function () {\r\n var nextByte,\r\n result = 0,\r\n bytesRead = 0;\r\n\r\n do {\r\n nextByte = this.buffer[this.position + bytesRead];\r\n result += (nextByte & 0x7F) << (7 * bytesRead);\r\n bytesRead++;\r\n } while (nextByte >= 0x80);\r\n\r\n this.position += bytesRead;\r\n\r\n return result;\r\n};\r\n","module.exports = BinaryWriter;\r\n\r\nfunction BinaryWriter(size, allowResize) {\r\n this.buffer = new Buffer(size);\r\n this.position = 0;\r\n this.allowResize = allowResize;\r\n}\r\n\r\nfunction _write(write, size) {\r\n return function (value, noAssert) {\r\n this.ensureSize(size);\r\n\r\n write.call(this.buffer, value, this.position, noAssert);\r\n this.position += size;\r\n };\r\n}\r\n\r\nBinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1);\r\nBinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2);\r\nBinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2);\r\nBinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4);\r\nBinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4);\r\nBinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1);\r\nBinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2);\r\nBinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2);\r\nBinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4);\r\nBinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4);\r\nBinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4);\r\nBinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4);\r\nBinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8);\r\nBinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8);\r\n\r\nBinaryWriter.prototype.writeBuffer = function (buffer) {\r\n this.ensureSize(buffer.length);\r\n\r\n buffer.copy(this.buffer, this.position, 0, buffer.length);\r\n this.position += buffer.length;\r\n};\r\n\r\nBinaryWriter.prototype.writeVarInt = function (value) {\r\n var length = 1;\r\n\r\n while ((value & 0xFFFFFF80) !== 0) {\r\n this.writeUInt8((value & 0x7F) | 0x80);\r\n value >>>= 7;\r\n length++;\r\n }\r\n\r\n this.writeUInt8(value & 0x7F);\r\n\r\n return length;\r\n};\r\n\r\nBinaryWriter.prototype.ensureSize = function (size) {\r\n if (this.buffer.length < this.position + size) {\r\n if (this.allowResize) {\r\n var tempBuffer = new Buffer(this.position + size);\r\n this.buffer.copy(tempBuffer, 0, 0, this.buffer.length);\r\n this.buffer = tempBuffer;\r\n }\r\n else {\r\n throw new RangeError('index out of range');\r\n }\r\n }\r\n};\r\n","module.exports = Geometry;\r\n\r\nvar Types = require('./types');\r\nvar Point = require('./point');\r\nvar LineString = require('./linestring');\r\nvar Polygon = require('./polygon');\r\nvar MultiPoint = require('./multipoint');\r\nvar MultiLineString = require('./multilinestring');\r\nvar MultiPolygon = require('./multipolygon');\r\nvar GeometryCollection = require('./geometrycollection');\r\nvar BinaryReader = require('./binaryreader');\r\nvar BinaryWriter = require('./binarywriter');\r\nvar WktParser = require('./wktparser');\r\nvar ZigZag = require('./zigzag.js');\r\n\r\nfunction Geometry() {\r\n this.srid = undefined;\r\n this.hasZ = false;\r\n this.hasM = false;\r\n}\r\n\r\nGeometry.parse = function (value, options) {\r\n var valueType = typeof value;\r\n\r\n if (valueType === 'string' || value instanceof WktParser)\r\n return Geometry._parseWkt(value);\r\n else if (Buffer.isBuffer(value) || value instanceof BinaryReader)\r\n return Geometry._parseWkb(value, options);\r\n else\r\n throw new Error('first argument must be a string or Buffer');\r\n};\r\n\r\nGeometry._parseWkt = function (value) {\r\n var wktParser,\r\n srid;\r\n\r\n if (value instanceof WktParser)\r\n wktParser = value;\r\n else\r\n wktParser = new WktParser(value);\r\n\r\n var match = wktParser.matchRegex([/^SRID=(\\d+);/]);\r\n if (match)\r\n srid = parseInt(match[1], 10);\r\n\r\n var geometryType = wktParser.matchType();\r\n var dimension = wktParser.matchDimension();\r\n\r\n var options = {\r\n srid: srid,\r\n hasZ: dimension.hasZ,\r\n hasM: dimension.hasM\r\n };\r\n\r\n switch (geometryType) {\r\n case Types.wkt.Point:\r\n return Point._parseWkt(wktParser, options);\r\n case Types.wkt.LineString:\r\n return LineString._parseWkt(wktParser, options);\r\n case Types.wkt.Polygon:\r\n return Polygon._parseWkt(wktParser, options);\r\n case Types.wkt.MultiPoint:\r\n return MultiPoint._parseWkt(wktParser, options);\r\n case Types.wkt.MultiLineString:\r\n return MultiLineString._parseWkt(wktParser, options);\r\n case Types.wkt.MultiPolygon:\r\n return MultiPolygon._parseWkt(wktParser, options);\r\n case Types.wkt.GeometryCollection:\r\n return GeometryCollection._parseWkt(wktParser, options);\r\n }\r\n};\r\n\r\nGeometry._parseWkb = function (value, parentOptions) {\r\n var binaryReader,\r\n wkbType,\r\n geometryType,\r\n options = {};\r\n\r\n if (value instanceof BinaryReader)\r\n binaryReader = value;\r\n else\r\n binaryReader = new BinaryReader(value);\r\n\r\n binaryReader.isBigEndian = !binaryReader.readInt8();\r\n\r\n wkbType = binaryReader.readUInt32();\r\n\r\n options.hasSrid = (wkbType & 0x20000000) === 0x20000000;\r\n options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000);\r\n\r\n if (options.hasSrid)\r\n options.srid = binaryReader.readUInt32();\r\n\r\n options.hasZ = false;\r\n options.hasM = false;\r\n\r\n if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) {\r\n if (wkbType >= 1000 && wkbType < 2000) {\r\n options.hasZ = true;\r\n geometryType = wkbType - 1000;\r\n }\r\n else if (wkbType >= 2000 && wkbType < 3000) {\r\n options.hasM = true;\r\n geometryType = wkbType - 2000;\r\n }\r\n else if (wkbType >= 3000 && wkbType < 4000) {\r\n options.hasZ = true;\r\n options.hasM = true;\r\n geometryType = wkbType - 3000;\r\n }\r\n else {\r\n geometryType = wkbType;\r\n }\r\n }\r\n else {\r\n if (wkbType & 0x80000000)\r\n options.hasZ = true;\r\n if (wkbType & 0x40000000)\r\n options.hasM = true;\r\n\r\n geometryType = wkbType & 0xF;\r\n }\r\n\r\n switch (geometryType) {\r\n case Types.wkb.Point:\r\n return Point._parseWkb(binaryReader, options);\r\n case Types.wkb.LineString:\r\n return LineString._parseWkb(binaryReader, options);\r\n case Types.wkb.Polygon:\r\n return Polygon._parseWkb(binaryReader, options);\r\n case Types.wkb.MultiPoint:\r\n return MultiPoint._parseWkb(binaryReader, options);\r\n case Types.wkb.MultiLineString:\r\n return MultiLineString._parseWkb(binaryReader, options);\r\n case Types.wkb.MultiPolygon:\r\n return MultiPolygon._parseWkb(binaryReader, options);\r\n case Types.wkb.GeometryCollection:\r\n return GeometryCollection._parseWkb(binaryReader, options);\r\n default:\r\n throw new Error('GeometryType ' + geometryType + ' not supported');\r\n }\r\n};\r\n\r\nGeometry.parseTwkb = function (value) {\r\n var binaryReader,\r\n options = {};\r\n\r\n if (value instanceof BinaryReader)\r\n binaryReader = value;\r\n else\r\n binaryReader = new BinaryReader(value);\r\n\r\n var type = binaryReader.readUInt8();\r\n var metadataHeader = binaryReader.readUInt8();\r\n\r\n var geometryType = type & 0x0F;\r\n options.precision = ZigZag.decode(type >> 4);\r\n options.precisionFactor = Math.pow(10, options.precision);\r\n\r\n options.hasBoundingBox = metadataHeader >> 0 & 1;\r\n options.hasSizeAttribute = metadataHeader >> 1 & 1;\r\n options.hasIdList = metadataHeader >> 2 & 1;\r\n options.hasExtendedPrecision = metadataHeader >> 3 & 1;\r\n options.isEmpty = metadataHeader >> 4 & 1;\r\n\r\n if (options.hasExtendedPrecision) {\r\n var extendedPrecision = binaryReader.readUInt8();\r\n options.hasZ = (extendedPrecision & 0x01) === 0x01;\r\n options.hasM = (extendedPrecision & 0x02) === 0x02;\r\n\r\n options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2);\r\n options.zPrecisionFactor = Math.pow(10, options.zPrecision);\r\n\r\n options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5);\r\n options.mPrecisionFactor = Math.pow(10, options.mPrecision);\r\n }\r\n else {\r\n options.hasZ = false;\r\n options.hasM = false;\r\n }\r\n\r\n if (options.hasSizeAttribute)\r\n binaryReader.readVarInt();\r\n if (options.hasBoundingBox) {\r\n var dimensions = 2;\r\n\r\n if (options.hasZ)\r\n dimensions++;\r\n if (options.hasM)\r\n dimensions++;\r\n\r\n for (var i = 0; i < dimensions; i++) {\r\n binaryReader.readVarInt();\r\n binaryReader.readVarInt();\r\n }\r\n }\r\n\r\n switch (geometryType) {\r\n case Types.wkb.Point:\r\n return Point._parseTwkb(binaryReader, options);\r\n case Types.wkb.LineString:\r\n return LineString._parseTwkb(binaryReader, options);\r\n case Types.wkb.Polygon:\r\n return Polygon._parseTwkb(binaryReader, options);\r\n case Types.wkb.MultiPoint:\r\n return MultiPoint._parseTwkb(binaryReader, options);\r\n case Types.wkb.MultiLineString:\r\n return MultiLineString._parseTwkb(binaryReader, options);\r\n case Types.wkb.MultiPolygon:\r\n return MultiPolygon._parseTwkb(binaryReader, options);\r\n case Types.wkb.GeometryCollection:\r\n return GeometryCollection._parseTwkb(binaryReader, options);\r\n default:\r\n throw new Error('GeometryType ' + geometryType + ' not supported');\r\n }\r\n};\r\n\r\nGeometry.parseGeoJSON = function (value) {\r\n return Geometry._parseGeoJSON(value);\r\n};\r\n\r\nGeometry._parseGeoJSON = function (value, isSubGeometry) {\r\n var geometry;\r\n\r\n switch (value.type) {\r\n case Types.geoJSON.Point:\r\n geometry = Point._parseGeoJSON(value); break;\r\n case Types.geoJSON.LineString:\r\n geometry = LineString._parseGeoJSON(value); break;\r\n case Types.geoJSON.Polygon:\r\n geometry = Polygon._parseGeoJSON(value); break;\r\n case Types.geoJSON.MultiPoint:\r\n geometry = MultiPoint._parseGeoJSON(value); break;\r\n case Types.geoJSON.MultiLineString:\r\n geometry = MultiLineString._parseGeoJSON(value); break;\r\n case Types.geoJSON.MultiPolygon:\r\n geometry = MultiPolygon._parseGeoJSON(value); break;\r\n case Types.geoJSON.GeometryCollection:\r\n geometry = GeometryCollection._parseGeoJSON(value); break;\r\n default:\r\n throw new Error('GeometryType ' + value.type + ' not supported');\r\n }\r\n\r\n if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) {\r\n var crs = value.crs.properties.name;\r\n\r\n if (crs.indexOf('EPSG:') === 0)\r\n geometry.srid = parseInt(crs.substring(5));\r\n else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0)\r\n geometry.srid = parseInt(crs.substring(22));\r\n else\r\n throw new Error('Unsupported crs: ' + crs);\r\n }\r\n else if (!isSubGeometry) {\r\n geometry.srid = 4326;\r\n }\r\n\r\n return geometry;\r\n};\r\n\r\nGeometry.prototype.toEwkt = function () {\r\n return 'SRID=' + this.srid + ';' + this.toWkt();\r\n};\r\n\r\nGeometry.prototype.toEwkb = function () {\r\n var ewkb = new BinaryWriter(this._getWkbSize() + 4);\r\n var wkb = this.toWkb();\r\n\r\n ewkb.writeInt8(1);\r\n ewkb.writeUInt32LE((wkb.slice(1, 5).readUInt32LE(0) | 0x20000000) >>> 0, true);\r\n ewkb.writeUInt32LE(this.srid);\r\n\r\n ewkb.writeBuffer(wkb.slice(5));\r\n\r\n return ewkb.buffer;\r\n};\r\n\r\nGeometry.prototype._getWktType = function (wktType, isEmpty) {\r\n var wkt = wktType;\r\n\r\n if (this.hasZ && this.hasM)\r\n wkt += ' ZM ';\r\n else if (this.hasZ)\r\n wkt += ' Z ';\r\n else if (this.hasM)\r\n wkt += ' M ';\r\n\r\n if (isEmpty && !this.hasZ && !this.hasM)\r\n wkt += ' ';\r\n\r\n if (isEmpty)\r\n wkt += 'EMPTY';\r\n\r\n return wkt;\r\n};\r\n\r\nGeometry.prototype._getWktCoordinate = function (point) {\r\n var coordinates = point.x + ' ' + point.y;\r\n\r\n if (this.hasZ)\r\n coordinates += ' ' + point.z;\r\n if (this.hasM)\r\n coordinates += ' ' + point.m;\r\n\r\n return coordinates;\r\n};\r\n\r\nGeometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) {\r\n var dimensionType = 0;\r\n\r\n if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) {\r\n if (this.hasZ && this.hasM)\r\n dimensionType += 3000;\r\n else if (this.hasZ)\r\n dimensionType += 1000;\r\n else if (this.hasM)\r\n dimensionType += 2000;\r\n }\r\n else {\r\n if (this.hasZ)\r\n dimensionType |= 0x80000000;\r\n if (this.hasM)\r\n dimensionType |= 0x40000000;\r\n }\r\n\r\n wkb.writeUInt32LE((dimensionType + geometryType) >>> 0, true);\r\n};\r\n\r\nGeometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) {\r\n return {\r\n xy: xyPrecision,\r\n z: zPrecision,\r\n m: mPrecision,\r\n xyFactor: Math.pow(10, xyPrecision),\r\n zFactor: Math.pow(10, zPrecision),\r\n mFactor: Math.pow(10, mPrecision)\r\n };\r\n};\r\n\r\nGeometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) {\r\n var type = (ZigZag.encode(precision.xy) << 4) + geometryType;\r\n var metadataHeader = (this.hasZ || this.hasM) << 3;\r\n metadataHeader += isEmpty << 4;\r\n\r\n twkb.writeUInt8(type);\r\n twkb.writeUInt8(metadataHeader);\r\n\r\n if (this.hasZ || this.hasM) {\r\n var extendedPrecision = 0;\r\n if (this.hasZ)\r\n extendedPrecision |= 0x1;\r\n if (this.hasM)\r\n extendedPrecision |= 0x2;\r\n\r\n twkb.writeUInt8(extendedPrecision);\r\n }\r\n};\r\n\r\nGeometry.prototype.toGeoJSON = function (options) {\r\n var geoJSON = {};\r\n\r\n if (this.srid) {\r\n if (options) {\r\n if (options.shortCrs) {\r\n geoJSON.crs = {\r\n type: 'name',\r\n properties: {\r\n name: 'EPSG:' + this.srid\r\n }\r\n };\r\n }\r\n else if (options.longCrs) {\r\n geoJSON.crs = {\r\n type: 'name',\r\n properties: {\r\n name: 'urn:ogc:def:crs:EPSG::' + this.srid\r\n }\r\n };\r\n }\r\n }\r\n }\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = GeometryCollection;\r\n\r\nvar util = require('util');\r\n\r\nvar Types = require('./types');\r\nvar Geometry = require('./geometry');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction GeometryCollection(geometries, srid) {\r\n Geometry.call(this);\r\n\r\n this.geometries = geometries || [];\r\n\tthis.srid = srid;\r\n\r\n if (this.geometries.length > 0) {\r\n this.hasZ = this.geometries[0].hasZ;\r\n this.hasM = this.geometries[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(GeometryCollection, Geometry);\r\n\r\nGeometryCollection.Z = function (geometries, srid) {\r\n var geometryCollection = new GeometryCollection(geometries, srid);\r\n geometryCollection.hasZ = true;\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection.M = function (geometries, srid) {\r\n var geometryCollection = new GeometryCollection(geometries, srid);\r\n geometryCollection.hasM = true;\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection.ZM = function (geometries, srid) {\r\n var geometryCollection = new GeometryCollection(geometries, srid);\r\n geometryCollection.hasZ = true;\r\n geometryCollection.hasM = true;\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection._parseWkt = function (value, options) {\r\n var geometryCollection = new GeometryCollection();\r\n geometryCollection.srid = options.srid;\r\n geometryCollection.hasZ = options.hasZ;\r\n geometryCollection.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return geometryCollection;\r\n\r\n value.expectGroupStart();\r\n\r\n do {\r\n geometryCollection.geometries.push(Geometry.parse(value));\r\n } while (value.isMatch([',']));\r\n\r\n value.expectGroupEnd();\r\n\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection._parseWkb = function (value, options) {\r\n var geometryCollection = new GeometryCollection();\r\n geometryCollection.srid = options.srid;\r\n geometryCollection.hasZ = options.hasZ;\r\n geometryCollection.hasM = options.hasM;\r\n\r\n var geometryCount = value.readUInt32();\r\n\r\n for (var i = 0; i < geometryCount; i++)\r\n geometryCollection.geometries.push(Geometry.parse(value, options));\r\n\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection._parseTwkb = function (value, options) {\r\n var geometryCollection = new GeometryCollection();\r\n geometryCollection.hasZ = options.hasZ;\r\n geometryCollection.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return geometryCollection;\r\n\r\n var geometryCount = value.readVarInt();\r\n\r\n for (var i = 0; i < geometryCount; i++)\r\n geometryCollection.geometries.push(Geometry.parseTwkb(value));\r\n\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection._parseGeoJSON = function (value) {\r\n var geometryCollection = new GeometryCollection();\r\n\r\n for (var i = 0; i < value.geometries.length; i++)\r\n geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true));\r\n\r\n if (geometryCollection.geometries.length > 0)\r\n geometryCollection.hasZ = geometryCollection.geometries[0].hasZ;\r\n\r\n return geometryCollection;\r\n};\r\n\r\nGeometryCollection.prototype.toWkt = function () {\r\n if (this.geometries.length === 0)\r\n return this._getWktType(Types.wkt.GeometryCollection, true);\r\n\r\n var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '(';\r\n\r\n for (var i = 0; i < this.geometries.length; i++)\r\n wkt += this.geometries[i].toWkt() + ',';\r\n\r\n wkt = wkt.slice(0, -1);\r\n wkt += ')';\r\n\r\n return wkt;\r\n};\r\n\r\nGeometryCollection.prototype.toWkb = function () {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.GeometryCollection);\r\n wkb.writeUInt32LE(this.geometries.length);\r\n\r\n for (var i = 0; i < this.geometries.length; i++)\r\n wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid }));\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nGeometryCollection.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.geometries.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty);\r\n\r\n if (this.geometries.length > 0) {\r\n twkb.writeVarInt(this.geometries.length);\r\n\r\n for (var i = 0; i < this.geometries.length; i++)\r\n twkb.writeBuffer(this.geometries[i].toTwkb());\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nGeometryCollection.prototype._getWkbSize = function () {\r\n var size = 1 + 4 + 4;\r\n\r\n for (var i = 0; i < this.geometries.length; i++)\r\n size += this.geometries[i]._getWkbSize();\r\n\r\n return size;\r\n};\r\n\r\nGeometryCollection.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.GeometryCollection;\r\n geoJSON.geometries = [];\r\n\r\n for (var i = 0; i < this.geometries.length; i++)\r\n geoJSON.geometries.push(this.geometries[i].toGeoJSON());\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = LineString;\r\n\r\nvar util = require('util');\r\n\r\nvar Geometry = require('./geometry');\r\nvar Types = require('./types');\r\nvar Point = require('./point');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction LineString(points, srid) {\r\n Geometry.call(this);\r\n\r\n this.points = points || [];\r\n\tthis.srid = srid;\r\n\r\n if (this.points.length > 0) {\r\n this.hasZ = this.points[0].hasZ;\r\n this.hasM = this.points[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(LineString, Geometry);\r\n\r\nLineString.Z = function (points, srid) {\r\n var lineString = new LineString(points, srid);\r\n lineString.hasZ = true;\r\n return lineString;\r\n};\r\n\r\nLineString.M = function (points, srid) {\r\n var lineString = new LineString(points, srid);\r\n lineString.hasM = true;\r\n return lineString;\r\n};\r\n\r\nLineString.ZM = function (points, srid) {\r\n var lineString = new LineString(points, srid);\r\n lineString.hasZ = true;\r\n lineString.hasM = true;\r\n return lineString;\r\n};\r\n\r\nLineString._parseWkt = function (value, options) {\r\n var lineString = new LineString();\r\n lineString.srid = options.srid;\r\n lineString.hasZ = options.hasZ;\r\n lineString.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return lineString;\r\n\r\n value.expectGroupStart();\r\n lineString.points.push.apply(lineString.points, value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n\r\n return lineString;\r\n};\r\n\r\nLineString._parseWkb = function (value, options) {\r\n var lineString = new LineString();\r\n lineString.srid = options.srid;\r\n lineString.hasZ = options.hasZ;\r\n lineString.hasM = options.hasM;\r\n\r\n var pointCount = value.readUInt32();\r\n\r\n for (var i = 0; i < pointCount; i++)\r\n lineString.points.push(Point._readWkbPoint(value, options));\r\n\r\n return lineString;\r\n};\r\n\r\nLineString._parseTwkb = function (value, options) {\r\n var lineString = new LineString();\r\n lineString.hasZ = options.hasZ;\r\n lineString.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return lineString;\r\n\r\n var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\r\n var pointCount = value.readVarInt();\r\n\r\n for (var i = 0; i < pointCount; i++)\r\n lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n return lineString;\r\n};\r\n\r\nLineString._parseGeoJSON = function (value) {\r\n var lineString = new LineString();\r\n\r\n if (value.coordinates.length > 0)\r\n lineString.hasZ = value.coordinates[0].length > 2;\r\n\r\n for (var i = 0; i < value.coordinates.length; i++)\r\n lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i]));\r\n\r\n return lineString;\r\n};\r\n\r\nLineString.prototype.toWkt = function () {\r\n if (this.points.length === 0)\r\n return this._getWktType(Types.wkt.LineString, true);\r\n\r\n return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt();\r\n};\r\n\r\nLineString.prototype._toInnerWkt = function () {\r\n var innerWkt = '(';\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n innerWkt += this._getWktCoordinate(this.points[i]) + ',';\r\n\r\n innerWkt = innerWkt.slice(0, -1);\r\n innerWkt += ')';\r\n\r\n return innerWkt;\r\n};\r\n\r\nLineString.prototype.toWkb = function (parentOptions) {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.LineString, parentOptions);\r\n wkb.writeUInt32LE(this.points.length);\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n this.points[i]._writeWkbPoint(wkb);\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nLineString.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.points.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty);\r\n\r\n if (this.points.length > 0) {\r\n twkb.writeVarInt(this.points.length);\r\n\r\n var previousPoint = new Point(0, 0, 0, 0);\r\n for (var i = 0; i < this.points.length; i++)\r\n this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nLineString.prototype._getWkbSize = function () {\r\n var coordinateSize = 16;\r\n\r\n if (this.hasZ)\r\n coordinateSize += 8;\r\n if (this.hasM)\r\n coordinateSize += 8;\r\n\r\n return 1 + 4 + 4 + (this.points.length * coordinateSize);\r\n};\r\n\r\nLineString.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.LineString;\r\n geoJSON.coordinates = [];\r\n\r\n for (var i = 0; i < this.points.length; i++) {\r\n if (this.hasZ)\r\n geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]);\r\n else\r\n geoJSON.coordinates.push([this.points[i].x, this.points[i].y]);\r\n }\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = MultiLineString;\r\n\r\nvar util = require('util');\r\n\r\nvar Types = require('./types');\r\nvar Geometry = require('./geometry');\r\nvar Point = require('./point');\r\nvar LineString = require('./linestring');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction MultiLineString(lineStrings, srid) {\r\n Geometry.call(this);\r\n\r\n this.lineStrings = lineStrings || [];\r\n\tthis.srid = srid;\r\n\r\n if (this.lineStrings.length > 0) {\r\n this.hasZ = this.lineStrings[0].hasZ;\r\n this.hasM = this.lineStrings[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(MultiLineString, Geometry);\r\n\r\nMultiLineString.Z = function (lineStrings, srid) {\r\n var multiLineString = new MultiLineString(lineStrings, srid);\r\n multiLineString.hasZ = true;\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString.M = function (lineStrings, srid) {\r\n var multiLineString = new MultiLineString(lineStrings, srid);\r\n multiLineString.hasM = true;\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString.ZM = function (lineStrings, srid) {\r\n var multiLineString = new MultiLineString(lineStrings, srid);\r\n multiLineString.hasZ = true;\r\n multiLineString.hasM = true;\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString._parseWkt = function (value, options) {\r\n var multiLineString = new MultiLineString();\r\n multiLineString.srid = options.srid;\r\n multiLineString.hasZ = options.hasZ;\r\n multiLineString.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return multiLineString;\r\n\r\n value.expectGroupStart();\r\n\r\n do {\r\n value.expectGroupStart();\r\n multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options)));\r\n value.expectGroupEnd();\r\n } while (value.isMatch([',']));\r\n\r\n value.expectGroupEnd();\r\n\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString._parseWkb = function (value, options) {\r\n var multiLineString = new MultiLineString();\r\n multiLineString.srid = options.srid;\r\n multiLineString.hasZ = options.hasZ;\r\n multiLineString.hasM = options.hasM;\r\n\r\n var lineStringCount = value.readUInt32();\r\n\r\n for (var i = 0; i < lineStringCount; i++)\r\n multiLineString.lineStrings.push(Geometry.parse(value, options));\r\n\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString._parseTwkb = function (value, options) {\r\n var multiLineString = new MultiLineString();\r\n multiLineString.hasZ = options.hasZ;\r\n multiLineString.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return multiLineString;\r\n\r\n var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\r\n var lineStringCount = value.readVarInt();\r\n\r\n for (var i = 0; i < lineStringCount; i++) {\r\n var lineString = new LineString();\r\n lineString.hasZ = options.hasZ;\r\n lineString.hasM = options.hasM;\r\n\r\n var pointCount = value.readVarInt();\r\n\r\n for (var j = 0; j < pointCount; j++)\r\n lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n multiLineString.lineStrings.push(lineString);\r\n }\r\n\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString._parseGeoJSON = function (value) {\r\n var multiLineString = new MultiLineString();\r\n\r\n if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\r\n multiLineString.hasZ = value.coordinates[0][0].length > 2;\r\n\r\n for (var i = 0; i < value.coordinates.length; i++)\r\n multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] }));\r\n\r\n return multiLineString;\r\n};\r\n\r\nMultiLineString.prototype.toWkt = function () {\r\n if (this.lineStrings.length === 0)\r\n return this._getWktType(Types.wkt.MultiLineString, true);\r\n\r\n var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '(';\r\n\r\n for (var i = 0; i < this.lineStrings.length; i++)\r\n wkt += this.lineStrings[i]._toInnerWkt() + ',';\r\n\r\n wkt = wkt.slice(0, -1);\r\n wkt += ')';\r\n\r\n return wkt;\r\n};\r\n\r\nMultiLineString.prototype.toWkb = function () {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.MultiLineString);\r\n wkb.writeUInt32LE(this.lineStrings.length);\r\n\r\n for (var i = 0; i < this.lineStrings.length; i++)\r\n wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid }));\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nMultiLineString.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.lineStrings.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty);\r\n\r\n if (this.lineStrings.length > 0) {\r\n twkb.writeVarInt(this.lineStrings.length);\r\n\r\n var previousPoint = new Point(0, 0, 0, 0);\r\n for (var i = 0; i < this.lineStrings.length; i++) {\r\n twkb.writeVarInt(this.lineStrings[i].points.length);\r\n\r\n for (var j = 0; j < this.lineStrings[i].points.length; j++)\r\n this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint);\r\n }\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nMultiLineString.prototype._getWkbSize = function () {\r\n var size = 1 + 4 + 4;\r\n\r\n for (var i = 0; i < this.lineStrings.length; i++)\r\n size += this.lineStrings[i]._getWkbSize();\r\n\r\n return size;\r\n};\r\n\r\nMultiLineString.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.MultiLineString;\r\n geoJSON.coordinates = [];\r\n\r\n for (var i = 0; i < this.lineStrings.length; i++)\r\n geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates);\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = MultiPoint;\r\n\r\nvar util = require('util');\r\n\r\nvar Types = require('./types');\r\nvar Geometry = require('./geometry');\r\nvar Point = require('./point');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction MultiPoint(points, srid) {\r\n Geometry.call(this);\r\n\r\n this.points = points || [];\r\n\tthis.srid = srid;\r\n\t\r\n if (this.points.length > 0) {\r\n this.hasZ = this.points[0].hasZ;\r\n this.hasM = this.points[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(MultiPoint, Geometry);\r\n\r\nMultiPoint.Z = function (points, srid) {\r\n var multiPoint = new MultiPoint(points, srid);\r\n multiPoint.hasZ = true;\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint.M = function (points, srid) {\r\n var multiPoint = new MultiPoint(points, srid);\r\n multiPoint.hasM = true;\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint.ZM = function (points, srid) {\r\n var multiPoint = new MultiPoint(points, srid);\r\n multiPoint.hasZ = true;\r\n multiPoint.hasM = true;\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint._parseWkt = function (value, options) {\r\n var multiPoint = new MultiPoint();\r\n multiPoint.srid = options.srid;\r\n multiPoint.hasZ = options.hasZ;\r\n multiPoint.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return multiPoint;\r\n\r\n value.expectGroupStart();\r\n multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint._parseWkb = function (value, options) {\r\n var multiPoint = new MultiPoint();\r\n multiPoint.srid = options.srid;\r\n multiPoint.hasZ = options.hasZ;\r\n multiPoint.hasM = options.hasM;\r\n\r\n var pointCount = value.readUInt32();\r\n\r\n for (var i = 0; i < pointCount; i++)\r\n multiPoint.points.push(Geometry.parse(value, options));\r\n\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint._parseTwkb = function (value, options) {\r\n var multiPoint = new MultiPoint();\r\n multiPoint.hasZ = options.hasZ;\r\n multiPoint.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return multiPoint;\r\n\r\n var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\r\n var pointCount = value.readVarInt();\r\n\r\n for (var i = 0; i < pointCount; i++)\r\n multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint._parseGeoJSON = function (value) {\r\n var multiPoint = new MultiPoint();\r\n\r\n if (value.coordinates.length > 0)\r\n multiPoint.hasZ = value.coordinates[0].length > 2;\r\n\r\n for (var i = 0; i < value.coordinates.length; i++)\r\n multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] }));\r\n\r\n return multiPoint;\r\n};\r\n\r\nMultiPoint.prototype.toWkt = function () {\r\n if (this.points.length === 0)\r\n return this._getWktType(Types.wkt.MultiPoint, true);\r\n\r\n var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '(';\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n wkt += this._getWktCoordinate(this.points[i]) + ',';\r\n\r\n wkt = wkt.slice(0, -1);\r\n wkt += ')';\r\n\r\n return wkt;\r\n};\r\n\r\nMultiPoint.prototype.toWkb = function () {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.MultiPoint);\r\n wkb.writeUInt32LE(this.points.length);\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid }));\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nMultiPoint.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.points.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty);\r\n\r\n if (this.points.length > 0) {\r\n twkb.writeVarInt(this.points.length);\r\n\r\n var previousPoint = new Point(0, 0, 0, 0);\r\n for (var i = 0; i < this.points.length; i++)\r\n this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nMultiPoint.prototype._getWkbSize = function () {\r\n var coordinateSize = 16;\r\n\r\n if (this.hasZ)\r\n coordinateSize += 8;\r\n if (this.hasM)\r\n coordinateSize += 8;\r\n\r\n coordinateSize += 5;\r\n\r\n return 1 + 4 + 4 + (this.points.length * coordinateSize);\r\n};\r\n\r\nMultiPoint.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.MultiPoint;\r\n geoJSON.coordinates = [];\r\n\r\n for (var i = 0; i < this.points.length; i++)\r\n geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates);\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = MultiPolygon;\r\n\r\nvar util = require('util');\r\n\r\nvar Types = require('./types');\r\nvar Geometry = require('./geometry');\r\nvar Point = require('./point');\r\nvar Polygon = require('./polygon');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction MultiPolygon(polygons, srid) {\r\n Geometry.call(this);\r\n\r\n this.polygons = polygons || [];\r\n\tthis.srid = srid;\r\n\r\n if (this.polygons.length > 0) {\r\n this.hasZ = this.polygons[0].hasZ;\r\n this.hasM = this.polygons[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(MultiPolygon, Geometry);\r\n\r\nMultiPolygon.Z = function (polygons, srid) {\r\n var multiPolygon = new MultiPolygon(polygons, srid);\r\n multiPolygon.hasZ = true;\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon.M = function (polygons, srid) {\r\n var multiPolygon = new MultiPolygon(polygons, srid);\r\n multiPolygon.hasM = true;\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon.ZM = function (polygons, srid) {\r\n var multiPolygon = new MultiPolygon(polygons, srid);\r\n multiPolygon.hasZ = true;\r\n multiPolygon.hasM = true;\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon._parseWkt = function (value, options) {\r\n var multiPolygon = new MultiPolygon();\r\n multiPolygon.srid = options.srid;\r\n multiPolygon.hasZ = options.hasZ;\r\n multiPolygon.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return multiPolygon;\r\n\r\n value.expectGroupStart();\r\n\r\n do {\r\n value.expectGroupStart();\r\n\r\n var exteriorRing = [];\r\n var interiorRings = [];\r\n\r\n value.expectGroupStart();\r\n exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n\r\n while (value.isMatch([','])) {\r\n value.expectGroupStart();\r\n interiorRings.push(value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n }\r\n\r\n multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings));\r\n\r\n value.expectGroupEnd();\r\n\r\n } while (value.isMatch([',']));\r\n\r\n value.expectGroupEnd();\r\n\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon._parseWkb = function (value, options) {\r\n var multiPolygon = new MultiPolygon();\r\n multiPolygon.srid = options.srid;\r\n multiPolygon.hasZ = options.hasZ;\r\n multiPolygon.hasM = options.hasM;\r\n\r\n var polygonCount = value.readUInt32();\r\n\r\n for (var i = 0; i < polygonCount; i++)\r\n multiPolygon.polygons.push(Geometry.parse(value, options));\r\n\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon._parseTwkb = function (value, options) {\r\n var multiPolygon = new MultiPolygon();\r\n multiPolygon.hasZ = options.hasZ;\r\n multiPolygon.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return multiPolygon;\r\n\r\n var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\r\n var polygonCount = value.readVarInt();\r\n\r\n for (var i = 0; i < polygonCount; i++) {\r\n var polygon = new Polygon();\r\n polygon.hasZ = options.hasZ;\r\n polygon.hasM = options.hasM;\r\n\r\n var ringCount = value.readVarInt();\r\n var exteriorRingCount = value.readVarInt();\r\n\r\n for (var j = 0; j < exteriorRingCount; j++)\r\n polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n for (j = 1; j < ringCount; j++) {\r\n var interiorRing = [];\r\n\r\n var interiorRingCount = value.readVarInt();\r\n\r\n for (var k = 0; k < interiorRingCount; k++)\r\n interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n polygon.interiorRings.push(interiorRing);\r\n }\r\n\r\n multiPolygon.polygons.push(polygon);\r\n }\r\n\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon._parseGeoJSON = function (value) {\r\n var multiPolygon = new MultiPolygon();\r\n\r\n if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0)\r\n multiPolygon.hasZ = value.coordinates[0][0][0].length > 2;\r\n\r\n for (var i = 0; i < value.coordinates.length; i++)\r\n multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] }));\r\n\r\n return multiPolygon;\r\n};\r\n\r\nMultiPolygon.prototype.toWkt = function () {\r\n if (this.polygons.length === 0)\r\n return this._getWktType(Types.wkt.MultiPolygon, true);\r\n\r\n var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '(';\r\n\r\n for (var i = 0; i < this.polygons.length; i++)\r\n wkt += this.polygons[i]._toInnerWkt() + ',';\r\n\r\n wkt = wkt.slice(0, -1);\r\n wkt += ')';\r\n\r\n return wkt;\r\n};\r\n\r\nMultiPolygon.prototype.toWkb = function () {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.MultiPolygon);\r\n wkb.writeUInt32LE(this.polygons.length);\r\n\r\n for (var i = 0; i < this.polygons.length; i++)\r\n wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid }));\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nMultiPolygon.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.polygons.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty);\r\n\r\n if (this.polygons.length > 0) {\r\n twkb.writeVarInt(this.polygons.length);\r\n\r\n var previousPoint = new Point(0, 0, 0, 0);\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n twkb.writeVarInt(1 + this.polygons[i].interiorRings.length);\r\n\r\n twkb.writeVarInt(this.polygons[i].exteriorRing.length);\r\n\r\n for (var j = 0; j < this.polygons[i].exteriorRing.length; j++)\r\n this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint);\r\n\r\n for (j = 0; j < this.polygons[i].interiorRings.length; j++) {\r\n twkb.writeVarInt(this.polygons[i].interiorRings[j].length);\r\n\r\n for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++)\r\n this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint);\r\n }\r\n }\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nMultiPolygon.prototype._getWkbSize = function () {\r\n var size = 1 + 4 + 4;\r\n\r\n for (var i = 0; i < this.polygons.length; i++)\r\n size += this.polygons[i]._getWkbSize();\r\n\r\n return size;\r\n};\r\n\r\nMultiPolygon.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.MultiPolygon;\r\n geoJSON.coordinates = [];\r\n\r\n for (var i = 0; i < this.polygons.length; i++)\r\n geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates);\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = Point;\r\n\r\nvar util = require('util');\r\n\r\nvar Geometry = require('./geometry');\r\nvar Types = require('./types');\r\nvar BinaryWriter = require('./binarywriter');\r\nvar ZigZag = require('./zigzag.js');\r\n\r\nfunction Point(x, y, z, m, srid) {\r\n Geometry.call(this);\r\n\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.m = m;\r\n\tthis.srid = srid;\r\n\r\n this.hasZ = typeof this.z !== 'undefined';\r\n this.hasM = typeof this.m !== 'undefined';\r\n}\r\n\r\nutil.inherits(Point, Geometry);\r\n\r\nPoint.Z = function (x, y, z, srid) {\r\n var point = new Point(x, y, z, undefined, srid);\r\n point.hasZ = true;\r\n return point;\r\n};\r\n\r\nPoint.M = function (x, y, m, srid) {\r\n var point = new Point(x, y, undefined, m, srid);\r\n point.hasM = true;\r\n return point;\r\n};\r\n\r\nPoint.ZM = function (x, y, z, m, srid) {\r\n var point = new Point(x, y, z, m, srid);\r\n point.hasZ = true;\r\n point.hasM = true;\r\n return point;\r\n};\r\n\r\nPoint._parseWkt = function (value, options) {\r\n var point = new Point();\r\n point.srid = options.srid;\r\n point.hasZ = options.hasZ;\r\n point.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return point;\r\n\r\n value.expectGroupStart();\r\n\r\n var coordinate = value.matchCoordinate(options);\r\n\r\n point.x = coordinate.x;\r\n point.y = coordinate.y;\r\n point.z = coordinate.z;\r\n point.m = coordinate.m;\r\n\r\n value.expectGroupEnd();\r\n\r\n return point;\r\n};\r\n\r\nPoint._parseWkb = function (value, options) {\r\n var point = Point._readWkbPoint(value, options);\r\n point.srid = options.srid;\r\n return point;\r\n};\r\n\r\nPoint._readWkbPoint = function (value, options) {\r\n return new Point(value.readDouble(), value.readDouble(),\r\n options.hasZ ? value.readDouble() : undefined,\r\n options.hasM ? value.readDouble() : undefined);\r\n};\r\n\r\nPoint._parseTwkb = function (value, options) {\r\n var point = new Point();\r\n point.hasZ = options.hasZ;\r\n point.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return point;\r\n\r\n point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\r\n point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\r\n point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined;\r\n point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined;\r\n\r\n return point;\r\n};\r\n\r\nPoint._readTwkbPoint = function (value, options, previousPoint) {\r\n previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\r\n previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\r\n\r\n if (options.hasZ)\r\n previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor;\r\n if (options.hasM)\r\n previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor;\r\n\r\n return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m);\r\n};\r\n\r\nPoint._parseGeoJSON = function (value) {\r\n return Point._readGeoJSONPoint(value.coordinates);\r\n};\r\n\r\nPoint._readGeoJSONPoint = function (coordinates) {\r\n if (coordinates.length === 0)\r\n return new Point();\r\n\r\n if (coordinates.length > 2)\r\n return new Point(coordinates[0], coordinates[1], coordinates[2]);\r\n\r\n return new Point(coordinates[0], coordinates[1]);\r\n};\r\n\r\nPoint.prototype.toWkt = function () {\r\n if (typeof this.x === 'undefined' && typeof this.y === 'undefined' &&\r\n typeof this.z === 'undefined' && typeof this.m === 'undefined')\r\n return this._getWktType(Types.wkt.Point, true);\r\n\r\n return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')';\r\n};\r\n\r\nPoint.prototype.toWkb = function (parentOptions) {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n this._writeWkbType(wkb, Types.wkb.Point, parentOptions);\r\n\r\n if (typeof this.x === 'undefined' && typeof this.y === 'undefined') {\r\n wkb.writeDoubleLE(NaN);\r\n wkb.writeDoubleLE(NaN);\r\n\r\n if (this.hasZ)\r\n wkb.writeDoubleLE(NaN);\r\n if (this.hasM)\r\n wkb.writeDoubleLE(NaN);\r\n }\r\n else {\r\n this._writeWkbPoint(wkb);\r\n }\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nPoint.prototype._writeWkbPoint = function (wkb) {\r\n wkb.writeDoubleLE(this.x);\r\n wkb.writeDoubleLE(this.y);\r\n\r\n if (this.hasZ)\r\n wkb.writeDoubleLE(this.z);\r\n if (this.hasM)\r\n wkb.writeDoubleLE(this.m);\r\n};\r\n\r\nPoint.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined';\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty);\r\n\r\n if (!isEmpty)\r\n this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0));\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nPoint.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) {\r\n var x = this.x * precision.xyFactor;\r\n var y = this.y * precision.xyFactor;\r\n var z = this.z * precision.zFactor;\r\n var m = this.m * precision.mFactor;\r\n\r\n twkb.writeVarInt(ZigZag.encode(x - previousPoint.x));\r\n twkb.writeVarInt(ZigZag.encode(y - previousPoint.y));\r\n if (this.hasZ)\r\n twkb.writeVarInt(ZigZag.encode(z - previousPoint.z));\r\n if (this.hasM)\r\n twkb.writeVarInt(ZigZag.encode(m - previousPoint.m));\r\n\r\n previousPoint.x = x;\r\n previousPoint.y = y;\r\n previousPoint.z = z;\r\n previousPoint.m = m;\r\n};\r\n\r\nPoint.prototype._getWkbSize = function () {\r\n var size = 1 + 4 + 8 + 8;\r\n\r\n if (this.hasZ)\r\n size += 8;\r\n if (this.hasM)\r\n size += 8;\r\n\r\n return size;\r\n};\r\n\r\nPoint.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.Point;\r\n\r\n if (typeof this.x === 'undefined' && typeof this.y === 'undefined')\r\n geoJSON.coordinates = [];\r\n else if (typeof this.z !== 'undefined')\r\n geoJSON.coordinates = [this.x, this.y, this.z];\r\n else\r\n geoJSON.coordinates = [this.x, this.y];\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = Polygon;\r\n\r\nvar util = require('util');\r\n\r\nvar Geometry = require('./geometry');\r\nvar Types = require('./types');\r\nvar Point = require('./point');\r\nvar BinaryWriter = require('./binarywriter');\r\n\r\nfunction Polygon(exteriorRing, interiorRings, srid) {\r\n Geometry.call(this);\r\n\r\n this.exteriorRing = exteriorRing || [];\r\n this.interiorRings = interiorRings || [];\r\n\tthis.srid = srid;\r\n\r\n if (this.exteriorRing.length > 0) {\r\n this.hasZ = this.exteriorRing[0].hasZ;\r\n this.hasM = this.exteriorRing[0].hasM;\r\n }\r\n}\r\n\r\nutil.inherits(Polygon, Geometry);\r\n\r\nPolygon.Z = function (exteriorRing, interiorRings, srid) {\r\n var polygon = new Polygon(exteriorRing, interiorRings, srid);\r\n polygon.hasZ = true;\r\n return polygon;\r\n};\r\n\r\nPolygon.M = function (exteriorRing, interiorRings, srid) {\r\n var polygon = new Polygon(exteriorRing, interiorRings, srid);\r\n polygon.hasM = true;\r\n return polygon;\r\n};\r\n\r\nPolygon.ZM = function (exteriorRing, interiorRings, srid) {\r\n var polygon = new Polygon(exteriorRing, interiorRings, srid);\r\n polygon.hasZ = true;\r\n polygon.hasM = true;\r\n return polygon;\r\n};\r\n\r\nPolygon._parseWkt = function (value, options) {\r\n var polygon = new Polygon();\r\n polygon.srid = options.srid;\r\n polygon.hasZ = options.hasZ;\r\n polygon.hasM = options.hasM;\r\n\r\n if (value.isMatch(['EMPTY']))\r\n return polygon;\r\n\r\n value.expectGroupStart();\r\n\r\n value.expectGroupStart();\r\n polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n\r\n while (value.isMatch([','])) {\r\n value.expectGroupStart();\r\n polygon.interiorRings.push(value.matchCoordinates(options));\r\n value.expectGroupEnd();\r\n }\r\n\r\n value.expectGroupEnd();\r\n\r\n return polygon;\r\n};\r\n\r\nPolygon._parseWkb = function (value, options) {\r\n var polygon = new Polygon();\r\n polygon.srid = options.srid;\r\n polygon.hasZ = options.hasZ;\r\n polygon.hasM = options.hasM;\r\n\r\n var ringCount = value.readUInt32();\r\n\r\n if (ringCount > 0) {\r\n var exteriorRingCount = value.readUInt32();\r\n\r\n for (var i = 0; i < exteriorRingCount; i++)\r\n polygon.exteriorRing.push(Point._readWkbPoint(value, options));\r\n\r\n for (i = 1; i < ringCount; i++) {\r\n var interiorRing = [];\r\n\r\n var interiorRingCount = value.readUInt32();\r\n\r\n for (var j = 0; j < interiorRingCount; j++)\r\n interiorRing.push(Point._readWkbPoint(value, options));\r\n\r\n polygon.interiorRings.push(interiorRing);\r\n }\r\n }\r\n\r\n return polygon;\r\n};\r\n\r\nPolygon._parseTwkb = function (value, options) {\r\n var polygon = new Polygon();\r\n polygon.hasZ = options.hasZ;\r\n polygon.hasM = options.hasM;\r\n\r\n if (options.isEmpty)\r\n return polygon;\r\n\r\n var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\r\n var ringCount = value.readVarInt();\r\n var exteriorRingCount = value.readVarInt();\r\n\r\n for (var i = 0; i < exteriorRingCount; i++)\r\n polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n for (i = 1; i < ringCount; i++) {\r\n var interiorRing = [];\r\n\r\n var interiorRingCount = value.readVarInt();\r\n\r\n for (var j = 0; j < interiorRingCount; j++)\r\n interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\r\n\r\n polygon.interiorRings.push(interiorRing);\r\n }\r\n\r\n return polygon;\r\n};\r\n\r\nPolygon._parseGeoJSON = function (value) {\r\n var polygon = new Polygon();\r\n\r\n if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\r\n polygon.hasZ = value.coordinates[0][0].length > 2;\r\n\r\n for (var i = 0; i < value.coordinates.length; i++) {\r\n if (i > 0)\r\n polygon.interiorRings.push([]);\r\n\r\n for (var j = 0; j < value.coordinates[i].length; j++) {\r\n if (i === 0)\r\n polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j]));\r\n else\r\n polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j]));\r\n }\r\n }\r\n\r\n return polygon;\r\n};\r\n\r\nPolygon.prototype.toWkt = function () {\r\n if (this.exteriorRing.length === 0)\r\n return this._getWktType(Types.wkt.Polygon, true);\r\n\r\n return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt();\r\n};\r\n\r\nPolygon.prototype._toInnerWkt = function () {\r\n var innerWkt = '((';\r\n\r\n for (var i = 0; i < this.exteriorRing.length; i++)\r\n innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ',';\r\n\r\n innerWkt = innerWkt.slice(0, -1);\r\n innerWkt += ')';\r\n\r\n for (i = 0; i < this.interiorRings.length; i++) {\r\n innerWkt += ',(';\r\n\r\n for (var j = 0; j < this.interiorRings[i].length; j++) {\r\n innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ',';\r\n }\r\n\r\n innerWkt = innerWkt.slice(0, -1);\r\n innerWkt += ')';\r\n }\r\n\r\n innerWkt += ')';\r\n\r\n return innerWkt;\r\n};\r\n\r\nPolygon.prototype.toWkb = function (parentOptions) {\r\n var wkb = new BinaryWriter(this._getWkbSize());\r\n\r\n wkb.writeInt8(1);\r\n\r\n this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions);\r\n\r\n if (this.exteriorRing.length > 0) {\r\n wkb.writeUInt32LE(1 + this.interiorRings.length);\r\n wkb.writeUInt32LE(this.exteriorRing.length);\r\n }\r\n else {\r\n wkb.writeUInt32LE(0);\r\n }\r\n\r\n for (var i = 0; i < this.exteriorRing.length; i++)\r\n this.exteriorRing[i]._writeWkbPoint(wkb);\r\n\r\n for (i = 0; i < this.interiorRings.length; i++) {\r\n wkb.writeUInt32LE(this.interiorRings[i].length);\r\n\r\n for (var j = 0; j < this.interiorRings[i].length; j++)\r\n this.interiorRings[i][j]._writeWkbPoint(wkb);\r\n }\r\n\r\n return wkb.buffer;\r\n};\r\n\r\nPolygon.prototype.toTwkb = function () {\r\n var twkb = new BinaryWriter(0, true);\r\n\r\n var precision = Geometry.getTwkbPrecision(5, 0, 0);\r\n var isEmpty = this.exteriorRing.length === 0;\r\n\r\n this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty);\r\n\r\n if (this.exteriorRing.length > 0) {\r\n twkb.writeVarInt(1 + this.interiorRings.length);\r\n\r\n twkb.writeVarInt(this.exteriorRing.length);\r\n\r\n var previousPoint = new Point(0, 0, 0, 0);\r\n for (var i = 0; i < this.exteriorRing.length; i++)\r\n this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint);\r\n\r\n for (i = 0; i < this.interiorRings.length; i++) {\r\n twkb.writeVarInt(this.interiorRings[i].length);\r\n\r\n for (var j = 0; j < this.interiorRings[i].length; j++)\r\n this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint);\r\n }\r\n }\r\n\r\n return twkb.buffer;\r\n};\r\n\r\nPolygon.prototype._getWkbSize = function () {\r\n var coordinateSize = 16;\r\n\r\n if (this.hasZ)\r\n coordinateSize += 8;\r\n if (this.hasM)\r\n coordinateSize += 8;\r\n\r\n var size = 1 + 4 + 4;\r\n\r\n if (this.exteriorRing.length > 0)\r\n size += 4 + (this.exteriorRing.length * coordinateSize);\r\n\r\n for (var i = 0; i < this.interiorRings.length; i++)\r\n size += 4 + (this.interiorRings[i].length * coordinateSize);\r\n\r\n return size;\r\n};\r\n\r\nPolygon.prototype.toGeoJSON = function (options) {\r\n var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\r\n geoJSON.type = Types.geoJSON.Polygon;\r\n geoJSON.coordinates = [];\r\n\r\n if (this.exteriorRing.length > 0) {\r\n var exteriorRing = [];\r\n\r\n for (var i = 0; i < this.exteriorRing.length; i++) {\r\n if (this.hasZ)\r\n exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]);\r\n else\r\n exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]);\r\n }\r\n\r\n geoJSON.coordinates.push(exteriorRing);\r\n }\r\n\r\n for (var j = 0; j < this.interiorRings.length; j++) {\r\n var interiorRing = [];\r\n\r\n for (var k = 0; k < this.interiorRings[j].length; k++) {\r\n if (this.hasZ)\r\n interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]);\r\n else\r\n interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]);\r\n }\r\n\r\n geoJSON.coordinates.push(interiorRing);\r\n }\r\n\r\n return geoJSON;\r\n};\r\n","module.exports = {\r\n wkt: {\r\n Point: 'POINT',\r\n LineString: 'LINESTRING',\r\n Polygon: 'POLYGON',\r\n MultiPoint: 'MULTIPOINT',\r\n MultiLineString: 'MULTILINESTRING',\r\n MultiPolygon: 'MULTIPOLYGON',\r\n GeometryCollection: 'GEOMETRYCOLLECTION'\r\n },\r\n wkb: {\r\n Point: 1,\r\n LineString: 2,\r\n Polygon: 3,\r\n MultiPoint: 4,\r\n MultiLineString: 5,\r\n MultiPolygon: 6,\r\n GeometryCollection: 7\r\n },\r\n geoJSON: {\r\n Point: 'Point',\r\n LineString: 'LineString',\r\n Polygon: 'Polygon',\r\n MultiPoint: 'MultiPoint',\r\n MultiLineString: 'MultiLineString',\r\n MultiPolygon: 'MultiPolygon',\r\n GeometryCollection: 'GeometryCollection'\r\n }\r\n};\r\n","module.exports = WktParser;\r\n\r\nvar Types = require('./types');\r\nvar Point = require('./point');\r\n\r\nfunction WktParser(value) {\r\n this.value = value;\r\n this.position = 0;\r\n}\r\n\r\nWktParser.prototype.match = function (tokens) {\r\n this.skipWhitespaces();\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\r\n this.position += tokens[i].length;\r\n return tokens[i];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nWktParser.prototype.matchRegex = function (tokens) {\r\n this.skipWhitespaces();\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n var match = this.value.substring(this.position).match(tokens[i]);\r\n\r\n if (match) {\r\n this.position += match[0].length;\r\n return match;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nWktParser.prototype.isMatch = function (tokens) {\r\n this.skipWhitespaces();\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\r\n this.position += tokens[i].length;\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nWktParser.prototype.matchType = function () {\r\n var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint,\r\n Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]);\r\n\r\n if (!geometryType)\r\n throw new Error('Expected geometry type');\r\n\r\n return geometryType;\r\n};\r\n\r\nWktParser.prototype.matchDimension = function () {\r\n var dimension = this.match(['ZM', 'Z', 'M']);\r\n\r\n switch (dimension) {\r\n case 'ZM': return { hasZ: true, hasM: true };\r\n case 'Z': return { hasZ: true, hasM: false };\r\n case 'M': return { hasZ: false, hasM: true };\r\n default: return { hasZ: false, hasM: false };\r\n }\r\n};\r\n\r\nWktParser.prototype.expectGroupStart = function () {\r\n if (!this.isMatch(['(']))\r\n throw new Error('Expected group start');\r\n};\r\n\r\nWktParser.prototype.expectGroupEnd = function () {\r\n if (!this.isMatch([')']))\r\n throw new Error('Expected group end');\r\n};\r\n\r\nWktParser.prototype.matchCoordinate = function (options) {\r\n var match;\r\n\r\n if (options.hasZ && options.hasM)\r\n match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\r\n else if (options.hasZ || options.hasM)\r\n match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\r\n else\r\n match = this.matchRegex([/^(\\S*)\\s+([^\\s,)]*)/]);\r\n\r\n if (!match)\r\n throw new Error('Expected coordinates');\r\n\r\n if (options.hasZ && options.hasM)\r\n return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));\r\n else if (options.hasZ)\r\n return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]));\r\n else if (options.hasM)\r\n return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));\r\n else\r\n return new Point(parseFloat(match[1]), parseFloat(match[2]));\r\n};\r\n\r\nWktParser.prototype.matchCoordinates = function (options) {\r\n var coordinates = [];\r\n\r\n do {\r\n var startsWithBracket = this.isMatch(['(']);\r\n\r\n coordinates.push(this.matchCoordinate(options));\r\n\r\n if (startsWithBracket)\r\n this.expectGroupEnd();\r\n } while (this.isMatch([',']));\r\n\r\n return coordinates;\r\n};\r\n\r\nWktParser.prototype.skipWhitespaces = function () {\r\n while (this.position < this.value.length && this.value[this.position] === ' ')\r\n this.position++;\r\n};\r\n","exports.Types = require('./types');\r\nexports.Geometry = require('./geometry');\r\nexports.Point = require('./point');\r\nexports.LineString = require('./linestring');\r\nexports.Polygon = require('./polygon');\r\nexports.MultiPoint = require('./multipoint');\r\nexports.MultiLineString = require('./multilinestring');\r\nexports.MultiPolygon = require('./multipolygon');\r\nexports.GeometryCollection = require('./geometrycollection');","module.exports = {\r\n encode: function (value) {\r\n return (value << 1) ^ (value >> 31);\r\n },\r\n decode: function (value) {\r\n return (value >> 1) ^ (-(value & 1));\r\n }\r\n};\r\n","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport Util from './Util';\r\n\r\nTC.Consts = Consts;\r\nTC.Util = Util;\r\n\r\n/**\r\n * Opciones de configuración del mapa. Para más información de como usar objetos de este tipo, consultar {@tutorial 2-configuration}.\r\n * @typedef MapOptions\r\n * @see 2-configuration\r\n * @property {LayerOptions[]|string[]} [baseLayers=[SITNA.Consts. layer. IDENA_BASEMAP]{@link SITNA.Consts.layer.IDENA_BASEMAP}, [SITNA.Consts. layer. IDENA_ORTHOPHOTO]{@link SITNA.Consts.layer.IDENA_ORTHOPHOTO}, [SITNA.Consts. layer. IDENA_CADASTER]{@link SITNA.Consts.layer.IDENA_CADASTER}, [SITNA.Consts. layer. IDENA_CARTO]{@link SITNA.Consts.layer.IDENA_CARTO}] - Lista con cualquier combinación de objetos de definición de capa o de identificadores de capas de la API SITNA\r\n * (miembros de {@link SITNA.Consts.layer}) para incluir dichas capas como mapas de fondo.\r\n * @property {MapControlOptions} [controls] - Opciones de controles de mapa, define qué controles se incluyen en un mapa y qué opciones se pasan a cada control. \r\n * @property {string} [crossOrigin] - Valor del atributo `crossorigin` de las imágenes del mapa para habilitar CORS Es necesario establecer esta opción para poder utilizar el método {@link SITNA.Map#exportImage}.\r\n *\r\n * Los valores soportados son `anonymous` y `use-credentials`. Para más información, consulte [la documentación de MDN Web Docs](https://developer.mozilla.org/es/docs/Web/HTML/CORS_enabled_image).\r\n * @property {string} [crs=\"EPSG:25830\"] - Código EPSG del sistema de referencia de coordenadas del mapa.\r\n * @property {string} [defaultBaseLayer=[SITNA.Consts. layer. IDENA_BASEMAP]{@link SITNA.Consts.layer.IDENA_BASEMAP}] - Identificador de la capa base por defecto o índice de la capa base por defecto en la lista de capas base del mapa (Definida con la propiedad `baseLayers`).\r\n * @property {number[]} [initialExtent=[541084.221, 4640788.225, 685574.4632, 4796618.764]] - Extensión inicial del mapa definida por x mínima, y mínima, x máxima, y máxima, en las unidades del sistema de referencia de coordenadas del mapa (Ver propiedad `crs`). Por defecto la extensión es la de Navarra.\r\n * @property {string|LayoutOptions} [layout=\"//sitna.navarra.es/api/layout/responsive\"] - URL de la carpeta de maquetación u objeto de opciones de maquetación. Para prescindir de maquetación, establecer esta propiedad a `null`. Para más información al respecto de esta propiedad, \r\n * consulte el tutorial {@tutorial layout_cfg}.\r\n * @property {string} [locale=\"es-ES\"] - Código de idioma de la interfaz de usuario. Este código debe obedecer la sintaxis definida por la IETF. Los valores posibles son `es-ES`, `eu-ES` y `en-US`.\r\n * @property {number[]|boolean} [maxExtent=false] - Extensión máxima del mapa definida por x mínima, y mínima, x máxima, y máxima, de forma que el centro del mapa nunca saldrá fuera de estos límites. \r\n * Estos valores deben estar en las unidades definidas por el sistema de referencia de coordenadas del mapa (Ver propiedad `crs`).\r\n *\r\n * Si en vez de un array el valor es `false`, el mapa no tiene limitada la extensión máxima.\r\n * @property {boolean} [mouseWheelZoom=true] - Si se establece a un valor verdadero, la rueda de scroll del ratón se puede utilizar para hacer zoom en el mapa.\r\n * @property {boolean} [stateful=false] - Si se establece a un valor verdadero, el mapa mantiene un historial de estados \r\n * añadiendo a la URL de la aplicación que lo contiene un código _hash_.\r\n * \r\n * Con esta opción activa, el mapa puede pasar al estado previo o siguiente con los botones de historial del navegador. Así mismo, si se recarga la página el mapa conservará el estado en el que se encontraba.\r\n * @property {number} [pixelTolerance=10] - Tolerancia en pixels a las consultas de información de capa.\r\n *\r\n * En ciertas capas, por ejemplo las que representan geometrías de puntos, puede ser difícil pulsar precisamente en el punto donde está la entidad geográfica que interesa.\r\n * \r\n * La propiedad `pixelTolerance` define un área de un número de pixels hacia cada lado del punto de pulsación, de forma que toda entidad geográfica que esté dentro de ese área, total o parcialmente, se incluye en el resultado de la consulta.\r\n * \r\n * Por ejemplo, si el valor establecido es 10, toda entidad geográfica que esté dentro de un cuadrado de 21 pixels de lado (10 pixels por cuadrante más el pixel central) \r\n * centrado en el punto de pulsación se mostrará en el resultado. A tener en cuenta: Esta propiedad establece el valor de los llamados *parámetros de vendedor* \r\n * que los servidores de mapas admiten para modificar el comportamiento de las peticiones `getFeatureInfo` del standard WMS. Pero este comportamiento puede ser modificado también por otras circunstancias, \r\n * como los estilos aplicados a las capas en el servidor.\r\n * \r\n * Como estas circunstancias están fuera del ámbito de alcance de esta API, es posible que los resultados obtenidos desde algún servicio WMS sean inesperados en lo referente a `pixelTolerance`.\r\n * @property {string} [proxy] - URL del proxy utilizado para peticiones a dominios remotos.\r\n * \r\n * Debido a restricciones de seguridad implementadas en Javascript, a través de `XMLHttpRequest` no es posible obtener información de dominios distintos al de la página web.\r\n * \r\n * Hay dos maneras de solventar esta restricción. La primera es que el servidor remoto permita el acceso entre dominios estableciendo la cabecera `Access-Control-Allow-Origin` a la respuesta HTTP. \r\n * Dado que esta solución la implementan terceras personas (los administradores del dominio remoto), no siempre es aplicable.\r\n * \r\n * La segunda solución es desplegar en el dominio propio un proxy. Un proxy es un servicio que recibe peticiones HTTP y las redirige a otra URL.\r\n * \r\n * Si la propiedad `proxy` está establecida, todas las peticiones a dominios remotos las mandará al proxy para que este las redirija. \r\n * De esta manera no infringimos las reglas de seguridad de JavaScript, dado que el proxy está alojado en el dominio propio.\r\n * @property {StyleOptions} [styles] - Opciones de estilo de las entidades geográficas.\r\n * @property {MapViewOptions} [views] - Opciones de vistas de mapa, define qué vistas estarán disponibles para conmutar entre el mapa y las vistas adicionales configuradas aquí, y qué opciones se pasan a cada vista. Actualmente, únicamente existe la opción de configurar la vista `threed` que gestiona el control `threed` de {@link MapControlOptions}.\r\n * @property {LayerOptions[]} [workLayers] - Lista de objetos de definición de capa para incluir dichas capas como contenido activo del mapa.\r\n */\r\n\r\nconst Defaults = (function () {\r\n\r\n var clusterRadii = {};\r\n var getClusterRadius = function (feature) {\r\n var count = feature.features.length;\r\n var result = clusterRadii[count];\r\n if (!result) {\r\n result = 2 + Math.round(Math.sqrt(count) * 5);\r\n clusterRadii[count] = result;\r\n }\r\n return result;\r\n };\r\n\r\n return {\r\n imageRatio: 1.05,\r\n proxy: '',\r\n\r\n crs: 'EPSG:25830',\r\n utmCrs: 'EPSG:25830',\r\n geoCrs: 'EPSG:4326',\r\n initialExtent: [541084.221, 4640788.225, 685574.4632, 4796618.764],\r\n maxExtent: false,\r\n baselayerExtent: [480408, 4599748, 742552, 4861892],\r\n resolutions: [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, .5, .25],\r\n pointBoundsRadius: 30,\r\n extentMargin: 0.2,\r\n mouseWheelZoom: true,\r\n attribution: 'SITNA',\r\n oldBrowserAlert: true,\r\n notifyApplicationErrors: false,\r\n loggingErrorsEnabled: true,\r\n maxErrorCount: 10,\r\n\r\n locale: 'es-ES',\r\n\r\n view: TC.Consts.view.DEFAULT,\r\n\r\n screenSize: 20,\r\n pixelTolerance: 10, // Used in GFI requests\r\n maxResolutionError: 0.01, // Max error ratio to consider two resolutions equivalent\r\n\r\n toastDuration: 5000,\r\n\r\n averageTileSize: 31000,\r\n\r\n availableBaseLayers: [\r\n {\r\n id: TC.Consts.layer.IDENA_BASEMAP,\r\n title: 'Mapa base',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830extended',\r\n layerNames: 'mapabase',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: true,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-basemap.png',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNBASEMAP,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO,\r\n title: 'Ortofoto máxima actualidad',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto_maxima_actualidad',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-orthophoto.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2021,\r\n title: 'Ortofoto 2021',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2021',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2021.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2021,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2020,\r\n title: 'Ortofoto 2020',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2020',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2020.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2020,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2019,\r\n title: 'Ortofoto 2019',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2019',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2019.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2019,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2018,\r\n title: 'Ortofoto 2018',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2018',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2018.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2018,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2017,\r\n title: 'Ortofoto 2017',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2017',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2017.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2017,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2014,\r\n title: 'Ortofoto 2014',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830reduced',\r\n layerNames: 'ortofoto2014',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2014.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2014,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_ORTHOPHOTO2012,\r\n title: 'Ortofoto 2012',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830',\r\n layerNames: 'ortofoto2012',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2012.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNORTHOPHOTO2012,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_PAMPLONA_ORTHOPHOTO2020,\r\n title: 'Ortofoto comarca de Pamplona 2020',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830deep',\r\n layerNames: 'ortofotoPamplona2020',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho-pamplona2020.jpg',\r\n fallbackLayer: TC.Consts.layer.IDENA_PAMPLONA_DYNORTHOPHOTO2020,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_CARTO,\r\n title: 'Cartografía topográfica',\r\n type: TC.Consts.layerType.WMTS,\r\n url: '//idena.navarra.es/ogc/wmts/',\r\n matrixSet: 'epsg25830extended',\r\n layerNames: 'mapaTopografico',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-bta.png',\r\n fallbackLayer: TC.Consts.layer.IDENA_DYNCARTO,\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_CADASTER,\r\n title: 'Catastro',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'catastro,regionesFronterizas',\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-cadaster.png',\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_BW_RELIEF,\r\n title: 'Relieve',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'IDENA:mapa_relieve_bn',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-relief_bw.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_BASEMAP_ORTHOPHOTO,\r\n title: 'Mapa base/ortofoto',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'mapaBase_orto',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-base_ortho.png',\r\n overviewMapLayer: TC.Consts.layer.IDENA_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNBASEMAP,\r\n title: 'Mapa base',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'mapaBase,regionesFronterizas',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-basemap.png',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO,\r\n title: 'Ortofoto máxima actualidad',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_maxima_actualidad',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-orthophoto.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2021,\r\n title: 'Ortofoto 2021',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2021',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2021.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2020,\r\n title: 'Ortofoto 2020',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2020',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2020.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2019,\r\n title: 'Ortofoto 2019',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2019',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2019.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2018,\r\n title: 'Ortofoto 2018',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2018',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2018.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2017,\r\n title: 'Ortofoto 2017',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2017',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2017.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2014,\r\n title: 'Ortofoto 2014',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2014',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2014.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNORTHOPHOTO2012,\r\n title: 'Ortofoto 2012',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_5000_2012',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho2012.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_PAMPLONA_DYNORTHOPHOTO2020,\r\n title: 'Ortofoto comarca de Pamplona 2020',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'ortofoto_500_Pamplona_2020',\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-ortho-pamplona2020.jpg',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IDENA_DYNCARTO,\r\n title: 'Cartografía topográfica 2017',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//idena.navarra.es/ogc/wms',\r\n layerNames: 'MTNa5_BTA',\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-bta.png',\r\n overviewMapLayer: TC.Consts.layer.IDENA_DYNBASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_CARTO,\r\n type: TC.Consts.layerType.WMTS,\r\n title: \"Cartografía raster \\r\\n (IGN ES)\",\r\n url: \"//www.ign.es/wmts/mapa-raster\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"MTN\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-carto_ign.png\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNCARTO,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_BASEMAP,\r\n title: \"Callejero \\r\\n (IGN ES)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/ign-base\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"IGNBaseTodo\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-basemap_ign.png\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNBASEMAP,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_BASEMAP_GREY,\r\n title: \"Callejero gris \\r\\n (IGN ES)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/ign-base\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"IGNBase-gris\",\r\n matrixSet: \"GoogleMapsCompatible\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-basemap_grey_ign.png\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNBASEMAP_GREY,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_RELIEF,\r\n title: \"Relieve \\r\\n (IGN ES)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//servicios.idee.es/wmts/mdt\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"Relieve\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-relief_ign.jpg\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNRELIEF,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_ORTHOPHOTO,\r\n title: \"Ortofoto PNOA\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//www.ign.es/wmts/pnoa-ma\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"OI.OrthoimageCoverage\",\r\n matrixSet: \"EPSG:25830\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-orthophoto_pnoa.jpg\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNORTHOPHOTO,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_LIDAR,\r\n title: \"Modelo digital LIDAR (IGN ES)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//wmts-mapa-lidar.idee.es/lidar\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"EL.GridCoverageDSM\",\r\n matrixSet: \"GoogleMapsCompatible\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-lidar_ign.jpg\",\r\n fallbackLayer: TC.Consts.layer.IGN_ES_DYNLIDAR,\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNBASEMAP,\r\n title: 'Callejero \\r\\n (IGN ES)',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/ign-base',\r\n layerNames: 'IGNBaseTodo',\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-basemap_ign.png',\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNBASEMAP_GREY,\r\n title: 'Callejero gris \\r\\n (IGN ES)',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/ign-base',\r\n layerNames: 'IGNBaseTodo-gris',\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-basemap_grey_ign.png',\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNORTHOPHOTO,\r\n title: 'Ortofoto PNOA',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/pnoa-ma',\r\n layerNames: 'OI.OrthoimageCoverage',\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-orthophoto_pnoa.jpg',\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNCARTO,\r\n title: 'Cartografía raster \\r\\n (IGN ES)',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//www.ign.es/wms-inspire/mapa-raster',\r\n layerNames: 'mtn_rasterizado',\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-carto_ign.png',\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNRELIEF,\r\n title: 'Relieve \\r\\n (IGN ES)',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//servicios.idee.es/wms-inspire/mdt',\r\n layerNames: 'EL.GridCoverage',\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-relief_ign.jpg',\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_ES_DYNLIDAR,\r\n title: 'Modelo digital LIDAR (IGN ES)',\r\n type: TC.Consts.layerType.WMS,\r\n url: '//wms-mapa-lidar.idee.es/lidar',\r\n layerNames: 'EL.GridCoverage',\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-lidar_ign.jpg\",\r\n overviewMapLayer: TC.Consts.layer.IGN_ES_BASEMAP\r\n },\r\n /*{\r\n id: TC.Consts.layer.IGN_FR_CARTO,\r\n title: \"Cartografía raster \\r\\n (IGN FR)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/njfzwf3vgc55gekk8ra4zezx/geoportail/wmts\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.MAPS\",\r\n matrixSet: \"PM\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-carto-fr-ign.png\",\r\n fallbackLayer: TC.Consts.layer.IGN_FR_DYNCARTO,\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },*/\r\n {\r\n id: TC.Consts.layer.IGN_FR_BASEMAP,\r\n title: \"Mapa base \\r\\n (IGN FR)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/wmts\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2\",\r\n matrixSet: \"PM\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-base-fr-ign.png\",\r\n fallbackLayer: TC.Consts.layer.IGN_FR_DYNBASEMAP,\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_FR_RELIEF,\r\n title: \"Relieve \\r\\n (IGN FR)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/altimetrie/geoportail/wmts\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"ELEVATION.ELEVATIONGRIDCOVERAGE.SHADOW\",\r\n matrixSet: \"PM\",\r\n format: \"image/png\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-estom-fr-ign.jpg\",\r\n fallbackLayer: TC.Consts.layer.IGN_FR_DYNRELIEF,\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_FR_ORTHOPHOTO,\r\n title: \"Ortofoto \\r\\n (IGN FR)\",\r\n type: TC.Consts.layerType.WMTS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/wmts\",\r\n encoding: TC.Consts.WMTSEncoding.KVP,\r\n layerNames: \"ORTHOIMAGERY.ORTHOPHOTOS\",\r\n matrixSet: \"PM\",\r\n format: \"image/jpeg\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-ortho-fr-ign.jpg\",\r\n fallbackLayer: TC.Consts.layer.IGN_FR_DYNORTHOPHOTO,\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n /*{\r\n id: TC.Consts.layer.IGN_FR_DYNCARTO,\r\n title: 'Cartografía raster \\r\\n (IGN FR)',\r\n type: TC.Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/njfzwf3vgc55gekk8ra4zezx/geoportail/r/wms\",\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.MAPS\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-carto-fr-ign.png\",\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },*/\r\n {\r\n id: TC.Consts.layer.IGN_FR_DYNBASEMAP,\r\n title: 'Mapa base \\r\\n (IGN FR)',\r\n type: TC.Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/r/wms\",\r\n layerNames: \"GEOGRAPHICALGRIDSYSTEMS.PLANIGN\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-base-fr-ign.png\",\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_FR_DYNRELIEF,\r\n title: 'Relieve \\r\\n (IGN FR)',\r\n type: TC.Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/altimetrie/geoportail/r/wms\",\r\n layerNames: \"ELEVATION.ELEVATIONGRIDCOVERAGE.SHADOW\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-estom-fr-ign.jpg\",\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.IGN_FR_DYNORTHOPHOTO,\r\n title: 'Ortofoto \\r\\n (IGN FR)',\r\n type: TC.Consts.layerType.WMS,\r\n url: \"//wxs.ign.fr/essentiels/geoportail/r/wms\",\r\n layerNames: \"ORTHOIMAGERY.ORTHOPHOTOS\",\r\n thumbnail: TC.apiLocation + \"tc/css/img/thumb-ortho-fr-ign.jpg\",\r\n ignoreProxification: true,\r\n overviewMapLayer: TC.Consts.layer.IGN_FR_BASEMAP\r\n },\r\n {\r\n id: TC.Consts.layer.OSM,\r\n title: 'OSM',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/osm/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'osm',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-osm.png',\r\n overviewMapLayer: TC.Consts.layer.OSM\r\n },\r\n {\r\n id: TC.Consts.layer.CARTO_VOYAGER,\r\n title: 'CARTO Voyager',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'voyager',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-carto-voyager.png',\r\n overviewMapLayer: TC.Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: TC.Consts.layer.CARTO_LIGHT,\r\n title: 'CARTO light',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'light_all',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-carto-light.png',\r\n overviewMapLayer: TC.Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: TC.Consts.layer.CARTO_DARK,\r\n title: 'CARTO dark',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/carto/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'dark_all',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-carto-dark.png',\r\n overviewMapLayer: TC.Consts.layer.CARTO_VOYAGER\r\n },\r\n {\r\n id: TC.Consts.layer.MAPBOX_STREETS,\r\n title: 'Mapbox Streets',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/mapbox/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'streets',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/png',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-mapbox-streets.png',\r\n overviewMapLayer: TC.Consts.layer.MAPBOX_STREETS\r\n },\r\n {\r\n id: TC.Consts.layer.MAPBOX_SATELLITE,\r\n title: 'Mapbox Satellite',\r\n type: TC.Consts.layerType.WMTS,\r\n url: TC.apiLocation + 'wmts/mapbox/',\r\n matrixSet: 'WorldWebMercatorQuad',\r\n layerNames: 'satellite',\r\n encoding: TC.Consts.WMTSEncoding.RESTFUL,\r\n format: 'image/jpeg',\r\n isDefault: false,\r\n hideTree: true,\r\n thumbnail: TC.apiLocation + 'TC/css/img/thumb-mapbox-satellite.jpg',\r\n overviewMapLayer: TC.Consts.layer.MAPBOX_STREETS\r\n },\r\n {\r\n id: TC.Consts.layer.BLANK,\r\n title: 'Mapa en blanco',\r\n type: TC.Consts.layerType.VECTOR\r\n }\r\n ],\r\n\r\n baseLayers: [\r\n TC.Consts.layer.IDENA_BASEMAP,\r\n TC.Consts.layer.IDENA_ORTHOPHOTO,\r\n TC.Consts.layer.IDENA_CADASTER,\r\n TC.Consts.layer.IDENA_CARTO\r\n ],\r\n\r\n defaultBaseLayer: TC.Consts.layer.IDENA_BASEMAP,\r\n\r\n workLayers: [],\r\n\r\n /**\r\n * Opciones de clustering de puntos de una capa, define si los puntos se tienen que agrupar cuando están más cerca entre sí que un valor umbral.\r\n *\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad \r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef ClusterOptions\r\n * @property {number} distance - Distancia en píxels que tienen que tener como máximo los puntos entre sí para que se agrupen en un cluster.\r\n * @property {boolean} [animate] - Si se establece a `true`, los puntos se agrupan y desagrupan con una transición animada.\r\n * @property {ClusterStyleOptions} [styles] - Opciones de estilo de los clusters.\r\n * @example [Ver en vivo](../examples/cfg.LayerOptions.cluster.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de capa. Este objeto se utiliza en al [configurar un mapa]{@linkplain MapOptions}, el [control del catálogo de capas]{@linkplain LayerCatalogOptions} \r\n * o como parámetro al [añadir una capa]{@linkplain SITNA.Map#addLayer}.\r\n * @typedef LayerOptions\r\n * @see MapOptions\r\n * @see LayerCatalogOptions\r\n * @see SITNA.Map#addLayer\r\n * @see SITNA.Map#setBaseLayer\r\n * @property {string} id - Identificador único de capa. No puede haber en un mapa dos capas con el mismo valor de `id`.\r\n * @property {ClusterOptions} [cluster] - La capa agrupa sus entidades puntuales cercanas entre sí en grupos (clusters). \r\n * Aplicable a capas de tipo [VECTOR]{@link SITNA.Consts.layerType.VECTOR}, [WFS]{@link SITNA.Consts.layerType.WFS} y [KML]{@link SITNA.Consts.layerType.KML}.\r\n * @property {string} [filter] - Aplicable a capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS}. Filtro en formato GML o CQL. En función del formato especificado, se añade a las peticiones GetMap posteriores el parámetro filter o cql_filter correspondiente.\r\n *\r\n * No se pueden añadir al mapa 2 o más capas del mismo servicio (misma URL), en las cuales se establezcan filtros de tipo distinto. Es decir, no se pueden mezclar filtros CQL y GML en capas del mismo servicio.\r\n * @property {string} [format] - En las capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS} y [WMTS]{@link SITNA.Consts.layerType.WMTS},\r\n * es el tipo MIME del formato de archivo de imagen a obtener del servicio. En las capas de tipo [VECTOR]{@link SITNA.Consts.layerType.VECTOR}, es el tipo MIME\r\n * del formato de archivo de datos geográficos que queremos cargar (GeoJSON, KML, etc.).\r\n * \r\n * Si esta propiedad no está definida, si la capa es un mapa de fondo (consultar propiedad `isBase`), se asume que el formato es `image/jpeg`, en caso contrario se asume que el formato es `image/png`.\r\n *\r\n * Para asignar valor a esta propiedad se puede usar las constantes de definidas en {@link SITNA.Consts.mimeType}.\r\n * @property {boolean} [hideTree] - Aplicable a capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS} y [KML]{@link SITNA.Consts.layerType.KML}.\r\n * Si se establece a `true`, la capa no muestra la jerarquía de grupos de capas en la tabla de contenidos ni en la leyenda.\r\n * @property {boolean} [isBase] - Si se establece a `true`, la capa es un mapa de fondo.\r\n * @property {boolean} [isDefault] - *__Obsoleta__: En lugar de esta propiedad es recomendable usar la propiedad `defaultBaseLayer`de {@link MapOptions}.*\r\n * \r\n * Si se establece a true, la capa se muestra por defecto si forma parte de los mapas de fondo.\r\n * @property {string} [layerNames] - Lista separada por comas de los nombres de capa del servicio OGC. Aplicable a capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS} y [WMTS]{@link SITNA.Consts.layerType.WMTS}.\r\n * @property {string} [matrixSet] - Nombre de grupo de matrices del servicio WMTS. Propiedad obligatoria para capas de tipo [WMTS]{@link SITNA.Consts.layerType.WMTS}.\r\n * @property {LayerOptions|string} [overviewMapLayer] - Definición de la capa que se utilizará como fondo en el control de mapa de situación cuando esta capa está de fondo en el mapa principal.\r\n * Si el valor es de tipo `string`, tiene que ser un identificador de capas de la API SITNA (un miembro de {@link SITNA.Consts.layer}).\r\n * \r\n * La capa del mapa de situación debe ser compatible con el sistema de referencia de coordenadas del mapa principal (ver propiedad `crs` de {@link MapOptions}).\r\n * @property {boolean} [stealth] - Si se establece a `true`, la capa no aparece en la tabla de contenidos ni en la leyenda.\r\n * De este modo se puede añadir una superposición de capas de trabajo que el usuario la perciba como parte del mapa de fondo.\r\n * @property {StyleOptions} [styles] - Descripción de los estilos que tendrán las entidades geográficas de la capa.\r\n * \r\n * Esta propiedad solamente se tiene en cuenta en capas de tipo [VECTOR]{@link SITNA.Consts.layerType.VECTOR}, [WFS]{@link SITNA.Consts.layerType.WFS} \r\n * y [KML]{@link SITNA.Consts.layerType.KML}.\r\n * @property {string} [thumbnail] - URL de una imagen en miniatura a mostrar en el selector de mapas de fondo.\r\n * @property {string} [title] - Título de capa. Este valor se mostrará en la tabla de contenidos y la leyenda.\r\n * @property {string} [type] - Tipo de capa. Si no se especifica se considera que la capa es WMS. La lista de valores posibles está definida en {@link SITNA.Consts.layerType}.\r\n * @property {string} [url] - URL del servicio OGC o del archivo de datos geográficos que define la capa. Propiedad obligatoria en capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS},\r\n * [WMTS]{@link SITNA.Consts.layerType.WMTS}, [WFS]{@link SITNA.Consts.layerType.WFS} y [KML]{@link SITNA.Consts.layerType.KML}.\r\n * \r\n * En las capas de tipo [VECTOR]{@link SITNA.Consts.layerType.VECTOR} los archivos de datos geográficos soportados son KML, GeoJSON, GPX, GML, WKT y TopoJSON.\r\n * El formato se deduce de la extensión del nombre de archivo, pero también se puede especificar utilizando la propiedad `format`.\r\n *\r\n * En el caso de que un fichero KML tenga definido el estilo del bocadillo, este formato será usado al renderizar el bocadillo en visores basados en la API SITNA.\r\n * @example Ejemplo de uso de la propiedad `url` - [Ver en vivo](../examples/cfg.LayerOptions.url.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de la propiedad `filter` - [Ver en vivo](../examples/cfg.LayerOptions.filter.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de la propiedad `overviewMapLayer` - [Ver en vivo](../examples/cfg.LayerOptions.overviewMapLayer.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de vistas de mapa, define qué vistas estarán disponibles para conmutar entre el mapa y las vistas adicionales configuradas aquí, y qué opciones se pasan a cada vista. Actualmente, únicamente existe la opción de configurar la vista `threed` que gestiona el control `threed` de {@link MapControlOptions}.\r\n * @typedef MapViewOptions\r\n * @see MapOptions\r\n * @property {ThreeDViewOptions} [threeD] - Se establece un valor *truthy* con las opciones de la vista del mapa.\r\n * @example Definición objeto MapViewOptions {@lang javascript}\r\n * { \r\n * threeD: { }\r\n * } \r\n * @example [Ver en vivo](../examples/cfg.ThreeDOptions.html) {@lang html}\r\n *
\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de controles de mapa, define qué controles se incluyen en un mapa y qué opciones se pasan a cada control.\r\n * @typedef MapControlOptions\r\n * @see MapOptions\r\n * @property {boolean|ControlOptions} [attribution=true] - Si se establece a un valor *truthy*, el mapa tiene atribución. \r\n * @property {boolean|ControlOptions} [basemapSelector=false] - Si se establece a un valor *truthy*, el mapa tiene un selector de mapas de fondo.\r\n * @property {boolean|ClickOptions} [click=false] - Si se establece a un valor *truthy*, el mapa tiene un control que gestiona los clics del usuario sobre su ventana de visualización.\r\n * La atribución es un texto superpuesto al mapa que actúa como reconocimiento de la procedencia de los datos que se muestran.\r\n * @property {boolean|CoordinatesOptions} [coordinates=true] - Si se establece a un valor *truthy*, el mapa tiene un indicador de coordenadas y de sistema de referencia espacial.\r\n * @property {boolean|DataLoaderOptions} [dataLoader=false] - Si se establece a un valor *truthy*, se muestra un control para añadir datos externos, en concreto servicios WMS y archivos locales de datos geográficos.\r\n * \r\n * Hay más información sobre el funcionamiento del control en la página de documentación de {@link DataLoaderOptions}.\r\n * @property {boolean|TabContainerOptions} [download=false] - Si se establece a un valor *truthy*, el mapa tiene un control que permite descargar la imagen actual del mapa o las capas cargadas como un archivo de datos vectoriales.\r\n * Para llevar a cabo esta segunda operación, es necesario que las capas del mapa tengan asociado un servicio WFS al servicio WMS que muestra las entidades en el mapa (software como GeoServer realiza esto automáticamente).\r\n * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n * @property {boolean|DrawMeasureModifyOptions} [drawMeasureModify=false] - Si se establece a un valor *truthy*, el mapa tiene un control para dibujar, medir y modificar geometrías en el mapa.\r\n * @property {boolean|FeatureInfoOptions} [featureInfo=true] - Si se establece a un valor *truthy*, el mapa responde a los clics con un información de las capas cargadas de tipo WMS. Se usa para ello la petición `getFeatureInfo` del standard WMS.\r\n * @property {boolean|ControlOptions} [fullScreen=false] - Si se establece a un valor *truthy*, el mapa incorpora un botón para activar el modo de pantalla completa.\r\n * @property {boolean|GeolocationOptions} [geolocation=false] - Si se establece a un valor *truthy*, se muestra un control para geolocalizar y crear, visualizar y guardar rutas.\r\n * @property {boolean|LayerCatalogOptions} [layerCatalog=false] - Si se establece a un valor *truthy*, se muestra un control para añadir capas de trabajo desde uno o varios servicios WMS.\r\n *\r\n * Este control se usa habitualmente en combinación con `workLayerManager`. Hay más información de cómo funcionan ambos controles en \r\n * la página de documentación de {@link LayerCatalogOptions}.\r\n * @property {boolean|ControlOptions} [legend=false] - Si se establece a un valor *truthy*, el mapa tiene leyenda.\r\n * @property {boolean|ControlOptions} [loadingIndicator=true] - Si se establece a un valor *truthy*, el mapa tiene un indicador de espera de carga.\r\n * @property {boolean|ControlOptions} [measure=false] - Si se establece a un valor *truthy*, el mapa tiene un medidor de longitudes, áreas y perímetros.\r\n * @property {boolean|MultiFeatureInfoOptions} [multiFeatureInfo=false] - Si se establece a un valor *truthy*, el mapa incluye un control que permite la\r\n * obtención de información de las entidades que se intersecan con puntos, líneas o polígonos dibujados por el usuario. Para líneas y polígonos, \r\n * es necesario que las capas del mapa tengan asociado un servicio WFS al servicio WMS que muestra las entidades en el mapa (software como GeoServer realiza esto automáticamente).\r\n * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n * @property {boolean|ControlOptions} [navBar=false] - Si se establece a un valor *truthy*, el mapa tiene una barra de navegación con control de zoom.\r\n * @property {boolean|OfflineMapMakerOptions} [offlineMapMaker=false] - Si se establece a un valor *truthy*, el mapa tiene un creador de mapas sin conexión para uso sin acceso a Internet.\r\n * \r\n * Hay más información sobre los requisitos necesarios para el correcto funcionamiento del control en la página de documentación de\r\n * {@link OfflineMapMakerOptions}.\r\n * @property {boolean|OverviewMapOptions} [overviewMap=false] - Si se establece a un valor *truthy*, el mapa tiene un mapa de situación.\r\n * @property {boolean|ControlOptions} [popup=false] - Si se establece a un valor *truthy*, el mapa muestra los datos asociados a los marcadores cuando se pulsa sobre ellos.\r\n * @property {boolean|PrintMapOptions} [printMap=false] - Si se establece a un valor *truthy*, se muestra una herramienta para imprimir el mapa en PDF.\r\n *\r\n * El control permite al usuario elegir entre varios tamaños de hoja y orientación horizontal o vertical, además se le puede poner un título al documento de impresión.\r\n * \r\n * Al pulsar el botón de imprimir se abre una previsualización como paso previo a la impresión. Ahí el usuario puede realizar unos últimos ajustes a la extensión del mapa.\r\n * \r\n * El PDF se generará al pulsar en el botón dentro de la previsualización.\r\n * @property {boolean|ControlOptions} [scale=false] - Si se establece a un valor *truthy*, el mapa tiene un indicador numérico de escala.\r\n * @property {boolean|ControlOptions} [scaleBar=false] - Si se establece a un valor *truthy*, el mapa tiene un indicador gráfico de escala.\r\n * @property {boolean|ControlOptions} [scaleSelector=false] - Si se establece a un valor *truthy*, el mapa tiene un selector numérico de escala.\r\n * @property {boolean|SearchOptions} [search=false] - Si se establece a un valor *truthy*, el mapa tiene un buscador. \r\n * El buscador localiza coordenadas y busca entidades geográficas tales como: municipios, cascos urbanos, vías, portales, topónimos, topónimos por municipio, carreteras, puntos kilométricos y parcelas catastrales de IDENA. \r\n * Es posible establecer un origen de datos distinto a IDENA en el que buscar, consultar en {@link SearchOptions}.\r\n * @property {boolean|ControlOptions} [share=false] - Si se establece a un valor *truthy*, el mapa tiene un control para compartir mapas por distintos canales.\r\n * \r\n * Para que el control funcione correctamente, hay que establecer un valor verdadero a la opción `stateful` del mapa (Ver {@link MapOptions}).\r\n * @property {boolean|StreetViewOptions} [streetView=true] - Si se establece a un valor *truthy*, el usuario podrá abrir una ventana de Google StreetView en la ubicación seleccionada en el mapa.\r\n * @property {boolean} [threed=false] - Si se establece a true, el mapa incorpora un botón para conmutar entre las vistas 2D y 3D.\r\n * Este control requiere de la configuración adicional de una vista en la cual se renderizará la vista 3D, para ello se deben seguir los siguientes pasos:\r\n *\r\n * - Añadir en el marcado elemento del DOM en el cual renderizar la vista 3D.\r\n * - Establecer la propiedad `views` del mapa (Ver {@link MapOptions}) indicando como valor un objeto con la estructura definida en {@link MapViewOptions}.\r\n * - Establecer la propiedad `threeD` del objeto anterior configurando como valor un objeto siguiendo la estructura de {@link ThreeDViewOptions}. \r\n * \r\n * @property {boolean|ControlOptions} [TOC=false] - Si se establece a un valor *truthy*, el mapa tiene una tabla de contenidos mostrando las capas de trabajo y los grupos de marcadores.\r\n * Los controles `TOC` y `workLayerManager` realizan varias funciones comunes, así rara vez será necesario tener los dos a la vez en un visor.\r\n * @property {boolean|WFSEditOptions} [WFSEdit=false] - Si se establece a un valor *truthy*, se añade un control para editar las entidades de las capas vectoriales de tipo [WFS]{@link SITNA.Consts.layerType.WFS} o de las\r\n * capas de tipo [WMS]{@link SITNA.Consts.layerType.WMS} si estas tienen asociado un servicio WFS. Con este control se pueden crear, modificar y eliminar entidades. Las modificaciones pueden ser de geometría o de atributos.\r\n * @property {boolean|WFSQueryOptions} [WFSQuery=false] - Si se establece a un valor *truthy*, desde el control `workLayerManager` se pueden hacer consultas alfanuméricas a las capas del mapa.\r\n * @property {boolean|ControlOptions} [workLayerManager=false] - Si se establece a un valor *truthy*, se muestra un control para consultar y gestionar las capas de trabajo que están cargadas en el mapa. \r\n * Con este control se dispone de las siguientes funcionalidades: \r\n * \r\n * - Consultar qué capas están cargadas en el mapa\r\n * - Ver en qué orden están superpuestas y modificar ese orden\r\n * - Comprobar si una capa es visible al nivel de zoom actual\r\n * - Activar y desactivar la visibilidad de las capas\r\n * - Establecer el grado de transparencia de cada capa\r\n * - Borrar capas cargadas\r\n * - Consultar metadatos asociados a la capa\r\n * - Si está también el control `WFSQuery`, ejecutar consultas alfanuméricas sobre las capas cargadas en el mapa, si cuentan con un servicio WFS pareado al WMS.\r\n * \r\n * Los controles `workLayerManager` y `TOC` realizan varias funciones comunes, así rara vez será necesario tener los dos a la vez en un visor.\r\n * @example Ejemplo de uso de propiedad `featureInfo` - [Ver en vivo](../examples/cfg.MapControlOptions.featureInfo.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `fullScreen` - [Ver en vivo](../examples/cfg.MapControlOptions.fullScreen.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `printMap` - [Ver en vivo](../examples/cfg.MapControlOptions.printMap.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `share` - [Ver en vivo](../examples/cfg.MapControlOptions.share.html) {@lang html}\r\n *
\r\n * \r\n * @example Ejemplo de uso de propiedad `workLayerManager` - [Ver en vivo](../examples/cfg.MapControlOptions.workLayerManager.html) {@lang html}\r\n *
\r\n * \r\n */\r\n controls: {\r\n loadingIndicator: true,\r\n navBar: false,\r\n scaleBar: false,\r\n scale: false,\r\n scaleSelector: false,\r\n overviewMap: false,\r\n basemapSelector: false,\r\n attribution: true,\r\n TOC: false,\r\n workLayerManager: false,\r\n layerCatalog: false,\r\n coordinates: true,\r\n legend: false,\r\n popup: false,\r\n search: {\r\n url: 'https://idena.navarra.es/ogc/wfs',\r\n allowedSearchTypes: {\r\n coordinates: {},\r\n municipality: {},\r\n urban: {},\r\n street: {},\r\n number: {},\r\n cadastral: {}\r\n }\r\n },\r\n measure: false,\r\n streetView: false,\r\n click: false,\r\n printMap: false,\r\n featureInfo: {\r\n active: true,\r\n persistentHighlights: true\r\n },\r\n featureTools: true\r\n },\r\n\r\n layout: null,\r\n\r\n /**\r\n * Opciones de marcador (punto con un icono). Para determinar qué icono se va a asignar al marcador, se leen las propiedades `url`, `cssClass` `group`, en ese orden de preferencia.\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef MarkerOptions\r\n * @extends MarkerStyleOptions\r\n * @see SITNA.Map#addMarker\r\n * @property {number[]} [anchor=[0.5, 1]] - Posicionamiento relativo del icono respecto al punto del mapa, representado por un array de dos números entre 0 y 1, siendo [0, 0] la esquina superior izquierda del icono y [1, 1] la esquina inferior derecha del icono.\r\n * @property {string} [angle] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string[]} [classes=[\"tc-marker1\", \"tc-marker2\", \"tc-marker3\", \"tc-marker4\", \"tc-marker5\"]] - Lista de nombres de clase CSS a utilizar para los iconos de los marcadores. La API extraerá la URL de las imágenes del atributo `background-image` asociado a la clase.\r\n * @property {string} [cssClass] - Nombre de una clase CSS. El marcador adoptará como icono el valor del atributo `background-image` de dicha clase.\r\n * @property {object|string} [data] - Diccionario de pares clave-valor que representa los atributos alfanuméricos del marcador o bien cadena de caracteres con el código HTML asociado al mismo. Al pulsar sobre el marcador, bien una tabla con los atributos o bien el HTML especificado se mostrarán en un bocadillo.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del marcador.\r\n * @property {string} [group] - Nombre de grupo en el que incluir el marcador. Todos los marcadores con el mismo valor en esta propiedad se consideran en un mismo grupo, y\r\n * con ello comparten el mismo icono. El icono se selecciona por orden de la lista de clases CSS definida en `classes`. Los grupos se muestran en la tabla de contenidos y en la leyenda.\r\n * @property {number} [height=32] - Altura en píxeles del icono.\r\n * @property {string} [label] - Colección de nombre de campo o campos de los cuales extraer el valor de la etiqueta.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [layer] - Esta propiedad se utiliza en {@link SITNA.Map#addMarker}. Es el identificador de una capa de tipo {@link SITNA.Consts.layerType.VECTOR} en la que se añadirá el marcador.\r\n * Si no se especifica se creará una capa específica para los marcadores que se añadan por este método.\r\n * @property {boolean} [showPopup] - Si se establece a `true`, el marcador se añade al mapa con el bocadillo de información asociada visible por defecto.\r\n * @property {string} [url] - URL de archivo de imagen que se utilizará para el icono.\r\n * @property {number} [width=32] - Anchura en píxeles del icono.\r\n * @example Ejemplo del uso de contenido HTML en la propiedad `data` [Ver en vivo](../examples/cfg.MarkerOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de estilo de punto. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PointStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [angle] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string} [fillColor=\"#000000\" (\"#333366\" en clusters)] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3 (0.6 en clusters)] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [fontColor=\"#000000\" (\"#ffffff\" en clusters)] - Color del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10 (9 en clusters)] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del punto.\r\n * @property {string} [label] - Colección de nombre de campo o campos de los cuales extraer el valor de la etiqueta.\r\n * @property {string} [labelOutlineColor=\"#ffffff\" (undefined en clusters)] - Color del contorno del texto de la etiqueta descriptiva del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2 (undefined en clusters)] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {number} [radius=6 (undefined en clusters)] - Radio en píxeles del símbolo que representa el punto.\r\n * @property {string} [strokeColor=\"#ff0000\" (undefined en clusters)] - Color de trazo de la línea que delimita el símbolo del punto, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1 (undefined en clusters)] - Opacidad de trazo de la línea que delimita el símbolo del punto, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2 (undefined en clusters)] - Anchura de trazo en píxeles de la línea que delimita el símbolo del punto.\r\n */\r\n\r\n /**\r\n * Opciones de estilo de marcador (punto con un icono). Para determinar qué icono se va a asignar al marcador, se leen las propiedades `url` y `cssClass`, en ese orden de preferencia.\r\n * Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef MarkerStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {number[]} [anchor=[0.5, 1]] - Posicionamiento relativo del icono respecto al punto del mapa, representado por un array de dos números entre 0 y 1, siendo [0, 0] la esquina superior izquierda del icono y [1, 1] la esquina inferior derecha del icono.\r\n * @property {string} [angle] - Nombre del campo del cual extraer la rotación a aplicar a la etiqueta. El valor tiene que estar en grados.\r\n * @property {string[]} [classes=[\"tc-marker1\", \"tc-marker2\", \"tc-marker3\", \"tc-marker4\", \"tc-marker5\"]] - Lista de nombres de clase CSS a utilizar para los iconos de los marcadores. La API extraerá la URL de las imágenes del atributo `background-image` asociado a la clase.\r\n * @property {string} [cssClass] - Nombre de una clase CSS. El marcador adoptará como icono el valor del atributo `background-image` de dicha clase.\r\n * @property {string} [fontColor=\"#000000\"] - Color del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fontSize=10] - Tamaño en puntos tipográficos (`pt`) de la fuente del texto de la etiqueta descriptiva del marcador.\r\n * @property {number} [height=32] - Altura en píxeles del icono.\r\n * @property {string} [label] - Colección de nombre de campo o campos de los cuales extraer el valor de la etiqueta.\r\n * @property {string} [labelOutlineColor=\"#ffffff\"] - Color del contorno del texto de la etiqueta descriptiva del marcador, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [labelOutlineWidth=2] - Anchura en píxeles del trazo del contorno del texto de la etiqueta.\r\n * @property {string} [url] - URL de archivo de imagen que se utilizará para el icono.\r\n * @property {number} [width=32] - Anchura en píxeles del icono.\r\n */\r\n\r\n /**\r\n * Opciones de estilo de línea. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef LineStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de la línea, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de la línea, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en píxeles de la línea.\r\n */\r\n\r\n /**\r\n * Opciones de estilo de polígono. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef PolygonStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {string} [fillColor=\"#000000\"] - Color de relleno, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [fillOpacity=0.3] - Opacidad de relleno, valor de 0 a 1.\r\n * @property {string} [strokeColor=\"#ff0000\"] - Color de trazo de los lados del polígono, representado en formato hex triplet (`#RRGGBB`).\r\n * @property {number} [strokeOpacity=1] - Opacidad de trazo de los lados del polígono, valor de 0 a 1.\r\n * @property {number} [strokeWidth=2] - Anchura de trazo en de los lados del polígono.\r\n */\r\n\r\n /**\r\n * Opciones de estilo de cluster de puntos. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef ClusterStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {PointStyleOptions} [point] - Opciones de estilo del punto que representa el cluster.\r\n * @see ClusterOptions\r\n * @example [Ver en vivo](../examples/cfg.ClusterStyleOptions.point.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de estilo de mapa de calor. Hay que tener en cuenta que el archivo `config.json` de una maquetación puede sobreescribir los valores por defecto de esta propiedad\r\n * (para ver instrucciones de uso de maquetaciones, consultar {@tutorial layout_cfg}).\r\n * @typedef HeatmapStyleOptions\r\n * @see StyleOptions\r\n * @see layout_cfg\r\n * @property {number} [blur=15] - Ancho en píxeles del difuminado de las manchas del mapa de calor.\r\n * @property {string[]} [gradient=[\"#00f\", \"#0ff\", \"#0f0\", \"#ff0\", \"#f00\"]] - Gradiente de colores de las manchas de mapa \r\n * de calor. Debe ser un array de cadenas CSS de color.\r\n * @property {number} [radius=8] - Radio en píxeles de la mancha unitaria en el mapa de calor.\r\n * @example [Ver en vivo](../examples/cfg.HeatmapStyleOptions.html) {@lang html}\r\n *
\r\n * \r\n */\r\n\r\n /**\r\n * Opciones de estilo de entidades geográficas.\r\n * @typedef StyleOptions\r\n * @see MapOptions\r\n * @see WFSQueryOptions\r\n * @see CadastralSearchOptions\r\n * @see MunicipalitySearchOptions\r\n * @see PostalAddressSearchOptions\r\n * @see StreetSearchOptions\r\n * @see UrbanAreaSearchOptions\r\n * @property {PointStyleOptions} [point] - Opciones de estilo de punto.\r\n * @property {LineStyleOptions} [line] - Opciones de estilo de línea.\r\n * @property {PolygonStyleOptions} [polygon] - Opciones de estilo de polígono.\r\n * @property {MarkerStyleOptions} [marker] - Opciones de estilo de marcador (punto de mapa con icono).\r\n * @property {ClusterStyleOptions} [cluster] - Opciones de estilo de cluster de puntos. Consultar la propiedad `cluster` de {@link LayerOptions} para saber cómo mostrar clusters.\r\n * @property {HeatmapStyleOptions} [heatmap] - Opciones de estilo de mapa de calor.\r\n */\r\n styles: {\r\n point: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n radius: 6,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -16],\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n marker: {\r\n classes: [\r\n TC.Consts.classes.MARKER + 1,\r\n TC.Consts.classes.MARKER + 2,\r\n TC.Consts.classes.MARKER + 3,\r\n TC.Consts.classes.MARKER + 4,\r\n TC.Consts.classes.MARKER + 5\r\n ],\r\n anchor: [.5, 1],\r\n width: 32,\r\n height: 32,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -32],\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n line: {\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n polygon: {\r\n strokeColor: '#ff0000',\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n fillColor: '#000000',\r\n fillOpacity: 0.3,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n label: {\r\n strokeColor: '#ffffff',\r\n strokeWidth: 1,\r\n fillColor: '#000000'\r\n },\r\n cluster: {\r\n point: {\r\n fillColor: '#333366',\r\n fillOpacity: 0.6,\r\n radius: getClusterRadius,\r\n label: '${features.length}',\r\n fontColor: \"#ffffff\",\r\n fontSize: 9\r\n }\r\n },\r\n selection: {\r\n point: {\r\n fillColor: '#008000',\r\n fillOpacity: 0.5,\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n radius: 6,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n labelOffset: [0, -16],\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n line: {\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n },\r\n polygon: {\r\n strokeColor: '#008000',\r\n strokeWidth: 2,\r\n fillColor: '#000000',\r\n fillOpacity: .3,\r\n labelOutlineWidth: 2,\r\n labelOutlineColor: '#ffffff',\r\n fontColor: '#000000',\r\n fontSize: 10\r\n }\r\n }\r\n }\r\n };\r\n})();\r\n\r\n/**\r\n * Configuración general de la API. Cualquier llamada a un método o un constructor de la API sin parámetro de opciones toma las opciones de aquí. \r\n * Hay que tener en cuenta que el archivo config.json de una maquetación puede sobreescribir los valores por defecto de las propiedades de este espacio de nombres \r\n * (consultar el tutorial {@tutorial layout_cfg} para ver instrucciones de uso de maquetaciones).\r\n * @member Cfg\r\n * @type MapOptions\r\n * @memberof SITNA\r\n * @example Configuración de capas base - [Ver en vivo](../examples/Cfg.baseLayers.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de CRS - [Ver en vivo](../examples/Cfg.crs.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de capas de trabajo - [Ver en vivo](../examples/Cfg.workLayers.html) {@lang html}\r\n *
\r\n * \r\n * @example Configuración de uso de proxy {@lang javascript}\r\n * SITNA.Cfg.proxy = \"\"; // Las peticiones a http://www.otrodominio.com se hacen directamente\r\n * \r\n * SITNA.Cfg.proxy = \"/cgi-bin/proxy.cgi?url=\"; // Las peticiones a http://www.otrodominio.com se convierten en peticiones a /cgi-bin/proxy.cgi?url=http://www.otrodominio.com\r\n */\r\nconst Cfg = TC.Util.extend(true, {}, Defaults);\r\n\r\nexport { Defaults, Cfg };","import TC from '../TC';\r\n\r\n/**\r\n * Espacio de nombres donde se encuentran las constantes de utilidad.\r\n * @namespace SITNA.Consts\r\n */\r\nTC.Consts = {};\r\n\r\nTC.Consts.OLNS = 'ol';\r\nTC.Consts.PROJ4JSOBJ = 'proj4';\r\nTC.Consts.GEOGRAPHIC = 'geographic';\r\nTC.Consts.UTM = 'UTM';\r\nTC.Consts.OLD_BROWSER_ALERT = 'TC.oldBrowserAlert';\r\nTC.Consts.CLUSTER_ANIMATION_DURATION = 200;\r\nTC.Consts.ZOOM_ANIMATION_DURATION = 300;\r\nTC.Consts.URL_MAX_LENGTH = 2048;\r\nTC.Consts.METER_PRECISION = 0;\r\nTC.Consts.DEGREE_PRECISION = 5;\r\nTC.Consts.EXTENT_TOLERANCE = 0.9998;/*URI: debido al redondeo del extente en el hash se obtiene un nivel de resolución mayor al debido. Con este valor definimos una tolerancia para que use una resolución si es muy muy muy próxima*/\r\nTC.Consts.SRSDOWNLOAD_GEOJSON_KML = \"EPSG:4326\";\r\n\r\nTC.Consts.url = {\r\n SPLIT_REGEX: /([^:]*:)?\\/\\/([^:]*:?[^@]*@)?([^:\\/\\?]*):?([^\\/\\?]*)/,\r\n TEMPLATING_FULL: 'lib/handlebars/handlebars',\r\n TEMPLATING_RUNTIME: 'lib/handlebars/handlebars.runtime',\r\n TEMPLATING_HELPERS: 'lib/handlebars/helpers.js',\r\n EPSG: 'https://epsg.io/',\r\n D3C3: TC.apiLocation + 'lib/d3c3/d3c3.min.js',\r\n CESIUM: TC.isDebug ? 'lib/cesium/build/cesium-sitna.js' : 'lib/cesium/build/cesium-sitna.min.js',\r\n CESIUM_CONNECTOR: 'TC/cesium/cesium.js',\r\n JSNLOG: 'lib/jsnlog/jsnlog.min.js',\r\n INTERACTJS: 'lib/interactjs/interact.min.js',\r\n ERROR_LOGGER: TC.apiLocation + 'errors/logger.ashx',\r\n HASH: 'lib/jshash/md5-min.js',\r\n DRAGGABILLY: 'lib/draggabilly/draggabilly.pkgd',\r\n URL_POLYFILL: 'lib/polyfill/url.js',\r\n PROMISE_POLYFILL: 'lib/polyfill/promise/polyfill.min.js'\r\n};\r\nTC.Consts.classes = {\r\n MAP: 'tc-map',\r\n POINT: 'tc-point',\r\n MARKER: 'tc-marker',\r\n VISIBLE: 'tc-visible',\r\n HIDDEN: 'tc-hidden',\r\n COLLAPSED: 'tc-collapsed',\r\n CHECKED: 'tc-checked',\r\n DISABLED: 'tc-disabled',\r\n ACTIVE: 'tc-active',\r\n DEFAULT: 'tc-default',\r\n LASTCHILD: 'tc-lastchild',\r\n TRANSPARENT: 'tc-transparent',\r\n DROP: 'tc-drop',\r\n LOADING: 'tc-loading',\r\n IPAD_IOS7_FIX: 'tc-ipad-ios7-fix',\r\n INFO: 'tc-msg-info',\r\n WARNING: 'tc-msg-warning',\r\n ERROR: 'tc-msg-error',\r\n THREED: 'tc-3d',\r\n TOAST: 'tc-toast',\r\n TOAST_CONTAINER: 'tc-toast-container'\r\n};\r\nTC.Consts.msgType = {\r\n INFO: 'info',\r\n WARNING: 'warning',\r\n ERROR: 'error'\r\n};\r\nTC.Consts.msgErrorMode = {\r\n TOAST: 'toast',\r\n CONSOLE: 'console',\r\n EMAIL: 'email'\r\n};\r\nTC.Consts.event = {\r\n /**\r\n * Se lanza cuando el mapa ha cargado todas sus capas iniciales y todos sus controles\r\n * @event mapload\r\n */\r\n MAPLOAD: 'mapload.tc',\r\n MAPREADY: 'mapready.tc',\r\n MAPCHANGE: 'mapchange.tc',\r\n BEFORELAYERADD: 'beforelayeradd.tc',\r\n LAYERADD: 'layeradd.tc',\r\n LAYERREMOVE: 'layerremove.tc',\r\n LAYERORDER: 'layerorder.tc',\r\n BEFORELAYERUPDATE: 'beforelayerupdate.tc',\r\n LAYERUPDATE: 'layerupdate.tc',\r\n LAYERERROR: 'layererror.tc',\r\n BEFOREBASELAYERCHANGE: 'beforebaselayerchange.tc',\r\n BASELAYERCHANGE: 'baselayerchange.tc',\r\n BEFOREUPDATE: 'beforeupdate.tc',\r\n UPDATE: 'update.tc',\r\n BEFOREZOOM: 'beforezoom.tc',\r\n ZOOM: 'zoom.tc',\r\n BEFOREUPDATEPARAMS: 'beforeupdateparams.tc',\r\n UPDATEPARAMS: 'updateparams.tc',\r\n VECTORUPDATE: 'vectorupdate.tc',\r\n FEATUREADD: 'featureadd.tc',\r\n BEFOREFEATURESADD: 'beforefeaturesadd.tc',\r\n FEATURESADD: 'featuresadd.tc',\r\n BEFOREFEATUREREMOVE: 'beforefeatureremove.tc',\r\n FEATUREREMOVE: 'featureremove.tc',\r\n FEATURESCLEAR: 'featuresclear.tc',\r\n FEATURESIMPORT: 'featuresimport.tc',\r\n FEATURESIMPORTERROR: 'featuresimporterror.tc',\r\n FEATURESIMPORTPARTIAL: 'featuresimportpartial.tc',\r\n FEATURESIMPORTWARN: 'featuresimportwarn.tc',\r\n FILESAVE: 'filesave.tc',\r\n BEFORETILELOAD: 'beforetileload.tc',\r\n TILELOAD: 'tileload.tc',\r\n TILELOADERROR: 'tileloaderror.tc',\r\n CONTROLADD: 'controladd.tc',\r\n CONTROLACTIVATE: 'controlactivate.tc',\r\n CONTROLDEACTIVATE: 'controldeactivate.tc',\r\n BEFORECONTROLRENDER: 'beforecontrolrender.tc',\r\n CONTROLRENDER: 'controlrender.tc',\r\n BEFORELAYOUTLOAD: 'beforelayoutload.tc',\r\n LAYOUTLOAD: 'layoutload.tc',\r\n LAYERVISIBILITY: 'layervisibility.tc',\r\n LAYEROPACITY: 'layeropacity.tc',\r\n FEATURECLICK: 'featureclick.tc',\r\n NOFEATURECLICK: 'nofeatureclick.tc',\r\n FEATUREOVER: 'featureover.tc',\r\n FEATUREOUT: 'featureout.tc',\r\n BEFOREFEATUREINFO: 'beforefeatureinfo.tc',\r\n FEATUREINFO: 'featureinfo.tc',\r\n NOFEATUREINFO: 'nofeatureinfo.tc',\r\n FEATUREINFOERROR: 'featureinfoerror.tc',\r\n CLICK: 'click',\r\n MOUSEUP: 'mouseup',\r\n MOUSEMOVE: 'mousemove',\r\n MOUSELEAVE: 'mouseleave',\r\n STARTLOADING: 'startloading.tc',\r\n STOPLOADING: 'stoploading.tc',\r\n EXTERNALSERVICEADDED: 'externalserviceadded.tc',\r\n ZOOMTO: 'zoomto.tc',\r\n PROJECTIONCHANGE: 'projectionchange.tc',\r\n VIEWCHANGE: 'viewchange.tc',\r\n TERRAINPROVIDERADD: 'terrainprovideradd.tc',\r\n TERRAINPROVIDERREMOVE: 'terrainproviderremove.tc',\r\n OVERVIEWBASELAYERCHANGE: 'overviewbaselayerchange.tc',\r\n POPUP: 'popup.tc',\r\n BEFOREAPPLYQUERY: 'beforeapplyquery.tc'\r\n};\r\n\r\n/**\r\n * Colección de identificadores de capas útiles de IDENA y otros servicios de terceros.\r\n * @namespace SITNA.Consts.layer\r\n * @see MapOptions\r\n * @see SITNA.Map#addLayer\r\n * @see SITNA.Map#setBaseLayer\r\n */\r\nTC.Consts.layer = {\r\n /**\r\n * Identificador de la capa de ortofoto de máxima actualidad del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO: 'ortofoto',\r\n /**\r\n * Identificador de la capa de mapa base del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_BASEMAP: 'mapabase',\r\n /**\r\n * Identificador de la capa de catastro del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_CADASTER: 'catastro',\r\n /**\r\n * Identificador de la capa de cartografía topográfica 2017 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_CARTO: 'cartografia',\r\n /**\r\n * Identificador de la capa de ortofoto 2021 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2021: 'ortofoto2021',\r\n /**\r\n * Identificador de la capa de ortofoto 2020 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2020: 'ortofoto2020',\r\n /**\r\n * Identificador de la capa de ortofoto 2019 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2019: 'ortofoto2019',\r\n /**\r\n * Identificador de la capa de ortofoto 2018 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2018: 'ortofoto2018',\r\n /**\r\n * Identificador de la capa de ortofoto 2017 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2017: 'ortofoto2017',\r\n /**\r\n * Identificador de la capa de ortofoto 2014 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2014: 'ortofoto2014',\r\n /**\r\n * Identificador de la capa de ortofoto 2012 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_ORTHOPHOTO2012: 'ortofoto2012',\r\n /**\r\n * Identificador de la capa de ortofoto de la comarca de Pamplona 2020 del WMTS de IDENA. Esta capa solo es compatible con el sistema de referencia EPSG:25830.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_PAMPLONA_ORTHOPHOTO2020: 'ortofoto_pamplona2020',\r\n /**\r\n * Identificador de la capa de mapa base del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNBASEMAP: 'mapabase_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto de máxima actualidad del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO: 'ortofoto_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2021 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2021: 'ortofoto2021_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2020 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2020: 'ortofoto2020_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2019 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2019: 'ortofoto2019_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2018 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2018: 'ortofoto2018_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2017 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2017: 'ortofoto2017_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2014 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2014: 'ortofoto2014_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto 2012 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNORTHOPHOTO2012: 'ortofoto2012_dinamico',\r\n /**\r\n * Identificador de la capa de ortofoto de la comarca de Pamplona 2020 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_PAMPLONA_DYNORTHOPHOTO2020: 'ortofoto_pamplona2020_dinamico',\r\n /**\r\n * Identificador de la capa de cartografía topográfica 2017 del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_DYNCARTO: 'cartografia_dinamico',\r\n /**\r\n * Identificador de la capa de relieve en blanco y negro del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_BW_RELIEF: 'relieve_bn',\r\n /**\r\n * Identificador de la capa de la combinación de ortofoto de máxima actualidad y mapa base del WMS de IDENA.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IDENA_BASEMAP_ORTHOPHOTO: 'base_orto',\r\n\r\n /**\r\n * Identificador de la capa de cartografía raster del WMTS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_CARTO: \"ign-raster\",\r\n /**\r\n * Identificador de la capa del callejero del WMTS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_BASEMAP: \"ign-base\",\r\n /**\r\n * Identificador de la capa del callejero en gris del WMTS del Instituto Geográfico Nacional. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_BASEMAP_GREY: \"ign-base-gris\",\r\n /**\r\n * Identificador de la capa de relieve del WMTS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_RELIEF: \"ign-mtn\",\r\n /**\r\n * Identificador de la capa del PNOA del WMTS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_ORTHOPHOTO: \"ign-pnoa\",\r\n /**\r\n * Identificador de la capa del modelo digital de superficies LIDAR del WMTS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_LIDAR: \"ign-lidar\",\r\n\r\n /**\r\n * Identificador de la capa de cartografía raster del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNCARTO: \"ign-raster-dyn\",\r\n /**\r\n * Identificador de la capa del callejero del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNBASEMAP: \"ign-base-dyn\",\r\n /**\r\n * Identificador de la capa del callejero en gris del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNBASEMAP_GREY: \"ign-base-gris-dyn\",\r\n /**\r\n * Identificador de la capa de relieve del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNRELIEF: \"ign-mtn-dyn\",\r\n /**\r\n * Identificador de la capa del PNOA del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNORTHOPHOTO: \"ign-pnoa-dyn\",\r\n /**\r\n * Identificador de la capa del modelo digital de superficies LIDAR del WMS del Instituto Geográfico Nacional.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_ES_DYNLIDAR: \"ign-lidar-dyn\",\r\n\r\n /*\r\n * Identificador de la capa de cartografía raster del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n //IGN_FR_CARTO: \"ign-fr-cartes\",\r\n /**\r\n * Identificador de la capa de mapa base del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_BASEMAP: \"ign-fr-base\",\r\n /**\r\n * Identificador de la capa de relieve del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_RELIEF: \"ign-fr-estompage\",\r\n /**\r\n * Identificador de la capa de ortofoto del WMTS del Instituto Geográfico Nacional Francés. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_ORTHOPHOTO: \"ign-fr-orto\",\r\n\r\n /*\r\n * Identificador de la capa de cartografía raster del WMS del Instituto Geográfico Nacional Francés.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n //IGN_FR_DYNCARTO: \"ign-fr-cartes-dyn\",\r\n /**\r\n * Identificador de la capa de mapa base del WMS del Instituto Geográfico Nacional Francés.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_DYNBASEMAP: \"ign-fr-base-dyn\",\r\n /**\r\n * Identificador de la capa de relieve del WMS del Instituto Geográfico Nacional Francés.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_DYNRELIEF: \"ign-fr-estompage-dyn\",\r\n /**\r\n * Identificador de la capa de ortofoto del WMS del Instituto Geográfico Nacional Francés.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n IGN_FR_DYNORTHOPHOTO: \"ign-fr-orto-dyn\",\r\n\r\n /**\r\n * Identificador de la capa de OpenStreetMap a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n OSM: 'osm',\r\n /**\r\n * Identificador de la capa de Carto Voyager a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n CARTO_VOYAGER: 'carto_voyager',\r\n /**\r\n * Identificador de la capa de Carto Light a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n CARTO_LIGHT: 'carto_light',\r\n /**\r\n * Identificador de la capa de Carto Dark a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n CARTO_DARK: 'carto_dark',\r\n /**\r\n * Identificador de la capa de Mapbox Streets a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n MAPBOX_STREETS: 'mapbox_streets',\r\n /**\r\n * Identificador de la capa de Mapbox Satellite a través del WMTS de la API SITNA. Esta capa solo es compatible con el sistema de referencia EPSG:3857.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layer\r\n * @readonly\r\n */\r\n MAPBOX_SATELLITE: 'mapbox_satellite',\r\n /** \r\n * Identificador de una capa en blanco.\r\n * @var {string}\r\n * @readonly\r\n * @memberof SITNA.Consts.layer\r\n */\r\n BLANK: 'ninguno'\r\n};\r\nTC.Consts.text = {\r\n API_ERROR: 'Error API SITNA',\r\n APP_ERROR: 'Error de aplicación'\r\n};\r\n\r\n/**\r\n * Colección de identificadores de tipo de capa.\r\n * @namespace SITNA.Consts.layerType\r\n * @see LayerOptions\r\n */\r\nTC.Consts.layerType = {\r\n /**\r\n * Identificador de capa de tipo WMS.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layerType\r\n * @readonly\r\n */\r\n WMS: 'WMS',\r\n /**\r\n * Identificador de capa de tipo WMTS.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layerType\r\n * @readonly\r\n */\r\n WMTS: 'WMTS',\r\n /**\r\n * Identificador de capa de tipo WFS.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layerType\r\n * @readonly\r\n */\r\n WFS: 'WFS',\r\n /**\r\n * Identificador de capa de tipo vectorial. Este tipo de capa es la que se utiliza para dibujar marcadores.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layerType\r\n * @readonly\r\n */\r\n VECTOR: 'vector',\r\n /**\r\n * Identificador de capa de tipo KML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.layerType\r\n * @deprecated En lugar de esta propiedad es recomendable usar {@link SITNA.Consts.layerType.VECTOR} para cargar archivos KML.\r\n * @readonly\r\n */\r\n KML: 'KML',\r\n GPX: 'GPX',\r\n GML: 'GML',\r\n GEOJSON: 'GeoJSON',\r\n GROUP: 'group'\r\n};\r\n\r\n/**\r\n * Colección de identificadores de tipo de geometría.\r\n * @namespace SITNA.Consts.geom\r\n */\r\nTC.Consts.geom = {\r\n /**\r\n * Identificador de geometría de tipo punto.\r\n * @var {string}\r\n * @memberof SITNA.Consts.geom\r\n * @readonly\r\n */\r\n POINT: 'point',\r\n MULTIPOINT: 'multipoint',\r\n /**\r\n * Identificador de geometría de tipo línea.\r\n * @var {string}\r\n * @memberof SITNA.Consts.geom\r\n * @readonly\r\n */\r\n POLYLINE: 'polyline',\r\n /**\r\n * Identificador de geometría de tipo polígono.\r\n * @var {string}\r\n * @memberof SITNA.Consts.geom\r\n * @readonly\r\n */\r\n POLYGON: 'polygon',\r\n MULTIPOLYLINE: 'multipolyline',\r\n MULTIPOLYGON: 'multipolygon',\r\n CIRCLE: 'circle',\r\n RECTANGLE: 'rectangle'\r\n};\r\nTC.Consts.searchType = {\r\n CADASTRAL: 'cadastral',\r\n COORDINATES: 'coordinates',\r\n MUNICIPALITY: 'municipality',\r\n COUNCIL: 'council',\r\n LOCALITY: 'locality',\r\n STREET: 'street',\r\n NUMBER: 'number',\r\n URBAN: 'urban',\r\n COMMONWEALTH: 'commonwealth',\r\n ROAD: 'road',\r\n ROADMILESTONE: 'roadmilestone',\r\n PLACENAME: 'placename',\r\n PLACENAMEMUNICIPALITY: 'placenamemunicipality'\r\n};\r\nTC.Consts.mapSearchType = {\r\n MUNICIPALITY: TC.Consts.searchType.MUNICIPALITY,\r\n COUNCIL: TC.Consts.searchType.COUNCIL,\r\n URBAN: TC.Consts.searchType.URBAN,\r\n COMMONWEALTH: TC.Consts.searchType.COMMONWEALTH,\r\n GENERIC: 'generic'\r\n};\r\nTC.Consts.comparison = {\r\n EQUAL_TO: '==',\r\n NOT_EQUAL_TO: '!=',\r\n LESS_THAN: '<',\r\n GREATER_THAN: '>',\r\n LESS_THAN_EQUAL_TO: '=<',\r\n GREATER_THAN_EQUAL_TO: '>=',\r\n LIKE: 'is'\r\n};\r\nTC.Consts.logicalOperator = {\r\n AND: 'and',\r\n OR: 'or'\r\n};\r\nTC.Consts.WMTSEncoding = {\r\n KVP: 'KVP',\r\n RESTFUL: 'RESTful'\r\n};\r\n\r\n/**\r\n * Colección de tipos MIME de utilidad.\r\n * @namespace SITNA.Consts.mimeType\r\n * @see LayerOptions\r\n */\r\nTC.Consts.mimeType = {\r\n /** \r\n * Tipo MIME de imagen PNG.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default\r\n */\r\n PNG: 'image/png',\r\n /** \r\n * Tipo MIME de imagen JPEG.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n JPEG: 'image/jpeg',\r\n /** \r\n * Tipo MIME de documento JSON.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n JSON: 'application/json',\r\n /** \r\n * Tipo MIME de documento GeoJSON.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n GEOJSON: 'application/vnd.geo+json',\r\n /** \r\n * Tipo MIME de documento KML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n KML: 'application/vnd.google-earth.kml+xml',\r\n /** \r\n * Tipo MIME de documento KMZ (KML comprimido en ZIP).\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n KMZ: 'application/vnd.google-earth.kmz',\r\n /** \r\n * Tipo MIME de documento GML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n GML: 'application/gml+xml',\r\n /** \r\n * Tipo MIME de documento GPX.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n GPX: 'application/gpx+xml',\r\n /** \r\n * Tipo MIME de documento XML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n XML: 'application/xml',\r\n /** \r\n * Tipo MIME de archivo GeoPackage.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n GEOPACKAGE: 'application/geopackage+sqlite3',\r\n /** \r\n * Tipo MIME de archivo Shapefile.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n SHAPEFILE: 'x-gis/x-shapefile',\r\n /** \r\n * Tipo MIME de archivo ZIP.\r\n * @var {string}\r\n * @memberof SITNA.Consts.mimeType\r\n * @readonly\r\n * @default \r\n */\r\n ZIP: 'application/x-zip'\r\n};\r\n/**\r\n * Colección de tipos de formatos de utilidad.\r\n * @namespace SITNA.Consts.format\r\n */\r\nTC.Consts.format = {\r\n /** \r\n * Leer y escribir datos en formato JSON.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n JSON: 'JSON',\r\n /** \r\n * Leer y escribir datos en formato KML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n KML: 'KML',\r\n /** \r\n * Leer y escribir datos en formato KMZ.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n KMZ: 'KMZ',\r\n /** \r\n * Leer y escribir datos en formato GML.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GML: 'GML',\r\n /** \r\n * Leer y escribir datos en formato GML2.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GML2: 'GML2',\r\n /** \r\n * Leer y escribir datos en formato GML3.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GML3: 'GML3',\r\n /** \r\n * Leer y escribir datos en formato GML3.2.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GML32: 'GML32',\r\n /** \r\n * Leer y escribir datos en formato GeoJSON.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GEOJSON: 'GeoJSON',\r\n /** \r\n * Leer y escribir datos en formato TopoJSON.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n TOPOJSON: 'TopoJSON',\r\n /** \r\n * Leer y escribir datos en formato GPX.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GPX: 'GPX',\r\n /** \r\n * Leer y escribir datos en formato WKT.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n WKT: 'WKT',\r\n /** \r\n * Leer y escribir datos en formato ShapeFile.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n SHAPEFILE: 'SHP',\r\n /** \r\n * Leer y escribir datos en formato ZIP.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n ZIP: 'ZIP',\r\n /** \r\n * Leer y escribir datos en formato GeoPackage.\r\n * @var {string}\r\n * @memberof SITNA.Consts.format\r\n * @readonly\r\n * @default\r\n */\r\n GEOPACKAGE: 'GPKG'\r\n};\r\n\r\n//enumerado de errores y warninqs derivados de descargas, getfeatures\r\nTC.Consts.WFSErrors = {\r\n GETFEATURE_NOT_AVAILABLE: \"GetFeatureNotAvailable\",\r\n LAYERS_NOT_AVAILABLE: \"LayersNotAvailable\",\r\n NO_LAYERS: \"NoLayers\",\r\n NO_VALID_LAYERS: \"noValidLayers\",\r\n QUERY_NOT_AVAILABLE: \"QueryNotAvailable\",\r\n //CapabilitiesParseError: \"CapabilitiesParseError\",\r\n MAX_NUM_FEATURES: \"NumMaxFeatures\",\r\n GETCAPABILITIES: \"GetCapabilities\",\r\n INDETERMINATE: \"Indeterminate\",\r\n NO_FEATURES: \"NoFeatures\"\r\n};\r\n\r\nTC.Consts.visibility = {\r\n NOT_VISIBLE: 0,\r\n NOT_VISIBLE_AT_RESOLUTION: 1,\r\n HAS_VISIBLE: 2,\r\n VISIBLE: 4\r\n};\r\n\r\nTC.Consts.view = {\r\n DEFAULT: 0,\r\n THREED: 1,\r\n PRINTING: 2\r\n};\r\n\r\nTC.Consts.units = {\r\n DEGREES: \"degrees\",\r\n METERS: \"m\"\r\n};\r\n\r\nTC.Consts.MARKER = 'marker';\r\n\r\nTC.Consts.infoContainer = {\r\n POPUP: 'popup',\r\n RESULTS_PANEL: 'resultsPanel'\r\n};\r\n\r\nTC.Consts.DownloadError = {\r\n MIMETYPE_NOT_SUPORTED: \"MimeTypeNotSupported\"\r\n};\r\n\r\nconst Consts = TC.Consts;\r\nexport default Consts;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport EventTarget from './EventTarget';\r\nimport i18n from './i18n';\r\nTC.Consts = Consts;\r\nTC.i18n = TC.i18n || i18n;\r\n\r\n/**\r\n * Opciones básicas de control.\r\n * @typedef ControlOptions\r\n * @see MapControlOptions\r\n * @see 2-configuration\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n */\r\n\r\nTC.control = TC.control || {};\r\n\r\nTC.Control = function () {\r\n const self = this;\r\n EventTarget.call(self);\r\n\r\n self.map = null;\r\n self.isActive = false;\r\n self.isDisabled = false;\r\n\r\n var len = arguments.length;\r\n\r\n self.options = TC.Util.extend({}, len > 1 ? arguments[1] : arguments[0]);\r\n self.id = self.options.id || TC.getUID({\r\n prefix: self.CLASS.substr(TC.Control.prototype.CLASS.length + 1) + '-'\r\n });\r\n self.div = TC.Util.getDiv(self.options.div ? self.options.div : arguments[0]);\r\n self.div.classList.add(TC.Control.prototype.CLASS, self.CLASS);\r\n\r\n self.template = self.options.template || self.template;\r\n self.exportsState = false; \r\n};\r\n\r\nTC.inherit(TC.Control, EventTarget);\r\n\r\n(function () {\r\n const ctlProto = TC.Control.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl';\r\n\r\n ctlProto.template = void 0;\r\n\r\n ctlProto.show = function () {\r\n this.div.style.display = '';\r\n };\r\n\r\n ctlProto.hide = function () {\r\n this.div.style.display = 'none';\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(null, function () {\r\n self.addUIEventListeners();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto._set1stRenderPromise = function (promise) {\r\n const self = this;\r\n if (!self._firstRender) {\r\n self._firstRender = promise;\r\n }\r\n return promise;\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self.map) {\r\n self.trigger(TC.Consts.event.BEFORECONTROLRENDER, { dataObject: data });\r\n }\r\n self.div.classList.toggle(TC.Consts.classes.DISABLED, self.isDisabled);\r\n\r\n let template;\r\n if (typeof self.template === 'object' && !self.template.compiler) {\r\n template = self.template[self.CLASS];\r\n }\r\n else {\r\n template = self.template;\r\n self.template = {};\r\n self.template[self.CLASS] = template;\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS, data)\r\n .then(function (html) {\r\n self.div.innerHTML = html;\r\n if (self.map) {\r\n self.trigger(TC.Consts.event.CONTROLRENDER);\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n const processTemplates = function (templates, options) {\r\n options = options || {};\r\n return new Promise(function (resolve, _reject) {\r\n let mustCompile = false;\r\n for (var key in templates) {\r\n const template = templates[key];\r\n if (typeof template === 'string') {\r\n mustCompile = true;\r\n }\r\n }\r\n\r\n const callback = function () {\r\n const templatePromises = [];\r\n for (var key in templates) {\r\n const templateName = key;\r\n let template = templates[templateName];\r\n if (typeof template === 'string') {\r\n templatePromises.push(new Promise(function (res, rej) {\r\n TC.ajax({\r\n url: template,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n .then(function (response) {\r\n templates[templateName] = template = TC._hbs.compile(response.data); // TODO: add optimization options\r\n res(template);\r\n })\r\n .catch(function (err) {\r\n console.log(\"Error fetching template: \" + err);\r\n rej(err);\r\n });\r\n }));\r\n }\r\n else {\r\n if (typeof template === 'object') {\r\n templates[key] = template = TC._hbs.template(template);\r\n }\r\n }\r\n }\r\n\r\n Promise.all(templatePromises).then(function () {\r\n for (var key in templates) {\r\n const t = templates[key];\r\n if (t && key !== options.className) {\r\n TC._hbs.registerPartial(key, templates[key]);\r\n }\r\n }\r\n resolve();\r\n });\r\n };\r\n\r\n if (mustCompile) {\r\n TC.loadJSInOrder(\r\n !TC._hbs || !TC._hbs.compile,\r\n [\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_FULL,\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_HELPERS\r\n ],\r\n callback\r\n );\r\n }\r\n else {\r\n TC.loadJSInOrder(\r\n !TC._hbs,\r\n [\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_RUNTIME,\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_HELPERS\r\n ],\r\n callback\r\n );\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getRenderedHtml = function (templateId, data, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n\r\n const endFn = function (template) {\r\n if (typeof template === 'undefined') {\r\n resolve('');\r\n return;\r\n }\r\n const html = template(data);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n resolve(html);\r\n };\r\n\r\n const template = self.template[templateId];\r\n if (typeof template !== 'function') {\r\n processTemplates(self.template, { locale: self.map && self.map.options.locale, className: self.CLASS }).then(function () {\r\n endFn(self.template[templateId]);\r\n });\r\n }\r\n else {\r\n endFn(template);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.map = map;\r\n Promise.resolve(self.render()).then(function () {\r\n if (self.options.active) {\r\n self.activate();\r\n }\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.activate = function () {\r\n const self = this;\r\n if (self.map && self.map.activeControl && self.map.activeControl !== self) {\r\n self.map.previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate();\r\n }\r\n self.isActive = true;\r\n if (self.map) {\r\n self.map.activeControl = self;\r\n self.map.trigger(TC.Consts.event.CONTROLACTIVATE, { control: self });\r\n self.trigger(TC.Consts.event.CONTROLACTIVATE, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.deactivate = function (stopChain) {\r\n if (arguments.length === 0) {\r\n stopChain = false;\r\n }\r\n\r\n const self = this;\r\n self.isActive = false;\r\n if (self.map) {\r\n self.map.activeControl = null;\r\n\r\n if (!stopChain) {\r\n //determinar cuál es el control predeterminado para reactivarlo\r\n //salvo que sea yo mismo, claro\r\n var nextControl = self.map.getDefaultControl();\r\n if (nextControl === self) nextControl = null;\r\n else if (self.map.previousActiveControl === self) // GLS: Validamos antes de activar que el control activo anterior sea distinto al control actual\r\n nextControl = null;\r\n else if (!nextControl) {\r\n nextControl = self.map.previousActiveControl;\r\n }\r\n\r\n if (nextControl)\r\n nextControl.activate();\r\n }\r\n self.map.trigger(TC.Consts.event.CONTROLDEACTIVATE, { control: self });\r\n self.trigger(TC.Consts.event.CONTROLDEACTIVATE, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.enable = function () {\r\n const self = this;\r\n self.isDisabled = false;\r\n if (self.div) {\r\n self.div.classList.remove(TC.Consts.classes.DISABLED);\r\n delete self.div.dataset.tcMessage;\r\n }\r\n if (self.containerControl && self.containerControl.onControlEnable) {\r\n self.containerControl.onControlEnable(self);\r\n }\r\n };\r\n\r\n ctlProto.disable = function (options) {\r\n const self = this;\r\n options = options || {};\r\n self.isDisabled = true;\r\n if (self.div) {\r\n self.div.classList.add(TC.Consts.classes.DISABLED);\r\n let message = self.getLocaleString('disabledControl');\r\n if (options.reason) {\r\n message = `${message} - ${options.reason}`;\r\n }\r\n self.div.dataset.tcMessage = message;\r\n }\r\n if (self.containerControl && self.containerControl.onControlDisable) {\r\n self.containerControl.onControlDisable(self);\r\n }\r\n };\r\n\r\n //ctlProto.remove = function () {\r\n // const self = this;\r\n // if (self.map) {\r\n // if (self.isActive) {\r\n // self.deactivate();\r\n // }\r\n // const idx = self.map.controls.indexOf(self);\r\n // if (idx >= 0) {\r\n // self.map.controls.splice(idx, 1);\r\n // }\r\n // self.map = null;\r\n // if (self._dialogDiv) {\r\n // self._dialogDiv.remove();\r\n // }\r\n // if (self.div) {\r\n // self.div.remove();\r\n // }\r\n // }\r\n //};\r\n\r\n ctlProto.renderPromise = function () {\r\n const self = this;\r\n return self._firstRender || new Promise(function (resolve, _reject) {\r\n self.one(TC.Consts.event.CONTROLRENDER, function () {\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addUIEventListener = function (selector, event, listener) {\r\n const self = this;\r\n const elements = selector ? self.div.querySelectorAll(selector) : [self.div];\r\n elements.forEach(function (elm) {\r\n elm.addEventListener(event, listener);\r\n });\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n };\r\n\r\n ctlProto.isExclusive = function () {\r\n return false;\r\n };\r\n\r\n ctlProto.getLocaleString = function (key, texts) {\r\n var self = this;\r\n var locale = self.map ? self.map.options.locale : TC.Cfg.locale;\r\n return TC.Util.getLocaleString(locale, key, texts);\r\n };\r\n\r\n ctlProto.getUID = function () {\r\n const self = this;\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState) {\r\n return {};\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (_state) {\r\n };\r\n \r\n ctlProto.getDownloadDialog = function () {\r\n const self = this;\r\n self._downloadDialog = self._downloadDialog || self.map.getControlsByClass('TC.control.FeatureDownloadDialog')[0];\r\n if (self._downloadDialog) {\r\n self._downloadDialog.caller = self;\r\n return Promise.resolve(self._downloadDialog);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n self.map.addControl('FeatureDownloadDialog').then(ctl => {\r\n self._downloadDialog = ctl;\r\n self._downloadDialog.caller = self;\r\n resolve(ctl);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getElevationTool = function () {\r\n const self = this;\r\n if (!self.displayElevation && !self.options.displayElevation) {\r\n return Promise.resolve(null);\r\n }\r\n if (self.elevation) {\r\n return Promise.resolve(self.elevation);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n TC.loadJS(\r\n !TC.tool || !TC.tool.Elevation,\r\n TC.apiLocation + 'TC/tool/Elevation',\r\n function () {\r\n if (typeof self.options.displayElevation === 'boolean') {\r\n if (self.map) {\r\n self.map.getElevationTool().then(function (mapElevation) {\r\n if (mapElevation) {\r\n self.elevation = mapElevation;\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n resolve(self.elevation);\r\n });\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n resolve(self.elevation);\r\n }\r\n }\r\n else {\r\n if (self.map) {\r\n self.map.getElevationTool().then(function (mapElevation) {\r\n if (mapElevation) {\r\n self.elevation = new TC.tool.Elevation(TC.Util.extend(true, {}, mapElevation.options, self.options.displayElevation));\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n resolve(self.elevation);\r\n });\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n resolve(self.elevation);\r\n }\r\n }\r\n }\r\n );\r\n });\r\n }; \r\n\r\n})();\r\n\r\nTC.Control.create = async function (type, options) {\r\n const ctorName = type.substr(0, 1).toUpperCase() + type.substr(1);\r\n if (!TC.control[ctorName]) {\r\n const module = await import('./control/' + ctorName);\r\n TC.control[ctorName] = module.default;\r\n }\r\n return new TC.control[ctorName](null, options);\r\n};\r\n\r\nvar Control = TC.Control;\r\nexport default Control;","const getNativeListener = function (evt, callback) {\r\n const result = function (evt) {\r\n const cbParameter = {\r\n type: evt.type,\r\n target: this,\r\n currentTarget: this\r\n };\r\n if (evt.detail) {\r\n Object.keys(evt.detail).forEach(function (key) {\r\n if (!(key in cbParameter)) {\r\n cbParameter[key] = evt.detail[key];\r\n }\r\n });\r\n }\r\n return callback.call(this, cbParameter);\r\n }.bind(this);\r\n const stack = this._listeners[evt] = this._listeners[evt] || new Map();\r\n stack.set(callback, result);\r\n return result;\r\n};\r\n\r\nconst onInternal = function (events, callback, options) {\r\n const self = this;\r\n events.split(' ').forEach(function (evt) {\r\n self.$events.addEventListener(evt, getNativeListener.call(self, evt, callback), options);\r\n });\r\n return self;\r\n};\r\n\r\nconst EventTarget = function () {\r\n const self = this;\r\n self._listeners = {};\r\n self.$events = document.createDocumentFragment();\r\n\r\n const delegate = function (method) {\r\n this[method] = self.$events[method].bind(self.$events);\r\n };\r\n const methods = [\r\n 'addEventListener',\r\n 'dispatchEvent',\r\n 'removeEventListener'\r\n ];\r\n methods.forEach(delegate, self);\r\n\r\n const fill$events = function (method) {\r\n self.$events[method] = self[method].bind(self);\r\n };\r\n methods.push('on');\r\n methods.push('one');\r\n methods.push('off');\r\n methods.push('trigger');\r\n methods.forEach(fill$events, self);\r\n};\r\n\r\nconst etProto = EventTarget.prototype;\r\n\r\netProto.on = function (events, callback) {\r\n return onInternal.call(this, events, callback);\r\n};\r\n\r\netProto.one = function (events, callback) {\r\n return onInternal.call(this, events, callback, { once: true });\r\n};\r\n\r\netProto.off = function (events, callback) {\r\n const self = this;\r\n const eventList = events.split(' ');\r\n if (callback) {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack && stack.has(callback)) {\r\n self.$events.removeEventListener(evt, stack.get(callback));\r\n }\r\n });\r\n }\r\n else {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack) {\r\n stack.forEach(function (cb) {\r\n self.$events.removeEventListener(evt, cb);\r\n });\r\n stack.clear();\r\n }\r\n });\r\n }\r\n return self;\r\n};\r\n\r\netProto.trigger = function (type, options) {\r\n const self = this;\r\n //Compatibilidad hacia atrás\r\n if (window.$ && $.Event && type instanceof $.Event) {\r\n options = {};\r\n Object.keys(type).forEach(function (key) {\r\n if (key !== 'type') {\r\n options[key] = type[key];\r\n }\r\n });\r\n type = type.type;\r\n }\r\n var ceOptions;\r\n if (options) {\r\n ceOptions = {\r\n detail: options\r\n };\r\n }\r\n const event = new CustomEvent(type, ceOptions);\r\n self.dispatchEvent(event);\r\n};\r\n\r\nEventTarget._onBySelectorMap = new WeakMap();\r\n\r\nEventTarget.listenerBySelector = function (selector, callback) {\r\n // Crea una estructura a partir de un mapa cuyas claves son los elementos.\r\n // Los valores son objetos cuyas claves son tipos de eventos\r\n // y cuyos valores son objetos que tienen como claves los selectores\r\n // y cuyos valores son las funciones de callback.\r\n // Se crea una función que va buscando la primera correspondencia con un selector.\r\n // En cuanto la encuentra, ejecuta el callback y deja de procesar.\r\n return function (e) {\r\n const element = this;\r\n const eventType = e.type;\r\n var eventTypes = EventTarget._onBySelectorMap.get(element);\r\n if (!eventTypes) {\r\n eventTypes = {};\r\n EventTarget._onBySelectorMap.set(element, eventTypes);\r\n }\r\n var selectors = eventTypes[eventType];\r\n if (!selectors) {\r\n eventTypes[eventType] = selectors = {};\r\n }\r\n if (!selectors[selector]) {\r\n selectors[selector] = callback;\r\n }\r\n // Para cada evento en cada elemento hay que llamar una sola vez al callback que toque.\r\n // Así que si se ejecuta un callback, prohibimos al resto de los listeners resolverse.\r\n if (!e._listenerBySelectorCalled) {\r\n var matches = false;\r\n var elm = e.target;\r\n var result;\r\n while (elm && elm !== element) {\r\n for (selector in selectors) {\r\n if (elm.matches && elm.matches(selector)) {\r\n matches = true;\r\n result = selectors[selector].call(element, e);\r\n e._listenerBySelectorCalled = true;\r\n }\r\n }\r\n if (matches) {\r\n return result;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport default EventTarget;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport { Cfg } from './Cfg';\r\nimport Control from './Control';\r\n\r\nTC.Control = Control;\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.Cfg = TC.Cfg || Cfg;\r\nTC.feature = TC.feature || {};\r\n\r\nTC.Feature = function (coords, options) {\r\n var self = this;\r\n\r\n let olFeatureId;\r\n self.wrap = new TC.wrap.Feature();\r\n self.wrap.parent = self;\r\n if (self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n coords._wrap = self.wrap;\r\n olFeatureId = self.wrap.getId();\r\n self.geometry = self.wrap.getGeometry();\r\n if (coords._folders) {\r\n self.folders = coords._folders;\r\n }\r\n self.setData(self.wrap.getData());\r\n }\r\n\r\n var opts = self.options = TC.Util.extend(true, {}, options);\r\n\r\n self.id = olFeatureId || opts.id || TC.getUID();\r\n if (self.wrap.feature && !olFeatureId) {\r\n self.wrap.feature.setId(self.id);\r\n }\r\n self.data = opts.data || self.data || null;\r\n self._visibilityState = TC.Consts.visibility.VISIBLE;\r\n if (opts.showsPopup === undefined) {\r\n self.showsPopup = true;\r\n }\r\n else {\r\n self.showsPopup = opts.showsPopup;\r\n }\r\n self.layer = opts.layer || null;\r\n self._selected = false;\r\n\r\n if (opts.selected) {\r\n self.select();\r\n }\r\n};\r\n\r\nTC.Feature.prototype.STYLETYPE = TC.Consts.geom.POLYGON;\r\n\r\nTC.Feature.prototype.CLASSNAME = 'TC.Feature';\r\n\r\nTC.Feature.prototype.getPath = function () {\r\n var result = [];\r\n var self = this;\r\n if (self.folders) {\r\n result = self.folders;\r\n }\r\n else if (self.options.group) {\r\n result = [self.options.group];\r\n }\r\n return result;\r\n};\r\n\r\nTC.Feature.prototype.setVisibility = function (visible) {\r\n var self = this;\r\n\r\n // Ocultamos el posible popup\r\n if (!visible && self.showsPopup && self.layer) {\r\n var popup = self.layer.map.getControlsByClass(TC.control.Popup).filter(function (popup) {\r\n return popup.currentFeature === self;\r\n });\r\n\r\n if (popup.length > 0) {\r\n const p = popup[0];\r\n if (p.isVisible()) {\r\n p.hide();\r\n }\r\n }\r\n }\r\n\r\n if (visible && self._visibilityState === TC.Consts.visibility.NOT_VISIBLE ||\r\n !visible && self._visibilityState === TC.Consts.visibility.VISIBLE) {\r\n self._visibilityState = visible ? TC.Consts.visibility.VISIBLE : TC.Consts.visibility.NOT_VISIBLE;\r\n self.layer.wrap.setFeatureVisibility(self, visible);\r\n }\r\n};\r\n\r\nTC.Feature.prototype.getId = function () {\r\n return this.wrap.getId();\r\n};\r\n\r\nTC.Feature.prototype.setId = function (id) {\r\n var self = this;\r\n self.id = id;\r\n self.wrap.setId(id);\r\n};\r\n\r\nTC.Feature.prototype.getBounds = function () {\r\n return this.wrap.getBounds();\r\n};\r\n\r\nTC.Feature.prototype.setStyle = function (style) {\r\n this.wrap.setStyle(style);\r\n};\r\n\r\nTC.Feature.prototype.toggleSelectedStyle = function (condition) {\r\n const self = this;\r\n if (self._hasSelectedStyle !== condition) {\r\n self._hasSelectedStyle = condition;\r\n self.wrap.toggleSelectedStyle(condition);\r\n }\r\n};\r\n\r\nTC.Feature.prototype.getLegend = function () {\r\n var self = this;\r\n if (!self._legend) {\r\n self._legend = self.wrap.getLegend();\r\n }\r\n return self._legend;\r\n};\r\n\r\nTC.Feature.prototype.getCoordinates = TC.Feature.prototype.getCoords = function () {\r\n const self = this;\r\n self.geometry = self.wrap.getGeometry();\r\n return self.geometry;\r\n};\r\n\r\nTC.Feature.prototype.getCoordsArray = function () {\r\n const self = this;\r\n const isPoint = function (elm) {\r\n return Array.isArray(elm) && elm.length >= 2 && typeof elm[0] === 'number' && typeof elm[1] === 'number';\r\n };\r\n const flattenFn = function (val) {\r\n return isPoint(val) ? [val] : val.reduce(reduceFn, []);\r\n };\r\n const reduceFn = function (acc, elm) {\r\n if (isPoint(elm)) {\r\n acc.push(elm);\r\n }\r\n else {\r\n acc = acc.concat(flattenFn(elm));\r\n }\r\n return acc;\r\n };\r\n return flattenFn(self.getCoords());\r\n};\r\n\r\nTC.Feature.prototype.getGeometryStride = function () {\r\n const self = this;\r\n const coordsArray = self.getCoordsArray();\r\n const firstCoord = coordsArray[0];\r\n if (firstCoord) {\r\n return firstCoord.length;\r\n }\r\n return 0;\r\n};\r\n\r\n\r\nTC.Feature.prototype.setCoords = function (coords) {\r\n const self = this;\r\n\r\n const toNumberCoords = function (arr) {\r\n arr.forEach(function (elm, idx) {\r\n if (Array.isArray(elm)) {\r\n toNumberCoords(elm);\r\n }\r\n else {\r\n if (elm === null) {\r\n arr[idx] = 0;\r\n }\r\n else if (typeof elm !== 'number') {\r\n console.log('Warning: coordinate does not have number type');\r\n arr[idx] = parseFloat(elm);\r\n }\r\n }\r\n });\r\n };\r\n\r\n if (Array.isArray(coords)) {\r\n toNumberCoords(coords);\r\n }\r\n\r\n self.geometry = coords;\r\n return self.wrap.setGeometry(coords);\r\n};\r\n\r\nTC.Feature.prototype.getData = function () {\r\n var result = null;\r\n var self = this;\r\n if (self.data) {\r\n result = self.data;\r\n }\r\n else {\r\n result = self.wrap.getData();\r\n }\r\n return result;\r\n};\r\n\r\nTC.Feature.prototype.setData = function (data) {\r\n const self = this;\r\n if (typeof data === 'string') {\r\n self.data = data;\r\n }\r\n else {\r\n self.data = TC.Util.extend(self.data, data);\r\n self.attributes = self.attributes || [];\r\n for (var key in data) {\r\n let attr = self.attributes.filter(attr => attr.name === key)[0];\r\n if (attr) {\r\n attr.value = data[key];\r\n }\r\n else {\r\n self.attributes.push({ name: key, value: data[key] });\r\n }\r\n }\r\n self.wrap.setData(data);\r\n }\r\n};\r\n\r\nTC.Feature.prototype.unsetData = function (key) {\r\n const self = this;\r\n delete self.data[key];\r\n const attr = (self.attributes || []).filter(attr => attr.name === key)[0];\r\n if (attr) {\r\n self.attributes.splice(self.attributes.indexOf(attr), 1);\r\n }\r\n self.wrap.unsetData(key);\r\n};\r\n\r\nTC.Feature.prototype.clearData = function () {\r\n const self = this;\r\n self.data = {};\r\n self.attributes = [];\r\n self.wrap.clearData();\r\n};\r\n\r\nTC.Feature.prototype.getInfo = function (options) {\r\n var result = null;\r\n var self = this;\r\n options = options || {};\r\n var locale = options.locale || self.layer && self.layer.map && TC.Util.getMapLocale(self.layer.map);\r\n var data = self.getData();\r\n if (typeof data === 'object') {\r\n var template = self.wrap.getTemplate();\r\n if (template) {\r\n // GLS: Contemplo en la expresión regular la opción de que el nombre del campo se componga de $[aaa/abc/loQueMeInteresa] \r\n // (la expresión no está limitada a 2 niveles), hasta ahora se manejaba $[loQueMeInteresa]\r\n result = template.replace(/\\$\\[?(?:\\w+\\/)*(\\w+)\\]/g, function (match, p1) {\r\n return data[p1];\r\n });\r\n }\r\n else {\r\n var html = [];\r\n const hSlots = [];\r\n const openText = TC.Util.getLocaleString(locale, 'open');\r\n const titleText = TC.Util.getLocaleString(locale, 'linkInNewWindow');\r\n const formatValue = function (value) {\r\n let result;\r\n var isUrl = TC.Util.isURL(value);\r\n if (isUrl) {\r\n result = `${openText}`;\r\n }\r\n else {\r\n result = value !== undefined ?\r\n typeof value === \"number\" ? TC.Util.formatNumber(value, locale) : value\r\n : '—';\r\n }\r\n return result;\r\n };\r\n const recursiveFn = function (data) {\r\n var html = [];\r\n if (data instanceof Array) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n html.push(`
`);\r\n html.push(`
`);\r\n html.push('');\r\n data.forEach(item => {\r\n html.push('');\r\n });\r\n html.push('
');\r\n html = html.concat(recursiveFn(item));\r\n html.push('
');\r\n } else if (data instanceof Object) {\r\n if (data.getType) {\r\n const tttt = {\r\n type: data.getType(),\r\n coordinates: data.getCoordinates()\r\n };\r\n html = html.concat(recursiveFn(tttt));\r\n }\r\n else {\r\n html.push('');\r\n for (var i in data) {\r\n html.push('');\r\n if (data[i] && data[i] instanceof Array) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n html.push(`\r\n ');\r\n }\r\n else if (data[i] && data[i] instanceof Object) {\r\n const id = 'complexAttr_' + TC.getUID();\r\n //if(data[i] && Object.entries(data[i]).some((item)=>{return item[1] instanceof Object})){\t\t\t\t\t\t\r\n html.push(`\r\n ');\r\n }\r\n else {\r\n html.push(`\r\n ');\r\n }\r\n html.push('');\r\n }\r\n html.push('
${i}
`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
${i}
`);\r\n html.push(`
`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
${i}`);\r\n html = html.concat(recursiveFn(data[i]));\r\n html.push('
');\r\n }\r\n } else {\r\n html.push(formatValue(data));\r\n }\r\n return html;\r\n };\r\n for (var key in data) {\r\n const value = data[key];\r\n const match = key.match(/^h(\\d)_/i);\r\n if (match) {\r\n hSlots[match[1]] = value;\r\n }\r\n else {\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'undefined') {\r\n html.push(`${key}${formatValue(value)}`);\r\n }\r\n else {\r\n html.push(`${key}`);\r\n html = html.concat(recursiveFn(value));\r\n html.push('');\r\n\r\n }\r\n }\r\n }\r\n const headers = hSlots\r\n .map(function (val, idx) {\r\n if (val) {\r\n return `${val}`;\r\n }\r\n })\r\n .filter(function (val) {\r\n return val;\r\n });\r\n if (headers.length) {\r\n html = headers.concat(html);\r\n }\r\n if (html.length > 0) {\r\n html.unshift('');\r\n html.push('
');\r\n result = html.join('');\r\n }\r\n }\r\n }\r\n else if (typeof data === 'string') {\r\n result = data;\r\n }\r\n if (!result) {\r\n result = self.title;\r\n if (self.group) {\r\n result += ' ' + self.group;\r\n }\r\n }\r\n if (!result) {\r\n result = TC.Util.getLocaleString(locale, 'noData');\r\n }\r\n return result;\r\n};\r\n\r\nTC.Feature.prototype.getTemplate = function () {\r\n const self = this;\r\n let result = self.wrap.getTemplate();\r\n if (result) {\r\n return result;\r\n }\r\n return null;\r\n};\r\n\r\nTC.Feature.prototype.clone = function () {\r\n var self = this;\r\n var nativeClone = self.wrap.cloneFeature();\r\n nativeClone._wrap = self.wrap;\r\n const result = new self.constructor(nativeClone, self.options);\r\n if (self.folders) {\r\n result.folders = self.folders.slice();\r\n }\r\n return result;\r\n};\r\n\r\nTC.Feature.prototype.getStyle = function () {\r\n return this.wrap.getStyle();\r\n};\r\n\r\nTC.Feature.prototype.showPopup = async function (options) {\r\n const self = this;\r\n options = options || {};\r\n const control = options && options instanceof TC.Control ? options : options.control;\r\n const map = self.layer && self.layer.map ||\r\n control && control.map;\r\n if (map) {\r\n let popup = control || self.popup;\r\n if (!popup) {\r\n // Buscamos un popup existente que no esté asociado a un control.\r\n var popups = map.getControlsByClass('TC.control.Popup');\r\n for (var i = 0, len = popups.length; i < len; i++) {\r\n var p = popups[i];\r\n if (!p.caller) {\r\n popup = p;\r\n break;\r\n }\r\n }\r\n }\r\n if (!popup) {\r\n popup = await map.addControl('popup');\r\n }\r\n popup.currentFeature = self;\r\n map.getControlsByClass(TC.control.Popup)\r\n .filter(p => p !== popup && p.isVisible())\r\n .forEach(p => p.hide());\r\n popup.setDragged(false);\r\n self.wrap.showPopup(Object.assign({}, options, { control: popup }));\r\n map.trigger(TC.Consts.event.POPUP, { control: popup });\r\n popup.fitToView(true);\r\n popup.contentDiv.querySelectorAll('img').forEach(img => img.addEventListener('load', () => popup.fitToView()));\r\n return popup;\r\n }\r\n return null;\r\n};\r\n\r\nTC.Feature.prototype.showResultsPanel = async function (options) {\r\n const self = this;\r\n options = options || {};\r\n const control = options && options instanceof TC.Control ? options : options.control;\r\n const map = self.layer && self.layer.map || control && control.map;\r\n if (map) {\r\n let panel;\r\n\r\n var resultsPanelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: TC.Util.getLocaleString(map.options.locale, \"rsp.title\"),\r\n max: TC.Util.getLocaleString(map.options.locale, \"rsp.title\")\r\n }\r\n };\r\n var controlContainer = map.getControlsByClass('TC.control.ControlContainer')[0];\r\n if (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n //URI 24/01/2022 comprobar que ya existe un resultpanel para la feature en cuestión, sino se crea uno nuevo\r\n panel = map.getControlsByClass('TC.control.ResultsPanel').find(resultPanel => resultPanel.currentFeature === self);\r\n if (!panel) panel = await controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n map.div.appendChild(resultsPanelOptions.div);\r\n //URI 24/01/2022 comprobar que ya existe un resultpanel para la feature en cuestión, sino se crea uno nuevo\r\n panel = map.getControlsByClass('TC.control.ResultsPanel').find(resultPanel => resultPanel.currentFeature === self);\r\n if (!panel) panel = await map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n panel.currentFeature = self;\r\n\r\n // GLS: si contamos con el contenedor de controles no es necesario cerra el resto de paneles ya que no habrá solape excepto los paneles\r\n if (map.getControlsByClass(TC.control.ControlContainer).length === 0) {\r\n map.getControlsByClass(TC.control.ResultsPanel).filter(ctrl => ctrl.options.content === \"table\").forEach(function (p) {\r\n p.close();\r\n });\r\n }\r\n\r\n // cerramos los paneles con feature asociada que no sean gráfico\r\n const panels = map.getControlsByClass('TC.control.ResultsPanel');\r\n panels.filter(ctrl => panel !== ctrl).forEach(function (p) {\r\n if (p.currentFeature && !p.chart) {\r\n p.close();\r\n }\r\n });\r\n\r\n panel.menuDiv.innerHTML = '';\r\n panel.open(options.html || self.getInfo({ locale: map.options.locale }), panel.getInfoContainer());\r\n\r\n const resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n entry.target.querySelectorAll('h3, h4').forEach(function (hx) {\r\n hx.addEventListener(\"mouseenter\", function (e) {\r\n if (this.offsetWidth < this.scrollWidth) {\r\n this.title = this.childNodes.item(0).textContent;\r\n }\r\n else {\r\n this.title = \"\";\r\n }\r\n }, { passive: true });\r\n });\r\n }\r\n });\r\n resizeObserver.observe(panel.infoDiv);\r\n\r\n var onViewChange = function (e) {\r\n map.off(TC.Consts.event.VIEWCHANGE, onViewChange);\r\n\r\n panel.close();\r\n };\r\n map.on(TC.Consts.event.VIEWCHANGE, onViewChange);\r\n return panel;\r\n }\r\n return null;\r\n};\r\n\r\nTC.Feature.prototype.showInfo = async function (options) {\r\n const self = this;\r\n options = options || {};\r\n\r\n if (!TC.control || !TC.control.FeatureInfoCommons) {\r\n const module = await import('./control/FeatureInfoCommons');\r\n TC.control = TC.control || {};\r\n TC.control.FeatureInfoCommons = module.default;\r\n }\r\n\r\n let html;\r\n if (self.getTemplate()) {\r\n html = self.getInfo();\r\n }\r\n else {\r\n if (typeof self.data === 'string') {\r\n html = self.data;\r\n }\r\n else {\r\n html = await TC.control.FeatureInfoCommons.renderFeatureAttributeTable({ attributes: self.attributes, singleFeature: true });\r\n }\r\n }\r\n const opts = TC.Util.extend({}, options, { html: html });\r\n let control;\r\n if (options.control && TC.control) {\r\n const optionsControl = options.control;\r\n if (optionsControl instanceof TC.control.Popup) {\r\n control = await self.showPopup(opts);\r\n }\r\n else if (optionsControl instanceof TC.control.ResultsPanel) {\r\n control = await self.showResultsPanel(opts);\r\n }\r\n }\r\n else {\r\n if (self.layer.map.on3DView || self.layer.map.defaultInfoContainer === TC.Consts.infoContainer.RESULTS_PANEL) {\r\n control = await self.showResultsPanel(opts);\r\n }\r\n else {\r\n control = await self.showPopup(opts);\r\n }\r\n }\r\n\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners(control.getContainerElement());\r\n};\r\n\r\n\r\nTC.Feature.prototype.select = function () {\r\n var self = this;\r\n self._selected = true;\r\n if (self.layer) {\r\n self.layer.selectedFeatures.push(self);\r\n }\r\n var selectionOptions = self.options.selection || {};\r\n self.setStyle(TC.Util.extend({}, TC.Cfg.styles.selection[self.STYLETYPE], selectionOptions[self.STYLETYPE]));\r\n};\r\n\r\nTC.Feature.prototype.unselect = function () {\r\n const self = this;\r\n self._selected = false;\r\n // Volvemos al estilo por defecto\r\n self.setStyle(self.options);\r\n\r\n if (self.layer) {\r\n const idx = self.layer.selectedFeatures.indexOf(self);\r\n if (idx >= 0) {\r\n self.layer.selectedFeatures.splice(idx, 1);\r\n }\r\n }\r\n};\r\n\r\nTC.Feature.prototype.isSelected = function () {\r\n return this._selected;\r\n};\r\n\r\nTC.Feature.prototype.toGML = function (version, srsName) {\r\n return this.wrap.toGML(version, srsName);\r\n};\r\n\r\nconst Feature = TC.Feature;\r\nexport default Feature;","import TC from '../TC';\r\n\r\n // intersect a segment against one of the 4 lines that make up the bbox\r\n const intersectBox = function (a, b, edge, bbox) {\r\n return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top\r\n edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom\r\n edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right\r\n edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left\r\n null;\r\n };\r\n\r\n // bit code reflects the point position relative to the bbox:\r\n\r\n // left mid right\r\n // top 1001 1000 1010\r\n // mid 0001 0000 0010\r\n // bottom 0101 0100 0110\r\n const bitCode = function (p, bbox) {\r\n let code = 0;\r\n\r\n if (p[0] < bbox[0]) code |= 1; // left\r\n else if (p[0] > bbox[2]) code |= 2; // right\r\n\r\n if (p[1] < bbox[1]) code |= 4; // bottom\r\n else if (p[1] > bbox[3]) code |= 8; // top\r\n\r\n return code;\r\n };\r\n\r\n const Geometry = {\r\n isPoint: function (geometry) {\r\n return Array.isArray(geometry) && geometry.length >= 2 && typeof geometry[0] === 'number' && typeof geometry[1] === 'number';\r\n },\r\n isRing: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isPoint(geometry[0]));\r\n },\r\n isRingCollection: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isRing(geometry[0]));\r\n },\r\n isMultiRingCollection: function (geometry) {\r\n return Array.isArray(geometry) && (geometry.length === 0 || Geometry.isRingCollection(geometry[0]));\r\n },\r\n getNearest: function getNearest(point, candidates) {\r\n return TC.wrap.Geometry.getNearest(point, candidates);\r\n },\r\n isInside: function isInside(point, ring) {\r\n var result = false;\r\n if (Geometry.isPoint(point)) {\r\n if (Geometry.isPoint(ring)) {\r\n result = point[0] === ring[0] && point[1] === ring[1];\r\n }\r\n else if (Geometry.isRing(ring)) {\r\n for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\r\n var xi = ring[i][0], yi = ring[i][1];\r\n var xj = ring[j][0], yj = ring[j][1];\r\n\r\n var intersect = yi > point[1] !== yj > point[1] && \r\n point[0] < (xj - xi) * (point[1] - yi) / (yj - yi) + xi;\r\n if (intersect) result = !result;\r\n }\r\n }\r\n else if (Geometry.isRingCollection(ring) && ring.length > 0) {\r\n // polígono con agujeros\r\n // miramos si está en el polígono exterior\r\n if (isInside(point, ring[0])) {\r\n var insideHole = false;\r\n // miramos si está en un agujero\r\n for (i = 1; i < ring.length; i++) {\r\n if (isInside(point, ring[i])) {\r\n insideHole = true;\r\n break;\r\n }\r\n }\r\n if (!insideHole) {\r\n result = true;\r\n }\r\n }\r\n }\r\n else if (Geometry.isMultiRingCollection(ring) && ring.length > 0) {\r\n // multipolígono\r\n // miramos si está en alguno de los polígonos\r\n for (i = 0; i < ring.length; i++) {\r\n if (isInside(point, ring[i])) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n },\r\n getSquaredDistance: function (p1, p2) {\r\n const dx = p2[0] - p1[0];\r\n const dy = p2[1] - p1[1];\r\n return dx * dx + dy * dy;\r\n },\r\n getDistance: function (p1, p2) {\r\n return Math.sqrt(Geometry.getSquaredDistance(p1, p2));\r\n },\r\n getFlatCoordinates: function (geom) {\r\n const reductionFn = function (prev, cur) {\r\n return prev.concat(cur);\r\n };\r\n switch (true) {\r\n case Geometry.isPoint(geom):\r\n return [geom];\r\n case Geometry.isRing(geom):\r\n return geom;\r\n case Geometry.isRingCollection(geom):\r\n return geom.reduce(reductionFn);\r\n case Geometry.isMultiRingCollection(geom):\r\n return geom.reduce(reductionFn).reduce(reductionFn);\r\n default:\r\n return [];\r\n }\r\n },\r\n intersects: function (geom1, geom2) {\r\n const flatIntersects = function (coords, geom) {\r\n for (var i = 0, ii = coords.length; i < ii; i++) {\r\n if (Geometry.isInside(coords[i], geom)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n if (flatIntersects(Geometry.getFlatCoordinates(geom1), geom2) || flatIntersects(Geometry.getFlatCoordinates(geom2), geom1)) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n clipPolygon: function (coords, bbox) {\r\n return coords\r\n .map(ring => Geometry.clipRing(ring, bbox))\r\n .filter(ring => ring.length);\r\n },\r\n clipRing: function (coords, bbox) {\r\n // Algoritmo Sutherland-Hodgeman de recorte de anillos\r\n let result, edge, prev, prevInside, inside;\r\n\r\n // clip against each side of the clip rectangle\r\n for (edge = 1; edge <= 8; edge *= 2) {\r\n result = [];\r\n prev = coords[coords.length - 1];\r\n prevInside = !(bitCode(prev, bbox) & edge);\r\n\r\n coords.forEach(point => {\r\n inside = !(bitCode(point, bbox) & edge);\r\n\r\n // if segment goes through the clip window, add an intersection\r\n if (inside !== prevInside) result.push(intersectBox(prev, point, edge, bbox));\r\n\r\n if (inside) result.push(point); // add a point if it's inside\r\n\r\n prev = point;\r\n prevInside = inside;\r\n });\r\n\r\n coords = result;\r\n\r\n if (!coords.length) break;\r\n }\r\n\r\n return result;\r\n },\r\n clipPolyline: function (coords, bbox) {\r\n // Algoritmo Cohen-Sutherland de clipping de líneas\r\n let len = coords.length,\r\n codeA = bitCode(coords[0], bbox),\r\n part = [],\r\n i, a, b, codeB, lastCode;\r\n\r\n let result = [];\r\n\r\n for (i = 1; i < len; i++) {\r\n a = coords[i - 1];\r\n b = coords[i];\r\n codeB = lastCode = bitCode(b, bbox);\r\n\r\n while (true) {\r\n\r\n if (!(codeA | codeB)) { // accept\r\n part.push(a);\r\n\r\n if (codeB !== lastCode) { // segment went outside\r\n part.push(b);\r\n\r\n if (i < len - 1) { // start a new line\r\n result = result.concat(part);\r\n part = [];\r\n }\r\n } else if (i === len - 1) {\r\n part.push(b);\r\n }\r\n break;\r\n\r\n } else if (codeA & codeB) { // trivial reject\r\n break;\r\n\r\n } else if (codeA) { // a outside, intersect with clip edge\r\n a = intersectBox(a, b, codeA, bbox);\r\n codeA = bitCode(a, bbox);\r\n\r\n } else { // b outside\r\n b = intersectBox(a, b, codeB, bbox);\r\n codeB = bitCode(b, bbox);\r\n }\r\n }\r\n\r\n codeA = lastCode;\r\n }\r\n\r\n if (part.length) {\r\n result = result.concat(part);\r\n }\r\n\r\n return result;\r\n }\r\n };\r\n\r\nexport default Geometry;","import TC from '../TC';\r\nimport Util from './Util';\r\nimport localforage from 'localforage';\r\nTC.Util = Util;\r\n\r\n/**\r\n * Opciones de capa.\r\n * Esta clase no tiene constructor.\r\n * @class TC.cfg.LayerOptions\r\n * @static\r\n */\r\n/**\r\n * Identificador único de capa.\r\n * @property id\r\n * @type string|undefined\r\n */\r\n/**\r\n * Título de capa. Este valor se mostrará en la tabla de contenidos y la leyenda.\r\n * @property title\r\n * @type string|undefined\r\n */\r\n/**\r\n * Tipo de capa. Si no se especifica se considera que la capa es WMS. La lista de valores posibles está definida en {{#crossLink \"TC.consts.LayerType\"}}{{/crossLink}}.\r\n * @property type\r\n * @type string|undefined\r\n */\r\n/**\r\n * Tipo MIME del formato de archivo de imagen a obtener del servicio. Si esta propiedad no está definida, se comprobará si la capa es un mapa de fondo \r\n * (consultar propiedad {{#crossLink \"TC.cfg.LayerOptions/isBase:property\"}}{{/crossLink}}). En caso afirmativo, el formato elegido será \"image/jpeg\", \r\n * de lo contrario el formato será \"image/png\".\r\n * @property format\r\n * @type string|undefined\r\n */\r\n/**\r\n * La capa se muestra por defecto si forma parte de los mapas de fondo.\r\n * @property isDefault\r\n * @type boolean|undefined\r\n */\r\n/**\r\n * La capa es un mapa de fondo.\r\n * @property isBase\r\n * @type boolean|undefined\r\n */\r\n/**\r\n * Aplicable a capas de tipo WMS y KML. La capa no muestra la jerarquía de grupos de capas en la tabla de contenidos ni en la leyenda.\r\n * @property hideTree\r\n * @type boolean|undefined\r\n */\r\n/**\r\n * La capa no muestra su título cuando es añadida al control de capas de trabajo.\r\n * @property hideTitle\r\n * @type boolean|undefined\r\n * @default false\r\n */\r\n/**\r\n * La capa no aparece en la tabla de contenidos ni en la leyenda. De este modo se puede añadir una superposición de capas de trabajo que el usuario la perciba como parte del mapa de fondo.\r\n * @property stealth\r\n * @type boolean|undefined\r\n */\r\n/**\r\n * URL de una imagen en miniatura a mostrar en el selector de mapas de fondo.\r\n * @property thumbnail\r\n * @type string|undefined\r\n */\r\n/**\r\n * Opciones de clustering de puntos.\r\n * @property cluster\r\n * @type TC.cfg.ClusterOptions|undefined\r\n */\r\n\r\n/**\r\n * Árbol de elementos de capa.\r\n * Esta clase no tiene constructor.\r\n * @class TC.layer.LayerTree\r\n * @static\r\n */\r\n/**\r\n * Nombre de capa en servicios WMS o WMTS.\r\n * @property name\r\n * @type string|undefined\r\n */\r\n/**\r\n * Título de capa. Es un texto descriptivo para el usuario.\r\n * @property title\r\n * @type string|undefined\r\n */\r\n/**\r\n * Identificador único de la capa.\r\n * @property uid\r\n * @type string|undefined\r\n */\r\n/**\r\n * URL de la imagen con la leyenda de la capa.\r\n * @property legend\r\n * @type string|undefined\r\n */\r\n/**\r\n * Lista de nodos hijos del nodo actual.\r\n * @property children\r\n * @type array|undefined\r\n */\r\n\r\n/**\r\n * Capa de mapa. Esta clase no debería instanciarse directamente, sino mediante alguna de las clases que heredan de ella.\r\n * @class TC.Layer\r\n * @constructor\r\n * @param {TC.cfg.LayerOptions} [options] Objeto de opciones de configuración de la capa.\r\n */\r\nTC.Layer = function (options) {\r\n ///\r\n ///Constructor\r\n ///\r\n ///Objeto de opciones de capa.\r\n ///\r\n var _layer = this;\r\n\r\n /**\r\n * Objeto de opciones de capa.\r\n * @property options\r\n * @type TC.cfg.LayerOptions\r\n * @default {}\r\n */\r\n _layer.options = options || {};\r\n TC.Util.extend(_layer, _layer.options);\r\n\r\n _layer.PROTOCOL_REGEX = /^(f|ht)tp?:\\/\\//i;\r\n\r\n /**\r\n * Identificador de capa, debe ser único en el mapa. Si no se asigna en las opciones del constructor, se genera uno automáticamente.\r\n * @property id\r\n * @type string\r\n */\r\n _layer.id = _layer.options.id || TC.getUID();\r\n\r\n /**\r\n * Objeto del mapa al que pertenece la capa.\r\n * @property map\r\n * @type TC.Map|undefined\r\n */\r\n _layer.map = _layer.options.map;\r\n /**\r\n * Tipo de capa.\r\n * @property type\r\n * @type TC.consts.LayerType\r\n */\r\n _layer.type = _layer.options.type || TC.Consts.layerType.WMS;\r\n\r\n /**\r\n * Fragmento HTML para utilizar como leyenda.\r\n * @property customLegend\r\n * @type string\r\n */\r\n _layer.customLegend = _layer.options.customLegend; \r\n var defaultFormat = _layer.options.isBase ? TC.Consts.mimeType.JPEG : TC.Consts.mimeType.PNG;\r\n _layer.options.format = _layer.options.format || defaultFormat;\r\n\r\n if (_layer.options.owner) {\r\n _layer.owner = _layer.options.owner;\r\n }\r\n\r\n if (_layer.options.hideTree === undefined) {\r\n _layer.options.hideTree = true;\r\n }\r\n\r\n if (_layer.options.hideTitle === undefined) {\r\n _layer.options.hideTitle = false;\r\n }\r\n\r\n /**\r\n * Árbol de los componentes de la capa. Estos componentes son distintos según el tipo de capa: así, en una capa WMS son las distintas capas del servicio, \r\n * en una capa KML son carpetas.\r\n * @property tree\r\n * @type TC.layer.LayerTree|null\r\n */\r\n _layer.tree = null;\r\n\r\n /**\r\n * Objeto envoltorio de la capa nativa de OpenLayers.\r\n * @property wrap\r\n * @type TC.wrap.Layer|null\r\n */\r\n _layer.wrap = null;\r\n};\r\n\r\nTC.Layer.state = {\r\n IDLE: 'idle',\r\n LOADING: 'loading'\r\n};\r\n\r\nTC.Layer.prototype.CAPABILITIES_STORE_KEY_PREFIX = 'TC.capabilities.';\r\n\r\n/**\r\n * Establece la visibilidad de la capa en el mapa.\r\n * @method setVisibility\r\n * @param {boolean} visible true si se quiere mostrar la capa, false si se quiere ocultarla.\r\n */\r\nTC.Layer.prototype.setVisibility = function (visible) {\r\n this.wrap.setVisibility(visible);\r\n};\r\n\r\n/**\r\n * Obtiene la visibilidad actual de la capa en el mapa.\r\n * @method getVisibility\r\n * @return {boolean} true si la capa está visible, false si está oculta.\r\n */\r\nTC.Layer.prototype.getVisibility = function () {\r\n var layer = this;\r\n var result = false;\r\n if (layer.map) {\r\n if (!layer.isBase || layer.map.getBaseLayer() === layer) {\r\n result = layer.wrap.getVisibility();\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n\r\n/**\r\n * Obtiene la opacidad actual de la capa en el mapa.\r\n * @method getOpacity\r\n * @return {number}.\r\n */\r\nTC.Layer.prototype.getOpacity = function () {\r\n var layer = this;\r\n var result = false;\r\n if (layer.map) {\r\n if (!layer.isBase || layer.map.getBaseLayer() === layer) {\r\n result = layer.wrap.layer.getOpacity();\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Establece la opacidad de la capa en el mapa. Hay que tener en cuenta que establecer opacidad 0 a una capa no es \r\n * equivalente que llamar a TC.Layer.{{#crossLink \"TC.Layer/setVisibility:method\"}}{{/crossLink}} con el valor del parámetro false.\r\n * @method setOpacity\r\n * @param {number} opacity Valor entre 0 (capa transparente) y 1 (capa opaca).\r\n * @param {boolean} mute Indica si al establecer opacidad no se lanza evento LAYEROPACITY.\r\n */\r\nTC.Layer.prototype.setOpacity = function (opacity, mute) {\r\n var layer = this;\r\n this.wrap.getLayer().then(function (olLayer) {\r\n olLayer.setOpacity(opacity);\r\n layer.opacity = opacity;\r\n if (layer.map && !mute) {\r\n layer.map.trigger(TC.Consts.event.LAYEROPACITY, { layer: layer, opacity: opacity });\r\n }\r\n });\r\n};\r\n\r\n/*\r\n * Determina si la capa se puede mostrar en el CRS especificado.\r\n * @method isCompatible\r\n * @param {string} crs Cadena con el well-known ID (WKID) del CRS.\r\n * @return {boolean}\r\n */\r\nTC.Layer.prototype.isCompatible = function (crs) {\r\n return true;\r\n};\r\n\r\n/*\r\n * Determina si la capa tiene nombres válidos.\r\n * @method isValidFromNames\r\n * @return {boolean}\r\n */\r\nTC.Layer.prototype.isValidFromNames = function () {\r\n return true;\r\n};\r\n\r\n/*\r\n * Determina si la capa es de tipo raster.\r\n * @method isRaster\r\n * @return {boolean}\r\n */\r\nTC.Layer.prototype.isRaster = function () {\r\n var result = true;\r\n var _layer = this;\r\n switch (_layer.type) {\r\n case TC.Consts.layerType.VECTOR:\r\n case TC.Consts.layerType.KML:\r\n case TC.Consts.layerType.WFS:\r\n case TC.Consts.layerType.GROUP:\r\n result = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n return result;\r\n};\r\n\r\n/*\r\n * Determina si la capa es visible a la resolución actual. Para ello consulta el documento de capabilities en los casos en que exista.\r\n * @method isVisibleByScale\r\n * @return {boolean}\r\n */\r\nTC.Layer.prototype.isVisibleByScale = function (name) {\r\n return true;\r\n};\r\n\r\n\r\n/*\r\n * Determina si una capa del servicio está establecida en el mapa como visible.\r\n * @method isVisibleByName\r\n * @return {boolean}\r\n */\r\nTC.Layer.prototype.isVisibleByName = function (name) {\r\n return true;\r\n};\r\n\r\n/*\r\n *

Devuelve un árbol de información de la capa. Como mínimo devuelve un nodo raíz con el título de la capa.

\r\n *

En capas de servicios WMS es la jerarquía de capas obtenida del documento capabilities. Dependiendo del valor de la propiedad TC.cfg.LayerOptions.{{#crossLink \"TC.cfg.LayerOptions/hideTree:property\"}}{{/crossLink}}, \r\n * puede mostrar un árbol de todas las capas del servicio o solo un árbol de las capas visibles inicialmente.

\r\n *

En capas de documentos KML cada nodo es una carpeta del documento.

\r\n *

Si la propiedad TC.cfg.LayerOptions.{{#crossLink \"TC.cfg.LayerOptions/stealth:property\"}}{{/crossLink}} está establecida a true, este método devuelve null.

\r\n * @method getTree\r\n * @return {TC.layer.LayerTree}\r\n */\r\nTC.Layer.prototype.getTree = function () {\r\n var _layer = this;\r\n var result = { name: _layer.name, title: _layer.title };\r\n return result;\r\n};\r\n\r\n/**\r\n * Devuelve un nodo del árbol de información de la capa.\r\n * @method findNode\r\n * @param {string} id Identificador del nodo.\r\n * @param {TC.layer.LayerTree} parent Nodo desde el que se comienza la búsqueda.\r\n * @return {TC.layer.LayerTree} Si no se encuentra el nodo el método devuelve null.\r\n */\r\nTC.Layer.prototype.findNode = function findNode(id, parent) {\r\n var result = null;\r\n if (parent.uid == id) {\r\n result = parent;\r\n }\r\n else {\r\n for (var i = 0; i < parent.children.length; i++) {\r\n var r = findNode(id, parent.children[i]);\r\n if (r) {\r\n result = r;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n\r\n/*\r\n * Establece la visibilidad en el mapa de un elemento asociado a un nodo de árbol de la capa. Dependiendo del tipo de capa este elemento \r\n * es una entidad u otra, así, en capas de tipo WMS son capas de servicio, en KML son carpetas y en capas vectoriales genéricas son grupos de marcadores.\r\n * @method setNodeVisibility\r\n * @param {string} id Identificador del nodo.\r\n * @param {boolean} visible true si se quiere mostrar el elemento, false si se quiere ocultar.\r\n */\r\nTC.Layer.prototype.setNodeVisibility = function (id, visible) {\r\n const self = this;\r\n const tree = self.getTree(true);\r\n\r\n const node = self.findNode(id, tree);\r\n if (!self.isRoot(node)) {\r\n const setState = function (n, state) {\r\n n.visibilityState = state;\r\n n.children && n.children.forEach(c => setState(c, state));\r\n };\r\n if (visible) {\r\n setState(node, TC.Consts.visibility.VISIBLE);\r\n\r\n let n = node.parent;\r\n do {\r\n if (n.visibilityState !== TC.Consts.visibility.VISIBLE) {\r\n n.visibilityState = TC.Consts.visibility.HAS_VISIBLE;\r\n }\r\n n = n.parent;\r\n }\r\n while (n);\r\n }\r\n else {\r\n setState(node, TC.Consts.visibility.NOT_VISIBLE);\r\n\r\n let n = node.parent;\r\n do {\r\n if (n.visibilityState === TC.Consts.visibility.HAS_VISIBLE &&\r\n n.children.every(c => c.visibilityState === TC.Consts.visibility.NOT_VISIBLE)) {\r\n n.visibilityState = TC.Consts.visibility.NOT_VISIBLE;\r\n }\r\n n = n.parent;\r\n }\r\n while (n);\r\n }\r\n }\r\n return node;\r\n};\r\n\r\nTC.Layer.prototype.isRoot = function (node) {\r\n const self = this;\r\n const tree = self.tree || self.getTree(true);\r\n return node.uid === tree.uid\r\n}\r\n\r\n/*\r\n * Obtiene la visibilidad en el mapa de un elemento asociado a un nodo de árbol de la capa. Dependiendo del tipo de capa este elemento \r\n * es una entidad u otra, así, en capas de tipo WMS son capas de servicio, en KML son carpetas y en capas vectoriales genéricas son grupos de marcadores.\r\n * @method getNodeVisibility\r\n * @param {string} id Identificador del nodo.\r\n * @return {TC.consts.Visibility}\r\n */\r\nTC.Layer.prototype.getNodeVisibility = function (id, opt_tree) {\r\n const self = this;\r\n let tree = opt_tree || self.tree;\r\n if (!tree) {\r\n tree = self.getTree(true);\r\n }\r\n const node = self.findNode(id, tree);\r\n if (node) {\r\n return node.visibilityState;\r\n }\r\n return node;\r\n};\r\n\r\n\r\nTC.Layer.prototype.getResolutions = function () {\r\n if (this.wrap.getResolutions) {\r\n return this.wrap.getResolutions();\r\n }\r\n else {\r\n return [];\r\n }\r\n};\r\n\r\nTC.Layer.prototype.setProjection = function () {\r\n};\r\n\r\nTC.Layer.prototype.clone = function () {\r\n const self = this;\r\n const options = TC.Util.extend(true, {}, self.options, { id: self.id + '_clone' });\r\n return new self.constructor(options);\r\n};\r\n\r\nTC.Layer.prototype.getBySSL_ = function (url) {\r\n var self = this;\r\n\r\n return url.replace(self.PROTOCOL_REGEX, \"https://\");\r\n};\r\n\r\nTC.Layer.prototype.clip = function (geometry) {\r\n this.wrap.clip(geometry);\r\n};\r\n\r\nTC.Layer.prototype.stroke = function (geometry, options) {\r\n this.wrap.stroke(geometry, options);\r\n};\r\n\r\n(function () {\r\n const isWebWorkerEnabled = window.hasOwnProperty('Worker');\r\n const wwPromise = TC.Util.getWebWorkerCrossOriginURL(TC.apiLocation + 'TC/workers/tc-caps-web-worker.js');\r\n\r\n const parseCapabilities = function (layer, data) {\r\n var capabilities;\r\n\r\n if (data.documentElement) {\r\n\r\n const serviceException = data.getElementsByTagName('ServiceException')[0];\r\n if (serviceException) {\r\n capabilities = { error: serviceException.textContent };\r\n }\r\n else {\r\n var format = layer.type === TC.Consts.layerType.WMTS ? new layer.wrap.WmtsParser() : new layer.wrap.WmsParser();\r\n capabilities = format.read(data);\r\n\r\n //parsear a manija los tileMatrixSetLimits, que openLayers no lo hace (de momento)\r\n if (layer.type === TC.Consts.layerType.WMTS) {\r\n if (capabilities.Contents && capabilities.Contents.Layer) {\r\n const layerCollection = data.getElementsByTagName('Layer');\r\n for (var i = 0, len = layerCollection.length; i < len; i++) {\r\n const curXmlLy = layerCollection[i];\r\n var nd = TC.Util.getElementByNodeName(curXmlLy, \"ows:Identifier\")[0];\r\n var id = nd.firstChild.data;\r\n\r\n var capLy = capabilities.Contents.Layer.filter(function (ly) {\r\n return ly.Identifier == id;\r\n });\r\n\r\n if (capLy.length) {\r\n capLy = capLy[0];\r\n for (var j = 0; j < capLy.TileMatrixSetLink.length; j++) {\r\n var capLink = capLy.TileMatrixSetLink[j];\r\n let matrixId = capLink.TileMatrixSet;\r\n\r\n var xmlLink;\r\n const xmlLinks = curXmlLy.getElementsByTagName('TileMatrixSetLink');\r\n for (var k = 0, kk = xmlLinks.length; k < kk; k++) {\r\n const curLink = xmlLinks[k];\r\n if (curLink.querySelector(\"TileMatrixSet:first\").textContent == matrixId) {\r\n xmlLink = curLink;\r\n break;\r\n }\r\n }\r\n\r\n if (xmlLink) {\r\n capLink.TileMatrixSetLimits = [];\r\n const tmlCollection = xmlLink.getElementsByTagName('TileMatrixLimits');\r\n for (var k = 0, kk = tmlCollection.length; k < kk; k++) {\r\n const lim = tmlCollection[k];\r\n capLink.TileMatrixSetLimits.push({\r\n TileMatrix: lim.getElementsByTagName('TileMatrix')[0].textContent,\r\n MinTileRow: parseInt(lim.getElementsByTagName('MinTileRow')[0].textContent),\r\n MinTileCol: parseInt(lim.getElementsByTagName('MinTileCol')[0].textContent),\r\n MaxTileRow: parseInt(lim.getElementsByTagName('MaxTileRow')[0].textContent),\r\n MaxTileCol: parseInt(lim.getElementsByTagName('MaxTileCol')[0].textContent)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n storeCapabilities(layer, capabilities);\r\n return Promise.resolve(capabilities);\r\n }\r\n else {\r\n return new Promise(function (resolve, reject) {\r\n if (isWebWorkerEnabled && typeof data === 'string') {\r\n wwPromise.then(function (wwUrl) {\r\n var worker = new Worker(wwUrl);\r\n worker.onmessage = function (e) {\r\n if (e.data.state === 'success') {\r\n capabilities = e.data.capabilities;\r\n\r\n // GLS: Sólo almacenamos si el capabilities es correcto\r\n storeCapabilities(layer, capabilities);\r\n }\r\n else {\r\n capabilities = {\r\n error: 'Web worker error: ' + layer.url\r\n };\r\n reject(capabilities.error);\r\n }\r\n\r\n resolve(capabilities);\r\n worker.terminate();\r\n };\r\n worker.postMessage({\r\n type: layer.type,\r\n text: data,\r\n url: TC.apiLocation.indexOf(\"http\") >= 0 ? TC.apiLocation : document.location.protocol + TC.apiLocation\r\n });\r\n });\r\n }\r\n else {\r\n capabilities = data;\r\n resolve(capabilities);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const capabilitiesError = function (layer, reason) {\r\n return 'No se pudo obtener el documento de capacidades del servicio ' + layer.url + ': [' + reason + ']';\r\n }; \r\n\r\n const getCapabilitiesOnline = function () {\r\n const layer = this;\r\n const result = layer._onlineCapabilitiesPromise = layer._onlineCapabilitiesPromise || new Promise(function (resolve, reject) {\r\n const url = layer.getGetCapabilitiesUrl();\r\n\r\n layer.toolProxification.fetch(url, { retryAttempts: 2 }).then(function (data) {\r\n parseCapabilities(layer, data.responseText)\r\n .then(function (capabilities) {\r\n if (capabilities.error) {\r\n reject(Error(capabilitiesError(layer, capabilities.error)));\r\n return;\r\n }\r\n resolve(capabilities);\r\n })\r\n .catch(function (error) {\r\n delete layer._onlineCapabilitesPromise;\r\n reject(Error(error));\r\n });\r\n }).catch(function (dataError) {\r\n delete layer._onlineCapabilitesPromise;\r\n reject(Error(capabilitiesError(layer, dataError)));\r\n });\r\n\r\n });\r\n return result;\r\n };\r\n\r\n const srcToURL = function (src) {\r\n const anchor = document.createElement('a');\r\n anchor.href = src;\r\n\r\n if (!anchor.origin) {\r\n\r\n if (!(anchor.protocol && anchor.hostname)) {\r\n var urlParts = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(anchor.href);\r\n\r\n anchor.protocol = urlParts[1];\r\n\r\n if (urlParts[4].indexOf(':') > -1) {\r\n var hostname = urlParts[4].split(':');\r\n anchor.hostname = hostname[0];\r\n anchor.port = hostname[1];\r\n } else {\r\n anchor.hostname = urlParts[4];\r\n }\r\n }\r\n\r\n anchor.origin = anchor.protocol.length === 0 ? window.location.protocol : anchor.protocol +\r\n \"//\" + anchor.hostname + (anchor.port && src.indexOf(anchor.port) > -1 ? ':' + anchor.port : '');\r\n }\r\n\r\n return anchor;\r\n };\r\n\r\n const getCapabilitiesFromStorage = function () {\r\n var layer = this;\r\n return new Promise(function (resolve, reject) {\r\n // Obtenemos el capabilities almacenado en caché\r\n const url = srcToURL(layer.url);\r\n localforage.getItem(layer.CAPABILITIES_STORE_KEY_PREFIX + layer.type + \".\" + url.href)\r\n .then(function (value) {\r\n if (value) {\r\n resolve(value);\r\n }\r\n else {\r\n reject(Error('Capabilities not in storage: ' + url.href));\r\n }\r\n })\r\n .catch(function () {\r\n reject(Error('Undefined storage error'));\r\n });\r\n });\r\n };\r\n\r\n const storeCapabilities = function (layer, capabilities) {\r\n // Esperamos a que el mapa se cargue y entonces guardamos el capabilities.\r\n // Así evitamos que la operación, que es bastante pesada, ocupe tiempo de carga \r\n // (con el efecto secundario de que LoadingIndicator esté un tiempo largo apagado durante la carga)\r\n const url = srcToURL(layer.options.url);\r\n var capKey = layer.CAPABILITIES_STORE_KEY_PREFIX + layer.type + \".\" + url.href;\r\n var setItem = function () {\r\n // GLS: antes de guardar, validamos que es un capabilities sin error\r\n if (capabilities.hasOwnProperty(\"error\")) {\r\n return;\r\n } else {\r\n\r\n layer.getCapabilitiesPromise().then(function () {\r\n localforage.setItem(capKey, capabilities).catch(err => console.log(err));\r\n });\r\n }\r\n };\r\n if (layer.map) {\r\n layer.map.loaded(setItem);\r\n }\r\n else {\r\n setItem();\r\n }\r\n };\r\n\r\n const cleanOgcUrl = function (url) {\r\n var result = url;\r\n if (url) {\r\n var match = url.match(/\\??SERVICE=\\w+&/i);\r\n if (match) {\r\n result = result.replace(match[0], '');\r\n }\r\n }\r\n return result;\r\n };\r\n TC.Layer.prototype.getGetMapUrl = function () {\r\n return cleanOgcUrl(this.wrap.getGetMapUrl());\r\n };\r\n\r\n TC.Layer.prototype.getCapabilitiesOnline = getCapabilitiesOnline;\r\n TC.Layer.prototype.getCapabilitiesFromStorage = getCapabilitiesFromStorage;\r\n})();\r\n\r\nconst Layer = TC.Layer;\r\nexport default Layer;","import TC from '../../TC';\r\nimport Layer from '../Layer';\r\nimport Vector from './Vector';\r\nimport Proxification from '../tool/Proxification';\r\nTC.Layer = Layer;\r\nTC.layer = TC.layer || {};\r\nTC.layer.Vector = Vector;\r\nTC.tool = TC.tool || {};\r\nTC.tool.Proxification = Proxification;\r\n\r\nTC.Consts.BLANK_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAQAIBRAA7';\r\n\r\nconst _urlWFS = {};\r\n\r\n(function () {\r\n\r\n const capabilitiesPromises = new Map();\r\n\r\n var wfsLayer = null;//capa WFS de respaldo\r\n\r\n const getWFSLayer = function (url) {\r\n return new Promise(function (resolve, _reject) {\r\n if (!wfsLayer || wfsLayer.options.url !== url) {\r\n wfsLayer = new TC.layer.Vector({\r\n type: TC.Consts.layerType.WFS,\r\n url: url,\r\n stealth: true\r\n });\r\n }\r\n resolve(wfsLayer);\r\n });\r\n };\r\n \r\n const _createWMSLayer = function (layer) {\r\n\r\n var layerNames = Array.isArray(layer.names) ? layer.names.join(',') : layer.names;\r\n var format = layer.options.format;\r\n var options = layer.options;\r\n\r\n var params = {\r\n LAYERS: layerNames,\r\n FORMAT: format,\r\n TRANSPARENT: layer.transparent,\r\n VERSION: layer.capabilities.version || '1.3.0'\r\n };\r\n\r\n if (layer.params) {\r\n TC.Util.extend(params, layer.params);\r\n }\r\n\r\n if (layer.queryParams) {\r\n TC.Util.extend(params, layer.queryParams);\r\n }\r\n\r\n var infoFormat = layer.getPreferredInfoFormat();\r\n if (infoFormat !== null) {\r\n params.INFO_FORMAT = infoFormat;\r\n }\r\n //filtro GML o CQL\r\n if (options.filter) {\r\n //primero miramos si es un objeto TC.filter\r\n if (options.filter instanceof TC.filter.Filter) {\r\n params.filter = options.filter.getText();\r\n }\r\n //se puede parsear a XML, asumimos que es GML\r\n else if (!new DOMParser().parseFromString(options.filter, 'text/xml').querySelector(\"parsererror\")) {\r\n params.filter = options.filter;\r\n }\r\n //Si no, asumimos que es CQL\r\n else {\r\n params.cql_filter = options.filter;\r\n }\r\n }\r\n\r\n return layer.wrap.createWMSLayer(layer.getGetMapUrl(), params, options);\r\n };\r\n\r\n const _createWMTSLayer = function (layer) {\r\n return layer.wrap.createWMTSLayer(layer.options);\r\n };\r\n\r\n const _getLayerNodeIndex = function _getLayerNodeIndex(layer, treeNode) {\r\n\r\n var result = layer.availableNames.indexOf(treeNode.name);\r\n if (result === -1) {\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n result = _getLayerNodeIndex(layer, treeNode.children[i]);\r\n if (result !== -1) {\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n const _sortTree = function _sortTree(layer, treeNode) {\r\n var _sortFunction = function (n1, n2) {\r\n return _getLayerNodeIndex(layer, n2) - _getLayerNodeIndex(layer, n1);\r\n };\r\n treeNode.children.sort(_sortFunction);\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n _sortTree(layer, treeNode.children[i]);\r\n }\r\n };\r\n\r\n const _getLayerNamePosition = function _getLayerNamePosition(treeNode, name, counter) {\r\n var result = false;\r\n counter.count = counter.count + 1;\r\n if (treeNode.name === name) {\r\n result = true;\r\n }\r\n else {\r\n // Las capas se ordenan de arriba a abajo en el árbol, por tanto hay que recorrer la lista del revés\r\n for (var i = treeNode.children.length - 1; i >= 0; i--) {\r\n if (_getLayerNamePosition(treeNode.children[i], name, counter)) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Opciones de nombre de capa.\r\n * Esta clase no tiene constructor.\r\n * @class TC.cfg.LayerNameOptions\r\n * @static\r\n */\r\n /**\r\n * Siempre que sea posible se reemplaza en la lista TC.layer.Raster.{{#crossLink \"TC.layer.Raster/names:property\"}}{{/crossLink}} los nombres de capa por los nombres de las capas de grupo que las contienen.\r\n * @property aggregate\r\n * @type boolean\r\n * @default true\r\n */\r\n /**\r\n * Determina si la capa nativa se actualiza en cuanto cambia la lista TC.layer.Raster.{{#crossLink \"TC.layer.Raster/names:property\"}}{{/crossLink}} (valor false) \r\n * o se espera a que la capa se actualice (valor true).\r\n * @property lazy\r\n * @type boolean\r\n * @default false\r\n */\r\n /**\r\n * Determina si la capa la propiedad TC.layer.Raster.{{#crossLink \"TC.layer.Raster/availableNames:property\"}}{{/crossLink}} (valor false) se restablece \r\n * al actualizar la propiedad TC.layer.Raster.{{#crossLink \"TC.layer.Raster/names:property\"}}{{/crossLink}}.\r\n * @property reset\r\n * @type boolean|undefined\r\n */\r\n\r\n /**\r\n * Opciones de capa raster.\r\n * Esta clase no tiene constructor.\r\n * @class TC.cfg.RasterOptions\r\n * @extend TC.cfg.LayerOptions\r\n * @static\r\n */\r\n /**\r\n * Tipo de capa.\r\n * @property type\r\n * @type TC.consts.LayerType\r\n * @default TC.Consts.layerType.WMS\r\n */\r\n /**\r\n * URL del servicio OGC que define la capa.\r\n * @property url\r\n * @type string\r\n */\r\n /**\r\n * Indica si la capa tiene transparencia.\r\n * @property transparent\r\n * @type boolean|undefined\r\n */\r\n /**\r\n * Lista separada por comas de los nombres de capa del servicio OGC.\r\n * @property layerNames\r\n * @type string|undefined\r\n */\r\n /**\r\n * Nombre de grupo de matrices del servicio WMTS. Propiedad obligatoria para capas de tipo WMTS.\r\n * @property matrixSet\r\n * @type string|undefined\r\n */\r\n /**\r\n * Filtro GML o CQL de la capa. Funciona unicamente con capas WMS. Se intenta parsear a GML y si no sepuede se asume que es CQL\r\n * @property filter\r\n * @type string|undefined\r\n */\r\n\r\n /**\r\n * Capa de tipo raster, como la de un WMS o un WMTS.\r\n * @class TC.layer.Raster\r\n * @extends TC.Layer\r\n * @constructor\r\n * @param {TC.cfg.LayerOptions} [options] Objeto de opciones de configuración de la capa.\r\n */\r\n TC.layer.Raster = function () {\r\n var self = this;\r\n\r\n if (!TC.tool || !TC.tool.Proxification) {\r\n TC.syncLoadJS(TC.apiLocation + 'TC/tool/Proxification');\r\n }\r\n\r\n this.toolProxification = new TC.tool.Proxification(TC.proxify);\r\n\r\n //esta promise se resolverá cuando el capabilities esté descargado y parseado\r\n //se utiliza para saber cuándo está listo el capabilities en los casos en los que se instancia el layer pero no se añade al mapa\r\n //porque la forma habitual de detectar esto es por los eventos del mapa (que en esos casos no saltarán)\r\n this._capabilitiesPromise = null;\r\n\r\n TC.Layer.apply(self, arguments);\r\n\r\n self.wrap = new TC.wrap.layer.Raster(self);\r\n\r\n /**\r\n * Indica si la capa tiene transparencia.\r\n * @property transparent\r\n * @type boolean\r\n * @default true\r\n */\r\n self.transparent = self.options.transparent === false ? false : true;\r\n\r\n /**\r\n * URL del servicio al que pertenenece la capa.\r\n * @property url\r\n * @type string\r\n */\r\n self.url = self.options.url;\r\n self.capabilities = TC.capabilities[self.url];\r\n\r\n self.params = self.options.params;\r\n /**\r\n * Lista de nombres de capa.\r\n * @property names\r\n * @type array\r\n * @default []\r\n */\r\n /**\r\n * Lista de nombres de capa disponibles inicialmente.\r\n * @property availableNames\r\n * @type array\r\n * @default []\r\n */\r\n if (typeof self.options.layerNames === 'string') {\r\n self.names = self.availableNames = self.options.layerNames.split(',');\r\n }\r\n else {\r\n self.names = [];\r\n self.availableNames = [];\r\n if (Array.isArray(self.options.layerNames)) {\r\n for (var i = 0; i < self.options.layerNames.length; i++) {\r\n const name = self.options.layerNames[i];\r\n if (typeof name === 'string') {\r\n self.names.push(name);\r\n self.availableNames.push(name);\r\n\r\n }\r\n else if (Object.prototype.hasOwnProperty.call(name, 'name')) {\r\n self.availableNames.push(name.name);\r\n if (name.isVisible === undefined || name.isVisible) {\r\n self.names.push(name.name);\r\n }\r\n }\r\n }\r\n } else {\r\n // Si no se encuentran nombres de capas, se buscan en el parámetro sld_body. Este parámetro es utilizado\r\n // cuando queremos instanciar una capa pasándole un SLD en la petición\r\n var sldBody = self.options.params ? self.options.params.sld_body : null;\r\n\r\n if (sldBody) {\r\n const parser = new DOMParser();\r\n var sldBodyToXml;\r\n try {\r\n sldBodyToXml = parser.parseFromString(sldBody, 'text/xml');\r\n }\r\n catch (e) {\r\n TC.error(e.message);\r\n sldBodyToXml = null;\r\n }\r\n if (sldBodyToXml) {\r\n var namedLayerElm = TC.Util.getElementByNodeName(sldBodyToXml, 'sld:NamedLayer');\r\n if (namedLayerElm && namedLayerElm.length > 0) {\r\n var names = TC.Util.getElementByNodeName(namedLayerElm[0], 'sld:Name');\r\n\r\n if (names && names.length > 0) {\r\n const name = names[0].textContent;\r\n self.names.push(name);\r\n self.availableNames.push(name);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.ignorePrefixes = self.options.ignorePrefixes === undefined ? true : self.options.ignorePrefixes;\r\n\r\n self._capabilitiesNodes = new Map();\r\n\r\n /**\r\n * Árbol del documento de capabilities del servicio.\r\n * @property capabilities\r\n * @type object\r\n */\r\n self.wrap._promise = new Promise(function (resolve, reject) {\r\n const endCreateLayerFn = function (ollyr) {\r\n self.wrap.setLayer(ollyr);\r\n if (ollyr) {\r\n resolve(ollyr);\r\n }\r\n else {\r\n reject(Error('Could not create native layer for \"' + self.id + '\"'));\r\n }\r\n };\r\n /*\r\n * _createOLLayer: Crea la capa nativa correspondiente según el tipo\r\n */\r\n const _createOLLayer = function () {\r\n let ollyr;\r\n if (!self.wrap.layer) {\r\n switch (self.type) {\r\n case TC.Consts.layerType.GROUP:\r\n endCreateLayerFn(ollyr);\r\n break;\r\n case TC.Consts.layerType.WMTS:\r\n try {\r\n ollyr = _createWMTSLayer(self);\r\n endCreateLayerFn(ollyr);\r\n }\r\n catch (_e) {\r\n // Ha fallado la creación. Puede que sea por capabilities cacheado obsoleto, \r\n // así que reintentamos online.\r\n self.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n self.capabilities = onlineCapabilities;\r\n try {\r\n ollyr = _createWMTSLayer(self);\r\n endCreateLayerFn(ollyr);\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n break;\r\n default:\r\n ollyr = _createWMSLayer(self);\r\n endCreateLayerFn(ollyr);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const processedCapabilities = function (capabilities) {\r\n // Si existe el capabilities no machacamos, porque provoca efectos indeseados en la gestión de capas.\r\n // En concreto, se regeneran los UIDs de capas, como consecuencia los controles de la API interpretan como distintas capas que son la misma.\r\n self.capabilities = self.capabilities || capabilities;\r\n\r\n var actualUrl = self.getGetMapUrl();\r\n TC.capabilities[self.options.url] = TC.capabilities[self.options.url] || capabilities;\r\n TC.capabilities[actualUrl] = TC.capabilities[actualUrl] || capabilities;\r\n\r\n _createOLLayer();\r\n };\r\n\r\n if (self.capabilities) {\r\n processedCapabilities(self.capabilities);\r\n self._capabilitiesPromise = Promise.resolve(self.capabilities);\r\n return;\r\n }\r\n\r\n self._capabilitiesPromise = capabilitiesPromises.get(self.url) || new Promise(function (res, rej) {\r\n const onlinePromise = self.getCapabilitiesOnline();\r\n const storagePromise = self.getCapabilitiesFromStorage();\r\n\r\n onlinePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function (error) {\r\n storagePromise.catch(function () {\r\n rej(error);\r\n });\r\n });\r\n\r\n storagePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function () {\r\n onlinePromise.catch(function (error) {\r\n rej(error);\r\n });\r\n });\r\n });\r\n capabilitiesPromises.set(self.url, self._capabilitiesPromise);\r\n\r\n self.getCapabilitiesPromise()\r\n .then(function (capabilities) {\r\n processedCapabilities(capabilities);\r\n })\r\n .catch(function (error) {\r\n if (self.map) {\r\n self.map.trigger(TC.Consts.event.LAYERERROR, { layer: self, reason: 'couldNotGetCapabilities' });\r\n }\r\n reject(error);\r\n });\r\n });\r\n\r\n self._disgregatedLayerNames = null;\r\n\r\n if (TC.Consts.layerType.WMTS === self.type) {\r\n self.wrap.setWMTSUrl();\r\n }\r\n };\r\n\r\n TC.inherit(TC.layer.Raster, TC.Layer);\r\n\r\n var layerProto = TC.layer.Raster.prototype;\r\n \r\n layerProto.capabilitiesState_ = {\r\n PENDING: 0,\r\n DONE: 1\r\n };\r\n\r\n layerProto.getByProxy_ = function (url) {\r\n return TC.proxify(url);\r\n };\r\n \r\n\r\n layerProto.getByUrl_ = function (url) {\r\n return url;\r\n };\r\n\r\n\r\n layerProto.setVisibility = function (visible) {\r\n const self = this;\r\n self.tree = null;\r\n TC.Layer.prototype.setVisibility.call(self, visible);\r\n };\r\n\r\n\r\n /*\r\n * _aggregateLayerNames: devuelve un array de nombres de capa WMS sustituyendo en la medida de lo posible capas por las capas de grupo que las contienen\r\n */\r\n var _aggregateLayerNames = function (layer, layerNames) {\r\n if (layer.type !== TC.Consts.layerType.WMS) {\r\n return layerNames;\r\n }\r\n else {\r\n var ln = layerNames.slice();\r\n _aggregateLayerNodeNames(layer, ln, layer.wrap.getRootLayerNode());\r\n return ln;\r\n }\r\n };\r\n\r\n /*\r\n * _aggregateLayerNodeNames: Agrega el array de nombres de capa WMS sustituyendo en la medida de lo posible capas por las capas de grupo que las contienen.\r\n * Se parte de un nodo del árbol de capas del capabilities\r\n */\r\n var _aggregateLayerNodeNames = function _aggregateLayerNodeNames(layer, names, layerNode) {\r\n var result = false;\r\n var children = layer.wrap.getLayerNodes(layerNode);\r\n if (children.length) {\r\n children.forEach(child => {\r\n if (_aggregateLayerNodeNames(layer, names, child)) {\r\n result = true;\r\n }\r\n });\r\n\r\n var nodeNames = children.map(function (elm) {\r\n return layer.wrap.getName(elm);\r\n }).reverse();\r\n var idx, firstIdx;\r\n var fail = false;\r\n\r\n firstIdx = idx = names.indexOf(nodeNames[0]);\r\n if (idx < 0) {\r\n fail = true;\r\n }\r\n else {\r\n for (var i = 1, len = nodeNames.length; i < len; i++) {\r\n if (nodeNames[i] != names[++idx]) {\r\n fail = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!fail) {\r\n var nodeName = layer.wrap.getName(layerNode);\r\n if (nodeName && nodeNames.length > 1) {\r\n names.splice(firstIdx, nodeNames.length, nodeName);\r\n result = true;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * _disgregateLayerNames: devuelve un array de nombres de capa WMS con solo capas hoja.\r\n * Parámetros: objeto de capa, array of strings, nodo de la capa en el capabilities, booleano que dice si esta rama viene de un nodo visible\r\n */\r\n var _disgregateLayerNames = function (layer, layerNames) {\r\n var result = [];\r\n var ln = layerNames.slice();\r\n var rootNode = layer.wrap.getRootLayerNode();\r\n for (var i = 0, len = ln.length; i < len; i++) {\r\n result = result.concat(_disgregateLayerName(layer, ln[i], rootNode));\r\n }\r\n return result;\r\n };\r\n\r\n var _disgregateLayerName = function _disgregateLayerName(layer, name, layerNode, ancestorVisible) {\r\n var result = [];\r\n var nodeName = layer.wrap.getName(layerNode);\r\n var nodeVisible = layer.compareNames(name, nodeName);\r\n var hasEmptyChildren = false;\r\n var children = layer.wrap.getLayerNodes(layerNode);\r\n for (var i = 0; i < children.length; i++) {\r\n var names = _disgregateLayerName(layer, name, children[i], ancestorVisible || nodeVisible);\r\n if (!names.length) {\r\n hasEmptyChildren = true;\r\n }\r\n else {\r\n result = result.concat(names);\r\n }\r\n }\r\n if (!children.length || hasEmptyChildren) {\r\n if (ancestorVisible || nodeVisible) {\r\n result = [nodeName];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var _extendLayerNameOptions = function (options) {\r\n return TC.Util.extend({ aggregate: true, lazy: false }, options);\r\n };\r\n\r\n var _combineArray = function (source, add, rem) {\r\n var result = [];\r\n var s, a, r;\r\n s = source ? source : [];\r\n a = add ? add : [];\r\n r = rem ? rem : [];\r\n var sa = s.concat(a);\r\n for (var i = 0; i < sa.length; i++) {\r\n if (sa.indexOf(sa[i]) === i && r.indexOf(sa[i]) === -1) {\r\n result.push(sa[i]);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var _sortLayerNames = function (layer, layerNames) {\r\n var ln = typeof layerNames === 'string' ? layerNames.split(',') : layerNames;\r\n if (layer.capabilities) {\r\n var tree = layer.getTree();\r\n ln.sort(function (a, b) {\r\n var idxa = {\r\n count: 0\r\n };\r\n var idxb = {\r\n count: 0\r\n };\r\n _getLayerNamePosition(tree, a, idxa);\r\n _getLayerNamePosition(tree, b, idxb);\r\n return idxa.count - idxb.count;\r\n });\r\n }\r\n return ln;\r\n };\r\n\r\n var _isNameInArray = function (layer, name, names, looseComparison) {\r\n return names.some(function (elm) {\r\n return layer.compareNames(name, elm, looseComparison);\r\n });\r\n };\r\n\r\n var _isNameInPath = function (node) {\r\n const self = this;\r\n //return self.getDisgregatedLayerNames().some(name => self.getBranch(name).some(step => step === node));\r\n return self.getDisgregatedLayerNames().some(name => self.getNodePath(name).some(step => step.Name === node || (!step.Name & step.Title === node)));\r\n };\r\n\r\n /*\r\n * getLimitedMatrixSet: devuelve un array de tileMatrixSets limitados por su correspondiente TileMatrixSetLimits (si es que lo tiene)\r\n */\r\n layerProto.getLimitedMatrixSet = function () {\r\n const self = this;\r\n const layerId = self.layerNames;\r\n const matrixSetId = self.matrixSet;\r\n var capabilities = self.capabilities;\r\n\r\n const tileMatrixSet = capabilities.Contents.TileMatrixSet.find(elm => elm.Identifier === matrixSetId);\r\n\r\n if (tileMatrixSet) {\r\n const layerNode = capabilities.Contents.Layer.find(elm => elm.Identifier === layerId);\r\n if (layerNode.TileMatrixSetLink) {\r\n const tileMatrixSetLink = layerNode.TileMatrixSetLink.find(elm => elm.TileMatrixSet === matrixSetId);\r\n if (tileMatrixSetLink && tileMatrixSetLink.TileMatrixSetLimits && tileMatrixSetLink.TileMatrixSetLimits.length) {\r\n const ret = [];\r\n tileMatrixSetLink.TileMatrixSetLimits.forEach(function (tileMatrixSetLimit) {\r\n const matrix = tileMatrixSet.TileMatrix.find(elm => elm.Identifier === tileMatrixSetLimit.TileMatrix);\r\n if (matrix) {\r\n ret.push(TC.Util.extend({ matrixIndex: tileMatrixSet.TileMatrix.indexOf(matrix) }, matrix, tileMatrixSetLimit));\r\n }\r\n });\r\n return ret;\r\n }\r\n else {\r\n return tileMatrixSet.TileMatrix;\r\n }\r\n }\r\n else {\r\n return tileMatrixSet.TileMatrix;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Establece los nombres de capas que deben estar visibles en un WMS. Si la lista está vacía, hace invisible la capa.\r\n * @method setLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * setLayerNames: sets the visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n layerProto.setLayerNames = function (layerNames, options) {\r\n var layer = this;\r\n return new Promise(function (resolve, _reject) {\r\n layer.wrap.getLayer().then(function () {\r\n var ln = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n layer.names = ln;\r\n var opts = _extendLayerNameOptions(options);\r\n if (opts.aggregate) {\r\n ln = _aggregateLayerNames(layer, ln);\r\n }\r\n layer._disgregatedLayerNames = null;\r\n var newParams = {\r\n LAYERS: ln.join(','), TRANSPARENT: true\r\n };\r\n if (opts.lazy) {\r\n var params = layer._newParams || layer.wrap.getParams();\r\n layer._newParams = TC.Util.extend(params, newParams);\r\n }\r\n else {\r\n if (layer.map) {\r\n layer.map.trigger(TC.Consts.event.BEFOREUPDATEPARAMS, { layer: layer });\r\n }\r\n layer.tree = null;\r\n layer.wrap.setParams(newParams);\r\n if (opts.reset || !layer.map) {\r\n // layerNames se fija cuando se añade al mapa o cuando reset = true.\r\n layer.availableNames = layer.names;\r\n }\r\n if (layer.map) {\r\n layer.map.trigger(TC.Consts.event.UPDATEPARAMS, { layer: layer });\r\n }\r\n }\r\n resolve(layer.names);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Establece el atributo filter o CQL_filter de una capa WMS.\r\n * @method setFilter\r\n * @param {TC.filter.Filter|string} filter Objeto de tipo TC.filter.Filter, un filtro GML como cadena de texto o filtro CQL como cadena de texto\r\n */\r\n /*\r\n * setFilter: sets the filter or CQL_filter attribute on WMS layer\r\n * Parameters: object instance of TC.filter.Filter or a GML filter string\r\n */\r\n layerProto.setFilter = function (filter) {\r\n var layer = this;\r\n return new Promise(function (resolve, _reject) {\r\n layer.wrap.getLayer().then(function () {\r\n var oldParams = layer.wrap.getParams();\r\n delete oldParams.filter;\r\n delete oldParams.cql_filter;\r\n\r\n //if (layer.map) {\r\n // layer.map.trigger(TC.Consts.event.BEFOREUPDATEPARAMS, { layer: layer });\r\n //}\r\n\r\n //primero miramos si es un objeto TC.filter\r\n if (filter instanceof TC.filter.Filter) {\r\n layer.filter=oldParams.filter = filter.getText();\r\n }\r\n //se puede parsear a XML, asumimos que es GML\r\n else if (!new DOMParser().parseFromString(filter, 'text/xml').querySelector(\"parsererror\")) {\r\n layer.filter =oldParams.filter = filter;\r\n }\r\n //Si no, asumimos que es CQL\r\n else {\r\n layer.filter = oldParams.cql_filter = filter;\r\n }\r\n layer.wrap.setParams(oldParams);\r\n\r\n //if (layer.map) {\r\n // layer.map.trigger(TC.Consts.event.UPDATEPARAMS, { layer: layer });\r\n //}\r\n \r\n resolve(filter);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Añade capas por nombre a las que ya están visibles en el WMS\r\n * @method addLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * addLayerNames: adds layer names to the set of visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n layerProto.addLayerNames = function (layerNames, options) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.wrap.getLayer().then(function () {\r\n var opts = _extendLayerNameOptions(options);\r\n var ln2a = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n var ln = self.wrap.getParams().LAYERS;\r\n if (opts.aggregate) {\r\n ln2a = _disgregateLayerNames(self, ln2a);\r\n ln = self.getDisgregatedLayerNames();\r\n }\r\n self.setLayerNames(_sortLayerNames(self, _combineArray(ln, ln2a, null)), options).then(function (names) {\r\n resolve(names);\r\n });\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Elimina capas por nombre de las que están visibles en el WMS\r\n * @method addLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * removeLayerNames: removes layer names from the set of visible layer names of a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n layerProto.removeLayerNames = function (layerNames, options) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.wrap.getLayer().then(function () {\r\n var opts = _extendLayerNameOptions(options);\r\n var ln2r = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n var ln = self.wrap.getParams().LAYERS;\r\n if (opts.aggregate) {\r\n ln2r = _disgregateLayerNames(self, ln2r);\r\n ln = self.getDisgregatedLayerNames();\r\n }\r\n self.setLayerNames(_sortLayerNames(self, _combineArray(ln, null, ln2r)), options).then(function (names) {\r\n resolve(names);\r\n });\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Toma una lista de nombres de capa WMS y cambia su visibilidad: de visible a no visible y viceversa.\r\n * @method toggleLayerNames\r\n * @param {array|string} layerNames Array de strings con los nombres de capa o string con los nombres de capa separados por comas.\r\n * @param {TC.cfg.LayerNameOptions} [options]\r\n */\r\n /*\r\n * toggleLayerNames: from a list, adds a layer name when it is not visible or removes a layer name when it is visible in a WMS layer\r\n * Parameters: array of string, options object: { aggregate: boolean (default true), lazy: boolean (default false), reset: boolean (default false) }\r\n * aggregate option replaces layer name sets by layer group names when possible\r\n * lazy option does not update OpenLayers layer\r\n */\r\n layerProto.toggleLayerNames = function (layerNames, options) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.wrap.getLayer().then(function () {\r\n var opts = _extendLayerNameOptions(options);\r\n var ln2t = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n var currentLayerNames = self.wrap.getParams().LAYERS;\r\n if (opts.aggregate) {\r\n ln2t = _disgregateLayerNames(self, ln2t);\r\n currentLayerNames = self.getDisgregatedLayerNames();\r\n }\r\n var ln2a = [];\r\n var ln2r = [];\r\n for (var i = 0; i < ln2t.length; i++) {\r\n var l = ln2t[i];\r\n if (currentLayerNames.indexOf(l) < 0) {\r\n ln2a.push(l);\r\n }\r\n else {\r\n ln2r.push(l);\r\n }\r\n }\r\n var promises = [];\r\n if (ln2a.length > 0) {\r\n promises.push(self.addLayerNames(ln2a, opts));\r\n }\r\n if (ln2r.length > 0) {\r\n promises.push(self.removeLayerNames(ln2r, opts));\r\n }\r\n Promise.all(promises).then(function (arrays) {\r\n const a1 = arrays[0];\r\n const a2 = arrays[1];\r\n if (a1) {\r\n if (a2) {\r\n resolve(a1.concat(a2));\r\n }\r\n else {\r\n resolve(a1);\r\n }\r\n }\r\n else {\r\n resolve([]);\r\n }\r\n });\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Devuelve la lista de nombres de capa WMS hoja correspondientes a las capas visibles.\r\n * @method getDisgregatedLayerNames\r\n * @return {array}\r\n */\r\n /*\r\n * getDisgregatedLayerNames: returns an array of visible WMS leaf layer names\r\n */\r\n layerProto.getDisgregatedLayerNames = function () {\r\n ///\r\n ///Devuelve la lista de nombres de capa WMS hoja correspondientes a las capas visibles.\r\n ///\r\n ///\r\n var self = this;\r\n var olLayer = self.wrap.layer;\r\n if (self.wrap.isNative(olLayer) && self.type === TC.Consts.layerType.WMS) {\r\n if (!self._disgregatedLayerNames) {\r\n var layerNames = self.wrap.getParams().LAYERS;\r\n layerNames = Array.isArray(layerNames) ? layerNames : layerNames.split(',');\r\n self._disgregatedLayerNames = _disgregateLayerNames(self, layerNames);\r\n }\r\n }\r\n else {\r\n self._disgregatedLayerNames = self.names;\r\n }\r\n return self._disgregatedLayerNames.slice();\r\n };\r\n\r\n layerProto.isValidFromNames = function () {\r\n var self = this;\r\n var result = true;\r\n for (var i = 0, len = self.names.length; i < len; i++) {\r\n if (!self.getLayerNodeByName(self.names[i])) {\r\n result = false;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.isCompatible = function (crs) {\r\n var self = this;\r\n var result = false;\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n result = self.wrap.isCompatible(crs) || self.wrap.getCompatibleMatrixSets(crs).length > 0;\r\n break;\r\n case TC.Consts.layerType.WMS:\r\n result = self.wrap.isCompatible(crs);\r\n break;\r\n default:\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.getCompatibleCRS = function (options) {\r\n const self = this;\r\n options = options || {};\r\n var result = self.wrap.getCompatibleCRS();\r\n if (options.includeFallback && self.fallbackLayer) {\r\n const fbLayer = self.getFallbackLayer();\r\n if (fbLayer instanceof TC.Layer) {\r\n result = result.concat(fbLayer.wrap.getCompatibleCRS());\r\n }\r\n }\r\n if (options.normalized) {\r\n result = result\r\n .map(function (crs) {\r\n return TC.Util.getCRSCode(crs);\r\n }) // códigos numéricos\r\n .filter(function (code) {\r\n return code !== null;\r\n })\r\n .reduce(function (prev, cur) {\r\n if (prev.indexOf(cur) < 0) {\r\n prev.push(cur);\r\n }\r\n return prev;\r\n }, []) // códigos numéricos sin duplicados\r\n .map(function (code) {\r\n return 'EPSG:' + code;\r\n }); // códigos normalizados\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.getProjection = function () {\r\n var self = this;\r\n\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n return self.wrap.layer.getSource().getProjection().getCode();\r\n case TC.Consts.layerType.WMS:\r\n return self.map.crs;\r\n }\r\n };\r\n\r\n layerProto.setProjection = function (options) {\r\n var self = this;\r\n options = options || {};\r\n if (options.crs) {\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n var matrixSet = self.wrap.getCompatibleMatrixSets(options.crs)[0];\r\n if (matrixSet) {\r\n self.matrixSet = matrixSet;\r\n self.wrap.setMatrixSet(matrixSet);\r\n }\r\n else {\r\n self.wrap.setProjection(options);\r\n }\r\n self.mustReproject = !matrixSet;\r\n break;\r\n case TC.Consts.layerType.WMS:\r\n self.wrap.setProjection(options);\r\n self.mustReproject = !self.isCompatible(options.crs);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * isVisibleByScale: return wether the WMS layer is visible at current scale\r\n * Parameter: WMS layer name or UID\r\n */\r\n layerProto.isVisibleByScale = function (nameOrUid, looseComparison) {\r\n var self = this;\r\n var result;\r\n var _getOgcScale = function () {\r\n return self.map.wrap.getResolution() * self.map.getMetersPerUnit() / 0.00028; // OGC assumes 0.28 mm / pixel\r\n };\r\n var currentScale;\r\n var i;\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n result = false;\r\n var tileMatrix = self.wrap.getTileMatrix(self.options.matrixSet);\r\n if (tileMatrix) {\r\n currentScale = _getOgcScale();\r\n for (i = 0; i < tileMatrix.length; i++) {\r\n const scaleDenominators = self.wrap.getScaleDenominators(tileMatrix[i]);\r\n if (scaleDenominators[0] === currentScale) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n break;\r\n case TC.Consts.layerType.WMS:\r\n result = true;\r\n var layers = self.wrap.getAllLayerNodes();\r\n if (layers.length > 0) {\r\n currentScale = _getOgcScale();\r\n var node;\r\n if (parseInt(nameOrUid).toString() === nameOrUid) { // Es numérico, asumimos que es un UID\r\n node = self._capabilitiesNodes.get(nameOrUid);\r\n }\r\n if (!node) {\r\n node = layers.find(layer => self.compareNames(self.wrap.getName(layer), nameOrUid, looseComparison));\r\n }\r\n const isNodeVisibleByScale = function (node) {\r\n const scaleDenominators = self.wrap.getScaleDenominators(node);\r\n return !(parseFloat(scaleDenominators[1]) > currentScale || parseFloat(scaleDenominators[0]) < currentScale);\r\n };\r\n if (node) {\r\n result = isNodeVisibleByScale(node);\r\n\r\n // GLS: si no es visible miramos si tiene capas hijas y si tiene comprobamos si alguna de ellas es visible a la escala actual.\r\n if (!result) {\r\n if (node.Layer && node.Layer.length > 0) {\r\n return node.Layer.some(isNodeVisibleByScale);\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * isVisibleByName: return wether the WMS layer is visible because of the requested layer names\r\n * Parameter: WMS layer name\r\n */\r\n layerProto.isVisibleByName = function (name, looseComparison) {\r\n const self = this;\r\n let result = false;\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n if (self.wrap.getWMTSLayer()) {\r\n result = true;\r\n break;\r\n }\r\n break;\r\n case TC.Consts.layerType.WMS: {\r\n const getPathLayerNames = function getPathLayerNames(name) {\r\n return getPathLayerNamesForNode(name, self.wrap.getRootLayerNode());\r\n };\r\n\r\n const getPathLayerNamesForNode = function getPathLayerNamesForNode(name, capabilitiesNode) {\r\n let result = [];\r\n const n = self.wrap.getName(capabilitiesNode);\r\n if (self.compareNames(n, name, looseComparison)) {\r\n result.push(n);\r\n }\r\n else {\r\n const layerNodes = self.wrap.getLayerNodes(capabilitiesNode);\r\n let mustPushName = false;\r\n layerNodes.forEach(item => {\r\n const r = getPathLayerNamesForNode(name, item);\r\n if (r.length) {\r\n mustPushName = true;\r\n result = result.concat(r);\r\n }\r\n });\r\n if (mustPushName) {\r\n result.push(n);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n result = getPathLayerNames(name).some(n => _isNameInArray(self, n, self.names));\r\n break;\r\n }\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.isVisibleByNode = function (node) {\r\n const self = this;\r\n let result = false;\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n if (self.wrap.getWMTSLayer()) {\r\n result = true;\r\n break;\r\n }\r\n break;\r\n case TC.Consts.layerType.WMS: {\r\n const isChildOrItself = function (potentialParent, potentialChild) {\r\n if (potentialParent === potentialChild) {\r\n return true;\r\n }\r\n return potentialParent.Layer && potentialParent.Layer.some(child => isChildOrItself(child, potentialChild));\r\n };\r\n for (var i = 0, ii = self.names.length; i < ii; i++) {\r\n const nodes = self.getLayerNodesByName(self.names[i]);\r\n if (nodes.some(n => isChildOrItself(n, node))) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n default:\r\n result = true;\r\n break;\r\n }\r\n return result;\r\n };\r\n //17/02/2022 URI Se Obtiene la ramas ramas \n layerProto.getNestedTree = function () {\n var self = this;\n return self.getTree(false, true);\n };\r\n\r\n //29/10/2021 URI Obtiene el arbol completo del capabilities de una capa sin modificar el hideTree de la capa ni modificar la propiedad tree del arbol\n layerProto.getFullTree = function () {\n var self = this;\n return self.getTree(true);\n };\r\n //29/10/2021 URI Relaccionado con la función anterior (getFullTree), añado un parametro mas para que no haga caso a la opción hideTree del arbol y que no guarde el\r\n //resultado en un variable del objeto capa\r\n layerProto.getTree = function (fullTree, nested = false) {\r\n const self = this;\r\n if (fullTree === undefined) {\r\n fullTree = !self.options.hideTree;\r\n }\r\n var result = fullTree || nested ? false : self.tree;\r\n\r\n var addChild = function (node, child) {\r\n child.parent = node;\r\n if (self.options.inverseTree) {\r\n // Versión rápida de unshift\r\n TC.Util.fastUnshift(node.children, child);\r\n }\r\n else {\r\n node.children.push(child);\r\n }\r\n };\r\n\r\n if (!result) {\r\n let rootNode;\r\n const getTreeNode = function getTreeNode(capabilitiesNode, forceAddition, isRootNode, nested) {\r\n let uid;\r\n for (var key of self._capabilitiesNodes.keys()) {\r\n if (self._capabilitiesNodes.get(key) === capabilitiesNode) {\r\n uid = key;\r\n break;\r\n }\r\n }\r\n if (!uid) {\r\n uid = TC.getUID();\r\n self._capabilitiesNodes.set(uid, capabilitiesNode);\r\n }\r\n let rslt = {\r\n name: self.wrap.getName(capabilitiesNode),\r\n title: capabilitiesNode.title || capabilitiesNode.Title,\r\n uid: uid,\r\n children: [],\r\n abstract: !!capabilitiesNode.Abstract,\r\n metadata: !!capabilitiesNode.MetadataURL\r\n };\r\n if (isRootNode) {\r\n rootNode = rslt;\r\n }\r\n\r\n if (_isNameInArray(self, rslt.name, self.availableNames))\r\n forceAddition = true;\r\n if (nested) {\r\n if (isRootNode || (_isNameInPath.apply(self, [rslt.name || rslt.title]))) {\r\n forceAddition = true;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n if (!self.options.isBase) {\r\n if (rslt === rootNode) {\r\n rslt.isVisible = self.getVisibility();\r\n }\r\n else {\r\n rslt.isVisible = self.isVisibleByName(rslt.name);\r\n //rslt.isVisible = self.isVisibleByNode(capabilitiesNode);\r\n }\r\n var i;\r\n var layerNodes = self.wrap.getLayerNodes(capabilitiesNode);\r\n for (i = 0; i < layerNodes.length; i++) {\r\n const treeNode = getTreeNode(layerNodes[i], forceAddition, undefined, nested);\r\n if (treeNode) {\r\n addChild(rslt, treeNode);\r\n }\r\n }\r\n\r\n rslt.legend = self.wrap.getLegend(capabilitiesNode);\r\n\r\n // No muestra ramas irrelevantes si hideTree = true\r\n if (!forceAddition && !isRootNode) {\r\n // Eliminamos la rama hasta el nodo de interés\r\n rootNode.children = rootNode.children.concat(rslt.children);\r\n rslt = null;\r\n }\r\n }\r\n else {\r\n rslt.name = self.names.join(',');\r\n rslt.title = self.title || rslt.title;\r\n rslt.isBase = self.isDefault;\r\n if (self.options.thumbnail) {\r\n rslt.legend = {\r\n src: self.options.thumbnail\r\n };\r\n }\r\n }\r\n return rslt;\r\n };\r\n\r\n switch (self.type) {\r\n case TC.Consts.layerType.WMTS:\r\n result = getTreeNode(self.wrap.getWMTSLayer(), !self.options.hideTree, true);\r\n break;\r\n case TC.Consts.layerType.WMS:\r\n if (self.capabilities) {\r\n result = getTreeNode(self.wrap.getRootLayerNode(),\r\n !fullTree ? !self.options.hideTree : fullTree, true, nested);\r\n\r\n var _setNodeState = function _setNodeState(node) {\r\n let rslt = TC.Consts.visibility.NOT_VISIBLE;\r\n if (node) {\r\n if (node.children) {\r\n for (var i = 0, len = node.children.length; i < len; i++) {\r\n var nState = _setNodeState(node.children[i]);\r\n if (nState === TC.Consts.visibility.VISIBLE ||\r\n nState === TC.Consts.visibility.HAS_VISIBLE) {\r\n rslt = TC.Consts.visibility.HAS_VISIBLE;\r\n break;\r\n }\r\n }\r\n }\r\n if (node.isVisible) {\r\n rslt = TC.Consts.visibility.VISIBLE;\r\n }\r\n node.visibilityState = rslt;\r\n }\r\n return rslt;\r\n };\r\n _setNodeState(result);\r\n\r\n if (self.options.hideTree) {\r\n _sortTree(self, result);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!result) {\r\n result = {\r\n name: self.name, title: self.title\r\n };\r\n }\r\n result.title = self.title || result.title;\r\n result.customLegend = self.customLegend || result.customLegend;\r\n if (!fullTree) {\n self.tree = result;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.setNodeVisibility = function (id, visible) {\r\n const self = this;\r\n const node = TC.Layer.prototype.setNodeVisibility.call(self, id, visible);\r\n\r\n var _getNames = function _getNames(node) {\r\n var result = [];\r\n if (node.name) {\r\n result[0] = node.name;\r\n }\r\n else {\r\n for (var i = 0; i < node.children.length; i++) {\r\n result = result.concat(_getNames(node.children[i]));\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n if (self.isRoot(node)) {\r\n if (visible && self.names.length === 0) {\r\n // Prevent pink error tile\r\n self.addLayerNames(self.availableNames).then(function () {\r\n self.setVisibility(true);\r\n });\r\n }\r\n else {\r\n self.setVisibility(visible);\r\n }\r\n }\r\n else {\r\n var names = _getNames(node);\r\n if (visible) {\r\n self.addLayerNames(names);\r\n }\r\n else {\r\n self.removeLayerNames(names);\r\n }\r\n }\r\n return node;\r\n };\r\n\r\n layerProto.getNodePath = function (layerName, ignorePrefix) {\r\n var self = this;\r\n var result = [];\r\n if (self.type === TC.Consts.layerType.WMS && self.capabilities) {\r\n layerName = layerName || self.names[0];\r\n\r\n var _getPath = function _getPath(node) {\r\n var res = [];\r\n var nodeName = self.wrap.getName(node);\r\n if (self.compareNames(nodeName, layerName, ignorePrefix)) {\r\n res.push(node);\r\n }\r\n else {\r\n var children = self.wrap.getLayerNodes(node);\r\n for (var i = 0; i < children.length; i++) {\r\n var r = _getPath(children[i]);\r\n if (r.length) {\r\n res = r;\r\n TC.Util.fastUnshift(res, node);\r\n break;\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n result = _getPath(self.wrap.getRootLayerNode());\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.getPath = function (layerName, ignorePrefix) {\r\n return this.getNodePath(layerName, ignorePrefix).map(function (node) {\r\n return node.title || node.Title;\r\n });\r\n };\r\n\r\n layerProto.getLayerNodesByName = function (name) {\r\n const result = [];\r\n const self = this;\r\n const getName = self.wrap.getServiceType() === TC.Consts.layerType.WMTS ? self.wrap.getIdentifier : self.wrap.getName;\r\n const nodes = self.wrap.getAllLayerNodes();\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n if (self.compareNames(getName(nodes[i]), name)) {\r\n result.push(nodes[i]);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.getLayerNodeByName = function (name) {\r\n const self = this;\r\n const nodes = self.getLayerNodesByName(name);\r\n if (nodes.length) {\r\n return nodes[0];\r\n }\r\n return null;\r\n };\r\n\r\n layerProto.getChildrenLayers = function (layer) {\r\n var result = [];\r\n var _recursiveFn = function (lyr, arr) {\r\n if (lyr && lyr.Layer && lyr.Layer.length) {\r\n for (var i = 0; i < lyr.Layer.length; i++) {\r\n arr.push(lyr.Layer[i]);\r\n _recursiveFn(lyr.Layer[i], arr);\r\n }\r\n }\r\n };\r\n _recursiveFn(layer, result);\r\n return result;\r\n };\r\n\r\n layerProto.compareNames = function (n1, n2, looseComparison) {\r\n var result = n1 === n2;\r\n var self = this;\r\n var lc = looseComparison !== undefined ? looseComparison : self.ignorePrefixes;\r\n if (!result && lc && n1 && n2) {\r\n // Revisamos si tienen prefijo. Si lo tiene solo una de las dos lo obviamos para la comparación\r\n var idx1 = n1.indexOf(':');\r\n var idx2 = n2.indexOf(':');\r\n if (idx1 >= 0 && idx2 < 0) {\r\n result = n1.substr(idx1 + 1) === n2;\r\n }\r\n else if (idx2 >= 0 && idx1 < 0) {\r\n result = n1 === n2.substr(idx2 + 1);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.getCapabilitiesPromise = function () {\r\n return this._capabilitiesPromise;\r\n };\r\n\r\n layerProto.getResolutions = function () {\r\n return this.wrap.getResolutions();\r\n };\r\n\r\n layerProto.setResolutions = function (resolutions) {\r\n this.wrap.setResolutions(resolutions);\r\n };\r\n\r\n const reprojectExtent = function (extent, sourceCrs, targetCrs) {\r\n const topLeft = TC.Util.reproject([extent[0], extent[3]], sourceCrs, targetCrs);\r\n const bottomLeft = TC.Util.reproject([extent[0], extent[1]], sourceCrs, targetCrs);\r\n const topRight = TC.Util.reproject([extent[2], extent[3]], sourceCrs, targetCrs);\r\n const bottomRight = TC.Util.reproject([extent[2], extent[1]], sourceCrs, targetCrs);\r\n const result = new Array(4);\r\n result[0] = Math.min(topLeft[0], bottomLeft[0]);\r\n result[1] = Math.min(bottomLeft[1], bottomRight[1]);\r\n result[2] = Math.max(topRight[0], bottomRight[0]);\r\n result[3] = Math.max(topLeft[1], topRight[1]);\r\n return result;\r\n };\r\n\r\n layerProto.getExtent = function (options) {\r\n const self = this;\r\n options = options || {};\r\n let extent = null;\r\n\r\n if (self.type === TC.Consts.layerType.WMS) {\r\n const getNodeBoundingBoxes = function (node) {\r\n let bboxes = null;\r\n if (node.BoundingBox) {\r\n bboxes = Array.isArray(node.BoundingBox) ? node.BoundingBox : [node.BoundingBox];\r\n }\r\n if (node.EX_GeographicBoundingBox) {\r\n bboxes = bboxes || [];\r\n bboxes.unshift({\r\n crs: 'EPSG:4326',\r\n extent: node.EX_GeographicBoundingBox\r\n });\r\n }\r\n if (!bboxes && node.parent) {\r\n return getNodeBoundingBoxes(node.parent);\r\n }\r\n return bboxes;\r\n };\r\n\r\n const boundingBoxes = new Array(self.names.length);\r\n for (var i = 0, ii = boundingBoxes.length; i < ii; i++) {\r\n const node = self.getLayerNodeByName(self.names[i]);\r\n const bboxes = getNodeBoundingBoxes(node);\r\n if (!bboxes) {\r\n return null;\r\n }\r\n boundingBoxes[i] = bboxes;\r\n }\r\n\r\n const mapCrs = options.crs || self.map && self.map.getCRS() || 'EPSG:4326';\r\n const mapCrsCode = TC.Util.getCRSCode(mapCrs);\r\n extent = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n boundingBoxes\r\n .map(function getBestBbox(bboxes) {\r\n let firstBbox, crsBbox;\r\n bboxes.forEach(function (bbox, idx) {\r\n if (idx === 0) {\r\n firstBbox = bbox;\r\n }\r\n if (TC.Util.getCRSCode(bbox.crs) === mapCrsCode) {\r\n crsBbox = bbox;\r\n }\r\n });\r\n if (crsBbox) {\r\n return {\r\n crs: mapCrs,\r\n extent: crsBbox.extent\r\n };\r\n }\r\n let bboxCrs = firstBbox.crs;\r\n if (bboxCrs === 'CRS:84') {\r\n bboxCrs = 'EPSG:4326';\r\n }\r\n return {\r\n crs: bboxCrs,\r\n extent: firstBbox.extent\r\n };\r\n })\r\n .reduce(function combineBoundingBoxesByCrs(acc, bboxObj) {\r\n let accExtent = acc.get(bboxObj.crs);\r\n const curExtent = bboxObj.extent;\r\n if (accExtent) {\r\n accExtent[0] = Math.min(accExtent[0], curExtent[0]);\r\n accExtent[1] = Math.min(accExtent[1], curExtent[1]);\r\n accExtent[2] = Math.max(accExtent[2], curExtent[2]);\r\n accExtent[3] = Math.max(accExtent[3], curExtent[3]);\r\n }\r\n else {\r\n accExtent = curExtent;\r\n }\r\n acc.set(bboxObj.crs, accExtent);\r\n return acc;\r\n }, new Map())\r\n .forEach(function combineExtent(ext, crs) {\r\n if (TC.Util.getCRSCode(crs) === mapCrsCode) {\r\n extent[0] = Math.min(ext[0], extent[0]);\r\n extent[1] = Math.min(ext[1], extent[1]);\r\n extent[2] = Math.max(ext[2], extent[2]);\r\n extent[3] = Math.max(ext[3], extent[3]);\r\n }\r\n else {\r\n const mapCrsExtent = reprojectExtent(ext, crs, mapCrs);\r\n extent[0] = Math.min(mapCrsExtent[0], extent[0]);\r\n extent[1] = Math.min(mapCrsExtent[1], extent[1]);\r\n extent[2] = Math.max(mapCrsExtent[2], extent[2]);\r\n extent[3] = Math.max(mapCrsExtent[3], extent[3]);\r\n }\r\n });\r\n }\r\n else if (self.type === TC.Consts.layerType.WMTS) {\r\n const layerName = self.names[0];\r\n const layerNode = self\r\n .capabilities\r\n .Contents\r\n .Layer\r\n .find(l => l.Identifier === layerName);\r\n if (layerNode) {\r\n const matrixSetNode = self\r\n .capabilities\r\n .Contents\r\n .TileMatrixSet\r\n .find(tms => tms.Identifier === self.matrixSet);\r\n if (matrixSetNode) {\r\n if (layerNode.BoundingBox || layerNode.WGS84BoundingBox) {\r\n if (Array.isArray(layerNode.BoundingBox)) {\r\n const boundingBox = layerNode.BoundingBox.find(bbox => TC.Util.CRSCodesEqual(bbox.crs, matrixSetNode.SupportedCRS));\r\n if (boundingBox) {\r\n const stringToNumberArray = str => {\r\n return str.split(' ').map(v => parseFloat(v));\r\n };\r\n const bottomLeft = stringToNumberArray(boundingBox.LowerCorner);\r\n const topRight = stringToNumberArray(boundingBox.UpperCorner);\r\n extent = [bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]];\r\n }\r\n }\r\n if (!extent && layerNode.WGS84BoundingBox) {\r\n extent = reprojectExtent(layerNode.WGS84BoundingBox, 'EPSG:4326', matrixSetNode.SupportedCRS);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return extent;\r\n };\r\n\r\n const formatDescriptions = {};\r\n layerProto.getInfo = function (name) {\r\n const self = this;\r\n const info = self.wrap.getInfo(name);\r\n if (info.metadata) {\r\n info.metadata.forEach(function (md) {\r\n if (self.map) {\r\n md.formatDescription = formatDescriptions[md.format] =\r\n formatDescriptions[md.format] ||\r\n TC.Util.getLocaleString(self.map.options.locale, TC.Util.getSimpleMimeType(md.format)) ||\r\n TC.Util.getLocaleString(self.map.options.locale, 'viewMetadata');\r\n }\r\n else {\r\n md.formatDescription = formatDescriptions[md.format];\r\n }\r\n });\r\n }\r\n return info;\r\n };\r\n\r\n //Devuelve un array de subLayers cuyo nombre o descripción contenga el texto indicado\r\n //case insensitive\r\n layerProto.searchSubLayers = function (text) {\r\n if (!this.patternFn) {\r\n this.patternFn = function (t) {\r\n t = t.replace(/[^a-z\\dáéíóúüñ]/gi, '\\\\' + '$&');\r\n t = t.replace(/(a|á)/gi, \"(a|á)\");\r\n t = t.replace(/(e|é)/gi, \"(e|é)\");\r\n t = t.replace(/(i|í)/gi, \"(i|í)\");\r\n t = t.replace(/(o|ó)/gi, \"(o|ó)\");\r\n t = t.replace(/(u|ú|ü)/gi, \"(u|ú|ü)\");\r\n t = t.replace(/n/gi, \"(n|ñ)\");\r\n return t;\r\n };\r\n }\r\n if (text && text.length && text.length >= 3) {\r\n var self = this;\r\n var layers = null;\r\n /*URI:Si la cadena a buscar contiene a la busqueda anterior, por ejemplo, antes he buscado \"cat\" y ahora busco \"cata\" porque esto escribiendo \"catastro\" ...\r\n en vez de buscar en todas las capas del servicio busco en los resultados encotrados en la búsqueda anterior */\r\n if (this.lastPattern && text.indexOf(this.lastPattern) >= 0) {\r\n layers = this.lastMatches;\r\n }\r\n else {\r\n /*si se ha definido el parametro layers de esta capa en configuraci\\u00f3n filtro las capas del capability para que busque solo en las capas que est\\u00e9n en \r\n configuraci\\u00f3n y sus hijas*/\r\n if (self.availableNames && self.availableNames.length > 0) {\r\n layers = [];\r\n for (var i = 0; i < self.availableNames.length; i++) {\r\n var layer = self.getLayerNodeByName(self.availableNames[i]);\r\n if (layer) {\r\n layers.push(layer);\r\n layers = layers.concat(self.getChildrenLayers(layer));\r\n }\r\n }\r\n }\r\n else {\r\n layers = self.wrap.getAllLayerNodes();\r\n }\r\n }\r\n\r\n var filter = this.patternFn(text);\r\n var re = new RegExp(filter, \"i\");\r\n\r\n var matches = layers.map(function (ly, ix) {\r\n delete ly.tcScore;\r\n\r\n ly.tcPosition = ix;\r\n\r\n self.wrap.normalizeLayerNode(ly);\r\n\r\n var title = ly.Title.trim();\r\n var res = re.exec(title);\r\n var titleIx = res ? res.index : -1;\r\n var abstractIx = -1;\r\n if (ly.Abstract) {\r\n var abs = ly.Abstract.trim();\r\n var res2 = re.exec(abs);\r\n abstractIx = res2 ? res2.index : -1;\r\n }\r\n\r\n if (res && title == res[0])\r\n ly.tcScore = 20;\r\n else if (titleIx == 0)\r\n ly.tcScore = 15;\r\n else if (titleIx > -1)\r\n ly.tcScore = 10;\r\n else if (abstractIx == 0)\r\n ly.tcScore = 5;\r\n else if (abstractIx > -1)\r\n ly.tcScore = 1;\r\n\r\n if (ly.tcScore)\r\n return ly;\r\n else\r\n return null;\r\n })\r\n .filter(function (elto) {\r\n return elto != null;\r\n })\r\n .sort(function (a, b) {\r\n if (b.tcScore === a.tcScore) {\r\n //si la puntuación es la misma reordenamos por título\r\n var titleA = TC.Util.replaceSpecialCharacters(a.Title);\r\n var titleB = TC.Util.replaceSpecialCharacters(b.Title);\r\n if (titleA < titleB) return -1;\r\n if (titleA > titleB) return 1;\r\n return 0;\r\n }\r\n else\r\n return b.tcScore - a.tcScore;\r\n });\r\n\r\n this.lastPattern = text;\r\n this.lastMatches = matches;\r\n\r\n return matches;\r\n }\r\n else {\r\n return [];\r\n }\r\n\r\n };\r\n \r\n\r\n layerProto.getGetCapabilitiesUrl = function () {\r\n const self = this;\r\n var url;\r\n const serviceUrl = self.url;\r\n const params = {};\r\n if (self.type === TC.Consts.layerType.WMTS) {\r\n if (self.options.encoding === TC.Consts.WMTSEncoding.RESTFUL) {\r\n var suffix = '/1.0.0/WMTSCapabilities.xml';\r\n const suffixIdx = serviceUrl.indexOf(suffix);\r\n if (suffixIdx < 0 || suffixIdx < serviceUrl.length - suffix.length) {\r\n if (serviceUrl[serviceUrl.length - 1] === '/') {\r\n suffix = suffix.substr(1);\r\n }\r\n url = serviceUrl + suffix;\r\n }\r\n else {\r\n url = serviceUrl;\r\n }\r\n }\r\n else {\r\n url = serviceUrl;\r\n params.SERVICE = 'WMTS';\r\n params.VERSION = '1.0.0';\r\n params.REQUEST = 'GetCapabilities';\r\n }\r\n }\r\n else {\r\n url = serviceUrl;\r\n params.SERVICE = 'WMS';\r\n params.VERSION = '1.3.0';\r\n params.REQUEST = 'GetCapabilities';\r\n }\r\n url = url + '?' + TC.Util.getParamString(TC.Util.extend(params, self.queryParams));\r\n return url;\r\n };\r\n\r\n layerProto.getPreferredInfoFormat = function () {\r\n const layer = this;\r\n var result = null;\r\n\r\n const infoFormats = layer.wrap.getInfoFormats();\r\n if (infoFormats) {\r\n for (var i = 0; i < TC.wrap.layer.Raster.infoFormatPreference.length; i++) {\r\n var format = TC.wrap.layer.Raster.infoFormatPreference[i];\r\n if (infoFormats.indexOf(format) >= 0) {\r\n result = format;\r\n break;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * Carga la imagen de leyenda de una capa por POST.\r\n */\r\n layerProto.getLegendGraphicImage = function () {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n //Si ya hemos hecho esta consulta previamente, retornamos la respuesta\r\n if (self.options.params.base64LegendSrc) {\r\n return resolve(self.options.params.base64LegendSrc);\r\n }\r\n\r\n if (typeof window.btoa === 'function') {\r\n var name = self.names[0];\r\n var info = self.wrap.getInfo(name);\r\n var xhr = new XMLHttpRequest();\r\n var url = info.legend[0].src.split('?'); // Separamos los parámetros de la raíz de la URL\r\n var dataEntries = url[1].split(\"&\"); // Separamos clave/valor de cada parámetro\r\n var params = self.options.params.sld_body ? \"sld_body=\" + self.options.params.sld_body : '';\r\n\r\n for (var i = 0; i < dataEntries.length; i++) {\r\n var chunks = dataEntries[i].split('=');\r\n\r\n if (chunks && chunks.length > 1 && chunks[1]) {\r\n params += \"&\" + dataEntries[i];\r\n }\r\n }\r\n if (self.options.params.env) {\r\n params += \"&\" + self.options.params.env;\r\n }\r\n\r\n xhr.open('POST', url[0], true);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function (_e) {\r\n if (this.status === 200) {\r\n var uInt8Array = new Uint8Array(this.response);\r\n var i = uInt8Array.length;\r\n var binaryString = new Array(i);\r\n while (i--) {\r\n binaryString[i] = String.fromCharCode(uInt8Array[i]);\r\n }\r\n var data = binaryString.join('');\r\n var type = xhr.getResponseHeader('content-type');\r\n if (type.indexOf('image') === 0) {\r\n var imageSrc;\r\n imageSrc = 'data:' + type + ';base64,' + window.btoa(data);\r\n self.options.params.base64LegendSrc = imageSrc; //Cacheamos la respuesta\r\n resolve(imageSrc);\r\n }\r\n }\r\n };\r\n xhr.send(params);\r\n } else {\r\n reject(Error(\"Función window.btoa no soportada por el navegador\"));\r\n }\r\n });\r\n };\r\n\r\n layerProto.getUrl = function (src) {\r\n return src;\r\n };\r\n\r\n // GLS: Según MDN: https://developer.mozilla.org/es/docs/Web/API/WebGL_API/Tutorial/Wtilizando_texturas_en_WebGL\r\n // Note: Es importante señalar que la carga de texturas en WebGL sigue reglas de dominio-cruzado; \r\n // Es decir, sólo puede cargar texturas de sitios para los que su contenido tiene aprobación de CORS.\r\n\r\n // Usamos el mismo método que para el capabilities ya que la carga de texturas es igual de restrictiva.\r\n layerProto.getWebGLUrl = function (src, _location) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n\r\n var _src = !TC.Util.isSecureURL(src) && TC.Util.isSecureURL(TC.Util.toAbsolutePath(self.url)) ? self.getBySSL_(src) : src;\r\n\r\n if (self.ignoreProxification) {\r\n resolve(_src);\r\n } else {\r\n const options = {\r\n exportable: true,\r\n ignoreProxification: self.ignoreProxification\r\n };\r\n\r\n self.toolProxification.fetchImage(_src, options).then(function () {\r\n let action = self.toolProxification.cacheHost.getAction(_src, options);\r\n if (action) {\r\n action.then(function (cache) {\r\n if (cache && cache.action) {\r\n resolve(cache.action.call(self.toolProxification, _src));\r\n }\r\n });\r\n } else {\r\n reject('No action to ' + _src);\r\n }\r\n }).catch(function (e) {\r\n reject(e);\r\n });\r\n }\r\n\r\n //// IGN francés tiene cabeceras CORS menos en las excepciones que las devuelve en XML así que si da error cargamos imagen en blanco sin hacer más\r\n //if (self.ignoreProxification) {\r\n // setSRC({ src: TC.Consts.BLANK_IMAGE });\r\n // return;\r\n //}\r\n\r\n //return self.capabilitiesUrl_.call(self, !TC.Util.isSecureURL(url) && TC.Util.isSecureURL(TC.Util.toAbsolutePath(self.url)) ? self.getBySSL_(url) : url); \r\n });\r\n };\r\n\r\n layerProto.getFeatureUrl = function (url) {\r\n var self = this;\r\n\r\n return self.toolProxification.fetch(url).then(function () {\r\n return self.toolProxification.cacheHost.getAction(url)\r\n .then(function (cache) {\r\n return cache.action.call(self.toolProxification, url);\r\n })\r\n .catch(function (error) {\r\n return Promise.reject(error);\r\n });\r\n }).catch(function (error) {\r\n return Promise.reject(error);\r\n });\r\n };\r\n\r\n // GLS:\r\n // Busca en capas cargadas la 1º capa que tenga la misma instancia de capabilities. \r\n // Recibe una función como parámetro opcional, la cual es invocada para añadir más condiciones en la búsqueda de una capa hermana.\r\n layerProto.getSiblingLoadedLayer = function (dynamicStatement) {\r\n var self = this;\r\n\r\n if (!self.map) {\r\n return null;\r\n } else {\r\n var layers = self.map.baseLayers.slice(0).concat(self.map.workLayers.slice(0));\r\n\r\n const matchingLayer = layers.filter(function (elem) {\r\n return (elem.type === TC.Consts.layerType.WMS ||\r\n elem.type === TC.Consts.layerType.WMTS) &&\r\n (elem.capabilities === self.capabilities || elem.url === self.url) &&\r\n (TC.Util.isFunction(dynamicStatement) ? dynamicStatement(elem) : true);\r\n })[0];\r\n\r\n return matchingLayer || null;\r\n }\r\n };\r\n\r\n layerProto.getImageLoad = function (image, src, _location) {\r\n const self = this;\r\n\r\n const setSRC = function (data) {\r\n const img = image.getImage();\r\n\r\n if (!TC.Util.isSameOrigin(data.src)) {\r\n if (!self.map || self.map.crossOrigin) {\r\n img.crossOrigin = data.crossOrigin !== null ?\r\n data.crossOrigin :\r\n self.map ? self.map.crossOrigin : \"anonymous\";\r\n }\r\n }\r\n\r\n // GLS: si establecemos por atributo directamente no actualiza, mediante setAttribute funciona siempre.\r\n img.setAttribute(\"src\", data.src);\r\n img.onload = function () {\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOAD, { tile: image });\r\n };\r\n img.onerror = function (error) {\r\n img.setAttribute(\"src\", TC.Consts.BLANK_IMAGE);\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n };\r\n };\r\n\r\n // Viene sin nombre desde el control TOC, si es así lo ignoramos.\r\n if (self.names && self.names.length > 0) {\r\n\r\n const errorFn = function (error) {\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n setSRC({ src: TC.Consts.BLANK_IMAGE });\r\n };\r\n\r\n // comprobamos z/x/y contra el matrixset del capabilities para evitar peticiones 404\r\n if (self.type === TC.Consts.layerType.WMTS) {\r\n var z, x, y;\r\n if (self.encoding !== \"KVP\") {\r\n var _src = src.replace('.' + self.format.split('/')[1], '');\r\n const parts = _src.split('/').slice(_src.split('/').length - 3).map(function (elm) { return parseInt(elm); });\r\n z = parts[0];\r\n x = parts[1];\r\n y = parts[2];\r\n } else {\r\n let parts = /.*TileMatrix=(\\d*)&TileCol=(\\d*)&TileRow=(\\d*)/i.exec(src);\r\n if (parts && parts.length === 4) {\r\n parts = parts.slice(1).map(function (elm) { return parseInt(elm); });\r\n z = parts[0];\r\n x = parts[2];\r\n y = parts[1];\r\n }\r\n }\r\n\r\n if (z && x && y) {\r\n var wmtsOptions = self.wrap.getWMTSLayer();\r\n if (wmtsOptions) {\r\n const matrixSet = wmtsOptions.TileMatrixSetLink.find(elm => elm.TileMatrixSet === self.matrixSet);\r\n if (matrixSet) {\r\n\r\n if (matrixSet.TileMatrixSetLimits && matrixSet.TileMatrixSetLimits.length > 0) {\r\n var matrixSetLimits = matrixSet.TileMatrixSetLimits.sort(function (a, b) {\r\n if (parseInt(a.TileMatrix) > parseInt(b.TileMatrix))\r\n return 1;\r\n else if (parseInt(a.TileMatrix) < parseInt(b.TileMatrix))\r\n return -1;\r\n else return 0;\r\n });\r\n\r\n var level = matrixSetLimits[z];\r\n if (level && self.map && self.map.on3DView) {\r\n if (!(level.MinTileRow <= x && level.MaxTileRow >= x && level.MinTileCol <= y && level.MaxTileCol >= y)) {\r\n console.log('Prevenimos petición fuera de matrix set, cargamos imagen en blanco');\r\n setSRC({ src: TC.Consts.BLANK_IMAGE });\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _get$events.call(self).trigger(TC.Consts.event.BEFORETILELOAD, { tile: image });\r\n\r\n var params = \"\";\r\n var isPOST = self.options.method === \"POST\";\r\n if (isPOST) {\r\n var url = src.split('?');\r\n params = url[1].split(\"&\").filter(function (param) {\r\n const values = param.split('=');\r\n // eliminamos los valores en blanco y el parámetro layers\r\n return values.length > 1 && values[1].trim().length > 0 && values[0].trim().toLowerCase() !== \"layers\";\r\n }).join('&');\r\n\r\n self.toolProxification.fetchImageAsBlob(url[0], {\r\n type: \"POST\",\r\n data: params,\r\n contentType: \"application/x-www-form-urlencoded\"\r\n }).then(function (blob) {\r\n const imageUrl = URL.createObjectURL(blob);\r\n const img = image.getImage();\r\n img.onload = function (_e) {\r\n URL.revokeObjectURL(imageUrl);\r\n };\r\n setSRC({ src: imageUrl });\r\n }).catch(errorFn);\r\n\r\n } else {\r\n if (!self.ignoreProxification) {\r\n self.toolProxification.fetchImage(src, { exportable: !self.map || self.map.crossOrigin }).then(function (img) {\r\n setSRC(img);\r\n }).catch(errorFn);\r\n } else {\r\n setSRC({ src: src });\r\n var img = image.getImage();\r\n\r\n if (!TC.Util.isSameOrigin(src)) {\r\n if (!self.map || self.map.crossOrigin) {\r\n img.crossOrigin = self.map ? self.map.crossOrigin : \"anonymous\";\r\n }\r\n }\r\n\r\n img.onload = function () {\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOAD, { tile: image });\r\n };\r\n img.onerror = function (error) {\r\n img.src = TC.Consts.BLANK_IMAGE;\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOADERROR, { tile: image, error: { code: error.status, text: error.statusText } });\r\n };\r\n\r\n img.src = self.names.length ? src : TC.Consts.BLANK_IMAGE;\r\n }\r\n }\r\n } else {\r\n setSRC({ src: TC.Consts.BLANK_IMAGE });\r\n // lanzamos el evento para gestionar el loading\r\n _get$events.call(self).trigger(TC.Consts.event.TILELOAD, { tile: image });\r\n }\r\n };\r\n\r\n var _get$events = function () {\r\n const self = this;\r\n if (self.wrap && self.wrap.$events) {\r\n return self.wrap.$events;\r\n }\r\n return null;\r\n };\r\n layerProto.getWFSURL = async function () {\r\n const self = this;\r\n if (_urlWFS[self.options.url]) return await _urlWFS[self.options.url];\r\n var url = new URL(self.url, document.location.href);\r\n url.search = new URLSearchParams({ request: 'DescribeLayer', service: \"WMS\", version: \"1.1.1\", Layers: self.layerNames instanceof Array ? self.layerNames[0] : self.layerNames, outputFormat: \"application/json\" });\r\n return _urlWFS[self.options.url] = new Promise(async function (resolve, _reject) {\r\n try {\r\n var response = await self.toolProxification.fetch(url.toString(), {\r\n method: \"GET\"\r\n\r\n });\r\n if (response.contentType.startsWith(\"application/json\")) {\r\n var data = JSON.parse(response.responseText).layerDescriptions[0];\r\n if (data.owsType !== \"WFS\") {\r\n resolve(self.options.url.replace(/wms/gi, \"wfs\"));\r\n return;\r\n }\r\n var _url = data.owsURL.substr(0, data.owsURL.length + (data.owsURL.endsWith('?') ? -1 : 0));\r\n self.toolProxification.fetch(_url, {\r\n method: \"HEAD\"\r\n\r\n }).then(function () {\r\n resolve(_url);\r\n }).catch(function () {\r\n resolve(self.options.url.replace(/wms/gi, \"wfs\"));\r\n });\r\n }\r\n else {\r\n let xmlDoc = new DOMParser().parseFromString(response.responseText, \"text/xml\");\r\n let error = xmlDoc.querySelector(\"Exception ExceptionText\") || xmlDoc.querySelector(\"ServiceException\");\r\n if (error) {\r\n resolve(self.options.url.replace(/wms/gi, \"wfs\"));\r\n } else {\r\n const layerDescription = xmlDoc.querySelector(\"LayerDescription\"); \r\n resolve(layerDescription ? layerDescription.getAttribute(\"wfs\") ||\r\n layerDescription.getAttribute(\"owsURL\") ||\r\n self.options.url.replace(/wms/gi, \"wfs\") :\r\n self.options.url.replace(/wms/gi, \"wfs\"));\r\n }\r\n }\r\n }\r\n catch (err) {\r\n resolve(self.options.url.replace(/wms/gi, \"wfs\"));\r\n }\r\n });\r\n };\r\n\r\n\r\n layerProto.getWFSCapabilities = async function () {\r\n const self = this; \r\n return getWFSLayer(await self.getWFSURL()).then(function (layer) {\r\n return layer.getCapabilitiesPromise();\r\n });\r\n };\r\n\r\n layerProto.getDescribeFeatureTypeUrl = async function () {\r\n const self = this;\r\n const newUrl = await self.getWFSURL();\r\n\r\n if (!wfsLayer || wfsLayer.options.url !== newUrl) {\r\n wfsLayer = new TC.layer.Vector({\r\n type: TC.Consts.layerType.WFS,\r\n url: newUrl,\r\n stealth: true\r\n });\r\n }\r\n return wfsLayer.getDescribeFeatureTypeUrl(self.options.featureType);\r\n };\r\n\r\n layerProto.getFallbackLayer = function () {\r\n const self = this;\r\n if (self.fallbackLayer instanceof TC.Layer) {\r\n return self.fallbackLayer;\r\n }\r\n if (self.options.fallbackLayer) {\r\n var fbLayer = self.options.fallbackLayer;\r\n if (typeof fbLayer === 'string') {\r\n const ablCollection = self.map ? self.map.options.availableBaseLayers : TC.Cfg.availableBaseLayers;\r\n ablCollection.forEach(function (baseLayer) {\r\n if (self.options.fallbackLayer === baseLayer.id) {\r\n self.fallbackLayer = new TC.layer.Raster(TC.Util.extend({}, baseLayer, { isBase: true, stealth: true, map: self.map }));\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n });\r\n }\r\n else if (fbLayer instanceof TC.Layer) {\r\n self.fallbackLayer = fbLayer;\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n else {\r\n self.fallbackLayer = new TC.layer.Raster(TC.Util.extend({}, fbLayer, {\r\n id: TC.getUID(),\r\n isBase: true,\r\n stealth: true,\r\n title: self.title,\r\n map: self.map\r\n }));\r\n self.fallbackLayer.firstOption = self;\r\n }\r\n return self.fallbackLayer;\r\n }\r\n return null;\r\n };\r\n layerProto.describeFeatureType = async function (layerName) {\r\n const self = this;\r\n const newUrl = await self.getWFSURL();\r\n\r\n return getWFSLayer(newUrl).then(function (layer) {\r\n return layer.describeFeatureType(layerName || self.layerNames[0]);\r\n });\r\n };\r\n\r\n layerProto.refresh = function () {\r\n return this.wrap.reloadSource();\r\n };\r\n\r\n})();\r\n\r\n//var esriParser = {\r\n// parse: function (text) {\r\n// var result = [];\r\n// var dom = (new DOMParser()).parseFromString(text, 'text/xml');\r\n// if (dom.documentElement.tagName === 'FeatureInfoResponse') {\r\n// var fiCollections = dom.documentElement.getElementsByTagName('FeatureInfoCollection');\r\n// for (var i = 0, len = fiCollections.length; i < len; i++) {\r\n// var fic = fiCollections[i];\r\n// var layerName = fic.getAttribute('layername');\r\n// var fInfos = fic.getElementsByTagName('FeatureInfo');\r\n// for (var j = 0, lenj = fInfos.length; j < lenj; j++) {\r\n// var fields = fInfos[j].getElementsByTagName('Field');\r\n// var attributes = {};\r\n// for (var k = 0, lenk = fields.length; k < lenk; k++) {\r\n// var field = fields[k];\r\n// attributes[getElementText(field.getElementsByTagName('FieldName')[0])] = getElementText(field.getElementsByTagName('FieldValue')[0]);\r\n// }\r\n// var feature = new ol.Feature(attributes);\r\n// feature.setId(layerName + '.' + TC.getUID());\r\n// result.push(feature);\r\n// }\r\n// }\r\n// }\r\n// return result;\r\n// }\r\n//};\r\n\r\nconst Raster = TC.layer.Raster;\r\nexport default Raster;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport EventTarget from './EventTarget';\r\nimport i18n from './i18n';\r\nimport Control from './Control';\r\nimport Raster from './layer/Raster';\r\nimport Vector from './layer/Vector';\r\nimport wrap from './ol/ol';\r\nimport Attribution from './control/Attribution';\r\nimport BasemapSelector from './control/BasemapSelector';\r\nimport CacheBuilder from './control/CacheBuilder';\r\nimport Click from './control/Click';\r\nimport Container from './control/Container';\r\nimport ControlContainer from './control/ControlContainer';\r\nimport Coordinates from './control/Coordinates';\r\nimport DataLoader from './control/DataLoader';\r\nimport Download from './control/Download';\r\nimport Draw from './control/Draw';\r\nimport DrawMeasureModify from './control/DrawMeasureModify';\r\nimport Edit from './control/Edit';\r\nimport Elevation from './control/Elevation';\r\nimport ExternalWMS from './control/ExternalWMS';\r\nimport FeatureDownloadDialog from './control/FeatureDownloadDialog';\r\nimport FeatureInfo from './control/FeatureInfo';\r\nimport FeatureInfoCommons from './control/FeatureInfoCommons';\r\nimport FeatureTools from './control/FeatureTools';\r\nimport FileImport from './control/FileImport';\r\nimport FullScreen from './control/FullScreen';\r\nimport Geolocation from './control/Geolocation';\r\nimport GeometryFeatureInfo from './control/GeometryFeatureInfo';\r\nimport infoShare from './control/infoShare';\r\nimport LayerCatalog from './control/LayerCatalog';\r\nimport Legend from './control/Legend';\r\nimport LineFeatureInfo from './control/LineFeatureInfo';\r\nimport ListTOC from './control/ListTOC';\r\nimport LoadingIndicator from './control/LoadingIndicator';\r\nimport MapContents from './control/MapContents';\r\nimport MapInfo from './control/MapInfo';\r\nimport Measure from './control/Measure';\r\nimport Modify from './control/Modify';\r\nimport MultiFeatureInfo from './control/MultiFeatureInfo';\r\nimport NavBar from './control/NavBar';\r\nimport NavBarHome from './control/NavBarHome';\r\nimport OfflineMapMaker from './control/OfflineMapMaker';\r\nimport OverviewMap from './control/OverviewMap';\r\nimport PolygonFeatureInfo from './control/PolygonFeatureInfo';\r\nimport Popup from './control/Popup';\r\nimport Print from './control/Print';\r\nimport PrintMap from './control/PrintMap';\r\nimport ProjectionSelector from './control/ProjectionSelector';\r\nimport ResultsPanel from './control/ResultsPanel';\r\nimport Scale from './control/Scale';\r\nimport ScaleBar from './control/ScaleBar';\r\nimport ScaleSelector from './control/ScaleSelector';\r\nimport Search from './control/Search';\r\nimport SelectContainer from './control/SelectContainer';\r\nimport Share from './control/Share';\r\nimport StreetView from './control/StreetView';\r\nimport SWCacheClient from './control/SWCacheClient';\r\nimport TabContainer from './control/TabContainer';\r\nimport ThreeD from './control/ThreeD';\r\nimport TOC from './control/TOC';\r\nimport WFSEdit from './control/WFSEdit';\r\nimport WFSQuery from './control/WFSQuery';\r\nimport WorkLayerManager from './control/WorkLayerManager';\r\nimport { JL } from 'jsnlog';\r\n\r\nTC.Consts = Consts;\r\nTC.EventTarget = EventTarget;\r\nTC.i18n = TC.i18n || i18n;\r\nTC.Control = Control;\r\nTC.wrap = wrap;\r\nTC.control = TC.control || {};\r\nTC.control.Attribution = Attribution;\r\nTC.control.BasemapSelector = BasemapSelector;\r\nTC.control.CacheBuilder = CacheBuilder;\r\nTC.control.Click = Click;\r\nTC.control.Container = Container;\r\nTC.control.ControlContainer = ControlContainer;\r\nTC.control.Coordinates = Coordinates;\r\nTC.control.DataLoader = DataLoader;\r\nTC.control.Download = Download;\r\nTC.control.Draw = Draw;\r\nTC.control.DrawMeasureModify = DrawMeasureModify;\r\nTC.control.Edit = Edit;\r\nTC.control.Elevation = Elevation;\r\nTC.control.ExternalWMS = ExternalWMS;\r\nTC.control.FeatureDownloadDialog = FeatureDownloadDialog;\r\nTC.control.FeatureInfo = FeatureInfo;\r\nTC.control.FeatureInfoCommons = FeatureInfoCommons;\r\nTC.control.FeatureTools = FeatureTools;\r\nTC.control.FileImport = FileImport;\r\nTC.control.FullScreen = FullScreen;\r\nTC.control.Geolocation = Geolocation;\r\nTC.control.GeometryFeatureInfo = GeometryFeatureInfo;\r\nTC.control.infoShare = infoShare;\r\nTC.control.LayerCatalog = LayerCatalog;\r\nTC.control.Legend = Legend;\r\nTC.control.LineFeatureInfo = LineFeatureInfo;\r\nTC.control.ListTOC = ListTOC;\r\nTC.control.LoadingIndicator = LoadingIndicator;\r\nTC.control.MapContents = MapContents;\r\nTC.control.MapInfo = MapInfo;\r\nTC.control.Measure = Measure;\r\nTC.control.Modify = Modify;\r\nTC.control.MultiFeatureInfo = MultiFeatureInfo;\r\nTC.control.NavBar = NavBar;\r\nTC.control.NavBarHome = NavBarHome;\r\nTC.control.OfflineMapMaker = OfflineMapMaker;\r\nTC.control.OverviewMap = OverviewMap;\r\nTC.control.PolygonFeatureInfo = PolygonFeatureInfo;\r\nTC.control.Popup = Popup;\r\nTC.control.Print = Print;\r\nTC.control.PrintMap = PrintMap;\r\nTC.control.ProjectionSelector = ProjectionSelector;\r\nTC.control.ResultsPanel = ResultsPanel;\r\nTC.control.Scale = Scale;\r\nTC.control.ScaleBar = ScaleBar;\r\nTC.control.ScaleSelector = ScaleSelector;\r\nTC.control.Search = Search;\r\nTC.control.SelectContainer = SelectContainer;\r\nTC.control.Share = Share;\r\nTC.control.StreetView = StreetView;\r\nTC.control.SWCacheClient = SWCacheClient;\r\nTC.control.TabContainer = TabContainer;\r\nTC.control.ThreeD = ThreeD;\r\nTC.control.TOC = TOC;\r\nTC.control.WFSEdit = WFSEdit;\r\nTC.control.WFSQuery = WFSQuery;\r\nTC.control.WorkLayerManager = WorkLayerManager;\r\nTC.layer = TC.layer || {};\r\nTC.layer.Raster = Raster;\r\nTC.layer.Vector = Vector;\r\n\r\nTC.inherit = function (childCtor, parentCtor) {\r\n childCtor.prototype = Object.create(parentCtor.prototype);\r\n childCtor.prototype.constructor = childCtor;\r\n childCtor._super = parentCtor.prototype;\r\n};\r\n\r\nTC.mix = function (targetCtor, ...mixins) {\r\n Object.assign(targetCtor.prototype, ...mixins);\r\n};\r\n\r\n(function () {\r\n\r\n // Polyfill de CustomEvent\r\n /*! (c) Andrea Giammarchi - ISC */\r\n var self = this || /* istanbul ignore next */ {};\r\n self.CustomEvent = typeof CustomEvent === 'function' ?\r\n CustomEvent :\r\n (function (__p__) {\r\n CustomEvent[__p__] = new CustomEvent('').constructor[__p__];\r\n return CustomEvent;\r\n function CustomEvent(type, init) {\r\n if (!init) init = {};\r\n var e = document.createEvent('CustomEvent');\r\n e.initCustomEvent(type, !!init.bubbles, !!init.cancelable, init.detail);\r\n return e;\r\n }\r\n }('prototype'));\r\n\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.matchesSelector ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n\r\n /**\r\n *

Objeto principal de la API, instancia un mapa dentro de un elemento del DOM. Nótese que el constructor es asíncrono, por tanto cualquier código que haga uso de este objeto debería\r\n * estar dentro de una función de callback pasada como parámetro al método {{#crossLink \"TC.Map/loaded:method\"}}{{/crossLink}}.

\r\n *

Puede consultar también online el ejemplo 1, el ejemplo 2 y el ejemplo 3.

\r\n * @class TC.Map\r\n * @constructor\r\n * @async\r\n * @param {HTMLElement|string} div Elemento del DOM en el que crear el mapa o valor de atributo id de dicho elemento.\r\n * @param {object} [options] Objeto de opciones de configuración del mapa. Sus propiedades sobreescriben el objeto de configuración global {{#crossLink \"TC.Cfg\"}}{{/crossLink}}.\r\n * @param {string} [options.crs=\"EPSG:25830\"] Código EPSG del sistema de referencia espacial del mapa.\r\n * @param {array} [options.initialExtent] Extensión inicial del mapa definida por x mínima, y mínima, x máxima, y máxima. \r\n * Esta opción es obligatoria si el sistema de referencia espacial del mapa es distinto del sistema por defecto (ver TC.Cfg.{{#crossLink \"TC.Cfg/crs:property\"}}{{/crossLink}}).\r\n * Para más información consultar TC.Cfg.{{#crossLink \"TC.Cfg/initialExtent:property\"}}{{/crossLink}}.\r\n * @param {array} [options.maxExtent] Extensión máxima del mapa definida por x mínima, y mínima, x máxima, y máxima. Para más información consultar TC.Cfg.{{#crossLink \"TC.Cfg/maxExtent:property\"}}{{/crossLink}}.\r\n * @param {string} [options.layout] URL de una carpeta de maquetación. Consultar TC.Cfg.{{#crossLink \"TC.Cfg/layout:property\"}}{{/crossLink}} para ver instrucciones de uso de maquetaciones.\r\n * @param {array} [options.baseLayers] Lista de identificadores de capa o instancias de la clase {{#crossLink \"TC.cfg.LayerOptions\"}}{{/crossLink}} para incluir dichas capas como mapas de fondo. \r\n * @param {array} [options.workLayers] Lista de identificadores de capa o instancias de la clase {{#crossLink \"TC.cfg.LayerOptions\"}}{{/crossLink}} para incluir dichas capas como contenido del mapa. \r\n * @param {TC.cfg.MapControlOptions} [options.controls] Opciones de controles de mapa.\r\n * @param {TC.cfg.StyleOptions} [options.styles] Opciones de estilo de entidades geográficas.\r\n * @param {string} [options.locale=\"es-ES\"] Código de idioma de la interfaz de usuario. Este código debe ser obedecer la sintaxis definida por la IETF.\r\n * Los valores posibles son es-ES, eu-ES y en-US.\r\n * @param {string} [options.proxy] URL del proxy utilizado para peticiones a dominios remotos (ver TC.Cfg.{{#crossLink \"TC.Cfg/proxy:property\"}}{{/crossLink}}).\r\n * @example\r\n *
\r\n * \r\n * @example\r\n *
\r\n * \r\n * @example\r\n *
\r\n * \r\n */\r\n\r\n var currentState = null;\r\n var previousState = null;\r\n const _setupStateControl = function () {\r\n const self = this;\r\n\r\n var MIN_TIMEOUT_VALUE = 4;\r\n\r\n // eventos a los que estamos suscritos para obtener el estado \r\n var events = [\r\n TC.Consts.event.LAYERADD,\r\n TC.Consts.event.LAYERORDER,\r\n TC.Consts.event.LAYERREMOVE,\r\n //TC.Consts.event.LAYEROPACITY, // Este evento lo vamos a tratar por separado, para evitar exceso de actualizaciones de estado.\r\n TC.Consts.event.LAYERVISIBILITY,\r\n TC.Consts.event.ZOOM,\r\n TC.Consts.event.BASELAYERCHANGE,\r\n TC.Consts.event.UPDATEPARAMS\r\n ].join(' ');\r\n\r\n // gestión siguiente - anterior\r\n\r\n let eventsToMapChange = [\r\n TC.Consts.event.LAYERUPDATE,\r\n TC.Consts.event.FEATUREADD,\r\n TC.Consts.event.FEATUREREMOVE,\r\n TC.Consts.event.FEATUREMODIFY,\r\n TC.Consts.event.FEATURESADD,\r\n TC.Consts.event.FEATURESCLEAR,\r\n TC.Consts.event.UPDATEPARAMS\r\n ].join(' ');\r\n\r\n self.on(eventsToMapChange, () => self.trigger(TC.Consts.event.MAPCHANGE));\r\n\r\n // registramos el estado inicial \r\n self.replaceCurrent = true;\r\n _addToHistory.call(self);\r\n\r\n const fn_addToHistory = _addToHistory.bind(self);\r\n\r\n // nos suscribimos a los eventos para registrar el estado en cada uno de ellos\r\n self.on(events, fn_addToHistory);\r\n\r\n // a la gestión del evento de opacidad le metemos un retardo, para evitar que haya un exceso de actualizaciones de estado.\r\n var layerOpacityHandlerTimeout;\r\n self.on(TC.Consts.event.LAYEROPACITY, function (e) {\r\n clearTimeout(layerOpacityHandlerTimeout);\r\n layerOpacityHandlerTimeout = setTimeout(function () {\r\n _addToHistory.call(self, e);\r\n }, 500);\r\n });\r\n\r\n // gestión siguiente - anterior\r\n window.addEventListener('popstate', function (e) {\r\n var wait;\r\n wait = self.loadingCtrl && self.loadingCtrl.addWait();\r\n setTimeout(async function () {\r\n if (e) {\r\n // eliminamos la suscripción para no registrar el cambio de estado que vamos a provocar\r\n self.off(events, fn_addToHistory);\r\n\r\n var state = e.state;\r\n if (Object.prototype.toString.call(state) === '[object Object]') {\r\n state = await self.checkLocation();\r\n }\r\n\r\n // gestionamos la actualización para volver a suscribirnos a los eventos del mapa \r\n _loadIntoMap.call(self, state).then(function () {\r\n setTimeout(function () {\r\n self.on(events, fn_addToHistory);\r\n }, 200);\r\n self.loadingCtrl && self.loadingCtrl.removeWait(wait);\r\n });\r\n }\r\n }, MIN_TIMEOUT_VALUE);\r\n });\r\n };\r\n\r\n let jsonPackWorkerUrlPromise;\r\n const jsonPackSettleFunctions = {};\r\n const getJsonPackWorker = async function () {\r\n if (!jsonPackWorkerUrlPromise) {\r\n jsonPackWorkerUrlPromise = TC.Util.getWebWorkerCrossOriginURL(TC.apiLocation + 'TC/workers/tc-jsonpack-web-worker.js');\r\n }\r\n const jsonPackWorkerUrl = await jsonPackWorkerUrlPromise;\r\n const jsonPackWorker = new Worker(jsonPackWorkerUrl);\r\n jsonPackWorker.onmessage = function (e) {\r\n const settleFunctions = jsonPackSettleFunctions[e.data.id];\r\n if (settleFunctions) {\r\n if (e.data.error) {\r\n settleFunctions.reject(e.data.error);\r\n }\r\n else {\r\n settleFunctions.resolve(e.data.result);\r\n }\r\n jsonPackWorker.terminate();\r\n delete jsonPackSettleFunctions[e.data.id];\r\n }\r\n };\r\n return jsonPackWorker;\r\n };\r\n\r\n const jsonpackProcess = function (action, json) {\r\n return new Promise(function (resolve, reject) {\r\n getJsonPackWorker().then(function (worker) {\r\n const workId = TC.getUID();\r\n jsonPackSettleFunctions[workId] = { resolve: resolve, reject: reject };\r\n worker.postMessage({\r\n id: workId,\r\n action: action,\r\n object: json\r\n });\r\n });\r\n });\r\n };\r\n\r\n const supportsFileSystemAccess = TC.Util.isFunction(DataTransferItem.prototype.getAsFileSystemHandle);\r\n\r\n const _addToHistory = async function (e) {\r\n const self = this;\r\n\r\n var state = await _getMapState.call(self);\r\n if (self.replaceCurrent) {\r\n window.history.replaceState(state, null, null);\r\n delete self.replaceCurrent;\r\n\r\n return;\r\n } else {\r\n\r\n /*if (self.registerState != undefined && !self.registerState) {\r\n self.registerState = true;\r\n return;\r\n }*/\r\n\r\n var saveState = function () {\r\n previousState = currentState;\r\n currentState = TC.Util.utf8ToBase64(state);\r\n if (currentState !== previousState) {\r\n window.history.pushState(state, null, window.location.href.split('#').shift() + '#' + currentState);\r\n }\r\n };\r\n\r\n if (e) {\r\n self.lastEventType = e.type;\r\n\r\n switch (true) {\r\n case e.type === TC.Consts.event.BASELAYERCHANGE:\r\n case e.type === TC.Consts.event.LAYERORDER:\r\n case e.type === TC.Consts.event.ZOOM:\r\n saveState();\r\n break;\r\n case e.type === TC.Consts.event.UPDATEPARAMS:\r\n // unicamente modifico el hash si la capa es WMS\r\n if (e.layer.type === TC.Consts.layerType.WMS) {\r\n saveState();\r\n }\r\n break;\r\n case e.type.toLowerCase().indexOf(\"LAYER\".toLowerCase()) > -1:\r\n // unicamente modifico el hash si la capa es WMS o vectorial de archivos locales\r\n if (e.layer.type === TC.Consts.layerType.WMS ||\r\n supportsFileSystemAccess && e.layer.type === TC.Consts.layerType.VECTOR && e.layer.options.file) {\r\n saveState();\r\n }\r\n break;\r\n }\r\n\r\n self.trigger(TC.Consts.event.MAPCHANGE);\r\n }\r\n }\r\n };\r\n\r\n const _getMapState = function (options) {\r\n const self = this;\r\n options = options || {};\r\n return new Promise(function (resolve, reject) {\r\n var state = {};\r\n\r\n if (self.crs !== self.options.crs) {\r\n state.crs = self.crs;\r\n }\r\n\r\n var ext = self.getExtent();\r\n for (var i = 0; i < ext.length; i++) {\r\n if (Math.abs(ext[i]) > 180)\r\n ext[i] = Math.floor(ext[i] * 1000) / 1000;\r\n }\r\n state.ext = ext;\r\n\r\n //determinar capa base\r\n var baseLayerData = [];\r\n\r\n // ¿es una capa de respaldo?\r\n if (self.baseLayers) {\r\n baseLayerData = self.baseLayers.filter(function (baseLayer) {\r\n return baseLayer.isRaster() && baseLayer.fallbackLayer;\r\n }).map(function (baseLayer) {\r\n return {\r\n baseLayer: baseLayer, fallbackLayerID: baseLayer.fallbackLayer.id\r\n };\r\n }).filter(function (baseLayerData) {\r\n return baseLayerData.fallbackLayerID === (self.baseLayer ? self.baseLayer.id : self.baseLayers[0].id);\r\n });\r\n }\r\n\r\n if (baseLayerData.length > 0) {\r\n state.base = baseLayerData[0].baseLayer.id;\r\n } else if (self.baseLayer || self.baseLayers && self.baseLayers[0]) {\r\n state.base = (self.baseLayer || self.baseLayers[0]).id;\r\n }\r\n\r\n //capas cargadas\r\n state.layers = [];\r\n\r\n self.workLayers.forEach(function addLayerState(layer) {\r\n if (layer.type === TC.Consts.layerType.WMS && !layer.options.stateless) {\r\n layer.layerNames = layer.names || layer.layerNames;\r\n if (layer.layerNames && layer.layerNames.length || layer.hideTree === false) {\r\n const entry = {\r\n u: TC.Util.isOnCapabilities(layer.url),\r\n n: Array.isArray(layer.names) ? layer.names.join(',') : layer.names,\r\n o: layer.getOpacity(),\r\n v: layer.getVisibility(),\r\n h: layer.options.hideTitle,\r\n ur: layer.unremovable,\r\n f: layer.filter && (layer.filter instanceof TC.filter.Filter ? layer.filter.getText() : layer.filter),\r\n t: layer.title,\r\n i: layer.id\r\n };\r\n //24/11/2021 URI: Añadir el hidetree si no tiene el valor por defecto que es true\r\n if (layer.hideTree === false) {\r\n entry.x = 0;\r\n }\r\n\r\n state.layers.push(entry);\r\n }\r\n }\r\n else if (supportsFileSystemAccess && layer.type === TC.Consts.layerType.VECTOR && layer.options.file) {\r\n const entry = {\r\n o: layer.getOpacity(),\r\n v: layer.getVisibility(),\r\n h: layer.options.hideTitle,\r\n ur: layer.unremovable,\r\n fn: layer.options.file,\r\n t: layer.title,\r\n i: layer.id\r\n };\r\n state.layers.push(entry);\r\n }\r\n });\r\n\r\n if (self.on3DView && self.view3D.cameraControls) {\r\n state.vw3 = self.view3D.cameraControls.getCameraState();\r\n }\r\n\r\n if (options.extraStates) {\r\n TC.Util.extend(state, options.extraStates);\r\n }\r\n\r\n if (!options.cacheResult && self._controlStatesCache) {\r\n delete self._controlStatesCache;\r\n }\r\n if (self._controlStatesCache) {\r\n resolve(self._controlStatesCache);\r\n }\r\n else {\r\n jsonpackProcess('pack', state)\r\n .then(packed => {\r\n if (options.cacheResult) {\r\n self._controlStatesCache = packed;\r\n }\r\n resolve(packed);\r\n })\r\n .catch(error => reject(error));\r\n }\r\n });\r\n };\r\n\r\n const _loadIntoMap = function (stringOrJson) {\r\n const self = this;\r\n const promises = [];\r\n\r\n if (!stringOrJson) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (!self.loadingctrl) {\r\n self.loadingCtrl = self.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n }\r\n\r\n if (!self.hasWait) {\r\n self.hasWait = self.loadingCtrl && self.loadingCtrl.addWait();\r\n }\r\n\r\n // GLS lo añado para poder gestionar el final de la actualización de estado y volver a suscribirme a los eventos del mapa\r\n return new Promise(function (resolve, _reject) {\r\n var resolved = function () {\r\n self.loadingCtrl && self.loadingCtrl.removeWait(self.hasWait);\r\n delete self.hasWait;\r\n resolve();\r\n };\r\n\r\n let objPromise;\r\n if (typeof stringOrJson === \"string\") {\r\n objPromise = new Promise(function (res, rej) {\r\n jsonpackProcess('unpack', stringOrJson)\r\n .then(obj => res(obj))\r\n .catch(_err => res(JSON.parse(stringOrJson)))\r\n .catch(err => {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'));\r\n rej(err);\r\n });\r\n });\r\n } else {\r\n objPromise = Promise.resolve(stringOrJson);\r\n }\r\n\r\n objPromise.then(function (obj) {\r\n // CRS\r\n if (obj.crs && obj.crs !== self.crs ||\r\n typeof obj.crs === 'undefined' && self.crs !== self.options.crs) {\r\n promises.push(self.setProjection({\r\n crs: obj.crs || self.options.crs,\r\n oldCrs: self.crs,\r\n extent: obj.ext,\r\n baseLayer: self.getLayer(obj.base)\r\n }));\r\n }\r\n else {\r\n //capa base\r\n if (obj.base != self.getBaseLayer().id) {\r\n if (self.getLayer(obj.base)) {\r\n self.setBaseLayer(obj.base);\r\n }\r\n const firstOption = self.baseLayers.filter(function (baseLayer) {\r\n return baseLayer.options.fallbackLayer === obj.base;\r\n })[0];\r\n if (firstOption) {\r\n const fbPromise = self.addLayer(firstOption.getFallbackLayer());\r\n promises.push(fbPromise);\r\n fbPromise.then(function (newLayer) {\r\n self.setBaseLayer(newLayer);\r\n });\r\n }\r\n }\r\n\r\n //extent\r\n if (obj.ext) {\r\n promises.push(self.setExtent(obj.ext, { animate: false }));\r\n }\r\n }\r\n\r\n obj.layers = obj.layers || obj.capas || [];\r\n\r\n if (obj.layers.length > 0) {\r\n\r\n for (var i = 0; i < obj.layers.length; i++) {\r\n var stateLayer = obj.layers[i];\r\n\r\n var layerInConfig = false;\r\n let lyrCfg;\r\n for (var j = 0; j < self.options.workLayers.length; j++) {\r\n\r\n lyrCfg = TC.Util.extend({}, self.options.workLayers[j], { map: self });\r\n\r\n if (stateLayer.u === lyrCfg.url &&\r\n (!lyrCfg.layerNames ||\r\n lyrCfg.layerNames.length ||\r\n lyrCfg.layerNames.indexOf(stateLayer.n) >= 0)) {\r\n layerInConfig = true;\r\n lyrCfg.renderOptions = { \"opacity\": stateLayer.o, \"hide\": !stateLayer.v };\r\n lyrCfg.unremovable = stateLayer.ur;\r\n lyrCfg.title = stateLayer.t;\r\n lyrCfg.hideTree = Object.prototype.hasOwnProperty.call(stateLayer, \"x\") ? !!stateLayer.x : true;\r\n if (stateLayer.n)\r\n lyrCfg.layerNames = stateLayer.n;\r\n promises.push(self.addOrUpdateLayer(lyrCfg).then(function (layer) {\r\n layer.setVisibility(this.v);\r\n layer.setOpacity(this.o, true);\r\n }.bind(stateLayer)));\r\n }\r\n }\r\n\r\n if (!layerInConfig) {\r\n const lyrCfg = {\r\n id: stateLayer.i || TC.getUID(),\r\n hideTitle: stateLayer.h,\r\n unremovable: stateLayer.ur,\r\n title: stateLayer.t,\r\n hideTree: Object.prototype.hasOwnProperty.call(stateLayer, \"x\") ? !!stateLayer.x : true,\r\n renderOptions: {\r\n opacity: stateLayer.o,\r\n hide: !stateLayer.v\r\n }\r\n };\r\n if (stateLayer.fn) {\r\n // Capa de archivo serializada\r\n lyrCfg.type = TC.Consts.layerType.VECTOR;\r\n lyrCfg.file = stateLayer.fn;\r\n }\r\n else {\r\n lyrCfg.url = TC.Util.isOnCapabilities(stateLayer.u, stateLayer.u.indexOf(window.location.protocol) < 0) || stateLayer.u;\r\n lyrCfg.layerNames = stateLayer.n ? stateLayer.n.split(',') : [];\r\n }\r\n promises.push(self.addOrUpdateLayer(lyrCfg).then(function (layer) {\r\n var rootNode = layer.wrap.getRootLayerNode();\r\n layer.title = rootNode.Title || rootNode.title;\r\n /*URI:el setOpacity recibe un nuevo parametro. Que indica si se no se va a lanzar evento LAYEROPACITY\r\n esto es porque en el loadstate al establecer la opacidad dedido a un timeout pasados X segundos se lanzaba \r\n este evento y producía un push en el state innecesario*/\r\n layer.setOpacity(this.o, true);\r\n layer.setVisibility(this.v);\r\n }.bind(stateLayer)));\r\n }\r\n }\r\n }\r\n\r\n //eliinar las capas añadidas al mapa que desaparecen en el nuevo estado\r\n self.workLayers.filter(l => l.type === TC.Consts.layerType.WMS && !obj.layers.some(l2 => l2.i === l.id)).forEach(\r\n function (layer) {\r\n self.removeLayer(layer);\r\n });\r\n\r\n Promise.all(promises)\r\n .then(function () {\r\n resolved();\r\n })\r\n .catch(function () {\r\n resolved();\r\n });\r\n })\r\n //.catch(err => resolved());\r\n .catch(function () {\r\n resolved();\r\n });\r\n });\r\n };\r\n\r\n const getReduceByValueFunction = function (prop, value) {\r\n return function (prev, cur, idx) {\r\n return cur[prop] === value ? idx : prev;\r\n };\r\n };\r\n\r\n const getReduceByZIndexFunction = function (zIndex) {\r\n return function (prev, cur, idx) {\r\n return cur.zIndex <= zIndex ? idx : prev;\r\n };\r\n };\r\n\r\n const getAvailableBaseLayer = function (id) {\r\n const ablCollection = this instanceof TC.Map ? this.options.availableBaseLayers : TC.Cfg.availableBaseLayers;\r\n return ablCollection.filter(function (abl) {\r\n return abl.id === id;\r\n })[0];\r\n };\r\n\r\n TC.Map = TC.Map || function (div, options) {\r\n ///\r\n ///Constructor\r\n ///\r\n ///Elemento del DOM en el que crear el mapa o valor de atributo id de dicho elemento.\r\n ///Objeto de opciones de configuración del mapa. Sus propiedades sobreescriben el objeto de configuración global TC.Cfg.\r\n ///\r\n ///Indica si todos los controles del mapa están cargados.\r\n ///Indica si todos los controles y todas las capas del mapa están cargados.\r\n ///Control que está activo en el mapa, y que por tanto responderá a los eventos de ratón en su área de visualización.\r\n ///Lista de todas las capas base cargadas en el mapa.\r\n ///Lista de todos los controles del mapa.\r\n const self = this;\r\n TC.EventTarget.call(self);\r\n TC.Map._instances.push(self);\r\n\r\n //TC.Object.apply(self, arguments);\r\n\r\n /**\r\n * Indica si todos los controles del mapa están cargados.\r\n * @property isReady\r\n * @type boolean\r\n * @default false\r\n */\r\n self.isReady = false;\r\n\r\n /**\r\n * Indica si todos los controles y todas las capas del mapa están cargados.\r\n * @property isLoaded\r\n * @type boolean\r\n * @default false\r\n */\r\n self.isLoaded = false;\r\n\r\n /**\r\n * Lista de todos los controles del mapa.\r\n * @property controls\r\n * @type array\r\n * @default []\r\n */\r\n self.controls = [];\r\n\r\n /**\r\n * Control que está activo en el mapa, y que por tanto responderá a los eventos de ratón en su área de visualización.\r\n * @property activeControl\r\n * @type TC.Control\r\n * @default null\r\n */\r\n self.activeControl = null;\r\n\r\n /**\r\n * Lista de todas las capas cargadas en el mapa.\r\n * @property layers\r\n * @type array\r\n * @default []\r\n */\r\n self.layers = [];\r\n\r\n /**\r\n * Lista de todas las capas base cargadas en el mapa.\r\n * @property baseLayers\r\n * @type array\r\n * @default []\r\n */\r\n self.baseLayers = [];\r\n\r\n /**\r\n * Lista de todas las capas de trabajo cargadas en el mapa.\r\n * @property workLayers\r\n * @type array\r\n * @default []\r\n */\r\n self.workLayers = [];\r\n\r\n /**\r\n * Capa base actual del mapa.\r\n * @property baseLayer\r\n * @type TC.Layer\r\n */\r\n self.baseLayer = null;\r\n\r\n /**\r\n * Capa donde se dibujan las entidades geográficas si no se especifica la capa explícitamente. Se instancia en el momento de añadir la primera entidad.\r\n * @property vectors\r\n * @type TC.layer.Vector\r\n * @default null\r\n */\r\n self.vectors = null;\r\n\r\n var loadingLayerCount = 0;\r\n /**\r\n * Elemento del DOM donde se ha creado el mapa.\r\n * @property div\r\n * @type HTMLElement\r\n */\r\n self.div = TC.Util.getDiv(div);\r\n /**\r\n * El mapa ha cargado todas sus capas iniciales y todos sus controles\r\n * @event MAPLOAD\r\n */\r\n /**\r\n * El mapa ha cargado todos sus controles, pero no hay garantía de que estén cargadas las capas\r\n * @event MAPREADY\r\n */\r\n /**\r\n * Se va a añadir una capa al mapa.\r\n * @event BEFORELAYERADD\r\n * @param {TC.Layer} layer Capa que se va a añadir.\r\n */\r\n /**\r\n * Se ha añadido una capa al mapa.\r\n * @event LAYERADD\r\n * @param {TC.Layer} layer Capa que se ha añadido.\r\n */\r\n /**\r\n * Se ha eliminado una capa del mapa.\r\n * @event LAYERREMOVE\r\n * @param {TC.Layer} layer Capa que se ha eliminado.\r\n */\r\n /**\r\n * Se ha cambiado de posición una capa en la lista de capas del mapa.\r\n * @event LAYERORDER\r\n * @param {TC.Layer} layer Capa que se ha eliminado.\r\n * @param {number} oldIndex Índice de la posición antes del cambio.\r\n * @param {number} newIndex Índice de la posición después del cambio.\r\n */\r\n /**\r\n * Se va a actualizar una capa del mapa: se van a modificar sus entidades o se va solicitar una nueva imagen.\r\n * @event BEFORELAYERUPDATE\r\n * @param {TC.Layer} layer Capa que va a actualizarse.\r\n */\r\n /**\r\n * Se ha actualizado una capa del mapa: se ha modificado sus entidades o se ha cargado una imagen nueva.\r\n * @event LAYERUPDATE\r\n * @param {TC.Layer} layer Capa que se ha actualizado.\r\n */\r\n /**\r\n * Ha habido un error al cargar la capa, bien porque no se ha podido obtener su capabilities o porque no soporta CRS compatibles.\r\n * @event LAYERERROR\r\n * @param {TC.Layer} layer Capa que sufre el error.\r\n */\r\n /**\r\n * Se ha establecido una nueva capa como mapa base.\r\n * @event BASELAYERCHANGE\r\n * @param {TC.Layer} layer Capa que es el nuevo mapa base.\r\n */\r\n /**\r\n * Se va a actualizar alguna capa del mapa.\r\n * @event BEFOREUPDATE\r\n */\r\n\r\n self.div.classList.add(TC.Consts.classes.LOADING, TC.Consts.classes.MAP);\r\n\r\n // Para gestionar zoomToMarkers\r\n self._markerPromises = [];\r\n\r\n self._layerBuffer = {\r\n layers: [],\r\n contains: function (id) {\r\n return this.layers.some(function (l) {\r\n return l.id === id;\r\n });\r\n },\r\n getIndex: function (id) {\r\n return this.layers.reduce(getReduceByValueFunction('id', id), -1);\r\n },\r\n add: function (id, zIndex, isBase) {\r\n const obj = {\r\n id: id,\r\n pending: true,\r\n zIndex: zIndex,\r\n isBase: isBase\r\n };\r\n this.layers.splice(this.getIndexForZIndex(zIndex), 0, obj);\r\n },\r\n remove: function (id) {\r\n this.layers.splice(this.getIndex(id), 1);\r\n },\r\n getMapLayers: function () {\r\n return this.layers\r\n .filter(l => l.pending === false)\r\n .filter(l => !l.rejected)\r\n .map(l => l.mapLayer);\r\n },\r\n resolve: function (map, layer, isBase) {\r\n const layerObj = this.layers[this.getIndex(layer.id)];\r\n layerObj.mapLayer = layer;\r\n layerObj.pending = false;\r\n map.layers = this.getMapLayers();\r\n if (isBase) {\r\n if (map.baseLayers.length === 0) {\r\n map.baseLayers = new Array(map.options.baseLayers.length);\r\n }\r\n\r\n var index = map.options.baseLayers.map(l => l.id).indexOf(layer.id);\r\n if (index < 0) {\r\n index = map.baseLayers.map(l => l.type).indexOf(TC.Consts.layerType.VECTOR);\r\n if (index < 0) {\r\n map.baseLayers.push(layer);\r\n } else {\r\n map.baseLayers.splice(index, 0, layer);\r\n }\r\n } else {\r\n map.baseLayers.splice(index, 1, layer);\r\n }\r\n }\r\n else {\r\n map.workLayers = map.layers.filter(function (l) {\r\n return !l.isBase;\r\n });\r\n }\r\n },\r\n reject: function (map, error) {\r\n const layerObj = this.layers[this.getIndex(error.layerId)];\r\n layerObj.mapLayer = null;\r\n layerObj.pending = false;\r\n layerObj.rejected = true;\r\n var index = map.options.baseLayers.map(l => l.id).indexOf(error.layerId);\r\n if (index >= 0) {\r\n map.baseLayers.splice(index, 1);\r\n }\r\n },\r\n getResolvedWorkLayerIndex: function (_map, id) {\r\n return this.layers.filter(function (l) {\r\n return l.id === id || !l.isBase && l.pending === false;\r\n }).reduce(getReduceByValueFunction('id', id), -1);\r\n },\r\n getResolvedVisibleLayerIndex: function (map, id) {\r\n var index = this.getResolvedWorkLayerIndex(map, id);\r\n if (map.baseLayer) {\r\n index = index + 1;\r\n }\r\n return index;\r\n },\r\n getIndexForZIndex: function (zIndex) {\r\n return this.layers.reduce(getReduceByZIndexFunction(zIndex), -1) + 1;\r\n },\r\n checkMapLoad: function (map) {\r\n const self = this;\r\n if (map.options.baseLayers\r\n .concat(map.options.workLayers)\r\n .every(function (l) {\r\n return self.contains(l.id || l);\r\n }) && // Si ya se han empezado a procesar todas las capas de las opciones\r\n !this.layers.some(function (layer) {\r\n return layer.pending === true; // Si ya se han terminado de procesar\r\n })) {\r\n const throwMapLoad = async function () {\r\n if (!map.isLoaded) {\r\n const setLoaded = function () {\r\n\r\n // 07/03/2019 GLS: Bug 24832 la gestión del estado comienza después de TC.Consts.event.MAPLOAD, \r\n // como los callbacks a loaded se lanzan según el orden de suscripción, el de script.js de IDENA se lanza antes \r\n // que el de la gestión del estado, lo que provoca que las capas añadidas por queryString no se registren.\r\n if (map.options.stateful) {\r\n _setupStateControl.call(map);\r\n }\r\n\r\n map.isLoaded = true;\r\n // Si hay datos en cache es posible que salte el evento MAPREADY después de MAPLOAD.\r\n // Por eso quitamos la clase LOADING en un callback de ready().\r\n map.ready(() => map.div.classList.remove(TC.Consts.classes.LOADING));\r\n map.trigger(TC.Consts.event.MAPLOAD);\r\n };\r\n // tenemos estado 3d\r\n if (map.state && map.state.vw3) {\r\n if (!map.div.classList.contains(TC.Consts.classes.THREED)) {\r\n map.div.classList.add(TC.Consts.classes.THREED);\r\n\r\n if (!TC.view || !TC.view.ThreeD) {\r\n const module = await import('./view/ThreeD');\r\n TC.view = TC.view || {};\r\n TC.view.ThreeD = module.default;\r\n }\r\n TC.view.ThreeD.apply({\r\n map: map, state: map.state.vw3, callback: function () {\r\n setLoaded();\r\n\r\n map.getControlsByClass(TC.control.ThreeD)[0].button.removeAttribute(\"disabled\");\r\n }\r\n });\r\n }\r\n } else {\r\n setLoaded();\r\n }\r\n }\r\n };\r\n // Gestionamos el final de la carga del mapa\r\n if (map.baseLayer) {\r\n throwMapLoad();\r\n }\r\n else {\r\n //GLS: Si no hay mapa de fondo cargado es posible que se haya añadido desde diálogo modal, lo comprobamos en todos los mapas de fondo disponibles del API\r\n var onAvailables = [];\r\n if (map.state && map.state.base) {\r\n onAvailables = TC.Cfg.availableBaseLayers.filter(l => l.id === map.state.base);\r\n }\r\n\r\n if (onAvailables.length > 0) {\r\n onAvailables[0].isBase = true;\r\n map.addLayer(onAvailables[0]).then(function (_layer) {\r\n throwMapLoad();\r\n });\r\n }\r\n else {\r\n // Si no hay capa base cargada cargamos la primera compatible\r\n const lastResortBaseLayer = map.baseLayers.filter(function (layer) {\r\n return !layer.mustReproject;\r\n }).filter(function (l) {\r\n return l.wrap && l.wrap.layer;\r\n });\r\n\r\n if (lastResortBaseLayer.length > 0) {\r\n map.wrap.setBaseLayer(lastResortBaseLayer[0].wrap.layer);\r\n map.baseLayer = lastResortBaseLayer[0];\r\n }\r\n\r\n throwMapLoad();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n self._layerBuffer.layers = [];\r\n\r\n self._fileHandles = new WeakMap();\r\n\r\n if (!TC.ready) {\r\n TC.Cfg = TC.Util.extend({}, TC.Defaults, TC.Cfg);\r\n TC.ready = true;\r\n }\r\n\r\n // GLS: mergeOptions es inclusivo, para poder sobrescribir los tipos de búsqueda, añado con valor a false las que el usuario no haya configurado.\r\n if (options && options.controls && options.controls.search && options.controls.search.allowedSearchTypes) {\r\n for (var allowed in TC.Cfg.controls.search.allowedSearchTypes) {\r\n if (!Object.prototype.hasOwnProperty.call(options.controls.search.allowedSearchTypes, allowed)) {\r\n options.controls.search.allowedSearchTypes[allowed] = false;\r\n }\r\n }\r\n }\r\n\r\n // Añado las capas disponibles a la configuración general\r\n\r\n /**\r\n * Objeto de opciones del constructor.\r\n * @property options\r\n * @type object\r\n */\r\n options = options || {};\r\n mergeOptions.call(self, options);\r\n\r\n self.id = options.id || TC.getUID({ prefix: 'map-' });\r\n\r\n self.crossOrigin = self.options.crossOrigin;\r\n\r\n var init = async function () {\r\n\r\n self.state = await self.checkLocation();\r\n\r\n if (self.options.layout) {\r\n self.trigger(TC.Consts.event.LAYOUTLOAD, { map: self });\r\n }\r\n\r\n if (options && options.workLayers !== undefined) {\r\n self.options.workLayers = options.workLayers;\r\n }\r\n if (options && options.baseLayers !== undefined) {\r\n self.options.baseLayers = options.baseLayers;\r\n }\r\n\r\n if (self.options.zoomToFeatures) {\r\n // zoom a features solo cuando se cargue el mapa\r\n var handleFeaturesAdd = function handleFeaturesAdd(e) {\r\n clearTimeout(self._zoomToFeaturesTimeout);\r\n\r\n self._zoomToFeaturesTimeout = setTimeout(function () {\r\n self.zoomToFeatures(e.layer.features, { animate: false });\r\n self.off(TC.Consts.event.FEATURESADD, handleFeaturesAdd);\r\n }, 100);\r\n };\r\n self.on(TC.Consts.event.FEATURESADD, handleFeaturesAdd);\r\n }\r\n var _handleLayerAdd = function _handleLayerAdd(e) {\r\n if (e.layer.isBase &&\r\n (e.layer === self.baseLayer ||\r\n self.baseLayer && e.layer.fallbackLayer && e.layer.fallbackLayer.id === self.baseLayer.id)) {\r\n if (typeof self.state !== \"undefined\") {\r\n if (self.state.crs) {\r\n self.loaded(function () {\r\n self.setProjection({\r\n crs: self.state.crs,\r\n extent: self.state.ext\r\n });\r\n });\r\n }\r\n else {\r\n self.setExtent(self.state.ext, { animate: false });\r\n }\r\n }\r\n self.off(TC.Consts.event.LAYERADD, _handleLayerAdd);\r\n }\r\n };\r\n self.on(TC.Consts.event.LAYERADD, _handleLayerAdd);\r\n\r\n /**\r\n * Well-known ID (WKID) del CRS del mapa.\r\n * @property crs\r\n * @type string\r\n */\r\n self.crs = self.options.crs;\r\n self.initialExtent = self.options.initialExtent;\r\n self.maxExtent = self.options.maxExtent;\r\n\r\n self.defaultInfoContainer = self.defaultInfoContainer || self.options.defaultInfoContainer;\r\n // Si no se ha especificado, definimos defaultInfoContainer en base al espacio disponible en pantalla.\r\n if (!self.defaultInfoContainer && window.matchMedia('screen and (max-width: 40em), screen and (max-height: 40em)').matches) {\r\n self.defaultInfoContainer = TC.Consts.infoContainer.RESULTS_PANEL;\r\n }\r\n\r\n\r\n self.wrap = new TC.wrap.Map(self);\r\n\r\n TC.loadProjDef({\r\n crs: self.options.crs,\r\n callback: function () {\r\n self.wrap.setMap();\r\n const ctlPromises = [];\r\n\r\n for (var name in self.options.controls) {\r\n var ctlOptions = self.options.controls[name];\r\n if (ctlOptions) {\r\n ctlOptions = typeof ctlOptions === 'boolean' ? {} : TC.Util.extend(true, {}, ctlOptions);\r\n if (typeof ctlOptions.div === 'string') {\r\n ctlOptions.div = self.div.querySelector('#' + ctlOptions.div) || ctlOptions.div;\r\n }\r\n ctlPromises.push(self.addControl(name, ctlOptions));\r\n }\r\n }\r\n\r\n self.on(TC.Consts.event.BEFORELAYERUPDATE, _triggerLayersBeforeUpdateEvent);\r\n self.on(TC.Consts.event.LAYERUPDATE, _triggerLayersUpdateEvent);\r\n self.on(TC.Consts.event.LAYERERROR, _triggerLayersUpdateEvent);\r\n\r\n var i;\r\n var lyrCfg;\r\n for (i = 0; i < self.options.baseLayers.length; i++) {\r\n lyrCfg = self.options.baseLayers[i];\r\n if (typeof lyrCfg === 'string') {\r\n lyrCfg = getAvailableBaseLayer.call(self, lyrCfg);\r\n }\r\n self.addLayer(TC.Util.extend({}, lyrCfg, { isBase: true, map: self }));\r\n }\r\n\r\n var setVisibility = function (layer) {\r\n if (layer.isRaster() && !layer.names) {\r\n layer.setVisibility(false);\r\n }\r\n };\r\n const workLayersNotInState = self.options.workLayers\r\n .map(function (workLayer) {\r\n return TC.Util.extend({}, workLayer, { map: self });\r\n })\r\n .filter(function (workLayer) {\r\n if (!self.state || !self.state.layers) {\r\n return true;\r\n }\r\n return !self.state.layers.some(function (stateLayer) {\r\n const result = stateLayer.u === workLayer.url && (!workLayer.layerNames || !workLayer.layerNames.length || workLayer.layerNames.indexOf(stateLayer.n) >= 0);\r\n if (result) {\r\n stateLayer.id = workLayer.id; // Hemos identificado la capa, le damos el id que le corresponde\r\n }\r\n return result;\r\n });\r\n });\r\n workLayersNotInState.forEach(function (workLayer) {\r\n self.addLayer(workLayer).then(setVisibility);\r\n });\r\n\r\n if (self.state && self.state.layers) {\r\n\r\n self.state.layers.forEach(function (stateLayer) {\r\n\r\n const lyrCfg = {\r\n id: stateLayer.i || TC.getUID(),\r\n hideTitle: stateLayer.h,\r\n unremovable: stateLayer.ur,\r\n title: stateLayer.t,\r\n filter: stateLayer.f,\r\n hideTree: stateLayer.x !== 0,\r\n renderOptions: {\r\n opacity: stateLayer.o,\r\n hide: !stateLayer.v\r\n }\r\n };\r\n if (stateLayer.u) {\r\n lyrCfg.url = TC.Util.isOnCapabilities(stateLayer.u, stateLayer.u.indexOf(window.location.protocol) < 0) || stateLayer.u;\r\n lyrCfg.layerNames = stateLayer.n ? stateLayer.n.split(',') : undefined;\r\n }\r\n else {\r\n lyrCfg.type = TC.Consts.layerType.VECTOR;\r\n lyrCfg.file = stateLayer.fn;\r\n }\r\n // añado como promesa cada una de las capas que se añaden\r\n self.addLayer(lyrCfg).then(function (layer) {\r\n if (layer.wrap.getRootLayerNode) {\r\n var rootNode = layer.wrap.getRootLayerNode();\r\n }\r\n layer.title = stateLayer.t || rootNode && (rootNode.Title || rootNode.title);\r\n if (this.o < 1) {\r\n layer.setOpacity(this.o);\r\n }\r\n if (!this.v) {\r\n layer.setVisibility(this.v);\r\n }\r\n }.bind(stateLayer))\r\n .catch(function (error) {\r\n // no hacemos nada porque al llegar a este punto ya hemos gestionado el error en la instrucción crsLayerError(self, lyr); en la línea 4888\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n //URI:Si que hacemos ya que si falla el getCapabilities no hay CRS que valga\r\n self.toast(error.message, { type: TC.Consts.msgType.ERROR });\r\n });\r\n });\r\n }\r\n Promise.all(ctlPromises).finally(function () {\r\n // 13/03/2020 si tenemos estado de controles, pasamos a establecer los estados\r\n if (self.state && self.state.ctl) {\r\n self.importControlStates(self.state.ctl);\r\n }\r\n\r\n self.isReady = true;\r\n self.trigger(TC.Consts.event.MAPREADY);\r\n });\r\n setHeightFix(self.div);\r\n }\r\n });\r\n\r\n self.on(TC.Consts.event.FEATURECLICK, function (e) {\r\n if (!self.activeControl || !self.activeControl.isExclusive()) {\r\n e.feature.showInfo();\r\n }\r\n });\r\n\r\n self.on(TC.Consts.event.NOFEATURECLICK, function (e) {\r\n e.layer._noFeatureClicked = true;\r\n var allLayersClicked = true;\r\n for (var i = 0, len = self.workLayers.length; i < len; i++) {\r\n if (!self.workLayers[i]._noFeatureClicked) {\r\n allLayersClicked = false;\r\n break;\r\n }\r\n }\r\n if (allLayersClicked) {\r\n self.workLayers.forEach(function (wl) {\r\n delete wl._noFeatureClicked;\r\n });\r\n self.getControlsByClass(TC.control.Popup).forEach(function (p) {\r\n if (p.isVisible()) {\r\n p.hide();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n mapProto.getMapState = async function (options) {\r\n const self = this;\r\n\r\n var state = await _getMapState.call(self, options);\r\n return TC.Util.utf8ToBase64(state);\r\n };\r\n\r\n mapProto.getPreviousMapState = function () {\r\n return previousState;\r\n };\r\n\r\n mapProto.checkLocation = async function () {\r\n const self = this;\r\n var hash = window.location.hash;\r\n\r\n if (hash && hash.length > 1) {\r\n hash = hash.substr(1);\r\n\r\n var obj;\r\n try {\r\n obj = await jsonpackProcess('unpack', TC.Util.base64ToUtf8(hash));\r\n }\r\n catch (error) {\r\n try {\r\n obj = JSON.parse(TC.Util.base64ToUtf8(hash));\r\n }\r\n catch (err) {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), TC.Consts.msgErrorMode.TOAST);\r\n return;\r\n }\r\n }\r\n\r\n if (TC.Util.detectIE() && window.location.href.length === 2047) {\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValidForEdge'), TC.Consts.msgErrorMode.TOAST);\r\n }\r\n\r\n if (obj) {\r\n var inValidState = false;\r\n //chequeo la integriadad del objeto restaurado del State\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"ext\")) {\r\n inValidState = true;\r\n obj.ext = self.options.initialExtent;\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"base\")) {\r\n inValidState = true;\r\n obj.base = self.options.defaultBaseLayer;\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(obj, \"layers\")) {\r\n inValidState = true;\r\n obj.layers = [];\r\n }\r\n else {\r\n for (var i = obj.layers.length - 1; i >= 0; i--) {\r\n const stateLayer = obj.layers[i];\r\n if (!stateLayer ||\r\n !(Object.prototype.hasOwnProperty.call(stateLayer, \"u\") && Object.prototype.hasOwnProperty.call(stateLayer, \"n\") ||\r\n Object.prototype.hasOwnProperty.call(stateLayer, \"fn\"))) {\r\n inValidState = true;\r\n obj.layers.length = obj.layers.length - 1;\r\n continue;\r\n }\r\n else if (!Object.prototype.hasOwnProperty.call(stateLayer, \"o\") ||\r\n !Object.prototype.hasOwnProperty.call(stateLayer, \"v\") ||\r\n !Object.prototype.hasOwnProperty.call(stateLayer, \"h\")) {\r\n inValidState = true;\r\n TC.Util.extend(stateLayer, {\r\n o: stateLayer.o || 1,\r\n v: stateLayer.v || true,\r\n h: stateLayer.h || false\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (Object.prototype.hasOwnProperty.call(obj, \"vw3\")) {\r\n\r\n if (!obj.vw3) {\r\n inValidState = true;\r\n } else if (!obj.vw3.cp || obj.vw3.cp.length !== 3 ||\r\n !obj.vw3.chpr || obj.vw3.chpr.length !== 3 ||\r\n !obj.vw3.bcpd) {\r\n inValidState = true;\r\n }\r\n }\r\n\r\n if (inValidState)\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), TC.Consts.msgErrorMode.TOAST);\r\n return obj;\r\n }\r\n TC.error(TC.Util.getLocaleString(self.options.locale, 'mapStateNotValid'), TC.Consts.msgErrorMode.TOAST);\r\n }\r\n return;\r\n };\r\n\r\n /*\r\n * _triggerLayersBeforeUpdateEvent: Triggers map beforeupdate event (jQuery.Event) when any layer starts loading\r\n * Parameters: OpenLayers.Layer, event name ('loadstart', 'loadend')\r\n */\r\n var _triggerLayersBeforeUpdateEvent = function (_e) {\r\n if (loadingLayerCount <= 0) {\r\n loadingLayerCount = 0;\r\n self.trigger(TC.Consts.event.BEFOREUPDATE);\r\n }\r\n loadingLayerCount = loadingLayerCount + 1;\r\n };\r\n\r\n var _triggerLayersUpdateEvent = function (_e) {\r\n loadingLayerCount = loadingLayerCount - 1;\r\n if (loadingLayerCount <= 0) {\r\n loadingLayerCount = 0;\r\n self.trigger(TC.Consts.event.UPDATE);\r\n }\r\n };\r\n\r\n const locale = self.options.locale;\r\n\r\n TC.i18n.loadResources(!TC.i18n[locale], TC.apiLocation + 'TC/resources/', locale).finally(function () {\r\n // Si no hay tamaño definido en el div, lo ponemos a pantalla completa\r\n // Lo ponemos aquí porque es poco antes de cargar markup.html\r\n const divRect = self.div.getBoundingClientRect();\r\n if (divRect.height === 0) {\r\n document.querySelectorAll('html,body').forEach(elm => elm.classList.add('tc-fullscreen'));\r\n self.div.classList.add('tc-fullscreen');\r\n }\r\n // 22/03/2019 GLS: siempre vamos a tener layout porque en sitna.js (1757) se establece por defecto layout/responsive\r\n // si el usuario define otro se sobrescribe\r\n if (self.options.layout) {\r\n var layout = self.options.layout;\r\n\r\n self.trigger(TC.Consts.event.BEFORELAYOUTLOAD, { map: self });\r\n\r\n var layoutURLs = {};\r\n var ignoreError = false;\r\n if (typeof layout === 'string') {\r\n var href = layout.trim();\r\n href += href.match(/\\/$/) ? '' : '/';\r\n\r\n layoutURLs.config = href + 'config.json';\r\n layoutURLs.markup = href + 'markup.html';\r\n layoutURLs.style = href + 'style.css';\r\n layoutURLs.script = href + 'script.js';\r\n layoutURLs.i18n = href + 'resources';\r\n\r\n // Si el layout se define como string, no podemos saber qué archivos a definido y cuales no, \r\n // por eso tampoco podemos saber si es un error de configuración o es que no lo ha definido así que no mostramos error entendiendo que si\r\n // el archivo no está es porque no quiere.\r\n ignoreError = true;\r\n }\r\n else if (\r\n Object.prototype.hasOwnProperty.call(layout, 'config') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'markup') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'style') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'script') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'href') ||\r\n Object.prototype.hasOwnProperty.call(layout, 'i18n')\r\n ) {\r\n layoutURLs = TC.Util.extend({}, layout);\r\n }\r\n\r\n if (layoutURLs.i18n) {\r\n layoutURLs.i18n += layoutURLs.i18n.match(/\\/$/) ? '' : '/';\r\n }\r\n\r\n self.layout = layoutURLs;\r\n\r\n const layoutPromises = [];\r\n const ResponseError = function (status, url) {\r\n this.status = status;\r\n this.url = url;\r\n };\r\n const onError = function (error) {\r\n if (!ignoreError || error.status != 404) {\r\n const mapObj = TC.Map.get(document.querySelector('.' + TC.Consts.classes.MAP));\r\n TC.error(\r\n TC.Util.getLocaleString(mapObj.options.locale, \"urlFailedToLoad\",\r\n { url: error.url }),\r\n [TC.Consts.msgErrorMode.TOAST, TC.Consts.msgErrorMode.EMAIL],\r\n \"Error al cargar \" + error.url);\r\n }\r\n };\r\n\r\n const i18nLayoutPromise = new Promise(function (resolve, _reject) {\r\n if (layoutURLs.config) {\r\n\r\n layoutPromises.push(fetch(layoutURLs.config)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.config);\r\n }\r\n return response.json();\r\n }).then(function (data) {\r\n resolve(data.i18n);\r\n mergeOptions.call(self, data, options);\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve(false);\r\n }));\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n layoutPromises.push(i18nLayoutPromise);\r\n\r\n if (layoutURLs.style) {\r\n layoutPromises.push(new Promise(function (resolve, _reject) {\r\n // Añadimos una clase para hacer más fáciles las reglas del layout\r\n self.div.classList.add('tc-lo');\r\n\r\n // GLS: 28/03/2019 Necesito hacer el HEAD para validar si existe porque si lo hago directamente y lo cargo como BLOB, \r\n // las referencias a las fuentes son relativas al blob por lo que no funcionan, así que HEAD y si existe lo cargo por href\r\n fetch(layoutURLs.style, {\r\n method: navigator.onLine ? 'HEAD' : 'GET' // FLP: Las peticiones HEAD no se guardan en la cache, así que offline fallan, por eso la opción GET.\r\n }).then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.style);\r\n }\r\n return response;\r\n }).then(function () {\r\n var linkElement = document.createElement('link');\r\n linkElement.rel = 'stylesheet';\r\n linkElement.href = layoutURLs.style;\r\n\r\n document.head.appendChild(linkElement);\r\n resolve();\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve();\r\n });\r\n }));\r\n }\r\n\r\n if (layoutURLs.markup) {\r\n layoutPromises.push(new Promise(function (resolve, _reject) {\r\n\r\n fetch(layoutURLs.markup)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.markup);\r\n }\r\n return response.text();\r\n }).then(function (data) {\r\n // markup.html puede ser una plantilla para soportar i18n, compilarla si es el caso\r\n i18nLayoutPromise.then(function (i18n) {\r\n if (i18n && locale && layoutURLs.i18n) {\r\n TC.i18n.loadResources(true, layoutURLs.i18n, locale).finally(function () {\r\n const replacerFn = function (_match, grp1, grp2, grp3) {\r\n return TC.Util.getLocaleString(locale, grp1 || grp2 || grp3);\r\n };\r\n //data = data.replace(/\\{\\{([^\\}\\{]+)\\}\\}/g, replacerFn); // Estilo {{key}}\r\n //data = data.replace(/\\{@i18n \\$key=\"([^\\}\\{]+)\"\\/\\}/g, replacerFn); // Estilo {@i18n $key=\"key\"/}\r\n //data = data.replace(/\\{\\{i18n \"([^\\}\\{]+)\"\\}\\}/g, replacerFn); // Estilo {{i18n \"key\"}}\r\n data = data.replace(/\\{\\{i18n \"([^\\}\\{]+)\"\\}\\}|\\{\\{([^\\}\\{]+)\\}\\}|\\{@i18n \\$key=\"([^\\}\\{]+)\"\\/\\}/g, replacerFn); // Los tres estilos anteriores\r\n self.div.insertAdjacentHTML('beforeend', data);\r\n resolve();\r\n });\r\n }\r\n else {\r\n self.div.insertAdjacentHTML('beforeend', data);\r\n resolve();\r\n }\r\n });\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n\r\n resolve();\r\n });\r\n }));\r\n }\r\n\r\n Promise.all(layoutPromises).finally(function () {\r\n\r\n if (layoutURLs.script) {\r\n fetch(layoutURLs.script)\r\n .then(function (response) {\r\n if (!response.ok) { // status no está en el rango 200-299\r\n throw new ResponseError(response.status, layoutURLs.script);\r\n }\r\n return response.blob();\r\n }).then(function (fileBlob) {\r\n var fileURL = URL.createObjectURL(fileBlob);\r\n\r\n var scriptElement = document.createElement('script');\r\n scriptElement.src = fileURL;\r\n\r\n scriptElement.onload = function () {\r\n setHeightFix(self.div);\r\n init();\r\n };\r\n\r\n document.head.appendChild(scriptElement);\r\n\r\n }).catch(function (error) {\r\n if (error.status) {\r\n onError(error);\r\n }\r\n init();\r\n });\r\n } else {\r\n init();\r\n }\r\n });\r\n\r\n }\r\n else {\r\n init();\r\n }\r\n });\r\n\r\n // Borramos árboles de capas cacheados\r\n self.on(TC.Consts.event.UPDATEPARAMS, function (e) {\r\n deleteTreeCache(e.layer);\r\n });\r\n self.on(TC.Consts.event.ZOOM, function () {\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n deleteTreeCache(self.workLayers[i]);\r\n }\r\n });\r\n\r\n // Redefinimos TC.error para añadir un aviso en el mapa\r\n /*var oldError = TC.error;\r\n TC.error = function (text) {\r\n oldError(text);\r\n self.toast(text, { type: TC.Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n };*/\r\n var oldError = TC.error;\r\n TC.error = function (text, options, subject) {\r\n if (TC.isDebug && console.trace) {\r\n console.trace();\r\n }\r\n if (!options) {\r\n oldError(text);\r\n self.toast(text, { type: TC.Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n }\r\n else {\r\n var fnc = function (text, mode, subject) {\r\n switch (mode) {\r\n case TC.Consts.msgErrorMode.TOAST:\r\n if (!self.toast) { console.warn(\"No existe el objeto Toast\"); return; }\r\n self.toast(text, { type: TC.Consts.msgType.ERROR, duration: TC.Cfg.toastDuration * 2 });\r\n break;\r\n case TC.Consts.msgErrorMode.EMAIL:\r\n if (TC.Cfg.loggingErrorsEnabled) {\r\n JL(\"onerrorLogger\").fatalException(!subject ? text : {\r\n \"msg\": subject,\r\n \"errorMsg\": text\r\n }, null);\r\n }\r\n break;\r\n case TC.Consts.msgErrorMode.CONSOLE:\r\n default:\r\n console.error(text);\r\n break;\r\n }\r\n };\r\n if (!Array.isArray(options)) {\r\n fnc(text, options, subject);\r\n }\r\n else {\r\n for (var i = 0; i < options.length; i++) {\r\n fnc(text, options[i], subject);\r\n }\r\n }\r\n }\r\n\r\n };\r\n };\r\n\r\n TC.Map._instances = [];\r\n\r\n TC.Map.get = function (elm) {\r\n for (var i = 0, len = TC.Map._instances.length; i < len; i++) {\r\n const instance = TC.Map._instances[i];\r\n if (instance.div === elm) {\r\n return instance;\r\n }\r\n }\r\n };\r\n\r\n TC.inherit(TC.Map, TC.EventTarget);\r\n\r\n var deleteTreeCache = function (layer) {\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n layer.tree = null;\r\n }\r\n };\r\n\r\n /*\r\n * Función que mezcla opciones de mapa relativos a capa, teniendo cuidado de que puede haber objetos de opciones de capa o identificadores de capa.\r\n * En este último caso, si no son la opción prioritaria, hay que sustituirlos por los objetos de definiciones de capa.\r\n */\r\n var mergeLayerOptions = function (optionsArray, propertyName) {\r\n const self = this;\r\n // lista de opciones de capa de los argumentos\r\n var layerOptions = Array.prototype.slice.call(optionsArray).map(function (elm) {\r\n var result = {};\r\n if (elm) {\r\n result[propertyName] = elm[propertyName];\r\n }\r\n return result;\r\n });\r\n if (propertyName === 'availableBaseLayers') console.log(\"layerOptions\", layerOptions);\r\n // añadimos las opciones de capa de la configuración general\r\n var layerOption = {};\r\n layerOption[propertyName] = TC.Cfg[propertyName];\r\n layerOptions.unshift(layerOption);\r\n\r\n //Si se han definido baseLayers en el visor, hay que hacer un merge con las predefinidas en la API\r\n if (propertyName === 'baseLayers' && layerOptions[1]['baseLayers']) {\r\n layerOption = layerOptions[1];\r\n\r\n for (var i = 0; i < layerOption.baseLayers.length; i++) {\r\n if (typeof layerOption.baseLayers[i] === 'object') {\r\n TC.Util.extend(layerOption.baseLayers[i], getAvailableBaseLayer.call(self, layerOption.baseLayers[i].id));\r\n }\r\n }\r\n } else {\r\n layerOptions.unshift(true); // Deep merge\r\n layerOption = TC.Util.extend.apply(this, layerOptions);\r\n if (propertyName === 'availableBaseLayers') console.log(\"layerOption\", layerOption);\r\n }\r\n\r\n return layerOption[propertyName];\r\n };\r\n\r\n const mergeControlOptions = function (controlOptions) {\r\n\r\n if (controlOptions.controlContainer) {\r\n\r\n if (Array.isArray(controlOptions.controlContainer.controls)) {\r\n\r\n controlOptions.controlContainer.controls.forEach((ctl) => {\r\n Object.keys(ctl).filter((key) => key !== \"position\").forEach((name) => {\r\n if (controlOptions[name] !== undefined) {\r\n if (typeof ctl[name] === 'boolean') {\r\n ctl[name] = {};\r\n }\r\n TC.Util.extend(ctl[name], controlOptions[name]);\r\n delete controlOptions[name];\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n // GLS compatibilidad hacia atrás\r\n\r\n Object.keys(controlOptions).filter(function (key) {\r\n return Object.keys(controlOptions.controlContainer.controls).indexOf(key) > -1;\r\n }).forEach(function (key) {\r\n const containerControl = controlOptions.controlContainer.controls[key];\r\n if (typeof containerControl.options === 'boolean') {\r\n containerControl.options = {};\r\n }\r\n TC.Util.extend(containerControl.options, controlOptions[key]);\r\n delete controlOptions[key];\r\n });\r\n }\r\n }\r\n\r\n return controlOptions;\r\n };\r\n\r\n const mergeOptions = function () {\r\n const argArray = [true, {}, TC.Cfg].concat(Array.prototype.slice.call(arguments));\r\n const result = this.options = TC.Util.extend.apply(this, argArray);\r\n // Concatenamos las colecciones availableBaseLayers\r\n result.availableBaseLayers = TC.Cfg.availableBaseLayers.concat.apply(TC.Cfg.availableBaseLayers, Array.prototype.map.call(arguments, function (arg) {\r\n return arg.availableBaseLayers || [];\r\n }));\r\n result.baseLayers = mergeLayerOptions.call(this, arguments, 'baseLayers');\r\n result.workLayers = mergeLayerOptions.call(this, arguments, 'workLayers');\r\n\r\n const controls = Array.prototype.slice.call(arguments)\r\n .filter(elem => elem.controls)\r\n .map(elem => elem.controls);\r\n if (controls.length > 0) {\r\n result.controls = TC.Util.extend(true, result.controls, mergeControlOptions(TC.Util.extend(true, controls[0], controls[1])));\r\n }\r\n return result;\r\n };\r\n\r\n var mapProto = TC.Map.prototype;\r\n\r\n var crsLayerError = function (map, layer) {\r\n var errorMessage = 'Layer \"' + layer.title + '\" (\"' + layer.names + '\"): ';\r\n var reason;\r\n if (layer.isValidFromNames()) {\r\n reason = 'layerSrsNotCompatible';\r\n } else {\r\n reason = 'layerNameNotValid';\r\n }\r\n errorMessage += TC.Util.getLocaleString(map.options.locale, reason);\r\n TC.error(errorMessage);\r\n map.trigger(TC.Consts.event.LAYERERROR, { layer: layer, reason: reason });\r\n\r\n const error = Error(errorMessage);\r\n error.layerId = layer.id;\r\n return error;\r\n };\r\n\r\n mapProto.getCrs = mapProto.getCRS = function () {\r\n const self = this;\r\n\r\n if (!self.on3DView) {\r\n return self.crs;\r\n } else {\r\n return self.view3D.crs;\r\n }\r\n };\r\n\r\n mapProto.setCrs = async function (crs, callback) {\r\n const self = this;\r\n await self.setProjection({ crs: crs });\r\n if (TC.Util.isFunction(callback)) {\r\n callback(crs);\r\n }\r\n return crs;\r\n };\r\n\r\n const appendRasterEvents = function (layer) {\r\n layer.wrap.$events.on(TC.Consts.event.TILELOADERROR, function (event) {\r\n if ((event.error.code && event.error.code.toString() != '404') && (event.error.text != 'offline')) {\r\n const wrap = this;\r\n if (!wrap._tileloaderror) {\r\n const path = layer.getPath();\r\n const title = path.length ? path[path.length - 1] : layer.title;\r\n layer.map.toast(TC.Util.getLocaleString(layer.map.options.locale, 'tileload.error',\r\n { name: title, error: event.error.text }),\r\n { type: TC.Consts.msgType.ERROR });\r\n wrap._tileloaderror = true;\r\n const onTileload = function (e) {\r\n if (e.tile.src && e.tile.src !== TC.Consts.BLANK_IMAGE) {\r\n delete wrap._tileloaderror;\r\n wrap.$events.off(TC.Consts.event.TILELOAD, onTileload);\r\n }\r\n };\r\n wrap.$events.on(TC.Consts.event.TILELOAD, onTileload);\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Añade una capa al mapa.\r\n * @method addLayer\r\n * @async\r\n * @param {TC.Layer|TC.cfg.LayerOptions|string} layer Objeto de capa, objeto de opciones del constructor de la capa, o identificador de capa.\r\n * @param {function} [callback] Función de callback.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Layer\"}}{{/crossLink}}\r\n */\r\n mapProto.addLayer = function (layer, callback) {\r\n const self = this;\r\n\r\n const result = new Promise(function (resolve, reject) {\r\n\r\n if (typeof layer === 'object') {\r\n if (!layer.id)\r\n layer.id = TC.getUID();\r\n else {\r\n //URI expresion regular para sacar el prefijo y el número del ID de la capa y setear lista de prefijos\r\n const groups = /(?[-_\\p{Letter}]+(\\u002D\\d)?\\u002D)?(?[\\d]*)?/gu.exec(layer.id).groups;\r\n if (groups[\"num\"] && groups[\"ctl\"])\r\n TC.setUIDStart(parseInt(groups[\"num\"]) + 1, { prefix: groups[\"ctl\"] });\r\n }\r\n\r\n }\r\n\r\n let zIndex = layer.options ? layer.options.zIndex : layer.zIndex;\r\n if (typeof zIndex !== 'number') {\r\n zIndex = layer.stealth ? 1 : 0;\r\n }\r\n\r\n self._layerBuffer.add(layer.id || layer, zIndex, layer.isBase);\r\n\r\n if (self.getLayer(layer.id)) {\r\n // Si ya existe capa con el mismo id, lanzamos error\r\n const error = Error(`Layer \"${layer.id}\" already exists`);\r\n error.layerId = layer.id;\r\n reject(error);\r\n return;\r\n }\r\n\r\n var lyr;\r\n if (typeof layer === 'string') {\r\n lyr = new TC.layer.Raster(TC.Util.extend({}, getAvailableBaseLayer.call(self, layer), { map: self }));\r\n }\r\n else {\r\n if (layer instanceof TC.Layer) {\r\n lyr = layer;\r\n lyr.map = self;\r\n }\r\n else {\r\n layer.map = self;\r\n if (layer.type === TC.Consts.layerType.VECTOR || layer.type === TC.Consts.layerType.KML || layer.type === TC.Consts.layerType.WFS) {\r\n lyr = new TC.layer.Vector(layer);\r\n }\r\n else {\r\n lyr = new TC.layer.Raster(layer);\r\n }\r\n }\r\n }\r\n\r\n Promise.all([self.wrap.getMap(), lyr.wrap.getLayer()]).then(function () {\r\n\r\n self.trigger(TC.Consts.event.BEFORELAYERADD, { layer: lyr });\r\n\r\n // Nos aseguramos de que las capas raster se quedan por debajo de las vectoriales\r\n var idx;\r\n if (isRaster(lyr)) {\r\n appendRasterEvents(lyr);\r\n idx = self.wrap.indexOfFirstVector();\r\n }\r\n if (idx === -1) {\r\n idx = self.wrap.getLayerCount();\r\n }\r\n\r\n const currentCrs = self.state && self.state.crs ? self.state.crs : self.getCRS();\r\n TC.loadProjDef({\r\n crs: currentCrs,\r\n callback: function () {\r\n const isCompatible = lyr.isCompatible(currentCrs);\r\n if (lyr.isBase) {\r\n const baseLayerEndFn = function () {\r\n if (self.state) {\r\n lyr.isDefault = self.state.base === lyr.id ||\r\n self.state.base === lyr.options.fallbackLayer;\r\n }\r\n else if (typeof self.options.defaultBaseLayer === 'string') {\r\n lyr.isDefault = self.options.defaultBaseLayer === lyr.id;\r\n }\r\n else if (typeof self.options.defaultBaseLayer === 'number') {\r\n lyr.isDefault = self.options.defaultBaseLayer === self.baseLayers.length;\r\n }\r\n if (lyr.isDefault) {\r\n var fit;\r\n if (lyr.mustReproject &&\r\n (lyr.type !== TC.Consts.layerType.WMTS || !lyr.wrap.getCompatibleMatrixSets(currentCrs)[0])) {\r\n if (lyr.options.fallbackLayer && lyr.getFallbackLayer) {\r\n\r\n self.addLayer(lyr.getFallbackLayer()).then(function (l) {\r\n self.wrap.setBaseLayer(l.wrap.layer);\r\n self.baseLayer = l.wrap.parent;\r\n // GLS: Tema casita + initialExtent\r\n fitToInitialExtent(fit);\r\n\r\n resolve(lyr);\r\n });\r\n } else {\r\n reject(crsLayerError(self, lyr));\r\n }\r\n }\r\n else {\r\n fit = self.baseLayer === null;\r\n\r\n lyr.wrap.getLayer().then(function (ollyr) {\r\n self.wrap.setBaseLayer(ollyr);\r\n self.baseLayer = lyr;\r\n\r\n // GLS: Tema casita + initialExtent\r\n fitToInitialExtent(fit);\r\n\r\n resolve(lyr);\r\n });\r\n }\r\n }\r\n else {\r\n //self.baseLayers.push(lyr);\r\n resolve(lyr);\r\n }\r\n };\r\n if (isCompatible) {\r\n baseLayerEndFn();\r\n }\r\n else {\r\n // Puede ser que sea una capa nueva en un capabilities nuevo que lo tenemos cacheado\r\n // Antes de lanzar error, nos aseguramos de que tenemos la versión nueva\r\n lyr.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n lyr.capabilities = onlineCapabilities;\r\n if (!lyr.isCompatible(currentCrs)) {\r\n if (lyr.type !== TC.Consts.layerType.WMTS) {\r\n lyr.mustReproject = true;\r\n }\r\n else {\r\n const compatibleMatrixSet = lyr.wrap.getCompatibleMatrixSets(currentCrs)[0];\r\n if (compatibleMatrixSet) {\r\n lyr.wrap.setMatrixSet(compatibleMatrixSet);\r\n }\r\n else {\r\n lyr.mustReproject = true;\r\n }\r\n }\r\n }\r\n baseLayerEndFn();\r\n });\r\n }\r\n }\r\n else {\r\n if (isCompatible) {\r\n lyr.wrap.getLayer().then(function (_l) {\r\n resolve(lyr);\r\n });\r\n }\r\n else {\r\n // Puede ser que sea una capa nueva en un capabilities nuevo que lo tenemos cacheado\r\n // Antes de lanzar error, nos aseguramos de que tenemos la versión nueva\r\n lyr.getCapabilitiesOnline().then(function (onlineCapabilities) {\r\n lyr.capabilities = onlineCapabilities;\r\n if (lyr.isCompatible(currentCrs)) {\r\n lyr.wrap.getLayer().then(function (_l) {\r\n resolve(lyr);\r\n });\r\n }\r\n else {\r\n reject(crsLayerError(self, lyr));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }, function (error) {\r\n var err = new Error(error);\r\n err.layerId = layer.id;\r\n reject(err);\r\n });\r\n });\r\n\r\n result\r\n .then(function (l) {\r\n self._layerBuffer.resolve(self, l, l.isBase);\r\n if (!l.isBase) {\r\n self.wrap.insertLayer(l.wrap.layer, self._layerBuffer.getResolvedVisibleLayerIndex(self, l.id));\r\n }\r\n self.trigger(TC.Consts.event.LAYERADD, { layer: l });\r\n self._layerBuffer.checkMapLoad(self);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(l);\r\n }\r\n }, function (err) {\r\n self._layerBuffer.reject(self, err);\r\n self._layerBuffer.checkMapLoad(self);\r\n });\r\n\r\n const fitToInitialExtent = function (fit) {\r\n if (fit) {\r\n self.setExtent(self.initialExtent, { animate: false, contain: true });\r\n }\r\n };\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade o actualiza una capa al mapa.\r\n * @method addLayer\r\n * @async\r\n * @param {TC.Layer|TC.cfg.LayerOptions|string} layer Objeto de capa, objeto de opciones del constructor de la capa, o identificador de capa.\r\n * @param {function} [callback] Función de callback.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Layer\"}}{{/crossLink}}\r\n */\r\n mapProto.addOrUpdateLayer = async function (layer, callback) {\r\n const self = this;\r\n const currentLayer = self.getLayer(layer.id);\r\n if (currentLayer) {\r\n //actualiza\t\t\t\r\n const layerNamesAsArray = Array.isArray(layer.layerNames) ? layer.layerNames :\r\n layer.layerNames ? layer.layerNames.split(',') : [];\r\n switch (currentLayer.type) {\r\n case TC.Consts.layerType.WFS:\r\n break;\r\n case TC.Consts.layerType.WMS:\r\n if (currentLayer.layerNames !== layerNamesAsArray) {\r\n await currentLayer.setLayerNames(layerNamesAsArray);\r\n }\r\n if (layer.visibility != undefined && currentLayer.visibility !== layer.visibility) {\r\n currentLayer.setVisibility(layer.visibility);\r\n currentLayer.renderOptions = Object.assign(layer.renderOptions, { hide: layer.visibility });\r\n }\r\n if (layer.opacity !== undefined && currentLayer.opacity !== layer.opacity) {\r\n currentLayer.setOpacity(layer.opacity, true);\r\n currentLayer.renderOptions = Object.assign(layer.renderOptions, { opacity: layer.opacity });\r\n }\r\n currentLayer.unremovable = layer.unremovable;\r\n currentLayer.title = layer.title;\r\n currentLayer.hideTree = layer.hideTree;\r\n break;\r\n default:\r\n break;\r\n }\r\n return currentLayer;\r\n }\r\n return await self.addLayer(layer, callback);\r\n };\r\n\r\n mapProto.removeLayer = function (layer) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, reject) {\r\n\r\n if (layer.unremovable) {\r\n return reject(\"Unremovable\");\r\n }\r\n\r\n let found = false;\r\n for (var i = 0; i < self.layers.length; i++) {\r\n if (self.layers[i] === layer) {\r\n self.layers.splice(i, 1);\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n reject(new Error(`Layer ${layer.id} not found in map`));\r\n return;\r\n }\r\n if (layer.isBase) {\r\n for (i = 0; i < self.baseLayers.length; i++) {\r\n if (self.baseLayers[i] === layer) {\r\n self.baseLayers.splice(i, 1);\r\n if (self.baseLayer === layer) {\r\n self.setBaseLayer(self.baseLayers[0]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (i = 0; i < self.workLayers.length; i++) {\r\n if (self.workLayers[i] === layer) {\r\n self.workLayers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if (layer === self.vectors) {\r\n self.vectors = null;\r\n }\r\n }\r\n\r\n layer.wrap.getLayer().then(function (olLayer) {\r\n self.wrap.removeLayer(olLayer);\r\n self._layerBuffer.remove(layer.id);\r\n self.trigger(TC.Consts.event.LAYERREMOVE, { layer: layer });\r\n self._layerBuffer.checkMapLoad(self);\r\n resolve(layer);\r\n });\r\n });\r\n };\r\n\r\n mapProto.insertLayer = function (layer, idx, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n var beforeIdx = -1;\r\n for (var i = 0; i < self.layers.length; i++) {\r\n if (layer === self.layers[i]) {\r\n beforeIdx = i;\r\n break;\r\n }\r\n }\r\n\r\n var promises = [];\r\n promises.push(layer.wrap.getLayer());\r\n var targetLayer = self.layers[idx];\r\n if (targetLayer) {\r\n promises.push(targetLayer.wrap.getLayer());\r\n }\r\n Promise.all(promises).then(function (olLayers) {\r\n const olLayer = olLayers[0];\r\n const olTargetLayer = olLayers[1];\r\n var olIdx = -1;\r\n if (olTargetLayer) {\r\n olIdx = self.wrap.getLayerIndex(olTargetLayer);\r\n }\r\n else {\r\n olIdx = self.wrap.getLayerCount();\r\n }\r\n if (olIdx >= 0) {\r\n layer.map = self;\r\n self.wrap.insertLayer(olLayer, olIdx);\r\n if (beforeIdx > -1) {\r\n self.layers.splice(beforeIdx, 1);\r\n }\r\n self.layers.splice(idx, 0, layer);\r\n self.workLayers = self.layers.filter(function (elm) {\r\n return !elm.isBase;\r\n });\r\n self.trigger(TC.Consts.event.LAYERORDER, { layer: layer, oldIndex: beforeIdx, newIndex: idx });\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve(layer);\r\n });\r\n });\r\n };\r\n\r\n mapProto.setLayerIndex = function (layer, idx) {\r\n const self = this;\r\n const olIdx = idx - self.baseLayers.length + 1;\r\n self.wrap.setLayerIndex(layer.wrap.layer, olIdx);\r\n };\r\n\r\n mapProto.putLayerOnTop = function (layer) {\r\n var self = this;\r\n var n = self.wrap.getLayerCount();\r\n self.wrap.setLayerIndex(layer.wrap.layer, n - 1);\r\n };\r\n\r\n /*\r\n * setBaseLayer: Set a layer as base layer, it is added to layers collection it wasn't before\r\n * Parameters: TC.Layer or string, callback which accepts layer as parameter\r\n * Returns: TC.Layer promise\r\n */\r\n mapProto.setBaseLayer = async function (layer, callback) {\r\n var self = this;\r\n var result = null;\r\n var found = false;\r\n\r\n if (typeof layer === 'string') {\r\n var i;\r\n for (i = 0; i < self.layers.length; i++) {\r\n if (self.layers[i].id === layer) {\r\n layer = self.layers[i];\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n layer = getAvailableBaseLayer.call(self, layer);\r\n if (layer) {\r\n layer = await self.addLayer(TC.Util.extend(true, {}, layer, { isDefault: true, isBase: true, map: self }));\r\n found = true;\r\n }\r\n }\r\n }\r\n else {\r\n if (self.layers.indexOf(layer) < 0) {\r\n layer.isDefault = true;\r\n layer.isBase = true;\r\n layer.map = self;\r\n self.addLayer(layer);\r\n // GLS: comento lo siguiente porque ya se va a tratar en la línea 1838, si no, se lanza el evento 2 veces\r\n //.then(function () { \r\n //self.trigger(TC.Consts.event.BASELAYERCHANGE, { layer: layer });\r\n //if (TC.Util.isFunction(callback)) {\r\n // callback();\r\n //}\r\n //});\r\n\r\n //result = layer;\r\n //return result;\r\n }\r\n found = true;\r\n }\r\n if (!found) {\r\n TC.error('Base layer is not available');\r\n }\r\n else {\r\n if (!layer.isCompatible(self.getCRS()) && (!layer.fallbackLayer || layer.fallbackLayer && !layer.fallbackLayer.isCompatible(self.getCRS()))) {\r\n TC.error('Base layer must be reprojected');\r\n }\r\n else {\r\n self.trigger(TC.Consts.event.BEFOREBASELAYERCHANGE, { oldLayer: self.getBaseLayer(), newLayer: layer });\r\n\r\n result = layer;\r\n await self.wrap.getMap();\r\n const olLayer = await layer.wrap.getLayer();\r\n await self.wrap.setBaseLayer(olLayer);\r\n self.baseLayer = layer;\r\n self.trigger(TC.Consts.event.BASELAYERCHANGE, { layer: layer });\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.setView = function (view) {\r\n const self = this;\r\n\r\n self.view = view;\r\n self.trigger(TC.Consts.event.VIEWCHANGE, { view: view });\r\n };\r\n\r\n /*\r\n * Asigna un callback que se ejecutará cuando los controles del mapa se hayan cargado.\r\n * @method ready\r\n * @async\r\n * @param {function} [callback] Función a ejecutar.\r\n */\r\n mapProto.ready = function (callback) {\r\n var self = this;\r\n if (TC.Util.isFunction(callback)) {\r\n if (self.isReady) {\r\n callback();\r\n }\r\n else {\r\n self.one(TC.Consts.event.MAPREADY, callback);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Asigna un callback que se ejecutará cuando los controles y las capas iniciales del mapa se hayan cargado.\r\n * @method loaded\r\n * @async\r\n * @param {function} [callback] Función a ejecutar.\r\n */\r\n mapProto.loaded = function (callback) {\r\n const self = this;\r\n if (TC.Util.isFunction(callback)) {\r\n if (self.isLoaded) {\r\n callback();\r\n }\r\n else {\r\n self.one(TC.Consts.event.MAPLOAD, callback);\r\n }\r\n }\r\n return new Promise(resolve => {\r\n if (self.isLoaded) {\r\n resolve();\r\n }\r\n else {\r\n self.one(TC.Consts.event.MAPLOAD, resolve);\r\n }\r\n });\r\n };\r\n\r\n\r\n\r\n /*\r\n * Devuelve un árbol de capas del mapa.\r\n * @method getLayerTree\r\n * @return {TC.LayerTree}\r\n */\r\n mapProto.getLayerTree = function () {\r\n\r\n\r\n var _traverse = function (o, func) {\r\n for (var i in o.children) {\r\n if (o.children && o.children.length > 0) {\r\n //bajar un nivel en el árbol\r\n _traverse(o.children[i], func);\r\n }\r\n\r\n func.apply(this, [o]);\r\n }\r\n };\r\n\r\n\r\n\r\n var self = this;\r\n var result = { baseLayers: [], workLayers: [] };\r\n if (self.baseLayer) {\r\n result.baseLayers[0] = self.baseLayer.getTree();\r\n }\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n var tree = self.workLayers[i].getTree();\r\n\r\n if (tree) {\r\n result.workLayers.unshift(tree);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade un control al mapa.\r\n * @method addControl\r\n * @async\r\n * @param {TC.Control|string} control Control a añadir o nombre del control\r\n * @param {object} [options] Objeto de opciones de configuración del control. Consultar el parámetro de opciones del constructor del control.\r\n * @return {Promise} Promesa de objeto {{#crossLink \"TC.Control\"}}{{/crossLink}}\r\n */\r\n mapProto.addControl = function (control, options) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, reject) {\r\n const _addCtl = function (ctl) {\r\n self.controls.push(ctl);\r\n // Lo envolvemos en Promise.resolve para asegurarse compatibilidad hacia atrás con los controles que devuelven un $.Deferred.\r\n return Promise.resolve(ctl.register(self))\r\n .then(function (c) {\r\n if (ctl.div) {\r\n if (!ctl.div.parentNode) {\r\n self.div.appendChild(ctl.div);\r\n }\r\n }\r\n self.trigger(TC.Consts.event.CONTROLADD, { control: ctl });\r\n return c;\r\n })\r\n .catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n };\r\n if (typeof control === 'string') {\r\n const ctorName = control.substr(0, 1).toUpperCase() + control.substr(1);\r\n const addStringControl = () => _addCtl(new TC.control[ctorName](null, options)).then(resolve);\r\n if (!TC.Control || !TC.control[ctorName]) {\r\n import(/* webpackMode: \"eager\" */ './control/' + ctorName).then(function (module) {\r\n TC.control[ctorName] = module.default;\r\n addStringControl();\r\n });\r\n }\r\n else {\r\n addStringControl();\r\n }\r\n }\r\n else {\r\n _addCtl(control).then(function (ctl) {\r\n resolve(ctl);\r\n });\r\n }\r\n });\r\n };\r\n\r\n /*\r\n * Devuelve la lista de controles que son de la clase especificada.\r\n * @method getControlsByClass\r\n * @param {function|string} classObj Nombre de la clase o función constructora de la clase.\r\n * @return {array}\r\n */\r\n mapProto.getControlsByClass = function (classObj) {\r\n var self = this;\r\n var result = [];\r\n var obj = classObj;\r\n if (typeof classObj === 'string') {\r\n obj = window;\r\n var namespaces = classObj.split('.');\r\n for (var i = 0; i < namespaces.length; i++) {\r\n obj = obj[namespaces[i]];\r\n if (!obj) {\r\n break;\r\n }\r\n }\r\n }\r\n if (TC.Util.isFunction(obj)) {\r\n self.controls.forEach(ctl => {\r\n if (ctl instanceof obj) {\r\n result.push(ctl);\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n };\r\n\r\n mapProto.getControlById = function (id) {\r\n const self = this;\r\n for (var i = 0, len = self.controls.length; i < len; i++) {\r\n const ctl = self.controls[i];\r\n if (ctl.id === id) {\r\n return ctl;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n mapProto.getDefaultControl = function () {\r\n const self = this;\r\n var candidate;\r\n if (self.options.defaultActiveControl) {\r\n candidate = self.getControlsByClass('TC.control.' + self.options.defaultActiveControl.substr(0, 1).toUpperCase() + self.options.defaultActiveControl.substr(1))[0];\r\n }\r\n if (!candidate) {\r\n candidate = self.getControlsByClass('TC.control.MultiFeatureInfo')[0];\r\n if (candidate) {\r\n candidate = candidate.lastCtrlActive;\r\n }\r\n else {\r\n candidate = self.getControlsByClass('TC.control.FeatureInfo')[0];\r\n }\r\n }\r\n return candidate;\r\n };\r\n\r\n /*\r\n * Devuelve el primer control del mapa que sea de la clase {{#crossLink \"TC.control.LoadingIndicator\"}}{{/crossLink}}.\r\n * @method getLoadingIndicator\r\n * @return {TC.control.LoadingIndicator}\r\n */\r\n mapProto.getLoadingIndicator = function () {\r\n var result = null;\r\n var ctls = this.getControlsByClass('TC.control.LoadingIndicator');\r\n if (ctls.length) {\r\n result = ctls[0];\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.addResultsPanel = function (options) {\r\n const self = this;\r\n const opts = Object.assign({}, options);\r\n const container = self.getControlsByClass(TC.control.ControlContainer)[0];\r\n if (container) {\r\n opts.position = container.POSITION.RIGHT;\r\n return container.addControl('resultsPanel', opts);\r\n }\r\n else {\r\n return self.addControl('resultsPanel', opts);\r\n }\r\n };\r\n\r\n /*\r\n * Establece la extensión del mapa.\r\n * @method setExtent\r\n * @param {array} extent Array de cuatro números que representan las coordenadas x mínima, y mínima, x máxima e y máxima respectivamente.\r\n * @param {object} [options] Objeto de opciones.\r\n * @param {boolean} [options.animate=true] Establece si se realiza una animación al cambiar la extensión.\r\n * La unidad de las coordenadas es la correspondiente al CRS del mapa.\r\n */\r\n mapProto.setExtent = function (extent, options, callback) {\r\n return this.wrap.setExtent(extent, options, callback);\r\n };\r\n\r\n /**\r\n * Obtiene la extensión actual del mapa.\r\n * @method getExtent\r\n * @return {array} Array de cuatro números que representan las coordenadas x mínima, y mínima, x máxima e y máxima respectivamente.\r\n * La unidad de las coordenadas es la correspondiente al CRS del mapa.\r\n */\r\n mapProto.getExtent = function () {\r\n return this.wrap.getExtent();\r\n };\r\n\r\n mapProto.getMaxExtent = function () {\r\n return this.maxExtent || null;\r\n };\r\n\r\n /*\r\n * Establece el centro del mapa.\r\n * @method setCenter\r\n * @param {array} coord Array de dos números que representan la coordenada del punto en las unidades correspondientes al CRS del mapa.\r\n * @param {object} [options] Objeto de opciones.\r\n * @param {boolean} [options.animate=true] Establece si se realiza una animación al centrar.\r\n */\r\n mapProto.setCenter = function (coord, options) {\r\n return this.wrap.setCenter(coord, options);\r\n };\r\n\r\n mapProto.getCenter = function () {\r\n return this.wrap.getCenter();\r\n };\r\n\r\n mapProto.setRotation = function (rotation) {\r\n this.wrap.setRotation(rotation);\r\n };\r\n\r\n mapProto.getRotation = function () {\r\n return this.wrap.getRotation();\r\n };\r\n\r\n mapProto.getViewHTML = function () {\r\n return this.wrap.getViewport();\r\n };\r\n\r\n\r\n mapProto.getCompatibleCRS = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const layers = options.layers || self.workLayers.concat(self.baseLayer);\r\n const crsLists = layers\r\n .filter(function (layer) {\r\n return layer.isRaster();\r\n }) // capas raster\r\n .map(function (layer) {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: options.includeFallbacks });\r\n });\r\n const otherCrsLists = crsLists.slice(1);\r\n return crsLists[0].filter(function (elm) {\r\n return otherCrsLists.every(function (crsList) {\r\n return crsList.indexOf(elm) >= 0;\r\n });\r\n });\r\n };\r\n\r\n mapProto.loadProjections = function (options) {\r\n const self = this;\r\n options = options || {};\r\n return new Promise(function (resolve, reject) {\r\n const crsList = options.crsList || [];\r\n Promise.all(crsList\r\n .map(function (crs) {\r\n return TC.getProjectionData({\r\n crs: TC.Util.getCRSCode(crs)\r\n });\r\n })).then(function (responses) {\r\n var projList = responses\r\n .filter(function (response) {\r\n return response.status === 'ok' && response.number_result > 0;\r\n })\r\n .map(function (response, index, array) {\r\n const projData = response.results[0];\r\n const code = 'EPSG:' + projData.code;\r\n TC.loadProjDef({\r\n crs: code,\r\n def: projData.def,\r\n name: projData.name,\r\n silent: index < array.length - 1 // Solo registramos proj4 en la última iteración\r\n });\r\n return {\r\n code: code,\r\n name: projData.name,\r\n proj4: projData.proj4,\r\n unit: projData.unit\r\n };\r\n });\r\n if (options.orderBy) {\r\n projList = projList\r\n .sort(TC.Util.getSorterByProperty(options.orderBy));\r\n }\r\n resolve(projList);\r\n },\r\n function (error) {\r\n reject(error);\r\n });\r\n });\r\n };\r\n\r\n mapProto.setProjection = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const oldCrs = self.crs;\r\n return new Promise(function (resolve, reject) {\r\n var baseLayer;\r\n if (options.crs) {\r\n self.isReprojecting = true;\r\n if (options.baseLayer) {\r\n baseLayer = options.baseLayer;\r\n }\r\n else if (options.allowFallbackLayer) {\r\n // Cambiamos de capa de fondo si es mejor o no hay más remedio\r\n if (!self.baseLayer.isCompatible(options.crs) &&\r\n self.baseLayer.wrap.getCompatibleMatrixSets(options.crs).length === 0) {\r\n if (self.baseLayer.options.fallbackLayer) {\r\n baseLayer = self.baseLayer.getFallbackLayer();\r\n }\r\n }\r\n else if (self.baseLayer.firstOption && (self.baseLayer.firstOption.isCompatible(options.crs) ||\r\n self.baseLayer.firstOption.wrap.getCompatibleMatrixSets(options.crs).length > 0)) {\r\n baseLayer = self.baseLayer.firstOption;\r\n }\r\n }\r\n if (!baseLayer) {\r\n baseLayer = self.baseLayer;\r\n }\r\n\r\n const endReproject = () => self.isReprojecting = false;\r\n\r\n const setOptionalExtent = async function () {\r\n if (options.extent) {\r\n await self.setExtent(options.extent);\r\n }\r\n };\r\n\r\n const resolveChange = async function () {\r\n endReproject();\r\n self.trigger(TC.Consts.event.PROJECTIONCHANGE, { oldCrs: oldCrs, newCrs: options.crs });\r\n await setOptionalExtent();\r\n resolve();\r\n };\r\n\r\n // 03/04/2019 GLS: esperamos a que termine de añadirse la capa porque si no se duplica en la gestión de la carga del CRS.\r\n const loadProj = function () {\r\n TC.loadProjDef({\r\n crs: options.crs,\r\n callback: function () {\r\n const setProjection = function (baseLayer) {\r\n\r\n const _setProjection = function () {\r\n const layerProjectionOptions = TC.Util.extend({}, options, { oldCrs: self.crs });\r\n const setLayerProjection = function (layer) {\r\n layer.setProjection(layerProjectionOptions);\r\n };\r\n if (baseLayer.isCompatible(options.crs) || baseLayer.wrap.getCompatibleMatrixSets(options.crs).length > 0) {\r\n baseLayer.setProjection(layerProjectionOptions);\r\n self.wrap.setProjection(TC.Util.extend({}, options, { baseLayer: baseLayer }));\r\n self.crs = options.crs;\r\n // En las capas base disponibles, evaluar su compatibilidad con el nuevo CRS\r\n self.baseLayers\r\n .filter(function (layer) {\r\n return layer !== baseLayer;\r\n })\r\n .forEach(setLayerProjection);\r\n // Reprojectamos capas cargadas\r\n self.workLayers.forEach(setLayerProjection);\r\n if (baseLayer && baseLayer !== self.baseLayer) {\r\n self.setBaseLayer(baseLayer, resolveChange);\r\n }\r\n else {\r\n resolveChange();\r\n }\r\n }\r\n else if (baseLayer.fallbackLayer) {\r\n setProjection(baseLayer.fallbackLayer);\r\n } else {\r\n endReproject();\r\n reject(Error('Layer has no fallback'));\r\n }\r\n };\r\n\r\n if (baseLayer.type === TC.Consts.layerType.WMS || baseLayer.type === TC.Consts.layerType.WMTS) {\r\n baseLayer.getCapabilitiesPromise().then(_setProjection).catch(endReproject);\r\n } else {\r\n _setProjection();\r\n }\r\n };\r\n\r\n setProjection(baseLayer);\r\n }\r\n });\r\n };\r\n\r\n if (self.baseLayers.indexOf(baseLayer) < 0) {\r\n self.addLayer(baseLayer).then(loadProj).catch(endReproject);\r\n } else {\r\n loadProj();\r\n }\r\n }\r\n });\r\n };\r\n\r\n mapProto.getMetersPerUnit = function () {\r\n return this.wrap.getMetersPerUnit();\r\n };\r\n\r\n /**\r\n * Obtiene una coordenada a partir de una posición del área de visualización del mapa en píxeles.\r\n * @method getCoordinateFromPixel\r\n * @param {array} xy Coordenada en píxeles de la posición en el área de visualización.\r\n * @return {array} Array de dos números que representa las coordenada del punto en las unidades correspondientes al CRS del mapa.\r\n */\r\n mapProto.getCoordinateFromPixel = function (xy) {\r\n return this.wrap.getCoordinateFromPixel(xy);\r\n };\r\n\r\n /**\r\n * Obtiene una posición en el área de visualización a partir de una coordenada.\r\n * @method getCoordinateFromPixel\r\n * @param {array} coord Coordenada en el mapa.\r\n * @return {array} Array de dos números que representa las posición del punto en píxeles.\r\n */\r\n mapProto.getPixelFromCoordinate = function (coord) {\r\n return this.wrap.getPixelFromCoordinate(coord);\r\n };\r\n\r\n /**\r\n * Establece la extensión del mapa de forma que abarque todas las entidades geográficas pasadas por parámetro.\r\n * @method zoomToFeatures\r\n * @param {array} features Array de entidades geográficas. Si está vacío este método no hace nada.\r\n * @param {object} [options] Objeto de opciones de zoom.\r\n * @param {number} [options.pointBoundsRadius=30] Radio en metros del área alrededor del punto que se respetará al hacer zoom.\r\n * @param {number} [options.extentMargin=0.2] Tamaño del margen que se aplicará a la extensión total de todas las entidades. \r\n * @param {boolean} [options.animate=false] Realizar animación al hacer el zoom. \r\n * El valor es la relación resultante de la diferencia de dimensiones entre la extensión ampliada y la original relativa a la original.\r\n */\r\n mapProto.zoomToFeatures = function (features, options) {\r\n const self = this;\r\n if (features.length > 0) {\r\n let bounds;\r\n const setExtent = () => {\r\n bounds = [Infinity, Infinity, -Infinity, -Infinity];\r\n var opts = options || {};\r\n opts.contain = true;\r\n var radius = opts.pointBoundsRadius || self.options.pointBoundsRadius;\r\n radius = radius / self.getMetersPerUnit();\r\n var extentMargin = opts.extentMargin;\r\n if (typeof extentMargin !== 'number') {\r\n extentMargin = self.options.extentMargin;\r\n }\r\n for (var i = 0; i < features.length; i++) {\r\n var b = features[i].getBounds();\r\n if (b) {\r\n bounds[0] = Math.min(bounds[0], b[0]);\r\n bounds[1] = Math.min(bounds[1], b[1]);\r\n bounds[2] = Math.max(bounds[2], b[2]);\r\n bounds[3] = Math.max(bounds[3], b[3]);\r\n }\r\n }\r\n if (bounds[2] - bounds[0] === 0) {\r\n bounds[0] = bounds[0] - radius;\r\n bounds[2] = bounds[2] + radius;\r\n }\r\n if (bounds[3] - bounds[1] === 0) {\r\n bounds[1] = bounds[1] - radius;\r\n bounds[3] = bounds[3] + radius;\r\n }\r\n if (extentMargin) {\r\n var dx = (bounds[2] - bounds[0]) * extentMargin / 2;\r\n var dy = (bounds[3] - bounds[1]) * extentMargin / 2;\r\n bounds[0] = bounds[0] - dx;\r\n bounds[1] = bounds[1] - dy;\r\n bounds[2] = bounds[2] + dx;\r\n bounds[3] = bounds[3] + dy;\r\n }\r\n if (self.maxExtent) {\r\n bounds[0] = Math.max(bounds[0], self.maxExtent[0]);\r\n bounds[1] = Math.max(bounds[1], self.maxExtent[1]);\r\n bounds[2] = Math.min(bounds[2], self.maxExtent[2]);\r\n bounds[3] = Math.min(bounds[3], self.maxExtent[3]);\r\n }\r\n self.setExtent(bounds, opts);\r\n };\r\n if (self.isReprojecting) {\r\n self.one(TC.Consts.event.PROJECTIONCHANGE, setExtent);\r\n }\r\n else {\r\n setExtent();\r\n }\r\n\r\n if (self.on3DView) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self._on3DZoomTo({ extent: bounds });\r\n }\r\n }\r\n };\r\n\r\n mapProto._on3DZoomTo = function (options) {\r\n const self = this;\r\n\r\n options = options || {};\r\n\r\n if (self.on3DView && options.extent && options.extent.length === 4) {\r\n // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n if (options.reprojected) {\r\n self.trigger(TC.Consts.event.ZOOMTO, options);\r\n } else {\r\n let extent = options.extent;\r\n let coordsXY = self.view3D.view2DCRS !== self.view3D.crs ?\r\n TC.Util.reproject(extent.slice(0, 2), self.view3D.view2DCRS, self.view3D.crs) :\r\n extent.slice(0, 2);\r\n\r\n let coordsXY2 = self.view3D.view2DCRS !== self.view3D.crs ?\r\n TC.Util.reproject(extent.slice(2), self.view3D.view2DCRS, self.view3D.crs) :\r\n extent.slice(2);\r\n\r\n options.extent = coordsXY.concat(coordsXY2);\r\n\r\n self.trigger(TC.Consts.event.ZOOMTO, options);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Establece la extensión del mapa de forma que abarque todas los marcadores que existen en él.\r\n * El método espera a todos los marcadores pendientes de incluir, dado que el método {{#crossLink \"TC.Map/addMarker:method\"}}{{/crossLink}} es asíncrono.\r\n * @method zoomToMarkers\r\n */\r\n mapProto.zoomToMarkers = function (options) {\r\n var self = this;\r\n Promise.all(self._markerPromises).then(function () {\r\n var markers = [];\r\n for (var i = 0; i < self.workLayers.length; i++) {\r\n var layer = self.workLayers[i];\r\n if (layer.type === TC.Consts.layerType.VECTOR) {\r\n for (var j = 0; j < layer.features.length; j++) {\r\n var feature = layer.features[j];\r\n if (feature instanceof TC.feature.Marker) {\r\n markers.push(feature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n self.zoomToFeatures(markers, options);\r\n self._markerPromises = [];\r\n });\r\n };\r\n\r\n mapProto.zoomToLayer = function (layer, options) {\r\n const self = this;\r\n layer = self.getLayer(layer);\r\n if (layer.isRaster()) {\r\n const extent = layer.getExtent();\r\n if (extent) {\r\n options = options || {};\r\n options.contain = true;\r\n if (typeof options.extentMargin !== 'number') {\r\n options.extentMargin = self.options.extentMargin;\r\n }\r\n self.setExtent(extent, options);\r\n\r\n if (self.on3DView) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self._on3DZoomTo({ extent: extent, reprojected: true });\r\n /* reprojected: true:\r\n Al obtener el extent de la capa desde el capabilities ya se gestiona que el CRS del mapa está en 4326\r\n porque map.getCRS ya gestiona si estamos en 3D o no por lo que el extent ya llega en geográficas.\r\n */\r\n }\r\n }\r\n }\r\n else {\r\n if (layer.features && layer.features.length) {\r\n self.zoomToFeatures(layer.features, options);\r\n }\r\n }\r\n };\r\n\r\n /*\r\n * Obtiene una capa por su identificador o devuelve la propia capa.\r\n * @method getLayer\r\n * @param {string|TC.Layer} layer Identificador de la capa u objeto de capa.\r\n * @return {TC.Layer}\r\n */\r\n mapProto.getLayer = function (layer) {\r\n const self = this;\r\n var result = null;\r\n if (typeof layer === 'string') {\r\n for (var i = 0; i < self.layers.length; i++) {\r\n if (self.layers[i].id === layer) {\r\n result = self.layers[i];\r\n break;\r\n }\r\n }\r\n }\r\n else if (TC.Layer && layer instanceof TC.Layer && layer.map === self) {\r\n result = layer;\r\n }\r\n return result;\r\n };\r\n\r\n var _getVectors = function (map) {\r\n var result;\r\n if (!map.vectors) {\r\n result = map.addLayer({\r\n id: TC.getUID(), title: TC.i18n[map.options.locale].vectorLayer, type: TC.Consts.layerType.VECTOR\r\n });\r\n map.vectors = result;\r\n result.then(function (vectors) {\r\n map.vectors = vectors;\r\n });\r\n }\r\n else {\r\n result = Promise.resolve(map.vectors);\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Añade un punto al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPoint\r\n * @async\r\n * @param {array} coord Array de dos números representando la coordenada del punto en las unidades del CRS del mapa.\r\n * @param {TC.cfg.PointStyleOptions} [options] Opciones del punto.\r\n */\r\n mapProto.addPoint = function (coord, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPoint(coord, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPoint(coord, options);\r\n });\r\n }\r\n };\r\n\r\n /*\r\n * Añade un marcador puntual al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addMarker\r\n * @async\r\n * @param {array} coord Array de dos números representando la coordenada del punto en las unidades del CRS del mapa.\r\n * @param {TC.cfg.MarkerStyleOptions} [options] Opciones del marcador.\r\n */\r\n mapProto.addMarker = async function (coord, options, callback) {\r\n const self = this;\r\n if (TC.Util.isFunction(options)) {\r\n callback = options;\r\n options = {};\r\n }\r\n else {\r\n options = options || {};\r\n }\r\n let markerPromise;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n markerPromise = layer.addMarker(coord, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n markerPromise = Promise.reject(new Error('Layer \"' + options.layer + '\" not found'));\r\n }\r\n self._markerPromises.push(markerPromise);\r\n }\r\n else {\r\n // Se añade una promise más para evitar que zoomToMarkers salte antes de poblarse el array _markerPromises.\r\n markerPromise = new Promise(function (resolve, _reject) {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addMarker(coord, options).then(function (marker) {\r\n resolve(marker);\r\n });\r\n });\r\n });\r\n self._markerPromises.push(markerPromise);\r\n }\r\n const marker = await markerPromise;\r\n if (TC.Util.isFunction(callback)) {\r\n callback(marker);\r\n }\r\n return marker;\r\n };\r\n\r\n /**\r\n * Añade una polilínea al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPolyline\r\n * @async\r\n * @param {array} coords Array de arrays de dos números representando las coordenadas de los vértices en las unidades del CRS del mapa.\r\n * @param {object} [options] Opciones de la polilínea.\r\n */\r\n mapProto.addPolyline = function (coords, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPolyline(coords, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPolyline(coords, options);\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Añade un polígono al mapa. Si no se especifica una capa en el parámetro de opciones se añadirá a una capa vectorial destinada a añadir entidades geográficas.\r\n * Esta capa se crea al añadir por primera vez una entidad sin especificar capa.\r\n * @method addPolygon\r\n * @async\r\n * @param {array} coords Array que contiene anillos. Estos a su vez son arrays de arrays de dos números representando las coordenadas de los vértices en las unidades del CRS del mapa.\r\n * El primer anillo es el exterior y el resto son islas. No es necesario cerrar los anillos (poner el mismo vértice al principio y al final).\r\n * @param {object} [options] Opciones del polígono.\r\n */\r\n mapProto.addPolygon = function (coords, options) {\r\n var self = this;\r\n if (options && options.layer) {\r\n var layer = self.getLayer(options.layer);\r\n if (layer) {\r\n layer.addPolygon(coords, TC.Util.extend(true, {}, options, { layer: layer }));\r\n }\r\n else {\r\n throw new Error('Layer \"' + options.layer + '\" not found');\r\n }\r\n }\r\n else {\r\n _getVectors(self).then(function (vectors) {\r\n vectors.addPolygon(coords, options);\r\n });\r\n }\r\n };\r\n\r\n mapProto.removeFeatures = function (features) {\r\n const self = this;\r\n self\r\n .workLayers\r\n .filter(wl => TC.layer.Vector && wl instanceof TC.layer.Vector)\r\n .map(function (layer) {\r\n return {\r\n layer: layer,\r\n features: layer.features.filter(f => features.includes(f))\r\n };\r\n })\r\n .forEach(fg => fg.features.forEach(f => fg.layer.removeFeature(f)));\r\n };\r\n\r\n\r\n mapProto.getBaseLayer = function () {\r\n return this.baseLayer || this.baseLayers[0];\r\n };\r\n\r\n mapProto.getResolutions = function () {\r\n return this.wrap.getResolutions();\r\n };\r\n\r\n mapProto.getResolution = function () {\r\n return this.wrap.getResolution();\r\n };\r\n\r\n mapProto.setResolution = function (resolution) {\r\n return this.wrap.setResolution(resolution);\r\n };\r\n\r\n mapProto.exportFeatures = async function (features, options) {\r\n var self = this;\r\n options = options || {};\r\n var loadingCtl = self.getLoadingIndicator();\r\n var waitId = loadingCtl && loadingCtl.addWait();\r\n // Eliminamos las elevaciones nulas\r\n // En GPX hay un bug con los valores cero, que hace que se tome el valor de elevación del punto previo, por eso ponemos NaN.\r\n const elevSubst = options.format === TC.Consts.format.GPX ? Number.NaN : 0;\r\n features.forEach(function (feature, idx) {\r\n // Decodificamos entidades HTML de la feature\r\n const data = feature.getData();\r\n for (let key in data) {\r\n if (/&(\\w+|#\\d{2,4});/g.test(key)) {\r\n const value = data[key];\r\n const newData = {};\r\n const elm = document.createElement('div');\r\n elm.innerHTML = key;\r\n newData[elm.innerText] = value;\r\n feature.unsetData(key);\r\n feature.setData(newData);\r\n }\r\n }\r\n // Formateamos el valor de elevación\r\n var flatCoords = feature.getCoords({ pointArray: true });\r\n if (flatCoords.some(function (point) {\r\n return point[2] === null;\r\n })) {\r\n const newFeature = feature.clone();\r\n newFeature.setId(feature.id);\r\n features[idx] = feature = newFeature;\r\n flatCoords = feature.getCoords({ pointArray: true });\r\n flatCoords.forEach(function (point) {\r\n if (point[2] === null) {\r\n point[2] = elevSubst;\r\n }\r\n });\r\n }\r\n });\r\n const format = options.format || \"\";\r\n if (format === TC.Consts.format.SHAPEFILE) {\r\n const defaultEncoding = \"ISO-8859-1\";\r\n //generar shape\r\n\r\n //agrupar por capa\r\n const layers = features.reduce(function (rv, feature) {\r\n var id = feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n //var id = feature.layer? (typeof(feature.layer)===\"string\"?feature.layer:feature.layer.id) :feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n (rv[id] = rv[id] || []).push(feature);\r\n return rv;\r\n }, {});\r\n\r\n const getInnerType = function (type) {\r\n\r\n switch (true) {\r\n case type === 'TC.feature.Point':\r\n return 'POINT';\r\n case type === 'TC.feature.Polygon':\r\n case type === 'TC.feature.MultiPolygon':\r\n return 'POLYGON';\r\n case type === 'TC.feature.Polyline':\r\n case type === 'TC.feature.MultiPolyline':\r\n return 'POLYLINE';\r\n }\r\n return 'NULL';\r\n };\r\n const proj = await TC.getProjectionData({ crs: self.crs });\r\n\r\n const arrPromises = [];\r\n const shpWrite = (await import('@aleffabricio/shp-write/index')).default;\r\n let layerId;\r\n for (layerId in layers) {\r\n //agrupar las features por tipos\r\n let groups = layers[layerId].reduce(function (rv, x) {\r\n (rv[x.CLASSNAME] = rv[x.CLASSNAME] || []).push(x);\r\n return rv;\r\n }, {});\r\n let group;\r\n for (group in groups) {\r\n arrPromises.push(new Promise(function (resolve) {\r\n const _group = group;\r\n const _features = groups[_group];\r\n const data = _features.reduce(function (prev, curr) {\r\n const data = {};\r\n for (var key in curr.data) {\r\n const val = curr.data[key];\r\n data[key] = typeof val === 'string' ?\r\n val.replace(/•/g, \"•\").replace(/›/g, \"›\") :\r\n val;\r\n }\r\n if (curr.getStyle().label && !curr.data.name)\r\n data.name = curr.getStyle().label;\r\n return prev.concat([data]);\r\n }, []);\r\n const geometries = _features.reduce(function (prev, curr) {\r\n //No se porque no le gusta las geometrias polyline de la herramienta draw por tanto las convierto a multipolyline\r\n if (curr instanceof TC.feature.Polyline) {\r\n curr = new TC.feature.MultiPolyline(curr.getCoords(), curr.options);\r\n }\r\n //si el sistema de referencia es distinto a EPSG:4326 reproyecto las geometrias\t\t\t\t\t\t\t\r\n return prev.concat([curr.geometry]);\r\n }, []);\r\n //generamos el un shape mas sus allegados por grupo\r\n shpWrite.write(data\r\n , getInnerType(_group)\r\n , geometries\r\n , function (_empty, content) {\r\n const fileName = layerId + (Object.keys(groups).length > 1 ? \"_\" + getInnerType(_group) : \"\");\r\n resolve({ \"fileName\": fileName, \"content\": content });\r\n });\r\n }));\r\n }\r\n }\r\n\r\n const resolves = [];\r\n for (var i = 0; i < arrPromises.length; i++) {\r\n resolves[i] = await arrPromises[i];\r\n }\r\n\r\n //creamos el fichero zip\r\n const JSZip = (await import(\"jszip/dist/jszip\")).default;\r\n const zip = new JSZip();\r\n resolves.forEach(resolve => {\r\n zip.file(resolve.fileName + \".shp\", resolve.content.shp.buffer);\r\n zip.file(resolve.fileName + \".shx\", resolve.content.shx.buffer);\r\n zip.file(resolve.fileName + \".dbf\", resolve.content.dbf.buffer);\r\n zip.file(resolve.fileName + \".prj\", proj.results[0].wkt);\r\n zip.file(resolve.fileName + \".cst\", defaultEncoding);\r\n zip.file(resolve.fileName + \".cpg\", defaultEncoding);\r\n });\r\n try {\r\n const blob = await zip.generateAsync({ type: \"blob\" });\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return blob;\r\n }\r\n catch (err) {\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n throw err;\r\n }\r\n }\r\n if (format === TC.Consts.format.GEOPACKAGE) {\r\n const fieldDataType = function (geopackage, value) {\r\n var name = '';\r\n switch (typeof value) {\r\n case \"string\":\r\n name = geopackage.DataTypes.TEXT;\r\n break;\r\n case \"number\":\r\n if (value % 1 === 0)\r\n name = geopackage.DataTypes.INT;\r\n else\r\n name = geopackage.DataTypes.FLOAT;\r\n break;\r\n case \"boolean\":\r\n name = geopackage.DataTypes.BOOLEAN;\r\n break;\r\n default:\r\n name = geopackage.DataTypes.TEXT;\r\n //date y datetime\r\n }\r\n return name;\r\n };\r\n const currentCrs = self.crs;\r\n const geopackage = await import(\"../lib/geopackagejs/dist/geopackage-browser\");\r\n await import(\"wkx/dist/wkx\");\r\n const wkx = require('wkx');\r\n //Promise.all([import(\"../lib/geopackagejs/dist/geopackage-browser\"), import(\"wkx/dist/wkx\")]).then(async function (responses) { \r\n const geopackageAPI = geopackage.GeoPackageAPI;\r\n const FeatureColumn = geopackage.FeatureColumn;\r\n const GeometryColumns = geopackage.GeometryColumns;\r\n const myPackage = await geopackageAPI.create();\r\n\r\n var srs_id = currentCrs.substr(currentCrs.indexOf(\":\") + 1);\r\n if (!myPackage.spatialReferenceSystemDao.queryForId(srs_id)) {\r\n var newSRS = myPackage.spatialReferenceSystemDao.createObject();\r\n var projData = await TC.getProjectionData({ crs: currentCrs });\r\n newSRS.srs_name = currentCrs;\r\n newSRS.srs_id = projData.results[0].code;\r\n newSRS.organization = currentCrs.substr(0, currentCrs.indexOf(\":\"));\r\n newSRS.organization_coordsys_id = projData.results[0].code;\r\n newSRS.definition = projData.results[0].proj4.trim();\r\n newSRS.definition_12_063 = projData.results[0].wkt.trim();\r\n newSRS.description = projData.results[0].name;\r\n myPackage.spatialReferenceSystemDao.create(newSRS);\r\n }\r\n //agrupar por capa\r\n //const timestamp = options.fileName.substring(options.fileName.lastIndexOf(\"_\", options.fileName.lastIndexOf(\"_\") - 1) + 1); \r\n const layers = features.reduce(function (rv, feature) {\r\n var id = typeof feature.id === \"string\" ? feature.id.substr(0, feature.id.lastIndexOf(\".\")) : options.fileName;\r\n //var id = feature.layer ? (typeof (feature.layer) === \"string\" ? feature.layer : feature.layer.id) : feature.id.substr(0, feature.id.lastIndexOf(\".\"));\r\n (rv[id] = rv[id] || []).push(feature);\r\n return rv;\r\n }, {});\r\n let layerId;\r\n for (layerId in layers) {\r\n //agrupar las features por tipos\r\n let groups = layers[layerId].reduce(function (rv, x) {\r\n (rv[x.CLASSNAME] = rv[x.CLASSNAME] || []).push(x);\r\n return rv;\r\n }, {});\r\n let group;\r\n for (group in groups) {\r\n const _features = groups[group];\r\n //crear columnas\r\n\r\n let i = 0;\r\n\r\n const geometryType = _features[0].CLASSNAME.substr(_features[0].CLASSNAME.lastIndexOf(\".\") + 1).replace(\"Polyline\", \"LineString\").replace(\"Marker\", \"Point\");\r\n const tableName = layerId + (Object.keys(groups).length > 1 ? \"_\" + geometryType : \"\");// + (timestamp ? \"_\" + timestamp : \"\");\r\n var columns = [];\r\n //var dataColumns = [];\r\n var pkColumnName = \"id\";\r\n\r\n if (Object.prototype.hasOwnProperty.call(features[0], \"id\") ||\r\n Object.prototype.hasOwnProperty.call(features[0], \"ID\")) {\r\n columns.push(FeatureColumn.createPrimaryKeyColumnWithIndexAndName(i++, pkColumnName));\r\n }\r\n columns.push(FeatureColumn.createGeometryColumn(i++, 'geometry', geometryType.toUpperCase(), true, null));\r\n\r\n var bounds = [Infinity, Infinity, -Infinity, -Infinity];\r\n for (var j = 0; j < _features.length; j++) {\r\n var b = _features[j].getBounds();\r\n if (b) {\r\n bounds[0] = Math.min(bounds[0], b[0]);\r\n bounds[1] = Math.min(bounds[1], b[1]);\r\n bounds[2] = Math.max(bounds[2], b[2]);\r\n bounds[3] = Math.max(bounds[3], b[3]);\r\n }\r\n }\r\n\r\n for (var x in _features[0].data || _features[0].attributes) {\r\n var fieldName = _features[0].attributes && _features[0].attributes[x] ? _features[0].attributes[x].name : x;\r\n if (fieldName.toLowerCase() === 'id') continue;\r\n var fieldValue = _features[0].data[fieldName];\r\n const c = FeatureColumn.createColumn(i++, fieldName, fieldDataType(geopackage, fieldValue));\r\n columns.push(c);\r\n //dataColumns.push(c);\r\n }\r\n //si alguna feature tiene simbología de tipo texto se añade como una columna más a la tabla llamada \"name\"\r\n if (_features.some(f => f.getStyle().label && !f.data.name)) {\r\n const c = FeatureColumn.createColumn(i++, \"name\", geopackage.DataTypes.TEXT);\r\n columns.push(c);\r\n }\r\n\r\n\r\n var geometryColumns = new GeometryColumns();\r\n geometryColumns.table_name = tableName;\r\n geometryColumns.column_name = 'geometry';\r\n geometryColumns.geometry_type_name = geometryType.toUpperCase();\r\n geometryColumns.z = _features[0].getGeometryStride();\r\n geometryColumns.m = 2;\r\n geometryColumns.srs_id = srs_id;\r\n i = 0;\r\n const boundingBox = new geopackage.BoundingBox(bounds[0], bounds[2], bounds[1], bounds[3]);\r\n await myPackage.createFeatureTable(tableName, geometryColumns, columns, boundingBox, srs_id)\r\n //geopackage.createFeatureTableWithDataColumnsAndBoundingBox(myPackage, tableName, geometryColumns, columns, null, boundingBox, srs_id)\r\n const featureDao = myPackage.getFeatureDao(tableName);\r\n for (let i = 0; i < _features.length; i++) {\r\n const feature = _features[i];\r\n const featureRow = featureDao.newRow();\r\n const geometryData = new geopackage.GeometryData();\r\n geometryData.setSrsId(srs_id);\r\n const geometry = wkx.Geometry.parse('SRID=' + srs_id + ';' + new ol.format.WKT().writeFeature(feature.wrap.feature));\r\n //const geometry=(hexString => new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))))(new ol.format.WKB().writeGeometry(feature.wrap.feature.getGeometry(),{featureProjection:currentCrs,dataProjection:currentCrs}));\r\n geometryData.setGeometry(geometry);\r\n featureRow.setValueWithColumnName(featureRow.geometryColumn.name, geometryData);\r\n if (Object.prototype.hasOwnProperty.call(_features[i], \"id\") ||\r\n Object.prototype.hasOwnProperty.call(_features[i], \"ID\"))\r\n featureRow.setValueWithColumnName(pkColumnName, typeof feature.id === \"string\" ? feature.id.substring(feature.id.lastIndexOf(\".\") + 1) : feature.id);\r\n else if (Object.prototype.hasOwnProperty.call(_features[i].data, \"id\") ||\r\n Object.prototype.hasOwnProperty.call(_features[i].data, \"ID\"))\r\n featureRow.setValueWithColumnName(pkColumnName, typeof feature.id === \"string\" ? feature.id.substring(feature.id.lastIndexOf(\".\") + 1) : feature.id);\r\n for (var y in feature.data || feature.attributes) {\r\n const fieldName = _features[0].attributes && _features[0].attributes[y] ? _features[0].attributes[x].name : y;\r\n if (fieldName.toLowerCase() === 'id') {\r\n continue;\r\n }\r\n const fieldValue = feature.data[fieldName];\r\n featureRow.setValueWithColumnName(fieldName, fieldValue);\r\n }\r\n if (featureDao.columns.indexOf(\"name\") >= 0 && !feature.data.name) {\r\n featureRow.setValueWithColumnName(\"name\", feature.getStyle().label);\r\n }\r\n\r\n featureDao.create(featureRow);\r\n }\r\n }\r\n }\r\n\r\n let data;\r\n\r\n try {\r\n data = await myPackage.export();\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return data;\r\n }\r\n catch (error) {\r\n console.log(error);\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n }\r\n return;\r\n }\r\n const data = self.wrap.exportFeatures(features, options);\r\n const mimeType = TC.Consts.mimeType[options.format];\r\n if (format === TC.Consts.format.KMZ) {\r\n const JSZip = (await import(\"jszip/dist/jszip\")).default;\r\n const zip = new JSZip();\r\n zip.file((options.fileName || 'doc') + \".kml\", data);\r\n const blob = await zip.generateAsync({ type: \"blob\", mimeType: mimeType, compression: \"DEFLATE\" });\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return blob;\r\n }\r\n else {\r\n loadingCtl && loadingCtl.removeWait(waitId);\r\n return data;\r\n }\r\n };\r\n\r\n mapProto.exportControlStates = function () {\r\n const self = this;\r\n\r\n return self.controls\r\n .map(function (ctl) {\r\n return ctl.exportState();\r\n })\r\n .filter(function (state) {\r\n // Quitamos los estados nulos o vacíos\r\n if (state) {\r\n for (var key in state) {\r\n if (Object.prototype.hasOwnProperty.call(state, key)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n });\r\n };\r\n\r\n mapProto.importControlStates = function (controlStates) {\r\n const self = this;\r\n\r\n controlStates.forEach(function (state) {\r\n const ctl = self.getControlById(state.id);\r\n if (ctl) {\r\n self.loaded(function () {\r\n ctl.importState(state);\r\n });\r\n }\r\n });\r\n };\r\n\r\n var toasts = {};\r\n var toastHide = function () {\r\n const toast = this;\r\n var container = toast;\r\n do {\r\n container = container.parentElement;\r\n }\r\n while (container && !container.matches('.' + TC.Consts.classes.TOAST_CONTAINER));\r\n const text = toast.innerHTML;\r\n toast.classList.add(TC.Consts.classes.HIDDEN);\r\n if (toasts[text] !== undefined) {\r\n toasts[text] = undefined;\r\n }\r\n setTimeout(function () {\r\n if (toast.parentElement) {\r\n toast.parentElement.removeChild(toast);\r\n }\r\n if (container && !container.querySelector('.' + TC.Consts.classes.TOAST) && container.parentElement) {\r\n container.parentElement.removeChild(container);\r\n }\r\n }, 1000);\r\n };\r\n\r\n mapProto.toastHide = function (text) {\r\n var toastInfo = toasts[text];\r\n if (toastInfo) {\r\n clearTimeout(toastInfo.timeout);\r\n if (toastInfo.toast && toastInfo.toast.parentElement) {\r\n toastInfo.toast.parentElement.removeChild(toastInfo.toast);\r\n }\r\n toastInfo.toast = null;\r\n }\r\n };\r\n\r\n mapProto.toast = function (text, options) {\r\n const self = this;\r\n var opts = options || {\r\n };\r\n var duration = opts.duration || TC.Cfg.toastDuration;\r\n var toastInfo = toasts[text];\r\n if (toastInfo) {\r\n clearTimeout(toastInfo.timeout);\r\n if (toastInfo.toast && toastInfo.toast.parentElement) {\r\n toastInfo.toast.parentElement.removeChild(toastInfo.toast);\r\n }\r\n toastInfo.toast = null;\r\n }\r\n var container = self.div.querySelector('.' + TC.Consts.classes.TOAST_CONTAINER);\r\n if (!container) {\r\n container = document.createElement('div');\r\n container.classList.add(TC.Consts.classes.TOAST_CONTAINER);\r\n (opts.container ? opts.container : self.div).appendChild(container);\r\n }\r\n const toast = document.createElement('div');\r\n const span = document.createElement('span');\r\n toast.classList.add(TC.Consts.classes.TOAST);\r\n toast.appendChild(span);\r\n const p = document.createElement('p');\r\n p.innerHTML = text;\r\n toast.appendChild(p);\r\n toast.addEventListener(TC.Consts.event.CLICK, toastHide, { passive: true });\r\n container.appendChild(toast);\r\n toastInfo = toasts[text] = {\r\n toast: toast\r\n };\r\n\r\n var className = '';\r\n switch (opts.type) {\r\n case TC.Consts.msgType.INFO:\r\n className = TC.Consts.classes.INFO;\r\n break;\r\n case TC.Consts.msgType.WARNING:\r\n className = TC.Consts.classes.WARNING;\r\n break;\r\n case TC.Consts.msgType.ERROR:\r\n className = TC.Consts.classes.ERROR;\r\n break;\r\n }\r\n if (className.length) {\r\n toastInfo.toast.classList.add(className);\r\n }\r\n\r\n toastInfo.timeout = setTimeout(function () {\r\n toastHide.call(toastInfo.toast);\r\n }, duration);\r\n };\r\n\r\n // iPad iOS7 bug fix\r\n var mapHeightNeedsFix = false;\r\n var setHeightFix = function (div) {\r\n if (/iPad/i.test(navigator.userAgent)) {\r\n var ih = window.innerHeight;\r\n var mh = div.getBoundingClientRect.height;\r\n var dh = matchMedia('only screen and (orientation : landscape)').matches ? 20 : 0;\r\n if (mh === ih + dh) {\r\n mapHeightNeedsFix = true;\r\n }\r\n }\r\n var fix = function () {\r\n div.classList.toggle(TC.Consts.classes.IPAD_IOS7_FIX, matchMedia('only screen and (orientation : landscape)').matches);\r\n };\r\n if (mapHeightNeedsFix) {\r\n fix();\r\n window.addEventListener('resize', fix);\r\n }\r\n else {\r\n window.removeEventListener('resize', fix);\r\n }\r\n };\r\n\r\n var isRaster = function (layer) {\r\n return typeof layer === 'string' ||\r\n layer.type !== TC.Consts.layerType.VECTOR && layer.type !== TC.Consts.layerType.KML && layer.type !== TC.Consts.layerType.WFS;\r\n };\r\n\r\n mapProto.exportImage = function () {\r\n var self = this;\r\n var result = null;\r\n var errorMsg = 'El mapa actual no es compatible con la exportación de imágenes';\r\n var canvas = self.wrap.getViewport({ synchronous: true }).getElementsByTagName('canvas')[0];\r\n if (canvas && self.crossOrigin) {\r\n try {\r\n result = canvas.toDataURL();\r\n }\r\n catch (e) {\r\n TC.error(errorMsg + ': ' + e.message);\r\n }\r\n }\r\n else {\r\n TC.error(errorMsg);\r\n }\r\n return result;\r\n };\r\n\r\n mapProto.loadFiles = function (files, options) {\r\n const self = this;\r\n self.wrap.loadFiles(files, options);\r\n };\r\n\r\n mapProto.getElevationTool = function () {\r\n const self = this;\r\n if (!self.elevation && !self.options.elevation) {\r\n return Promise.resolve(null);\r\n }\r\n if (self.elevation) {\r\n return Promise.resolve(self.elevation);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n TC.loadJS(\r\n !TC.tool || !TC.tool.Elevation,\r\n TC.apiLocation + 'TC/tool/Elevation',\r\n function () {\r\n if (!self.options.elevation) {\r\n self.elevation = null;\r\n }\r\n else {\r\n const elevationOptions = typeof self.options.elevation === 'boolean' ? {} : self.options.elevation;\r\n if (elevationOptions.services && self.options.googleMapsKey) {\r\n elevationOptions.services = elevationOptions.services.map(function (service) {\r\n const isString = typeof service === 'string';\r\n const serviceName = isString ? service : service.name;\r\n if (serviceName === 'elevationServiceGoogle') {\r\n return TC.Util.extend({\r\n name: serviceName,\r\n googleMapsKey: self.options.googleMapsKey\r\n }, isString ? {} : service);\r\n }\r\n return service;\r\n });\r\n }\r\n self.elevation = new TC.tool.Elevation(elevationOptions);\r\n }\r\n resolve(self.elevation);\r\n }\r\n );\r\n });\r\n };\r\n\r\n\r\n const _checkMaxFeatures = function (numMaxfeatures, urlData, data) {\r\n return new Promise(function (resolve) {\r\n urlData.mapLayer.toolProxification.fetchXML(urlData.url, {\r\n data: data,\r\n contentType: 'application/xml',\r\n type: 'POST'\r\n }).then(function (response) {\r\n if (response instanceof XMLDocument) {\r\n const exception = response.querySelector(\"ExceptionReport Exception\");\r\n if (exception) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.INDETERMINATE,\r\n params: {\r\n err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n }\r\n }]\r\n });\r\n return;\r\n }\r\n }\r\n var featFounds = parseInt(response.querySelector(\"FeatureCollection\").getAttribute(\"numberMatched\") || response.querySelector(\"FeatureCollection\").getAttribute(\"numberOfFeatures\"), 10);\r\n if (isNaN(featFounds) || featFounds > parseInt(numMaxfeatures, 10)) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.MAX_NUM_FEATURES\r\n }]\r\n });\r\n return;\r\n }\r\n else if (featFounds === 0) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.NO_FEATURES\r\n }]\r\n });\r\n return;\r\n }\r\n else\r\n resolve(featFounds);\r\n\r\n }).catch(function (e) {\r\n //return Promise.reject(error);\r\n\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message }\r\n }]\r\n });\r\n return;\r\n });\r\n\r\n //TC.ajax({\r\n // url: url,\r\n // data: data,\r\n // contentType: 'application/xml',\r\n // responseType: 'application/xml',\r\n // method: 'POST'\r\n //}).then(function (response) {\r\n // const responseData = response.data;\r\n // if (responseData instanceof XMLDocument) {\r\n // const exception = responseData.querySelector(\"ExceptionReport Exception\")\r\n // if (exception) {\r\n // resolve({\r\n // errors: [{\r\n // key: TC.Consts.WFSErrors.INDETERMINATE,\r\n // params: {\r\n // err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n // }\r\n // }]\r\n // })\r\n // return;\r\n // }\r\n // }\r\n // var featFounds = parseInt(responseData.querySelector(\"FeatureCollection\").getAttribute(\"numberMatched\") || responseData.querySelector(\"FeatureCollection\").getAttribute(\"numberOfFeatures\"), 10); \r\n // if (isNaN(featFounds) || featFounds > parseInt(numMaxfeatures, 10)) {\r\n // resolve({\r\n // errors: [{\r\n // key: TC.Consts.WFSErrors.MAX_NUM_FEATURES\r\n // }]\r\n // });\r\n // return;\r\n // }\r\n // else if (featFounds === 0) {\r\n // resolve({\r\n // errors: [{\r\n // key: TC.Consts.WFSErrors.NO_FEATURES\r\n // }]\r\n // });\r\n // return;\r\n // }\r\n // else\r\n // resolve(featFounds);\r\n\r\n //}, function (e) {\r\n // resolve({\r\n // errors: [{\r\n // key: TC.Consts.WFSErrors.INDETERMINATE,\r\n // params: { err: e.name, errorThrown: e.message }\r\n // }]\r\n // });\r\n // return;\r\n //});\r\n });\r\n };\r\n\r\n const _makePostCall = function (objLayer, data) {\r\n return new Promise(function (resolve) {\r\n objLayer.mapLayer.toolProxification.fetch(objLayer.url, {\r\n data: data,\r\n contentType: 'application/xml',\r\n type: 'POST'\r\n }).then(function (response) {\r\n if (response instanceof XMLDocument) {\r\n const exception = response.querySelector(\"ExceptionReport Exception\");\r\n if (exception) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.INDETERMINATE,\r\n params: {\r\n err: exception.getAttribute(\"exceptionCode\"), errorThrown: exception.querySelector(\"ExceptionText\").textContent\r\n }\r\n }]\r\n });\r\n return;\r\n }\r\n }\r\n resolve({ response: response });\r\n }).catch(function (e) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message }\r\n }]\r\n });\r\n return;\r\n });\r\n });\r\n };\r\n\r\n const magicFunction = function (layer, availableLayers, filter) {\r\n //obtenemos el describe featuretype de cada capa\r\n return new Promise(async function (resolve, reject) {\r\n let response;\r\n try {\r\n response = await layer.describeFeatureType(availableLayers);\r\n }\r\n catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n var returnObject = {};\r\n if (availableLayers.length === 1) {\r\n var obj = {};\r\n obj[availableLayers[0]] = response;\r\n response = obj;\r\n }\r\n //buscamos las geometrías por cada respuesta\r\n for (var layerName in response) {\r\n let _filter;\r\n var geometryFields = [];\r\n for (var k in response[layerName]) {\r\n if (TC.Util.isGeometry(response[layerName][k].type) && !response[layerName][k].nillable && !response[layerName][k].minOccurs) {\r\n //if (/^gml:\\w+PropertyType$/.test(response[layerName][k].type) && !response[layerName][k].nillable && !response[layerName][k].minOccurs) {\r\n geometryFields.push(k);\r\n }\r\n }\r\n //Si solo hay un campo de tipo geometría bsucamos recursivamente entre en los filtros logicos And y or a la caza de filtros espaciales\r\n //para poner el nombre de la geometría\r\n if (geometryFields.length <= 1) {\r\n const recursive = (filter, geomName) => {\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n filter.conditions.forEach((condition) => recursive(condition, geomName));\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n filter.geometryName = geomName;\r\n return filter;\r\n }\r\n };\r\n _filter = Object.assign(new filter.constructor(), recursive(filter, geometryFields.length === 0 ? null : geometryFields[0]));\r\n }\r\n //Si has mas de un campo de tipo geometría bsucamos recursivamente entre en los filtros logicos And y or a la caza de filtros espaciales\r\n //para duplicar el filtro con los nombres de las geometrias y los emvolvemos en un filtro OR\r\n else if (geometryFields.length > 1) {\r\n const recursive = (filter, geomNames) => {\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n filter.conditions.forEach((condition) => recursive(condition, geomNames));\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n return TC.filter.or.apply(null, geomNames.reduce((acc, curr) => {\r\n acc.push(new TC.filter[filter.getTagName()](curr, filter.geometry, filter.srsName));\r\n return acc;\r\n }, []));\r\n }\r\n };\r\n _filter = Object.assign(new filter.constructor(), recursive(filter, geometryFields));\r\n }\r\n //ahora construimos el objeto que de vuelta\r\n returnObject[layerName] = _filter;\r\n }\r\n resolve(returnObject);\r\n\r\n });\r\n };\r\n\r\n mapProto.extractFeatures = function (options) {\r\n const self = this;\r\n const arrPromises = [];\r\n options = options || {};\r\n const filter = options.filter;\r\n const outputFormat = options.outputFormat;\r\n const download = options.download;\r\n const layersToExtract = options.layers || self.layers;\r\n\r\n const services = {};\r\n\r\n const _getServiceTitle = function (service) {\r\n const mapLayer = service.mapLayers[0];\r\n return service.title || service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, '') || mapLayer.tree && mapLayer.tree.title || mapLayer.capabilities.Service.Title;\r\n };\r\n\r\n\r\n const getCRS = function () {\r\n if (download && (outputFormat === TC.Consts.mimeType.JSON || outputFormat === TC.Consts.mimeType.KML))\r\n return TC.Consts.SRSDOWNLOAD_GEOJSON_KML;\r\n return self.getCRS();\r\n };\r\n const _postOrDownload = function (objlayer, data) {\r\n return new Promise(function (resolve) {\r\n if (!download) {\r\n _makePostCall(objlayer, data).then(function (response) {\r\n if (response.errors && response.errors.length > 0) {\r\n response.errors[0].params.serviceTitle = objlayer.service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, '') || _getServiceTitle(objlayer.service);\r\n resolve(response);\r\n }\r\n else {\r\n resolve(response);\r\n }\r\n });\r\n }\r\n else {\r\n objlayer.mapLayer.toolProxification.cacheHost.getAction(objlayer.url).then(function (cacheAction) {\r\n resolve({\r\n url: cacheAction.action(objlayer.url),\r\n data: data\r\n });\r\n });\r\n }\r\n });\r\n };\r\n layersToExtract.forEach(function (layer) {\r\n if (!layer.getVisibility() || self.workLayers.indexOf(layer) < 0 || layer.type !== TC.Consts.layerType.WMS) {\r\n return;\r\n }\r\n var availableLayers = layer.getDisgregatedLayerNames() || layer.availableNames;\r\n const url = layer.url.toLowerCase();\r\n var serviceObj = services[url];\r\n if (!serviceObj) {\r\n serviceObj = services[url] = {\r\n url: url,\r\n layers: [],\r\n mapLayers: [layer],\r\n layerNames: []\r\n };\r\n }\r\n for (var i = 0; i < availableLayers.length; i++) {\r\n var name = availableLayers[i];\r\n //URI:se quita la exclusion de capas no visibles por escala\r\n /*if (!layer.isVisibleByScale(name) && !download)\r\n continue;*/\r\n if (!layer.wrap.getInfo(name).queryable)\r\n continue;\r\n serviceObj.layerNames.push(name);\r\n var path = layer.getPath(name);\r\n serviceObj.layers.push({\r\n name: name,\r\n title: path[path.length - 1],\r\n path: path.slice(1),\r\n features: []\r\n });\r\n }\r\n if (serviceObj.layerNames.length === 0) {\r\n return;\r\n }\r\n if (typeof serviceObj.request !== \"undefined\") {\r\n return;\r\n }\r\n serviceObj.request = serviceObj.request || layer.getWFSCapabilities(); //WFSCapabilities.Promises(url);\r\n arrPromises.push(new Promise(function (resolve, _reject) {\r\n serviceObj.request.then(function (capabilities) {\r\n var service = null;\r\n var errors = [];\r\n for (var url in services) {\r\n if (services[url].request && services[url].request === serviceObj.request) {\r\n service = services[url];\r\n }\r\n }\r\n var _numMaxFeatures = null;\r\n var layerList = service.layerNames;\r\n if (!(layerList instanceof Array) || !layerList.length) return;//condici\\u00f3n de salida\r\n //comprobamos que tiene el getfeature habilitado\r\n if (typeof capabilities.Operations.GetFeature === \"undefined\") {\r\n errors.push({ key: TC.Consts.WFSErrors.GETFEATURE_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n var availableLayers = [];\r\n for (var i = 0; i < layerList.length; i++) {\r\n //Comprbamos si la capa en el WMS tiene el mimso nombre que en el WFS\r\n var layer = layerList[i];\r\n //quitamos los ultimos caracteres que sean \"_\" , cosas de Idena\r\n while (layer[layer.length - 1] === \"_\") {\r\n layer = layer.substring(0, layer.lastIndexOf(\"_\"));\r\n }\r\n if (!Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, layer.substring(layerList[i].indexOf(\":\") + 1))) {\r\n var titles = service.mapLayers[0].getPath(layer.substring(layerList[i].indexOf(\":\") + 1));\r\n errors.push({ key: TC.Consts.WFSErrors.LAYERS_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service), \"layerName\": titles[titles.length - 1] } });\r\n continue;\r\n }\r\n if (availableLayers.indexOf(layer) < 0)\r\n availableLayers.push(layer);\r\n }\r\n if (availableLayers.length === 0) {\r\n errors.push({ key: TC.Consts.WFSErrors.NO_VALID_LAYERS, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n if (capabilities.Operations.GetFeature.CountDefault)\r\n _numMaxFeatures = capabilities.Operations.GetFeature.CountDefault.DefaultValue;\r\n //comprobamos si soporta querys \r\n if (\r\n capabilities.version === \"1.0.0\" && !Object.prototype.hasOwnProperty.call(capabilities.Operations.GetFeature.Operations, \"Query\")\r\n ||\r\n (capabilities.version === \"2.0.0\" || capabilities.version === \"1.1.0\") && capabilities.Operations.QueryExpressions.indexOf(\"wfs:Query\") < 0\r\n ) {\r\n errors.push({ key: TC.Consts.WFSErrors.QUERY_NOT_AVAILABLE, params: { serviceTitle: _getServiceTitle(service) } });\r\n resolve({ \"errors\": errors });\r\n return;\r\n }\r\n const operationUrl = capabilities.Operations.GetFeature.DCPType ? capabilities.Operations.GetFeature.DCPType[1].HTTP.Post.onlineResource : capabilities.Operations.GetFeature.DCP.HTTP.Post.href;\r\n\r\n Promise.all([\r\n magicFunction(service.mapLayers[0], availableLayers, filter)//clonar filtro\r\n ]).then(function (response) {\r\n var filter = response[0]; //1\r\n if (_numMaxFeatures) {\r\n _checkMaxFeatures(_numMaxFeatures, { url: operationUrl, mapLayer: service.mapLayers[0] }, TC.Util.WFSQueryBuilder(filter, null, capabilities, outputFormat, true, getCRS())).then(function (response) {\r\n if (response.errors && response.errors.length > 0) {\r\n switch (response.errors[0].key) {\r\n case TC.Consts.WFSErrors.INDETERMINATE:\r\n response.errors[0].params.serviceTitle = service.mapLayers.reduce((prev, cur) => prev || cur.title, '') || _getServiceTitle(service);\r\n break;\r\n case TC.Consts.WFSErrors.MAX_NUM_FEATURES:\r\n response.errors[0].params = { limit: _numMaxFeatures, serviceTitle: _getServiceTitle(service) };\r\n break;\r\n case TC.Consts.WFSErrors.NO_FEATURES:\r\n response.errors[0].params = { serviceTitle: _getServiceTitle(service) };\r\n break;\r\n }\r\n resolve(response);\r\n }\r\n else {\r\n _postOrDownload({ url: operationUrl, mapLayer: service.mapLayers[0], service: service }, TC.Util.WFSQueryBuilder(filter, null, capabilities, download ? outputFormat : TC.Consts.mimeType.JSON, false, getCRS())).then(function (response) {\r\n resolve(Object.assign({ service: service, errors: errors }, response));\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n _postOrDownload({ url: operationUrl, mapLayer: service.mapLayers[0], service: service }, TC.Util.WFSQueryBuilder(filter, null, capabilities, download ? outputFormat : TC.Consts.mimeType.JSON, false, getCRS())).then(function (response) {\r\n resolve(Object.assign({ service: service, errors: errors }, response));\r\n\r\n });\r\n }\r\n }).catch(function (e) {\r\n resolve({\r\n errors: [{\r\n key: TC.Consts.WFSErrors.INDETERMINATE,\r\n params: { err: e.name, errorThrown: e.message, serviceTitle: _getServiceTitle(service) }\r\n }]\r\n });\r\n });\r\n }, function (e) {\r\n var service = null;\r\n for (var title in services)\r\n if (services[title].request && services[title].request === serviceObj.request) {\r\n service = services[title];\r\n }\r\n resolve({ errors: [{ key: TC.Consts.WFSErrors.GETCAPABILITIES, params: { err: e.name, serviceTitle: _getServiceTitle(service) } }] });\r\n });\r\n }));\r\n });\r\n return arrPromises;\r\n };\r\n\r\n mapProto.updateSize = function () {\r\n this.wrap.updateSize();\r\n };\r\n\r\n mapProto.linkTo = function (map) {\r\n this.wrap.linkTo(map);\r\n };\r\n\r\n})();\r\n\r\n/**\r\n * Árbol de capas del mapa.\r\n * Esta clase no tiene constructor.\r\n * @class TC.LayerTree\r\n * @static\r\n */\r\n/**\r\n * Lista de árboles de (objetos de la clase {{#crossLink \"TC.layer.LayerTree\"}}{{/crossLink}}) de todas las capas base del mapa.\r\n * @property baseLayers\r\n * @type array\r\n */\r\n/**\r\n * Lista de árboles de (objetos de la clase {{#crossLink \"TC.layer.LayerTree\"}}{{/crossLink}}) de todas las capas de trabajo del mapa.\r\n * @property workLayers\r\n * @type array\r\n */\r\n\r\nconst BasicMap = TC.Map;\r\nexport default BasicMap;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nimport i18n from './i18n';\r\nimport proj4 from 'proj4';\r\nimport UAParser from 'ua-parser-js';\r\n\r\nTC.Consts = Consts;\r\nTC.i18n = TC.i18n || i18n;\r\n\r\nString.prototype.soundex = function () {\r\n var a = this.toLowerCase().split(''),\r\n f = a.shift(),\r\n r = '',\r\n codes = {\r\n a: '', e: '', i: '', o: '', u: '',\r\n b: 1, f: 1, p: 1, v: 1,\r\n c: 2, g: 2, j: 2, k: 2, q: 2, s: 2, x: 2, z: 2,\r\n d: 3, t: 3,\r\n l: 4,\r\n m: 5, n: 5,\r\n r: 6\r\n };\r\n\r\n r = f +\r\n a\r\n .map(function (v, _i, _a) { return codes[v]; })\r\n .filter(function (v, i, a) { return i === 0 ? v !== codes[f] : v !== a[i - 1]; })\r\n .join('');\r\n\r\n return (r + '000').slice(0, 4).toUpperCase();\r\n};\r\n\r\n// GLS: Parche: Chrome no formatea correctamente los números en euskera, establece como separador de decimales el (.)\r\nvar toLocaleString = Number.prototype.toLocaleString;\r\nNumber.prototype.toLocaleString = function (locale, _options) {\r\n if (locale === \"eu-ES\" && !TC.Util.detectIE()) {\r\n var sNum = toLocaleString.apply(this, arguments);\r\n sNum = sNum.replace(/\\,/g, '.');\r\n if (!(Math.floor(this) === this && Number.isInteger(Math.floor(this))))\r\n sNum = sNum.replace(/.([^.]*)$/, \",$1\");\r\n\r\n return sNum;\r\n }\r\n else\r\n return toLocaleString.apply(this, arguments);\r\n};\r\n\r\nvar iconUrlCache = {};\r\nvar markerGroupClassCache = {};\r\n\r\nvar path1 = [\"Capability\", \"Request\", \"GetMap\", \"DCPType\", \"0\", \"HTTP\", \"Get\", \"OnlineResource\"];\r\nvar path2 = [\"OperationsMetadata\", \"GetTile\", \"DCP\", \"HTTP\", \"Get\", \"0\", \"href\"];\r\nvar getOnPath = function (obj, p, i) {\r\n if (i < p.length - 1) {\r\n if (obj.hasOwnProperty(p[i]))\r\n return getOnPath(obj[p[i]], p, ++i);\r\n else return null;\r\n } else {\r\n return obj[p[i]];\r\n }\r\n};\r\n\r\nconst swipeHandlers = new WeakMap();\r\nconst modalCloseHandlers = new WeakMap();\r\nconst hasOwn = {}.hasOwnProperty;\r\nconst templateCache = new Map();\r\n\r\nconst countDecimals = (value) => {\r\n if (Math.floor(value) !== value)\r\n return value.toString().split(\".\")[1].length || 0;\r\n return 0;\r\n};\r\n\r\n\r\nvar Util = {\r\n\r\n getElevationGain: function (options) {\r\n options = options || {};\r\n const coords = options.coords;\r\n if (coords && coords.length > 0 && coords[0].length > 2) { // si tenemos la Z\r\n var uphill = 0;\r\n var downhill = 0;\r\n const hillDeltaThreshold = options.hillDeltaThreshold || 0;\r\n\r\n var previousHeight;\r\n var sectorMinHeight;\r\n var sectorMaxHeight;\r\n var previousUphill = true;\r\n\r\n for (var c = 0; c < coords.length; c++) {\r\n var point = coords[c];\r\n var height = point[2];\r\n if (height !== null) {\r\n if (previousHeight === undefined) //--inicializar\r\n {\r\n previousHeight = height;\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n\r\n sectorMinHeight = Math.min(sectorMinHeight, height); //--actualizar mínimo y máximo del sector\r\n sectorMaxHeight = Math.max(sectorMaxHeight, height);\r\n\r\n var delta = height - previousHeight; //--calcular desnivel del punto respecto al anterior\r\n // hillDeltaThreshold: altura de los dientes a despreciar\r\n if (delta > hillDeltaThreshold || delta > 0 && c === coords.length - 1) //--Si se sube más del filtro (o se acaba el segmento subiendo)\r\n {\r\n if (previousUphill) //--Si en el segmento anterior también se subía, incrementamos el desnivel positivo acumulado\r\n {\r\n uphill += delta;\r\n }\r\n else //--Si en el segmento anterior se bajaba, incrementamos los desniveles acumulados que no habíamos contabilizado desde el último salto del filtro (sector) \r\n {\r\n downhill -= sectorMinHeight - previousHeight;\r\n uphill += height - sectorMinHeight;\r\n previousUphill = true; //--preparar para el paso siguiente\r\n }\r\n previousHeight = height; //--preparar para el paso siguiente\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n else if (delta < -hillDeltaThreshold || delta < 0 && c === coords.length - 1) //--Si se baja más del filtro (o se acaba el segmento bajando)\r\n {\r\n if (!previousUphill) //--Si en el segmento anterior también se bajaba, incrementamos el desnivel negativo acumulado\r\n {\r\n downhill -= delta;\r\n }\r\n else //--Si en el segmento anterior se subía, incrementamos los desniveles acumulados que no habíamos contabilizado desde el último salto del filtro (sector) \r\n {\r\n uphill += sectorMaxHeight - previousHeight;\r\n downhill -= height - sectorMaxHeight;\r\n previousUphill = false; //--preparar para el paso siguiente\r\n }\r\n previousHeight = height; //--preparar para el paso siguiente\r\n sectorMinHeight = height;\r\n sectorMaxHeight = height;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n upHill: Math.round(uphill),\r\n downHill: Math.round(downhill)\r\n };\r\n\r\n } else { return null; }\r\n },\r\n\r\n isPlainObject: function (obj) {\r\n // Not plain objects:\r\n // - Any object or value whose internal [[Class]] property is not \"[object Object]\"\r\n // - DOM nodes\r\n // - window\r\n if (typeof obj !== 'object' || obj.nodeType || obj.window === obj) {\r\n return false;\r\n }\r\n\r\n if (obj.constructor &&\r\n !hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {\r\n return false;\r\n }\r\n\r\n // If the function hasn't returned already, we're confident that\r\n // |obj| is a plain object, created by {} or constructed with new Object\r\n return true;\r\n },\r\n\r\n isEmptyObject: function (obj) {\r\n var name;\r\n for (name in obj) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n isFunction: function (obj) {\r\n return typeof obj === 'function';\r\n },\r\n\r\n extend: function () {\r\n var clone,\r\n target = arguments[0] || {},\r\n i = 1,\r\n deep = false;\r\n\r\n // Comprobar si hay que hacer copia profunda (primer parámetro === true)\r\n if (typeof target === 'boolean') {\r\n deep = target;\r\n\r\n target = arguments[i] || {};\r\n i++;\r\n }\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if (typeof target !== 'object' && !Util.isFunction(target)) {\r\n target = {};\r\n }\r\n\r\n for (var len = arguments.length; i < len; i++) {\r\n // Only deal with non-null/undefined values\r\n const options = arguments[i];\r\n if (options != null) {\r\n // Extend the base object\r\n for (var name in options) {\r\n const src = target[name];\r\n const copy = options[name];\r\n\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n continue;\r\n }\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n const copyIsArray = Array.isArray(copy);\r\n if (deep && copy && (Util.isPlainObject(copy) || copyIsArray)) {\r\n if (copyIsArray) {\r\n clone = src && Array.isArray(src) ? src : [];\r\n\r\n } else {\r\n clone = src && Util.isPlainObject(src) ? src : {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[name] = Util.extend(deep, clone, copy);\r\n\r\n // Don't bring in undefined values\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Return the modified object\r\n return target;\r\n },\r\n\r\n getMapLocale: function (map) {\r\n return map.options && map.options.locale && map.options.locale.replace('_', '-') || \"es-ES\";\r\n },\r\n\r\n regex: {\r\n PROTOCOL: /(^https?:)/i\r\n },\r\n\r\n isOnCapabilities: function (url) {\r\n var withProtocol = arguments.length == 2 ? arguments[1] : true;\r\n var testUrl = !withProtocol ? url.replace(Util.regex.PROTOCOL, \"\") : url;\r\n\r\n let c;\r\n if (withProtocol) {\r\n if (TC.capabilities[testUrl]) {\r\n return url;\r\n }\r\n } else {\r\n for (c in TC.capabilities) {\r\n if (c.replace(Util.regex.PROTOCOL, \"\") == testUrl) {\r\n return c;\r\n }\r\n }\r\n }\r\n\r\n for (c in TC.capabilities) {\r\n var u = getOnPath(TC.capabilities[c], path1, 0) || getOnPath(TC.capabilities[c], path2, 0);\r\n\r\n if (u && withProtocol && url == u) {\r\n return u;\r\n }\r\n else if (u && url.replace(Util.regex.PROTOCOL, \"\") == u.replace(Util.regex.PROTOCOL, \"\")) {\r\n return u;\r\n }\r\n }\r\n\r\n return url;\r\n },\r\n\r\n reqGetMapOnCapabilities: function (url) {\r\n var withProtocol = arguments.length === 2 ? arguments[1] : true;\r\n\r\n var _get = function (caps) {\r\n var u = getOnPath(caps, path1, 0) || getOnPath(caps, path2, 0);\r\n if (u)\r\n return !withProtocol ? u.split('?')[0].replace(Util.regex.PROTOCOL, \"\") : u.split('?')[0];\r\n\r\n return null;\r\n };\r\n if (TC.capabilities[url]) {\r\n return _get(TC.capabilities[url]);\r\n }\r\n\r\n return null;\r\n },\r\n\r\n getFnFromString: function (fnName) {\r\n var scope = window;\r\n var scopeSplit = fnName.split('.');\r\n for (var i = 0; i < scopeSplit.length - 1; i++) {\r\n scope = scope[scopeSplit[i]];\r\n\r\n if (scope == undefined) return;\r\n }\r\n\r\n return scope[scopeSplit[scopeSplit.length - 1]];\r\n },\r\n\r\n isURL: function (text) {\r\n return /^(http|https|ftp|mailto)\\:\\/\\//i.test(text);\r\n },\r\n\r\n isSecureURL: function (url) {\r\n //sino empieza por http ni por https la consideramos segura\r\n if (!/^(f|ht)tps?:\\/\\//i.test(url)) {\r\n return true;\r\n }\r\n return /^(f|ht)tps:\\/\\//i.test(url);\r\n },\r\n\r\n isSameOrigin: function (uri) {\r\n var result = uri.indexOf(\"http\") !== 0 && uri.indexOf(\"//\") !== 0;\r\n var urlParts = !result && uri.match(TC.Consts.url.SPLIT_REGEX);\r\n if (urlParts) {\r\n var location = window.location;\r\n var uProtocol = urlParts[1];\r\n result =\r\n (uProtocol == location.protocol || uProtocol == undefined) &&\r\n urlParts[3] == location.hostname;\r\n var uPort = urlParts[4], lPort = location.port;\r\n if (uPort != 80 && uPort !== \"\" || lPort != \"80\" && lPort !== \"\") {\r\n result = result && uPort == lPort;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n formatNumber: function (value, locale) {\r\n var t = typeof value;\r\n if (t === 'number') {\r\n return value.toLocaleString(locale, { maximumFractionDigits: Math.min(6, countDecimals(value)) });\r\n }\r\n else if (t === 'string') {\r\n const n = parseFloat(value);\r\n if (n === new Number(value).valueOf()) {\r\n return n.toLocaleString(locale, { maximumFractionDigits: Math.min(6, countDecimals(n)) });\r\n }\r\n }\r\n return value;\r\n },\r\n\r\n addProtocol: function (uri) {\r\n var result = uri;\r\n if (uri && uri.indexOf('//') === 0) {\r\n result = location.protocol + uri;\r\n }\r\n return result;\r\n },\r\n\r\n /* \r\n * getDiv: returns HTML element or null if the parameter is invalid\r\n * Parameter: string with element ID or HTML element\r\n */\r\n getDiv: function (div) {\r\n var result;\r\n if (typeof div === 'string') {\r\n result = document.getElementById(div);\r\n }\r\n else if (div instanceof HTMLElement) {\r\n result = div;\r\n }\r\n else if (div && '$' in window && div instanceof $ && div.length) {\r\n result = div[0];\r\n }\r\n else {\r\n result = document.createElement('div');\r\n }\r\n return result;\r\n },\r\n\r\n getScriptLocation: function () {\r\n var src;\r\n var script;\r\n if (document.currentScript) {\r\n script = document.currentScript;\r\n }\r\n else {\r\n var scripts = document.getElementsByTagName('script');\r\n script = scripts[scripts.length - 1];\r\n }\r\n src = script.getAttribute('src');\r\n if (src) {\r\n return src.substr(0, src.lastIndexOf('/') + 1);\r\n }\r\n return \"\";\r\n },\r\n\r\n /* \r\n * getBackgroundUrlFromCss: devuelve la URL de background-image en CSS\r\n * Parameter: string con nombre de clase\r\n */\r\n getBackgroundUrlFromCss: function (cssClass) {\r\n var result = '';\r\n\r\n if (cssClass) {\r\n if (iconUrlCache[cssClass] !== undefined) {\r\n result = iconUrlCache[cssClass];\r\n }\r\n else {\r\n const iconDiv = document.createElement('div');\r\n iconDiv.style.display = 'none';\r\n iconDiv.classList.add(cssClass);\r\n document.body.appendChild(iconDiv);\r\n // The regular expression is nongreedy (.*?), otherwise in FF and IE it gets 'url_to_image\"'\r\n var match = /^url\\(['\"]?(.*?)['\"]?\\)$/gi.exec(window.getComputedStyle(iconDiv, null).backgroundImage);\r\n if (match && match.length > 1) {\r\n result = match[match.length - 1];\r\n }\r\n iconDiv.parentElement.removeChild(iconDiv);\r\n iconUrlCache[cssClass] = result;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n getPointIconUrl: function getPointIconUrl(options) {\r\n var result = null;\r\n if (options.url) {\r\n result = options.url;\r\n if (/Firefox/.test(navigator.userAgent) && location.protocol === 'https:' && result.startsWith(\"http:\")) {\r\n result = result.replace(\"http:\", \"https:\");\r\n }\r\n }\r\n else {\r\n var className;\r\n if (typeof options.cssClass === 'string') {\r\n className = options.cssClass;\r\n }\r\n else {\r\n var classes = options.classes || TC.Cfg.styles.marker.classes;\r\n className = classes[0];\r\n if (options.group) {\r\n if (markerGroupClassCache[options.group] === undefined) {\r\n var i = 0;\r\n for (var key in markerGroupClassCache) {\r\n i++;\r\n }\r\n i = i % classes.length;\r\n markerGroupClassCache[options.group] = classes[i];\r\n }\r\n className = markerGroupClassCache[options.group];\r\n }\r\n }\r\n result = Util.getBackgroundUrlFromCss(className);\r\n }\r\n if (!result && options !== TC.Cfg.styles.point && options.cssClass !== '') {\r\n result = getPointIconUrl(TC.Cfg.styles.point);\r\n }\r\n return result;\r\n },\r\n\r\n getLegendImageFromStyle: function (style, options) {\r\n let result = null;\r\n options = options || {};\r\n if (style.url) {\r\n result = style.url;\r\n }\r\n else {\r\n let width = options.width || 32;\r\n let height = options.height || 16;\r\n const strokeWidth = style.strokeWidth || 0;\r\n const strokeHalfWidth = strokeWidth / 2;\r\n const fillColor = style.fillColor || 'transparent';\r\n const fillOpacity = style.fillOpacity || 1;\r\n const diameter = (style.radius || 0) * 2 + strokeWidth;\r\n const lineDashText = style.lineDash ? `stroke-dasharray=\"${style.lineDash.join(' ')}\" ` : '';\r\n let body;\r\n width = Math.max(width, diameter);\r\n height = Math.max(height, diameter);\r\n switch (options.geometryType) {\r\n case TC.Consts.geom.POINT:\r\n body = ``;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n const xStart = strokeHalfWidth;\r\n const yStart = height - strokeHalfWidth;\r\n const xEnd = width - strokeHalfWidth;\r\n const yEnd = strokeHalfWidth;\r\n body = ``;\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n const x1 = strokeHalfWidth;\r\n const y1 = height - strokeHalfWidth;\r\n const x2 = strokeHalfWidth;\r\n const y2 = strokeHalfWidth;\r\n const x3 = strokeHalfWidth + width * 0.8;\r\n const y3 = strokeHalfWidth;\r\n const x4 = width - strokeHalfWidth;\r\n const y4 = height - strokeHalfWidth;\r\n body = ``;\r\n break;\r\n default:\r\n body = ``;\r\n break;\r\n }\r\n result = 'data:image/svg+xml,' + encodeURIComponent(`${body}`);\r\n }\r\n return result;\r\n },\r\n\r\n /* \r\n * addArrayToTree: añade a un array a un árbol, cada elemento en un nivel anidado\r\n * Parameters: array, nodo de árbol, [índice]\r\n * Returns: último nodo insertado, null si ya existía la ruta\r\n */\r\n addArrayToTree: function addArrayToTree(path, treeNode, index) {\r\n var result = null;\r\n var found = false;\r\n index = index || 0;\r\n var name = path[index];\r\n if (name) {\r\n var n;\r\n for (var i = 0, len = treeNode.children.length; i < len; i++) {\r\n n = treeNode.children[i];\r\n if (n.name === name) {\r\n found = true;\r\n const r = addArrayToTree(path, n, index + 1);\r\n if (r) {\r\n result = r;\r\n }\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n n = { name: name, title: name, uid: '/' + path.slice(0, index + 1).join('/'), children: [] };\r\n const r = addArrayToTree(path, n, index + 1);\r\n if (r) {\r\n result = r;\r\n }\r\n else {\r\n result = n;\r\n }\r\n n.parent = treeNode;\r\n treeNode.children.push(n);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n parseCoords: function (text) {\r\n var result = null;\r\n\r\n var _parseGeoCoord = function (text) {\r\n var t = text;\r\n var result = {};\r\n result.type = TC.Consts.GEOGRAPHIC;\r\n var idx = t.indexOf('\\u00B0');\r\n result.value = parseFloat(t.substr(0, idx));\r\n t = t.substr(idx + 1);\r\n idx = t.indexOf('\\'');\r\n if (idx >= 0) {\r\n var v = parseFloat(t.substr(0, idx)) / 60;\r\n if (result.value >= 0) {\r\n result.value += v;\r\n }\r\n else {\r\n result.value -= v;\r\n }\r\n t = t.substr(idx + 1);\r\n idx = t.indexOf('\\'');\r\n if (idx >= 0) {\r\n v = parseFloat(t.substr(0, idx).replace(',', '.')) / 3600;\r\n if (result.value >= 0) {\r\n result.value += v;\r\n }\r\n else {\r\n result.value -= v;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var _parseCoord = function (text) {\r\n var t = text.trim();\r\n // nnºnn'nn''N\r\n if (t.match(/^1?\\d{0,2}\\s*\\u00B0(\\s*\\d{1,2}\\s*'(\\s*\\d{1,2}([.,]\\d+)?\\s*'')?)?\\s*[NnSsWwOoEe]$/g)) {\r\n switch (t[t.length - 1]) {\r\n case 'S':\r\n case 's':\r\n case 'W':\r\n case 'w':\r\n case 'O':\r\n case 'o':\r\n t = '-' + t;\r\n break;\r\n }\r\n t = t.substr(0, t.length - 1);\r\n return _parseGeoCoord(t);\r\n }\r\n // +nnºnn'nn''\r\n if (t.match(/^[+-]?1?\\d{0,2}\\s*\\u00B0(\\s*\\d{1,2}\\s*'(\\s*\\d{1,2}([.,]\\d+)?\\s*'')?)?$/g)) {\r\n return _parseGeoCoord(t);\r\n }\r\n // nn.nn N\r\n if (t.match(/^1?\\d{0,2}([.,]\\d+)?\\s*\\u00B0?\\s*[NnSsWwOoEe]$/g)) {\r\n var result = { type: TC.Consts.GEOGRAPHIC, value: parseFloat(t.substr(0, t.length - 1).replace(',', '.')) };\r\n if (t.match(/[SsWwOo]$/)) {\r\n result.value = -result.value;\r\n }\r\n return result;\r\n }\r\n // +nn.nn\r\n if (t.match(/^[+-]?1?\\d{0,2}([.,]\\d+)?\\s*\\u00B0?$/g)) {\r\n return { type: TC.Consts.GEOGRAPHIC, value: parseFloat(t.replace(',', '.')) };\r\n }\r\n // UTM\r\n if (t.match(/^[-+]?\\d{6,7}([.,]\\d+)?$/g)) {\r\n return { type: TC.Consts.UTM, value: parseFloat(t.replace(',', '.')) };\r\n }\r\n return null;\r\n };\r\n\r\n text = text.trim().toUpperCase();\r\n var xy = text.split(',');\r\n if (xy.length === 4) {\r\n xy = [xy.slice(0, 1).join('.'), xy.slice(2, 3).join('.')];\r\n }\r\n else if (xy.length === 1 || xy.length === 3) {\r\n xy = text.split(' ');\r\n }\r\n if (xy.length === 2) {\r\n var x = _parseCoord(xy[0]);\r\n var y = _parseCoord(xy[1]);\r\n if (x !== null && y !== null) {\r\n result = [x, y];\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n reproject: function (coords, sourceCrs, targetCrs) {\r\n var result;\r\n var multipoint = true;\r\n var multiring = true;\r\n var multipoly = true;\r\n if (Array.isArray(coords[0])) {\r\n if (Array.isArray(coords[0][0])) {\r\n if (!Array.isArray(coords[0][0][0])) {\r\n multipoly = false;\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n multiring = false;\r\n coords = [[coords]];\r\n }\r\n }\r\n else {\r\n multipoint = false;\r\n multiring = false;\r\n multipoly = false;\r\n coords = [[[coords]]];\r\n }\r\n const loadProj = function (crs) {\r\n let result;\r\n const def = proj4.defs[crs];\r\n if (def) {\r\n result = proj4(def);\r\n }\r\n if (!result) {\r\n TC.loadProjDef({ crs: crs, sync: true });\r\n result = proj4(proj4.defs[crs]);\r\n }\r\n return result;\r\n };\r\n var sourcePrj = loadProj(sourceCrs);\r\n var targetPrj = loadProj(targetCrs);\r\n result = new Array(coords.length);\r\n coords.forEach(function (poly, pidx) {\r\n const rp = result[pidx] = [];\r\n poly.forEach(function (ring, ridx) {\r\n const rr = rp[ridx] = [];\r\n ring.forEach(function (coord, cidx) {\r\n if (Array.isArray(coord) && coord.length > 1) {\r\n var point = proj4(sourcePrj, targetPrj, { x: coord[0], y: coord[1] });\r\n rr[cidx] = [point.x, point.y];\r\n if (coord.length > 2) {\r\n for (var i = 2; i < coord.length;i++)\r\n rr[cidx][i] = coord[i];\r\n }\r\n } else {\r\n rr[cidx] = coord;\r\n }\r\n });\r\n });\r\n });\r\n if (!multipoint) {\r\n result = result[0][0][0];\r\n }\r\n else if (!multiring) {\r\n result = result[0][0];\r\n }\r\n else if (!multipoly) {\r\n result = result[0];\r\n }\r\n return result;\r\n },\r\n\r\n getMetersPerDegree: function (extent) {\r\n let result;\r\n const R = 6370997; // m\r\n if (Array.isArray(extent) && extent.length >= 4) {\r\n if (extent[3] === extent[1]) {\r\n result = Math.PI * R * Math.cos(this.degToRad(extent[1])) / 180;\r\n }\r\n else {\r\n const dLat = this.degToRad(extent[3] - extent[1]);\r\n const sindlat2 = Math.sin(dLat / 2);\r\n const a = sindlat2 * sindlat2;\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n result = R * c / (extent[3] - extent[1]);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n radToDeg: function (rad) { // convert radians to degrees\r\n return rad * 180 / Math.PI;\r\n },\r\n degToRad: function (deg) { // convert degrees to radians\r\n return deg * Math.PI / 180;\r\n },\r\n mod: function (n) { // modulo for negative values\r\n const twoPi = 2 * Math.PI;\r\n return (n % twoPi + twoPi) % twoPi;\r\n },\r\n\r\n getCRSCode: function (crs) {\r\n var result = null;\r\n crs = crs.trim();\r\n if (/^EPSG:\\d{4,6}$/g.test(crs) || //formato EPSG\r\n /^urn:ogc:def:crs:EPSG:.*:\\d{4,6}/g.test(crs) || // formato URN\r\n /http:\\/\\/www.opengis.net\\/gml\\/srs\\/epsg.xml#\\d{4,6}$/g.test(crs)) { // formato GML\r\n var match = crs.trim().match(/^.+[:#](\\d{4,6})$/); // devuelve la parte numérica del código\r\n if (match) {\r\n result = match[1];\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n CRSCodesEqual: function (crs1, crs2) {\r\n if (crs1 === crs2) {\r\n return true;\r\n }\r\n var code1 = this.getCRSCode(crs1);\r\n var code2 = this.getCRSCode(crs2);\r\n return code1 !== null && code2 !== null && code1 === code2;\r\n },\r\n\r\n getLocaleString: function (locale, key, texts) {\r\n var result = key;\r\n if (TC.i18n && TC.i18n[locale]) {\r\n var text = TC.i18n[locale][key];\r\n if (text) {\r\n result = text;\r\n if (texts) {\r\n for (var k in texts) {\r\n result = result.replace('{' + k + '}', texts[k]);\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n getRenderedHtml: function (templateOrId, data, callback) {\r\n const compileTemplate = function (templateId, txt) {\r\n const template = TC._hbs.compile(txt); // TODO: add optimization options\r\n TC._hbs.registerPartial(templateId, template);\r\n templateCache.set(templateId, template);\r\n return template;\r\n };\r\n const fetchTemplate = function (templateId) {\r\n return new Promise(function (resolve, reject) {\r\n let template = templateCache.get(templateId);\r\n if (template) {\r\n resolve(template);\r\n }\r\n else {\r\n templateCache.set(templateId, true);\r\n TC.ajax({\r\n url: TC.apiLocation + `TC/templates/${templateId}.hbs`,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n .then(function (response) {\r\n const matches = response.data.match(/{{> ([a-zA-Z\\-]+)(?:(?:\\s[a-zA-Z]+)\\s*)?}}/);\r\n if (matches) {\r\n Promise.all(matches.slice(1).map(str => fetchTemplate(str.trim()))).then(function () {\r\n resolve(compileTemplate(templateId, response.data));\r\n });\r\n }\r\n else {\r\n resolve(compileTemplate(templateId, response.data));\r\n }\r\n })\r\n .catch(function (err) {\r\n console.log(\"Error fetching template: \" + err);\r\n reject(err);\r\n });\r\n }\r\n });\r\n };\r\n return new Promise(function (resolve, reject) {\r\n const endFn = function (template) {\r\n const html = template(data);\r\n if (Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n resolve(html);\r\n };\r\n if (Util.isFunction(templateOrId)) {\r\n endFn(templateOrId);\r\n }\r\n else {\r\n fetchTemplate(templateOrId)\r\n .then((template) => endFn(template))\r\n .catch(err => reject(err));\r\n }\r\n });\r\n },\r\n\r\n getSimpleMimeType: function (mimeType) {\r\n var result = '';\r\n if (mimeType) {\r\n var end = mimeType.indexOf(';');\r\n if (end > 0) {\r\n mimeType = mimeType.substring(0, end);\r\n }\r\n result = mimeType;\r\n }\r\n return result;\r\n },\r\n\r\n getMimeTypeFromUrl: function (url) {\r\n let idx = url.indexOf('?');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n else {\r\n idx = url.indexOf('#');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n }\r\n switch (url.substr(url.lastIndexOf('.') + 1).toLowerCase()) {\r\n case 'kml':\r\n return TC.Consts.mimeType.KML;\r\n case 'kmz':\r\n return TC.Consts.mimeType.KMZ;\r\n case 'json':\r\n case 'geojson':\r\n return TC.Consts.mimeType.GEOJSON;\r\n case 'gml':\r\n return TC.Consts.mimeType.GML;\r\n case 'gpx':\r\n return TC.Consts.mimeType.GPX;\r\n case 'gpkg':\r\n return TC.Consts.mimeType.GEOPACKAGE;\r\n case 'shp':\r\n case 'dbf':\r\n case 'prj':\r\n case 'cst':\r\n case 'cpg':\r\n return TC.Consts.mimeType.SHAPEFILE;\r\n case 'zip':\r\n return TC.Consts.mimeType.ZIP;\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n getQueryStringParams: function (url) {\r\n var queryString;\r\n if (url) {\r\n var queryIdx = url.indexOf('?');\r\n if (queryIdx >= 0) {\r\n queryString = url.substr(queryIdx);\r\n var fragmentIdx = queryString.indexOf('#');\r\n if (fragmentIdx >= 0) {\r\n queryString = queryString.substr(0, fragmentIdx);\r\n }\r\n }\r\n else {\r\n queryString = '?';\r\n }\r\n }\r\n else {\r\n queryString = location.search;\r\n }\r\n var result = queryString.replace(/(^\\?)/, '').split(\"&\").map(function (elm) {\r\n return elm = elm.split(\"=\"), this[elm[0]] = elm[1], this;\r\n }.bind({}))[0];\r\n delete result[''];\r\n return result;\r\n },\r\n\r\n getParamString: function (obj) {\r\n const arr = [];\r\n for (var key in obj) {\r\n arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));\r\n }\r\n return arr.join('&').replace(/%20/g, '+');\r\n },\r\n\r\n fastUnshift: function (a, elm) {\r\n var len = a.length;\r\n while (len) {\r\n a[len] = a[len - 1];\r\n len--;\r\n }\r\n a[0] = elm;\r\n },\r\n\r\n storage: {\r\n getCookie: function (key) {\r\n return TC.cookie(key);\r\n },\r\n setCookie: function (key, value, options) {\r\n return TC.cookie(key, value, options);\r\n },\r\n getLocalValue: function (key) {\r\n var result = null;\r\n if (localStorage && localStorage instanceof Storage) {\r\n result = localStorage.getItem(key);\r\n }\r\n else {\r\n result = Util.storage.getCookie(key);\r\n }\r\n return result;\r\n },\r\n setLocalValue: function (key, value) {\r\n if (localStorage && localStorage instanceof Storage) {\r\n if (value === undefined) {\r\n localStorage.removeItem(key);\r\n }\r\n else {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n else {\r\n\r\n if (value === undefined) {\r\n var exDate = new Date();\r\n exDate.setDate(exDate.getDate() - 1);\r\n Util.storage.setCookie(key, \"\", { expires: exDate });\r\n }\r\n else {\r\n Util.storage.setCookie(key, value);\r\n }\r\n }\r\n return key;\r\n },\r\n getSessionLocalValue: function (key) {\r\n var result = null;\r\n if (sessionStorage && sessionStorage instanceof Storage) {\r\n result = sessionStorage.getItem(key);\r\n }\r\n else {\r\n result = Util.storage.getCookie(key);\r\n }\r\n return result;\r\n },\r\n setSessionLocalValue: function (key, value) {\r\n if (sessionStorage && sessionStorage instanceof Storage) {\r\n if (value === undefined) {\r\n sessionStorage.removeItem(key);\r\n }\r\n else {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n else {\r\n\r\n if (value === undefined) {\r\n var exDate = new Date();\r\n exDate.setDate(exDate.getDate() - 1);\r\n Util.storage.setCookie(key, \"\", { expires: exDate });\r\n }\r\n else {\r\n Util.storage.setCookie(key, value);\r\n }\r\n }\r\n return key;\r\n }\r\n },\r\n detectFirefox: function () {\r\n if (/Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent)) //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);\r\n return new Number(RegExp.$1); // capture x.x portion and store as a number\r\n else\r\n return false;\r\n },\r\n detectIE: function () {\r\n var ua = window.navigator.userAgent;\r\n\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n\r\n // GLS: 13/02/2019. Comento lo que respecta a Edge, no tiene sentido meterlo en el mismo saco que un navegador obsoleto.\r\n // No lo comento porque en la mesa no hay quorum.\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // IE 12 => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n detectChrome: function () {\r\n return window.chrome;\r\n\r\n },\r\n detectSafari: function () {\r\n return !!navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/);\r\n },\r\n detectMouse: function () {\r\n const matchesCoarse = matchMedia('(pointer:coarse)').matches;\r\n const matchesFine = matchMedia('(pointer:fine)').matches;\r\n if (matchesCoarse && matchesFine) {\r\n return true;\r\n }\r\n if (matchesCoarse && !matchesFine) {\r\n var testHover = function () {\r\n //console.log('estamos en testHover');\r\n var mq = '(hover: hover)',\r\n hover = !TC.browserFeatures.touch(), // fallback if mq4 not supported: no hover for touch\r\n mqResult;\r\n\r\n mqResult = window.matchMedia(mq);\r\n //console.log('resultado de window.matchMedia(mq): ' + mqResult.media);\r\n //console.log('mq: ' + mq);\r\n if (mqResult.media === mq) {\r\n //console.log('es igual');\r\n // matchMedia supports hover detection, so we rely on that\r\n hover = mqResult.matches;\r\n //console.log('va retornar: ' + hover);\r\n }\r\n\r\n return hover;\r\n };\r\n\r\n if (testHover())\r\n return true;\r\n else return false;\r\n }\r\n if (!matchesCoarse && matchesFine) {\r\n return true;\r\n }\r\n if (matchMedia('(pointer:none)').matches) {\r\n return false;\r\n }\r\n if (!TC.browserFeatures.touch()) {\r\n return true;\r\n }\r\n },\r\n detectAndroid: function () {\r\n return navigator.userAgent.match(/Android/i);\r\n },\r\n detectBlackBerry: function () {\r\n return navigator.userAgent.match(/BlackBerry/i);\r\n },\r\n detectIOS: function () {\r\n return navigator.userAgent.match(/iPhone|iPad|iPod/i);\r\n },\r\n detectMobileWindows: function () {\r\n return navigator.userAgent.match(/IEMobile/i);\r\n },\r\n detectMobile: function () {\r\n return Util.detectAndroid() || Util.detectIOS() || Util.detectMobileWindows() || Util.detectBlackBerry();\r\n },\r\n getBrowser: function () {\r\n var parser = new UAParser();\r\n var browser = parser.getBrowser();\r\n return { name: browser.name, version: browser.major };\r\n },\r\n getElementByNodeName: function (parentNode, nodeName) {\r\n var colonIndex = nodeName.indexOf(\":\");\r\n var tag = nodeName.substr(colonIndex + 1);\r\n var nodes = parentNode.getElementsByTagNameNS(\"*\", tag);\r\n\r\n for (var i = 0; i < nodes.length; i++) {\r\n if (nodes[i].nodeName == nodeName) {\r\n return nodes;\r\n }\r\n }\r\n return undefined;\r\n },\r\n addURLParameters: function (url, parameters) {\r\n if (!parameters) {\r\n return url;\r\n }\r\n let urlObj;\r\n let isRelative = false;\r\n try {\r\n urlObj = new URL(url);\r\n }\r\n catch (e) {\r\n if (e instanceof TypeError) {\r\n isRelative = true;\r\n urlObj = new URL(url, window.location.href);\r\n }\r\n }\r\n for (var key in parameters) {\r\n const value = parameters[key];\r\n urlObj.searchParams.set(key, value);\r\n }\r\n const newUrl = urlObj.href;\r\n if (isRelative) {\r\n return newUrl.substr(newUrl.indexOf(urlObj.host) + urlObj.host.length);\r\n }\r\n return newUrl;\r\n },\r\n removeURLParameter: function (url, parameter) {\r\n var urlparts = url.split('?');\r\n if (urlparts.length >= 2) {\r\n\r\n var prefix = encodeURIComponent(parameter.toLowerCase()) + '=';\r\n var pars = urlparts[1].toLowerCase().split(/[&;]/g);\r\n\r\n //reverse iteration as may be destructive\r\n for (var i = pars.length; i-- > 0;) {\r\n //idiom for string.startsWith\r\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\r\n pars.splice(i, 1);\r\n }\r\n }\r\n\r\n url = urlparts[0] + '?' + pars.join('&');\r\n return url;\r\n } else {\r\n return url;\r\n }\r\n },\r\n\r\n showModal: function (contentNode, options) {\r\n options = options || {};\r\n\r\n contentNode.hidden = false;\r\n contentNode.classList.add(TC.Consts.classes.VISIBLE);\r\n const closeButton = contentNode.querySelectorAll('.tc-modal-close');\r\n if (closeButton && closeButton.length > 0) {\r\n for (var i = 0; i < closeButton.length; i++) {\r\n var closeCallback = modalCloseHandlers.get(closeButton[i]);\r\n if (closeCallback) {\r\n modalCloseHandlers.delete(closeButton[i]);\r\n }\r\n else {\r\n closeCallback = function (e) {\r\n e.stopPropagation();\r\n return TC.Util.closeModal(options.closeCallback, e.target);\r\n };\r\n modalCloseHandlers.set(closeButton[i], closeCallback);\r\n }\r\n modalCloseHandlers.set(closeButton[i], closeCallback);\r\n closeButton[i].addEventListener('click', closeCallback);\r\n }\r\n }\r\n\r\n if (Util.isFunction(options.openCallback)) {\r\n options.openCallback();\r\n }\r\n },\r\n\r\n closeModal: function (callback, target) {\r\n\r\n const hide = function (modal) {\r\n modal.classList.remove(TC.Consts.classes.VISIBLE);\r\n };\r\n\r\n var modal;\r\n if (target) {\r\n modal = target;\r\n while (modal && !modal.matches('.tc-modal')) {\r\n modal = modal.parentElement;\r\n }\r\n\r\n hide(modal);\r\n } else {\r\n Array.prototype.forEach.call(document.querySelectorAll('.tc-modal'), function (modal) {\r\n hide(modal);\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n closeAlert: function (btn) {\r\n var elm = btn;\r\n do {\r\n elm = elm.parentElement;\r\n if (elm.matches('.tc-alert')) {\r\n elm.style.display = 'none';\r\n }\r\n }\r\n while (elm);\r\n },\r\n\r\n swipe: function (target, options) {\r\n const addListeners = function (handlers) {\r\n target.addEventListener('mousedown', handlers.start);\r\n target.addEventListener('touchstart', handlers.start, { passive: true });\r\n target.addEventListener('mouseup', handlers.end);\r\n target.addEventListener('touchend', handlers.end, { passive: true });\r\n };\r\n\r\n if (options === 'disable') {\r\n const handlers = swipeHandlers.get(target);\r\n if (handlers) {\r\n target.removeEventListener('mousedown', handlers.start);\r\n target.removeEventListener('touchstart', handlers.start);\r\n target.removeEventListener('mouseup', handlers.end);\r\n target.removeEventListener('touchend', handlers.end);\r\n }\r\n return;\r\n }\r\n else if (options === 'enable') {\r\n const handlers = swipeHandlers.get(target);\r\n if (handlers) {\r\n addListeners(handlers);\r\n }\r\n return;\r\n }\r\n\r\n options = options || {};\r\n const minDistance = options.minDistance || 30;\r\n const maxCrossDistance = options.maxCrossDistance || 30;\r\n const maxAllowedTime = options.maxAllowedTime || 1000;\r\n var touchStartCoords = { 'x': -1, 'y': -1 }, // X and Y coordinates on mousedown or touchstart events.\r\n touchEndCoords = { 'x': -1, 'y': -1 },// X and Y coordinates on mouseup or touchend events.\r\n startTime = 0,// Time on swipeStart\r\n elapsedTime = 0;// Elapsed time between swipeStart and swipeEnd\r\n\r\n const getDirection = function (startCoords, endCoords) {\r\n const dx = endCoords.x - startCoords.x;\r\n const dy = endCoords.y - startCoords.y;\r\n const adx = Math.abs(dx);\r\n const ady = Math.abs(dy);\r\n if (adx > ady && adx > minDistance && ady <= maxCrossDistance) {\r\n return dx < 0 ? 'left' : 'right';\r\n }\r\n if (ady > adx && ady > minDistance && adx <= maxCrossDistance) {\r\n return dy < 0 ? 'up' : 'down';\r\n }\r\n return 'none';\r\n };\r\n\r\n const mustSwipe = function (e) {\r\n if (options.noSwipe) {\r\n var elm = e.target;\r\n while (elm && elm !== target) {\r\n if (elm.matches && elm.matches(options.noSwipe)) {\r\n return false;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const swipeStart = function (e) {\r\n if (mustSwipe(e)) {\r\n e = 'changedTouches' in e ? e.changedTouches[0] : e;\r\n touchStartCoords.x = e.pageX;\r\n touchStartCoords.y = e.pageY;\r\n startTime = new Date().getTime();\r\n }\r\n };\r\n\r\n const swipeEnd = function (e) {\r\n if (startTime) {\r\n e = 'changedTouches' in e ? e.changedTouches[0] : e;\r\n touchEndCoords.x = e.pageX;\r\n touchEndCoords.y = e.pageY;\r\n elapsedTime = new Date().getTime() - startTime;\r\n if (elapsedTime <= maxAllowedTime) {\r\n const callback = options[getDirection(touchStartCoords, touchEndCoords)];\r\n if (callback) {\r\n callback.call(target);\r\n }\r\n }\r\n startTime = 0;\r\n }\r\n };\r\n\r\n const handlers = {\r\n start: swipeStart,\r\n end: swipeEnd\r\n };\r\n swipeHandlers.set(target, handlers);\r\n addListeners(handlers);\r\n },\r\n\r\n getParameterByName: function (name) {\r\n const filter = ([key, value]) => key.toLowerCase() === name.toLowerCase();\r\n const params = new URLSearchParams(location.search);\r\n const paramsArray = Array.from(params);\r\n const result = paramsArray.find(filter);\r\n return result ? result[1] : \"\";\r\n },\r\n\r\n getLocaleUserChoice: function (options) {\r\n var result = 'en-US';\r\n options = options || {};\r\n var cookieName = options.cookieName || 'SITNA.language';\r\n var paramName = options.paramName || 'lang';\r\n // Obtenemos preferencia de lenguaje\r\n var browserLanguage = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language || navigator.userLanguage;\r\n var lang = TC.Util.getParameterByName(paramName) || TC.Util.storage.getCookie(cookieName) || browserLanguage;\r\n var hyphenIdx = lang.indexOf('-');\r\n if (hyphenIdx >= 0) {\r\n lang = lang.substr(0, hyphenIdx);\r\n }\r\n var expirationDate = new Date(new Date().getTime() + 365 * 24 * 60 * 60 * 1000);\r\n TC.Util.storage.setCookie(cookieName, lang, { expires: expirationDate });\r\n\r\n switch (lang) {\r\n case 'eu':\r\n result = 'eu-ES';\r\n break;\r\n case 'es':\r\n result = 'es-ES';\r\n break;\r\n default:\r\n result = 'en-US';\r\n break;\r\n }\r\n return result;\r\n },\r\n\r\n getValidFilename: function (filename) {\r\n return (filename || '').replace(/[/\\\\?%*:|\"<>]/g, '-');\r\n },\r\n\r\n getFormatFromFileExtension: function (extension) {\r\n switch (extension) {\r\n case '.kml':\r\n return TC.Consts.format.KML;\r\n case '.kmz':\r\n return TC.Consts.format.KMZ;\r\n case '.gpx':\r\n return TC.Consts.format.GPX;\r\n case '.json':\r\n case '.geojson':\r\n return TC.Consts.format.GEOJSON;\r\n case '.gml':\r\n return TC.Consts.format.GML;\r\n case '.wkt':\r\n return TC.Consts.format.WKT;\r\n case '.topojson':\r\n return TC.Consts.format.TOPOJSON;\r\n case '.gpkg':\r\n return TC.Consts.format.GEOPACKAGE;\r\n case '.shp':\r\n return TC.Consts.format.SHAPEFILE;\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n downloadBlob: function (filename, blob) {\r\n var link = document.createElement(\"a\");\r\n if (link.download !== undefined) {\r\n var url = URL.createObjectURL(blob);\r\n link.setAttribute(\"href\", url);\r\n link.setAttribute(\"download\", TC.Util.getValidFilename(filename));\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n },\r\n\r\n downloadFile: function (filename, type, data) {\r\n var blob = new Blob([data], { type: type });\r\n filename = TC.Util.getValidFilename(filename);\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, filename);\r\n } else {\r\n TC.Util.downloadBlob(filename, blob);\r\n }\r\n },\r\n\r\n downloadDataURI: function (filename, type, dataURI) {\r\n var binary = atob(dataURI.split(',')[1]);\r\n\r\n var array = [];\r\n for (var i = 0; i < binary.length; i++) {\r\n array.push(binary.charCodeAt(i));\r\n }\r\n var blob = new Blob([new Uint8Array(array)], { type: type });\r\n\r\n filename = TC.Util.getValidFilename(filename);\r\n if (navigator.msSaveBlob) { // IE 10+\r\n navigator.msSaveBlob(blob, filename);\r\n } else {\r\n TC.Util.downloadBlob(filename, blob);\r\n }\r\n },\r\n\r\n /*\r\n * Acorta una URL utilizando el servicio de Bit.ly. No funciona para URLs locales.\r\n */\r\n shortenUrl: function (url) {\r\n return new Promise(function (resolve, reject) {\r\n TC.ajax({\r\n url: \"https://api-ssl.bitly.com/v3/shorten\",\r\n data: { access_token: \"6c466047309f44bd8173d83e81491648b243ee3d\", longUrl: url }\r\n })\r\n .then(function (response) {\r\n resolve(response.data);\r\n })\r\n .catch(function (e) {\r\n reject(e);\r\n });\r\n });\r\n },\r\n\r\n /*\r\n * Convierte a Base64.\r\n */\r\n utf8ToBase64: function (str) {\r\n return window.btoa(unescape(encodeURIComponent(str)));\r\n },\r\n\r\n /*\r\n * Decodifica un string en Base64.\r\n */\r\n base64ToUtf8: function (str) {\r\n var result;\r\n try {\r\n result = decodeURIComponent(escape(window.atob(str)));\r\n }\r\n catch (error) {\r\n result = null;\r\n }\r\n return result;\r\n },\r\n\r\n colorArrayToString: function (color) {\r\n if (Array.isArray(color)) {\r\n color = color\r\n .slice(0, 3)\r\n .reduce(function (prev, cur) {\r\n const str = cur.toString(16);\r\n return prev + '00'.substring(0, 2 - str.length) + str;\r\n }, '#');\r\n }\r\n return color;\r\n },\r\n\r\n // Generic helper function that can be used for the three operations: \r\n operation: function (list1, list2, comparerFn, operationIsUnion) {\r\n var result = [];\r\n\r\n for (var i = 0; i < list1.length; i++) {\r\n var item1 = list1[i],\r\n found = false;\r\n for (var j = 0; j < list2.length; j++) {\r\n if (comparerFn(item1, list2[j])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (found === operationIsUnion) {\r\n result.push(item1);\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n // Following functions are to be used:\r\n inBoth: function (list1, list2, comparerFn) {\r\n return this.operation(list1, list2, comparerFn, true);\r\n },\r\n\r\n inFirstOnly: function (list1, list2, comparerFn) {\r\n return this.operation(list1, list2, comparerFn, false);\r\n },\r\n\r\n inSecondOnly: function (list1, list2, comparerFn) {\r\n return this.inFirstOnly(list2, list1, comparerFn);\r\n },\r\n\r\n toDataUrl: function (canvas, backgroundColour) {\r\n var defaultOptions = { type: 'image/png', encoderOptions: 0.92 };\r\n\r\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultOptions,\r\n type = _ref.type,\r\n encoderOptions = _ref.encoderOptions;\r\n\r\n var context = canvas.getContext('2d');\r\n\r\n if (!context) {\r\n return '';\r\n }\r\n\r\n var width = canvas.width;\r\n var height = canvas.height;\r\n\r\n var data = context.getImageData(0, 0, width, height);\r\n var compositeOperation = context.globalCompositeOperation;\r\n\r\n if (backgroundColour) {\r\n\r\n context.globalCompositeOperation = 'destination-over';\r\n context.fillStyle = backgroundColour;\r\n context.fillRect(0, 0, width, height);\r\n }\r\n\r\n var imageData = canvas.toDataURL(type, encoderOptions);\r\n\r\n if (backgroundColour) {\r\n context.clearRect(0, 0, width, height);\r\n context.putImageData(data, 0, 0);\r\n context.globalCompositeOperation = compositeOperation;\r\n }\r\n\r\n return imageData;\r\n },\r\n\r\n imgToDataUrl: function (src, outputFormat) {\r\n\r\n var createCanvas = function (img) {\r\n var canvas = document.createElement('CANVAS');\r\n var ctx = canvas.getContext('2d');\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n\r\n return canvas;\r\n };\r\n\r\n return new Promise(function (resolve, reject) {\r\n if (!outputFormat) {\r\n switch (src.substr(src.lastIndexOf('.') + 1).toLowerCase()) {\r\n case 'svg':\r\n outputFormat = 'image/svg+xml';\r\n break;\r\n case 'png':\r\n outputFormat = 'image/png';\r\n break;\r\n case 'gif':\r\n outputFormat = 'image/gif';\r\n break;\r\n default:\r\n outputFormat = 'image/jpeg';\r\n }\r\n }\r\n\r\n var img = new Image();\r\n img.crossOrigin = 'anonymous';\r\n img.onload = function () {\r\n var canvas = createCanvas(img);\r\n var dataURL;\r\n\r\n try {\r\n dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat,\r\n encoderOptions: 1.0\r\n });\r\n resolve({ dataUrl: dataURL, canvas: canvas });\r\n } catch (error) {\r\n img.src = TC.proxify(src);\r\n }\r\n };\r\n\r\n img.onerror = function (error) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', TC.proxify(src), true);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\r\n\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function (e) {\r\n if (this.status === 200) {\r\n var uInt8Array = new Uint8Array(this.response);\r\n var i = uInt8Array.length;\r\n var binaryString = new Array(i);\r\n while (i--) {\r\n binaryString[i] = String.fromCharCode(uInt8Array[i]);\r\n }\r\n var data = binaryString.join('');\r\n var type = xhr.getResponseHeader('content-type');\r\n if (type.indexOf('image') === 0) {\r\n img.src = 'data:' + type + ';base64,' + window.btoa(data);\r\n img.onload = function () {\r\n const canvas = createCanvas(img);\r\n const dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat || 'image/jpeg',\r\n encoderOptions: 1.0\r\n });\r\n resolve({ dataUrl: dataURL, canvas: canvas });\r\n };\r\n }\r\n }\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === 4) {\r\n if (xhr.status !== 200) {\r\n reject(Error('HTTP error ' + xhr.status));\r\n }\r\n }\r\n };\r\n\r\n xhr.send();\r\n };\r\n\r\n img.src = src;\r\n if (img.complete || img.complete === undefined) {\r\n img.src = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\";\r\n img.src = src;\r\n }\r\n });\r\n },\r\n\r\n imgTagToDataUrl: function (img, outputFormat) {\r\n var createCanvas = function (img) {\r\n var canvas = document.createElement('CANVAS');\r\n var ctx = canvas.getContext('2d');\r\n canvas.height = img.height;\r\n canvas.width = img.width;\r\n ctx.drawImage(img, 0, 0);\r\n\r\n return canvas;\r\n };\r\n\r\n var canvas = createCanvas(img);\r\n var dataURL;\r\n\r\n try {\r\n dataURL = TC.Util.toDataUrl(canvas, '#ffffff', {\r\n type: outputFormat || 'image/jpeg',\r\n encoderOptions: 1.0\r\n });\r\n return { base64: dataURL, canvas: canvas };\r\n } catch (error) {\r\n return null;\r\n }\r\n },\r\n\r\n addToCanvas: function (canvas, img, position, size) {\r\n var newCanvas = TC.Util.cloneCanvas(canvas);\r\n var context = newCanvas.getContext('2d');\r\n\r\n return new Promise(function (resolve, reject) {\r\n var newImage = new Image();\r\n newImage.crossOrigin = 'anonymous';\r\n newImage.src = img;\r\n newImage.onload = function () {\r\n if (size) {\r\n context.drawImage(newImage, position.x || 0, position.y || 0, size.width, size.height);\r\n } else {\r\n context.drawImage(newImage, position.x || 0, position.y || 0);\r\n }\r\n resolve(newCanvas);\r\n };\r\n });\r\n },\r\n\r\n cloneCanvas: function (oldCanvas) {\r\n //create a new canvas\r\n var newCanvas = document.createElement('canvas');\r\n var context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = oldCanvas.width;\r\n newCanvas.height = oldCanvas.height;\r\n\r\n //apply the old canvas to the new one\r\n context.drawImage(oldCanvas, 0, 0);\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n },\r\n\r\n mergeCanvases: function (canvases) {\r\n const rects = canvases.map(c => c.getBoundingClientRect());\r\n const bbox = rects.reduce(function (prev, rect) {\r\n return [\r\n Math.min(prev[0], rect.left),\r\n Math.min(prev[1], rect.top),\r\n Math.max(prev[2], rect.right),\r\n Math.max(prev[3], rect.bottom)\r\n ];\r\n }, [\r\n Number.POSITIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY\r\n ]);\r\n const left = bbox[0];\r\n const top = bbox[1];\r\n\r\n //create a new canvas\r\n const newCanvas = document.createElement('canvas');\r\n const context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = bbox[2] - left;\r\n newCanvas.height = bbox[3] - top;\r\n\r\n //apply the old canvases to the new one\r\n canvases.forEach(function (canvas, idx) {\r\n const rect = rects[idx];\r\n context.drawImage(canvas, rect.left - left, rect.top - top, rect.right - rect.left, rect.bottom - rect.top);\r\n });\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n },\r\n\r\n calculateAspectRatioFit: function (srcWidth, srcHeight, maxWidth, maxHeight) {\r\n var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);\r\n\r\n return { width: srcWidth * ratio, height: srcHeight * ratio };\r\n },\r\n\r\n getFormattedDate: function (date, hasTime) {\r\n function pad(s) { return s < 10 ? '0' + s : s; }\r\n\r\n var d = new Date(date);\r\n return [d.getFullYear(), pad(d.getMonth() + 1), pad(d.getDate())].concat(hasTime ? [\"_\", pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())] : []).join('');\r\n\r\n },\r\n\r\n replaceSpecialCharacters: function (t) {\r\n var translate = new Map([\r\n [\"ä\", \"a\"], [\"ö\", \"o\"], [\"ü\", \"u\"],\r\n [\"Ä\", \"A\"], [\"Ö\", \"O\"], [\"Ü\", \"U\"],\r\n [\"á\", \"a\"], [\"é\", \"e\"], [\"i\", \"i\"], [\"ó\", \"o\"], [\"ú\", \"u\"],\r\n [\"Á\", \"A\"], [\"É\", \"E\"], [\"Í\", \"I\"], [\"Ó\", \"O\"], [\"Ú\", \"U\"],\r\n [\"ñ\", \"n\"], [\"Ñ\", \"N\"]\r\n ]);\r\n return t.replace(/[öäüÖÄÜáéíóúÁÉÍÓÚñÑ]/g, function (match) {\r\n return translate.get(match);\r\n });\r\n },\r\n\r\n downloadFileForm: async function (url, data) {\r\n var download = async function (url, data) {\r\n\r\n var response = await new Promise(function (resolve, reject) {\r\n const request = new XMLHttpRequest();\r\n request.responseType = \"blob\";\r\n request.open(\"POST\", url);\r\n request.setRequestHeader('Content-Type', 'application/xml; charset=UTF-8');\r\n\r\n request.onreadystatechange = function (e) {\r\n if (request.readyState === 4) { // DONE\r\n if (request.status !== 200) {\r\n reject({\r\n status: request.status,\r\n msg: request.statusText,\r\n url: url\r\n });\r\n } else {\r\n\r\n try {\r\n //URI: Miro si devuelve una cabecera content-disposition attachment. Si es asi uso el filenae como nombre de fichero. Esta descarga seguramente venga\r\n //de un proxy con postproceso de zippeado\r\n const contentDispositionHeader = request.getResponseHeader(\"Content-disposition\");\r\n var filename = \"\";\r\n if (contentDispositionHeader) {\r\n filename = contentDispositionHeader.split(\"; \")[1].substring(9);\r\n if (contentDispositionHeader.split(\"; \")[0] !== \"attachment\") {\r\n filename = filename.substring(0, filename.lastIndexOf(\".\"));\r\n }\r\n }\r\n const contentType = request.getResponseHeader(\"Content-type\");\r\n resolve({ data: request.response, contentType: contentType || (request.responseType === \"blob\" ? \"application/zip\" : \"\"), filename: filename });\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n }\r\n }\r\n };\r\n\r\n try {\r\n request.send(data);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n var format = \"\";\r\n if (response.data.type.indexOf(\"kml\") >= 0)\r\n format = \".kml\";\r\n else if (response.data.type.indexOf(\"json\") >= 0)\r\n format = \".geojson\";\r\n else if (response.data.type.indexOf(\"xml\") >= 0) {\r\n format = \".gml\";\r\n if (/outputFormat=\"\\S{1,}\"/.exec(data)[0].includes(\".kml\") || /outputFormat=\"\\S{1,}\"/.exec(data)[0].includes(\"shape-zip\")) {\r\n throw { key: TC.Consts.DownloadError.MIMETYPE_NOT_SUPORTED, url: url, data: data, format: /outputFormat=\"\\S{1,}\"/.exec(data)[0] };\r\n }\r\n }\r\n TC.Util.downloadFile((response.filename ? response.filename : TC.getUID()) + format, response.contentType, response.data);\r\n\r\n };\r\n var _err;\r\n if (Array.isArray(url)) {\r\n var arrDownloads = url;\r\n for (var i = 0; i < arrDownloads.length; i++) {\r\n try {\r\n await download(arrDownloads[i].url, arrDownloads[i].data);\r\n }\r\n catch (err) {\r\n _err = err;\r\n }\r\n }\r\n if (_err) {\r\n throw _err;\r\n }\r\n }\r\n else {\r\n await download(url, data);\r\n }\r\n },\r\n WFSQueryBuilder: function (layers, filter, capabilities, outputFormat, onlyHits, srsName, maxFeatures, fields) {\r\n const getSRSAttribute = function () {\r\n if (srsName) {\r\n return ' srsName=\"' + srsName + '\"';\r\n }\r\n else\r\n return '';\r\n };\r\n const getFields = function () {\r\n if (!fields) return '';\r\n var tagName = '';\r\n switch (capabilities.version) {\r\n case \"1.0.0\":\r\n tagName = \"ogc:PropertyName\";\r\n break;\r\n case \"1.1.0\":\r\n tagName = \"wfs:PropertyName\";\r\n break;\r\n case \"2.0.0\":\r\n tagName = \"wfs:PropertyName\";\r\n default:\r\n\r\n break;\r\n }\r\n return (fields instanceof Array ? fields : [fields]).reduce(function (vi, va) {\r\n return vi + '<' + tagName + '>' + va + '';\r\n }, '');\r\n\r\n };\r\n if (!Array.isArray(layers) && !(layers instanceof Object))\r\n layers = [layers];\r\n\r\n let query = '';\r\n let queryBody = '';\r\n let queryItem;\r\n if (Array.isArray(layers)) {\r\n queryItem = '{fields}{filter}';\r\n layers.forEach(function (value) {\r\n queryBody += queryItem.format({\r\n typeName: value,\r\n filter: filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\",\r\n fields: getFields()\r\n });\r\n });\r\n }\r\n else {\r\n queryItem = '';\r\n for (var layer in layers) {\r\n queryItem = '{fields}{filter}';\r\n let filter = layers[layer];\r\n queryBody += queryItem.format({\r\n typeName: layer,\r\n filter: filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\",\r\n fields: getFields()\r\n });\r\n }\r\n }\r\n\r\n query += queryBody + '';\r\n return query;\r\n },\r\n\r\n WFGetPropertyValue: function (layer, valueReference, filter, capabilities) {\r\n /*if (capabilities.version === \"2.0.0\") {\r\n var query = '';\r\n var queryBody = '';\r\n var queryItem = ('{filter}');\r\n queryBody += queryItem.format({ typeName: layer, filter: (filter && filter instanceof TC.filter.Filter ? filter.getText(capabilities.version) : \"\") });\r\n query += queryBody + ''\r\n return query;\r\n }\r\n else*/\r\n return TC.Util.WFSQueryBuilder([layer], filter, capabilities, \"JSON\", false, null, null, valueReference);\r\n\r\n\r\n },\r\n\r\n WFSFilterBuilder: function (feature, version, srsName) {\r\n var filter = '';\r\n if (Util.isPlainObject(feature)) {\r\n filter = '<{prefix}:Filter><{prefix}:Intersects><{prefix}:Function name=\"querySingle\"><{prefix}:Literal>{clipLayer}<{prefix}:Literal>{geometryName}<{prefix}:Literal>{where}'\r\n .format({\r\n prefix: version === \"2.0.0\" ? \"fes\" : \"ogc\",\r\n clipLayer: feature.clipLayer,\r\n geometryName: feature.geometryName,\r\n where: feature.where\r\n });\r\n }\r\n else {\r\n switch (true) {\r\n case !feature:\r\n break;\r\n case Array.isArray(feature)://bbox\r\n var gmlEnvelope = ('' +\r\n '{lowerCorner}' +\r\n '{upperCorner}' +\r\n '').format({\r\n lowerCorner: feature[0] + ' ' + feature[1],\r\n upperCorner: feature[2] + ' ' + feature[3]\r\n });\r\n switch (true) {\r\n case version === \"1.0.0\":\r\n case version === \"1.1.0\":\r\n filter += '' + gmlEnvelope + '';\r\n break;\r\n case version === \"2.0.0\":\r\n filter += '' + gmlEnvelope + '';\r\n break;\r\n }\r\n break;\r\n case feature instanceof TC.Feature:\r\n switch (true) {\r\n case version === \"1.0.0\":\r\n case version === \"1.1.0\":\r\n filter += '' + TC.Util.writeGMLGeometry(feature, { version: \"2.0\", srsName: srsName }) + '';\r\n break;\r\n case version === \"2.0.0\":\r\n filter += '' + TC.Util.writeGMLGeometry(feature, { version: \"3.2\", srsName: srsName }) + '';\r\n break;\r\n }\r\n\r\n break;\r\n default:\r\n TC.error(\"Geometr\\u00eda no v\\u00e1lida\");\r\n break;\r\n }\r\n }\r\n\r\n return filter;\r\n },\r\n\r\n writeGMLGeometry: function (feature, options) {\r\n options = options || {};\r\n const gmlVersion = options.version;\r\n const getSRSName = function () {\r\n if (options.srsName) {\r\n return ' srsName=\"' + options.srsName + '\"';\r\n }\r\n else\r\n return '';\r\n };\r\n var getGmlCoordinates = function (coords) {\r\n var result;\r\n if (gmlVersion.indexOf('3') === 0) {\r\n result = coords.toString();\r\n while (result.indexOf(\",\") >= 0) {\r\n result = result.replace(\",\", \" \");\r\n }\r\n }\r\n else {\r\n result = coords.map(function (coord) {\r\n return coord.join(',');\r\n }).join(' ');\r\n }\r\n return result;\r\n };\r\n\r\n switch (gmlVersion) {\r\n case \"3.1.1\":\r\n break;\r\n case \"3.2\":\r\n switch (true) {\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry) +\r\n \"\";\r\n default:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n }\r\n break;\r\n case \"2.0\":\r\n default:\r\n switch (true) {\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n default:\r\n return \"\" +\r\n getGmlCoordinates(feature.geometry[0]) +\r\n \"\";\r\n }\r\n break;\r\n }\r\n },\r\n\r\n isServiceWorker: function () {\r\n if (navigator.serviceWorker) {\r\n if (navigator.serviceWorker.controller && navigator.serviceWorker.controller.state === \"activated\") {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n isSameOriginByLocation: function (uri, location) {\r\n var result = uri.indexOf(\"http\") !== 0 && uri.indexOf(\"//\") !== 0;\r\n var urlParts = !result && uri.match(TC.Consts.url.SPLIT_REGEX);\r\n if (urlParts) {\r\n var uProtocol = urlParts[1];\r\n result = (uProtocol == location.protocol || uProtocol == undefined) && urlParts[3] == location.hostname;\r\n var uPort = urlParts[4], lPort = location.port;\r\n if (uPort != 80 && uPort !== \"\" || lPort != \"80\" && lPort !== \"\") {\r\n result = result && uPort == lPort;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n isSameProtocol: function (uri, location) {\r\n if (uri.match(/^(\\/\\/)/i)) {\r\n return true;\r\n }\r\n var protocolRegex = /^(https?:\\/\\/)/i;\r\n var uriProtocol = uri.match(protocolRegex);\r\n if (uriProtocol && uriProtocol.length > 1) {\r\n var locationProtocol = location.match(protocolRegex);\r\n if (locationProtocol && locationProtocol.length > 1) {\r\n return uriProtocol[0].trim() === locationProtocol[0].trim();\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n consoleRegister: function (msg) {\r\n if (TC.isDebug) {\r\n console.log(msg);\r\n }\r\n },\r\n\r\n getSorterByProperty: function (propName) {\r\n return function (a, b) {\r\n if (a[propName] > b[propName]) {\r\n return 1;\r\n }\r\n if (a[propName] < b[propName]) {\r\n return -1;\r\n }\r\n return 0;\r\n };\r\n },\r\n\r\n getSoundexDifference: function (a, b) {\r\n var res = 0;\r\n\r\n for (var i = 0; i < a.length; i++) {\r\n if (a.charAt(i) === b.charAt(i)) {\r\n res++;\r\n }\r\n }\r\n\r\n return res;\r\n },\r\n\r\n toAbsolutePath: function (href) {\r\n var link = document.createElement(\"a\");\r\n link.href = href;\r\n return link.href;\r\n },\r\n\r\n explodeGeometry: function (obj) {\r\n const origin = obj.origin;\r\n const iterationFunction = function (elm, idx, arr) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(iterationFunction);\r\n }\r\n else {\r\n if (idx === 0) {\r\n arr[0] = elm + origin[0];\r\n }\r\n if (idx === 1) {\r\n arr[1] = elm + origin[1];\r\n }\r\n }\r\n };\r\n obj.geom.forEach(iterationFunction);\r\n return obj.geom;\r\n },\r\n\r\n cloneMappingFunction: function (elm) {\r\n if (Array.isArray(elm)) {\r\n return elm.map(TC.Util.cloneMappingFunction);\r\n }\r\n return elm;\r\n },\r\n\r\n isGeometry: function (type) {\r\n switch (type) {\r\n case 'gml:LinearRingPropertyType':\r\n case 'gml:PolygonPropertyType':\r\n case 'gml:MultiPolygonPropertyType':\r\n case 'gml:MultiSurfacePropertyType':\r\n case 'gml:LineStringPropertyType':\r\n case 'gml:MultiLineStringPropertyType':\r\n case 'gml:PointPropertyType':\r\n case 'gml:MultiPointPropertyType':\r\n case 'gml:BoxPropertyType':\r\n case 'gml:GeometryCollectionPropertyType':\r\n case 'gml:GeometryAssociationType':\r\n case 'gml:GeometryPropertyType':\r\n case 'gml:MultiCurvePropertyType':\r\n case 'gml:CurvePropertyType':\r\n return true;\r\n break;\r\n default:\r\n return false;\r\n break;\r\n }\r\n },\r\n\r\n compactGeometry: function (geometry, precision) {\r\n const origin = [Number.MAX_VALUE, Number.MAX_VALUE];\r\n const newGeom = geometry.map(TC.Util.cloneMappingFunction);\r\n const firstIterationFunction = function (elm, idx) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(firstIterationFunction);\r\n }\r\n else {\r\n if (idx === 0 && elm < origin[0]) {\r\n origin[0] = elm;\r\n }\r\n else if (idx === 1 && elm < origin[1]) {\r\n origin[1] = elm;\r\n }\r\n }\r\n };\r\n newGeom.forEach(firstIterationFunction);\r\n\r\n const round = function (val) {\r\n return Math.round(val * precision) / precision;\r\n };\r\n origin[0] = round(origin[0]);\r\n origin[1] = round(origin[1]);\r\n const secondIterationFunction = function (elm, idx, arr) {\r\n if (Array.isArray(elm)) {\r\n elm.forEach(secondIterationFunction);\r\n }\r\n else {\r\n if (idx === 0) {\r\n arr[0] = round(elm - origin[0]);\r\n }\r\n if (idx === 1) {\r\n arr[1] = round(elm - origin[1]);\r\n }\r\n }\r\n };\r\n newGeom.forEach(secondIterationFunction);\r\n return {\r\n origin: origin,\r\n geom: newGeom\r\n };\r\n },\r\n\r\n hasStyleOptions: function (options) {\r\n return options.hasOwnProperty('strokeColor') ||\r\n options.hasOwnProperty('strokeWidth') ||\r\n options.hasOwnProperty('fillColor') ||\r\n options.hasOwnProperty('strokeOpacity') ||\r\n options.hasOwnProperty('fillOpacity') ||\r\n options.hasOwnProperty('url') ||\r\n options.hasOwnProperty('radius') ||\r\n options.hasOwnProperty('anchor') ||\r\n options.hasOwnProperty('width') ||\r\n options.hasOwnProperty('height') ||\r\n options.hasOwnProperty('labelOutlineWidth') ||\r\n options.hasOwnProperty('labelOutlineColor') ||\r\n options.hasOwnProperty('labelOffset') ||\r\n options.hasOwnProperty('fontColor') ||\r\n options.hasOwnProperty('fontSize');\r\n },\r\n\r\n formatCoord: function (x, nDecimales) {\r\n return x.toLocaleString(TC.Util.getLocaleUserChoice(), { maximumFractionDigits: nDecimales });\r\n\r\n // No respeta el formato de los números según el idioma\r\n //var result; \r\n //result = x.toFixed(nDecimales);\r\n //if (nDecimales <= 3) {\r\n // result = result.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"|\");\r\n //}\r\n\r\n //result = result.replace(\".\", \",\").replace(/\\|/g, \".\");\r\n //return result;\r\n },\r\n\r\n getWebWorkerCrossOriginURL: function (url) {\r\n return new Promise(function (resolve, reject) {\r\n if (window.hasOwnProperty('Worker')) {\r\n // Para evitar problemas con IE10 y Opera evitamos el uso de blobs cuando es evitable\r\n if (TC.Util.isSameOrigin(url)) {\r\n resolve(url);\r\n }\r\n else {\r\n TC.ajax({\r\n url: url,\r\n method: 'GET',\r\n responseType: 'text'\r\n }).then(\r\n function (response) {\r\n const data = response.data;\r\n var blob = new Blob([data], { type: \"text/javascript\" });\r\n var url = window.URL.createObjectURL(blob);\r\n resolve(url);\r\n },\r\n function (e) {\r\n reject(Error(e));\r\n }\r\n );\r\n }\r\n }\r\n else {\r\n reject(new Error('No support for service workers'));\r\n }\r\n });\r\n }\r\n};\r\n\r\nString.prototype.format = function () {\r\n var str = this.toString();\r\n if (!arguments.length)\r\n return str;\r\n var args = typeof arguments[0];\r\n args = \"string\" === args || \"number\" === args ? arguments : arguments[0];\r\n for (var arg in args) {\r\n str = str.replace(RegExp(\"\\\\{\" + arg + \"\\\\}\", \"gi\"), args[arg]);\r\n }\r\n return str;\r\n};\r\nconst _queryHeaderConstructor = function (capabilities) {\r\n var queryHeader = 'xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd\" ' +\r\n ' service=\"WFS\" {resultType} {format} ';\r\n switch (capabilities.version) {\r\n case \"1.0.0\":\r\n case \"1.1.0\":\r\n queryHeader += 'xmlns:gml=\"http://www.opengis.net/gml\" xmlns:wfs=\"http://www.opengis.net/wfs\" ';\r\n break;\r\n case \"2.0.0\":\r\n queryHeader += 'xmlns:wfs=\\\"http://www.opengis.net/wfs/2.0\\\" xmlns:gml=\\\"http://www.opengis.net/gml/3.2\\\" ';\r\n break;\r\n }\r\n for (var i in capabilities) {\r\n if (typeof capabilities[i] === \"string\" && i.indexOf(\"gml\") < 0 && capabilities[i].indexOf(\"wfs\") < 0)\r\n queryHeader += i + '=\"' + capabilities[i] + '\" ';\r\n }\r\n return queryHeader;\r\n};\r\n\r\nvar fncOvelaps = function (elem1, elem2, comparisonFnc) {\r\n return comparisonFnc(elem1.getBoundingClientRect(), elem2.getBoundingClientRect());\r\n};\r\nif (window.HTMLElement) {\r\n HTMLElement.prototype.colliding = function (other) {\r\n return fncOvelaps(this, other, function (rect1, rect2) {\r\n return !(\r\n rect1.top > rect2.bottom ||\r\n rect1.right < rect2.left ||\r\n rect1.bottom < rect2.top ||\r\n rect1.left > rect2.right\r\n );\r\n });\r\n };\r\n HTMLElement.prototype.containing = function (other) {\r\n fncOvelaps(this, other, function (rect1, rect2) {\r\n return !(\r\n rect1.left <= rect2.left &&\r\n rect2.left < rect1.width &&\r\n rect1.top <= rect2.top &&\r\n rect2.top < rect1.height\r\n );\r\n });\r\n };\r\n HTMLElement.prototype.inside = function (other) {\r\n return fncOvelaps(this, other, function (rect1, rect2) {\r\n return (rect2.top <= rect1.top && rect1.top <= rect2.bottom) &&\r\n (rect2.top <= rect1.bottom && rect1.bottom <= rect2.bottom) &&\r\n (rect2.left <= rect1.left && rect1.left <= rect2.right) &&\r\n (rect2.left <= rect1.right && rect1.right <= rect2.right);\r\n });\r\n };\r\n}\r\n\r\nexport default Util;\r\n","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.Attribution = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.apiAttribution = '';\r\n self.mainDataAttribution = null;\r\n self.dataAttributions = [];\r\n if (self.options.dataAttributions) {\r\n self.dataAttributions = self.options.dataAttributions instanceof Array ? self.options.dataAttributions : [self.options.dataAttributions];\r\n }\r\n};\r\n\r\nTC.inherit(TC.control.Attribution, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Attribution.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-attrib';\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" - \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"data\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":23},\"end\":{\"line\":3,\"column\":38}}})) + \":\\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"mainData\") : depth0)) != null ? lookupProperty(stack1,\"site\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":10,\"column\":15}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"mainData\") : depth0)) != null ? lookupProperty(stack1,\"name\") : stack1), depth0)) + \"\\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"mainData\") : depth0)) != null ? lookupProperty(stack1,\"name\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":12},\"end\":{\"line\":9,\"column\":19}}})) != null ? stack1 : \"\");},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"mainData\") : depth0)) != null ? lookupProperty(stack1,\"name\") : stack1), depth0)) + \"\\r\\n\";},\"7\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" - \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"others\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":56},\"end\":{\"line\":12,\"column\":73}}})) + \"...\";},\"9\":function(container,depth0,helpers,partials,data) { return \" tc-collapsed\";},\"11\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":20},\"end\":{\"line\":14,\"column\":51}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"site\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":51},\"end\":{\"line\":14,\"column\":159}}})) != null ? stack1 : \"\");},\"12\":function(container,depth0,helpers,partials,data) { return \", \";},\"14\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\";},\"16\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
\\r\\n \" + ((stack1 = container.lambda((depth0 != null ? lookupProperty(depth0,\"api\") : depth0), depth0)) != null ? stack1 : \"\") + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"mainData\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":11,\"column\":11}}})) != null ? stack1 : \"\") + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"otherData\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":4},\"end\":{\"line\":12,\"column\":90}}})) != null ? stack1 : \"\") + \"\\r\\n
\\r\\n\t\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"otherData\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":1},\"end\":{\"line\":14,\"column\":168}}})) != null ? stack1 : \"\") + \"\\r\\n
\\r\\n
\";},\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.apiAttribution = self.map.options.attribution || self.apiAttribution;\r\n\r\n var addData = function (obj) {\r\n if (obj) {\r\n // TODO: sanitizer\r\n var attr = obj.getAttribution();\r\n if (attr) {\r\n if (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) {\r\n self.mainDataAttribution = {\r\n name: 'IDENA',\r\n site: 'https://idena.navarra.es/'\r\n };\r\n }\r\n else {\r\n var textExists = false;\r\n for (var i = 0; i < self.dataAttributions.length; i++) {\r\n if (attr.name === self.dataAttributions[i].name) {\r\n textExists = true;\r\n break;\r\n }\r\n }\r\n if (!textExists) {\r\n self.dataAttributions.push(attr);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n var removeData = function (obj) {\r\n if (obj) {\r\n\r\n var checkRemoveData = function () {\r\n if (obj.map.workLayers.length > 0) {\r\n const wlArr = obj.map.workLayers\r\n .slice()\r\n .reverse();\r\n for (var i = 0; i < wlArr.length; i++) {\r\n const wl = wlArr[i];\r\n if (wl.url == obj.url && wl.getVisibility()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n if (obj instanceof TC.Layer ? checkRemoveData() : true) {\r\n // TODO: sanitizer\r\n var attr = obj.getAttribution();\r\n\r\n if (attr) {\r\n var index = self.dataAttributions.reduce(function (prev, cur, idx) {\r\n if (cur.name === attr.name) {\r\n return idx;\r\n }\r\n return prev;\r\n }, -1);\r\n\r\n const checkIsSameAttribution = function (toCheckName) {\r\n return (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) &&\r\n (/IDENA/.test(toCheckName) || /Tracasa Instrumental/.test(toCheckName)) ||\r\n attr.name === toCheckName;\r\n };\r\n\r\n // 07/10/2020 Validamos contra el mapa de fondo antes de cambiar de mapa de fondo así que no se borran cuando deberían.\r\n // Validamos que la capa a borrar no sea la de fondo actual\r\n // Validamos si las atribuciones a borrar son también del mapa base\r\n if (self.map.baseLayer && self.map.baseLayer.wrap.getAttribution() && checkIsSameAttribution(self.map.baseLayer.wrap.getAttribution().name) && \r\n obj.parent.id !== self.map.baseLayer.id) {\r\n return;\r\n } else {\r\n // Validamos si las atribuciones a borrar son también de alguna de las capas raster cargadas\r\n if (self.map.workLayers.filter(function (layer) {\r\n return layer.type === TC.Consts.layerType.WMS || layer.type === TC.Consts.layerType.WMTS;\r\n }).some(function (layer) {\r\n var workLayerAttribution = layer.wrap.getAttribution();\r\n return workLayerAttribution && checkIsSameAttribution(workLayerAttribution.name);\r\n })) {\r\n return;\r\n }\r\n }\r\n\r\n if (index > -1) {\r\n self.dataAttributions.splice(index, 1);\r\n } else if (/IDENA/.test(attr.name) || /Tracasa Instrumental/.test(attr.name)) {\r\n self.mainDataAttribution = null;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n //URI: Si las atribuciones están vacias evito hace una llamada al renderizado del control ya que lo obtendría sin datos.\r\n //self.render();\r\n\r\n map.loaded(function () {\r\n if (map.baseLayer.wrap.getAttribution) {\r\n addData(map.baseLayer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.LAYERADD, function (e) {\r\n const layer = e.layer;\r\n if (!layer.isBase && layer.wrap.getAttribution && layer.wrap.getAttribution()) {\r\n addData(layer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.BEFOREBASELAYERCHANGE + \" \" + TC.Consts.event.OVERVIEWBASELAYERCHANGE, function (e) {\r\n const type = e.type;\r\n const newLayer = e.newLayer;\r\n const oldLayer = e.oldLayer;\r\n if (TC.Consts.event.OVERVIEWBASELAYERCHANGE.indexOf(type) > -1) {\r\n self.ignoreLayer = newLayer;\r\n }\r\n\r\n if (oldLayer && oldLayer.wrap.getAttribution) {\r\n removeData(oldLayer.wrap);\r\n }\r\n\r\n if (newLayer && newLayer.wrap.getAttribution) {\r\n addData(newLayer.wrap);\r\n }\r\n\r\n self.render();\r\n });\r\n\r\n map.on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n if (layer.wrap.getAttribution) {\r\n removeData(layer.wrap);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.TERRAINPROVIDERADD, function (e) {\r\n const terrainProvider = e.terrainProvider;\r\n if (terrainProvider.getAttribution) {\r\n addData(terrainProvider);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.TERRAINPROVIDERREMOVE, function (e) {\r\n const terrainProvider = e.terrainProvider;\r\n if (terrainProvider.getAttribution) {\r\n removeData(terrainProvider);\r\n self.render();\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.LAYERVISIBILITY, function (e) {\r\n const layer = e.layer;\r\n if (self.ignoreLayer === layer) {\r\n return;\r\n }\r\n\r\n if (layer.wrap.getAttribution) {\r\n if (layer.getVisibility()) {\r\n addData(layer.wrap);\r\n } else {\r\n removeData(layer.wrap);\r\n }\r\n self.render();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this; \r\n\r\n return self._set1stRenderPromise(self.renderData({\r\n api: typeof self.apiAttribution === 'function' ? self.apiAttribution.apply(self) : self.getLocaleString(self.apiAttribution),\r\n mainData: self.mainDataAttribution,\r\n otherData: self.dataAttributions,\r\n isCollapsed: self.div.querySelector('.' + self.CLASS + '-other') ? self.div.querySelector('.' + self.CLASS + '-other').classList.contains(TC.Consts.classes.COLLAPSED) : true\r\n }, function () {\r\n const cmd = self.div.querySelector('.' + self.CLASS + '-cmd');\r\n cmd && cmd.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.toggleOtherAttributions();\r\n }, { passive: true });\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.toggleOtherAttributions = function () {\r\n const self = this;\r\n const other = self.div.querySelector('.' + self.CLASS + '-other');\r\n other.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n };\r\n})();\r\n\r\nconst Attribution = TC.control.Attribution;\r\nexport default Attribution;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from './MapContents';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.MapContents = MapContents;\r\n\r\n(function () {\r\n\r\n TC.control.BasemapSelector = function () {\r\n var self = this;\r\n //options = options || {};\r\n\r\n TC.control.MapContents.apply(self, arguments);\r\n\r\n self.layerInfos = {};\r\n\r\n self._cssClasses = {\r\n LOAD_CRS_BUTTON: self.CLASS + '-crs-btn-load',\r\n CRS_DIALOG: self.CLASS + '-crs-dialog',\r\n CRS_LIST: self.CLASS + '-crs-list',\r\n VIEW_BTN: self.CLASS + '-btn-view',\r\n CURRENT_CRS_NAME: self.CLASS + '-cur-crs-name',\r\n CURRENT_CRS_CODE: self.CLASS + '-cur-crs-code',\r\n TREE: self.CLASS + '-tree',\r\n DETAILS: 'tc-details',\r\n GRID: 'tc-grid'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self._dialogDiv.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('button:not(.tc-modal-close)', function (e) {\r\n\r\n if (e.target.classList.contains(self._cssClasses.LOAD_CRS_BUTTON)) {\r\n self.loadFallbackProjections();\r\n return;\r\n }\r\n\r\n TC.Util.closeModal();\r\n const btn = e.target;\r\n const crs = btn.dataset.crsCode;\r\n\r\n // dependerá del que esté activo\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-crs-dialog');\r\n dialog.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n const layer = self.getLayer(dialog.dataset.layerId);\r\n if (layer) {\r\n if (crs) {\r\n TC.loadProjDef({\r\n crs: crs,\r\n callback: function () {\r\n self.map.setProjection({\r\n crs: crs,\r\n baseLayer: layer\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n const fallbackLayer = self.getFallbackLayer(btn.dataset.fallbackLayerId);\r\n if (fallbackLayer) {\r\n self.map.setBaseLayer(fallbackLayer);\r\n }\r\n }\r\n }\r\n }), { passive: true });\r\n };\r\n\r\n TC.inherit(TC.control.BasemapSelector, TC.control.MapContents);\r\n\r\n var ctlProto = TC.control.BasemapSelector.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-bms';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-bms-node\"),depth0,{\"name\":\"tc-ctl-bms-node\",\"hash\":{\"controlId\":(depths[1] != null ? lookupProperty(depths[1],\"controlId\") : depths[1])},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
  • \\r\\n
    \\r\\n

    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"moreBackgroundMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":16},\"end\":{\"line\":10,\"column\":45}}})) + \"

    \\r\\n
  • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"backgroundMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":29}}})) + \"

    \\r\\n
    \\r\\n
      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"baseLayers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":6,\"column\":17}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"dialogMore\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":8},\"end\":{\"line\":12,\"column\":15}}})) != null ? stack1 : \"\") + \"
    \\r\\n
    \";},\"usePartial\":true,\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + '-node'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
  • \\r\\n\\r\\n\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"layer\") : depth0)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0)) + \"\\r\\n
    \\r\\n

    \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"layer\") : depth0)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0)) + \"

    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"info\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":4},\"end\":{\"line\":19,\"column\":11}}})) != null ? stack1 : \"\") + \"
    \\r\\n
  • \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" style=\\\"background-image: url(\" + container.escapeExpression(container.lambda(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"layer\") : depth0)) != null ? lookupProperty(stack1,\"legend\") : stack1)) != null ? lookupProperty(stack1,\"src\") : stack1), depth0)) + \")\\\"\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" style=\\\"background-image: url(\" + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"layer\") : depth0)) != null ? lookupProperty(stack1,\"thumbnail\") : stack1), depth0)) + \")\\\"\";},\"6\":function(container,depth0,helpers,partials,data) { return \" class=\\\"tc-disabled\\\"\";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

    \" + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"info\") : depth0)) != null ? lookupProperty(stack1,\"abstract\") : stack1), depth0)) + \"

    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"info\") : depth0)) != null ? lookupProperty(stack1,\"metadata\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":8},\"end\":{\"line\":18,\"column\":15}}})) != null ? stack1 : \"\");},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
    \\r\\n

    \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"metadata\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":16},\"end\":{\"line\":11,\"column\":35}}})) + \"

    \\r\\n
      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"info\") : depth0)) != null ? lookupProperty(stack1,\"metadata\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":12},\"end\":{\"line\":15,\"column\":21}}})) != null ? stack1 : \"\") + \"
    \\r\\n
    \\r\\n\";},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
  • \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"formatDescription\") : depth0), depth0)) + \"
  • \\r\\n\";},\"12\":function(container,depth0,helpers,partials,data) { return \"
  • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"layer\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":24,\"column\":7}}})) != null ? stack1 : \"\");},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"backgroundMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":41}}})) + \"

    \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"baseLayerNotCompatible\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":16},\"end\":{\"line\":20,\"column\":49}}})) + \"

    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"baseLayerNotCompatible.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":15},\"end\":{\"line\":24,\"column\":61}}})) + \"

    \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n const getClosestParent = function (elm, selector) {\r\n while (elm && !elm.matches(selector)) {\r\n elm = elm.parentElement;\r\n }\r\n return elm;\r\n };\r\n\r\n const changeInputRadioBaseMap = function (e, callback) {\r\n const self = this;\r\n var flagToCallback = true;\r\n\r\n var radio = e.target;\r\n\r\n var layer = self.getLayer(getClosestParent(radio, 'li').dataset.layerId);\r\n\r\n if (self.options.dialogMore && getClosestParent(radio, '.' + self.CLASS + '-more-dialog')) {\r\n const radios = self.div.querySelectorAll('input[type=radio]');\r\n for (var i = 0, len = radios.length; i < len; i++) {\r\n const bmsLayer = self.getLayer(getClosestParent(radios[i], 'li').dataset.layerId);\r\n if (bmsLayer) {\r\n switch (true) {\r\n case bmsLayer.id === layer.id:\r\n layer = bmsLayer;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (layer != self.map.getBaseLayer()) {\r\n if (layer.mustReproject) {\r\n\r\n if (self.map.on3DView) {\r\n if (!layer.getFallbackLayer()) {\r\n self._currentSelection.checked = true;\r\n e.stopPropagation();\r\n return;\r\n } else if (layer.getFallbackLayer()) {\r\n const fallbackLayer = layer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n fallbackLayer._capabilitiesPromise.then(function () {\r\n if (fallbackLayer.isCompatible(self.map.getCRS())) {\r\n self.map.setBaseLayer(layer);\r\n }\r\n });\r\n }\r\n\r\n flagToCallback = true;\r\n }\r\n } else {\r\n // provisonal\r\n if (self._currentSelection) {\r\n self._currentSelection.checked = true;\r\n }\r\n\r\n // Buscamos alternativa\r\n const dialogOptions = {\r\n layer: layer\r\n };\r\n const fallbackLayer = layer.getFallbackLayer();\r\n if (fallbackLayer) {\r\n fallbackLayer._capabilitiesPromise.then(function () {\r\n if (fallbackLayer.isCompatible(self.map.getCRS())) {\r\n dialogOptions.fallbackLayer = fallbackLayer;\r\n }\r\n self.showProjectionChangeDialog(dialogOptions);\r\n });\r\n }\r\n else {\r\n self.showProjectionChangeDialog(dialogOptions);\r\n }\r\n //layer.getCompatibleCRS({ normalized: true });\r\n flagToCallback = false;\r\n }\r\n\r\n }\r\n else {\r\n\r\n if (layer.type === TC.Consts.layerType.WMS || layer.type === TC.Consts.layerType.WMTS && layer.getProjection() !== self.map.crs) {\r\n layer.setProjection({ crs: self.map.crs });\r\n }\r\n\r\n self.map.setBaseLayer(layer);\r\n }\r\n }\r\n\r\n if (this._currentSelection) {\r\n this._currentSelection.checked = true;\r\n }\r\n\r\n\r\n if (callback) {\r\n callback(flagToCallback);\r\n }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n TC.control.MapContents.prototype.register.call(self, map).then(function (ctl) {\r\n self.div.querySelector(`.${self._cssClasses.VIEW_BTN}`).addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.toggleView();\r\n e.target.blur(); \r\n }, { passive: true });\r\n\r\n if (self.options.dialogMore) {\r\n map.on(TC.Consts.event.VIEWCHANGE, function () {\r\n self._getMoreBaseLayers();\r\n });\r\n }\r\n\r\n map.on(TC.Consts.event.BASELAYERCHANGE + ' ' + TC.Consts.event.PROJECTIONCHANGE + ' ' + TC.Consts.event.VIEWCHANGE, function (e) {\r\n self.update(self.div, e.layer);\r\n });\r\n\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=radio]', function (e) {\r\n\r\n if (e.target.value === \"moreLayers\") {\r\n self.showMoreLayersDialog();\r\n } else {\r\n changeInputRadioBaseMap.call(self, e);\r\n }\r\n\r\n e.stopPropagation();\r\n }));\r\n\r\n resolve(ctl);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const result = TC.control.MapContents.prototype.render.call(self, callback, TC.Util.extend({}, self.options, { controlId: self.id }));\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n\r\n if (self.options.dialogMore) {\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-more-dialog');\r\n\r\n dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`).addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.toggleMoreLayersDialogView();\r\n e.target.blur();\r\n e.stopPropagation();\r\n }, { passive: true });\r\n\r\n dialog.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=radio]', function (e) {\r\n changeInputRadioBaseMap.call(self, e, function (close) {\r\n if (close) {\r\n TC.Util.closeModal();\r\n }\r\n });\r\n\r\n e.stopPropagation();\r\n }));\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.update = async function (div, baseLayer) {\r\n const self = this;\r\n\r\n div = div || self.div;\r\n\r\n await (self._moreBaseLayersPromise || self._getMoreBaseLayers());\r\n Array.from(div.querySelectorAll(`ul.${self.CLASS}-branch li`)).forEach(function (li, _idx, arr) {\r\n const layer = self.getLayer(li.dataset.layerId);\r\n if (layer) {\r\n const curBaseLayer = baseLayer || self.map.baseLayer;\r\n const radio = li.querySelector('input[type=radio]');\r\n const fbLayer = layer.getFallbackLayer && layer.getFallbackLayer();\r\n let checked = curBaseLayer && (curBaseLayer === layer || curBaseLayer.id === layer.id);\r\n if (!checked) {\r\n const otherLayerIsFallback = fbLayer && arr\r\n .filter(elm => elm !== li)\r\n .some(elm => elm.dataset.layerId === fbLayer.id);\r\n checked = !otherLayerIsFallback && curBaseLayer && (curBaseLayer === fbLayer || fbLayer && curBaseLayer.id === fbLayer.id);\r\n }\r\n\r\n if (self.map.on3DView && layer.mustReproject && fbLayer) {\r\n fbLayer.getCapabilitiesPromise().then(function () {\r\n var mustReproject = !layer.getFallbackLayer().isCompatible(self.map.getCRS());\r\n\r\n radio.checked = checked;\r\n if (mustReproject) {\r\n radio.classList.add(TC.Consts.classes.DISABLED);\r\n li.setAttribute('title', self.map.on3DView ? self.getLocaleString('notAvailableTo3D') : self.getLocaleString('reprojectionNeeded'));\r\n }\r\n else {\r\n radio.classList.remove(TC.Consts.classes.DISABLED);\r\n li.removeAttribute('title');\r\n }\r\n });\r\n } else {\r\n radio.checked = checked;\r\n if (layer.mustReproject) {\r\n radio.classList.add(TC.Consts.classes.DISABLED);\r\n li.setAttribute('title', self.map.on3DView ? self.getLocaleString('notAvailableTo3D') : self.getLocaleString('reprojectionNeeded'));\r\n }\r\n else {\r\n radio.classList.remove(TC.Consts.classes.DISABLED);\r\n li.removeAttribute('title');\r\n }\r\n }\r\n\r\n if (checked) {\r\n self._currentSelection = radio;\r\n }\r\n }\r\n });\r\n\r\n self.updateScale();\r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n const self = this; \r\n // Actuamos cuando la capa es base y es visible en tablas de contenidos o es hija de una visible\r\n if (layer.isBase && (!layer.options.stealth || layer.firstOption && !layer.firstOption.options.stealth)) {\r\n TC.control.MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n const displayLayer = layer.firstOption || layer;\r\n\r\n if (displayLayer !== layer) {\r\n self.layerTrees[displayLayer.id] = displayLayer.getTree();\r\n }\r\n\r\n if (displayLayer.getInfo) {\r\n self.layerInfos[displayLayer.id] = displayLayer.getInfo(displayLayer.names[0]);\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS + '-node', { layer: self.layerTrees[displayLayer.id], info: self.layerInfos[displayLayer.id], controlId: self.id }).then(function (out) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n var uid = newLi.dataset.layerUid;\r\n const ul = self.div.querySelector('.' + self.CLASS + '-branch');\r\n const currentLi = ul.querySelector('li[data-layer-uid=\"' + uid + '\"]');\r\n if (currentLi) {\r\n currentLi.innerHTML = newLi.innerHTML;\r\n }\r\n else {\r\n newLi.dataset.layerId = displayLayer.id;\r\n\r\n // Insertamos elemento en el lugar correcto, según indica la colección baseLayers\r\n const setLayerIds = self.map.baseLayers\r\n .map(baseLayer => baseLayer.firstOption || baseLayer)\r\n .filter(baseLayer => baseLayer && !baseLayer.stealth) // Buscamos capas que deban mostrarse\r\n .map(baseLayer => baseLayer.id);\r\n const idx = setLayerIds.indexOf(displayLayer.id);\r\n let inserted = false;\r\n let i;\r\n for (i = idx - 1; i >= 0; i--) {\r\n const curLi = ul.querySelector(`li[data-layer-id=\"${setLayerIds[i]}\"]`);\r\n if (curLi) {\r\n curLi.insertAdjacentElement('afterend', newLi);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n for (i = idx + 1; i < setLayerIds.length; i++) {\r\n const curLi = ul.querySelector(`li[data-layer-id=\"${setLayerIds[i]}\"]`);\r\n if (curLi) {\r\n curLi.insertAdjacentElement('beforebegin', newLi);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n const moreLabel = ul.querySelector(`.${self.CLASS}-more-node`);\r\n if (moreLabel) {\r\n moreLabel.parentElement.insertAdjacentElement('beforebegin', newLi);\r\n }\r\n else {\r\n ul.appendChild(newLi);\r\n }\r\n }\r\n }\r\n self.update();\r\n }\r\n }).catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.updateLayerOrder = function (_layer, _oldIdx, _newIdx) {\r\n // no hace nada\r\n };\r\n\r\n ctlProto.removeLayer = function (layer) {\r\n const self = this;\r\n if (layer.isBase) {\r\n const lis = self.div.querySelector('.' + self.CLASS + '-branch').querySelectorAll('li');\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n if (li.dataset.layerId === layer.id) {\r\n li.parentElement.removeChild(li);\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.onErrorLayer = function (layer) {\r\n const self = this;\r\n\r\n if (layer.isBase && !layer.options.stealth) {\r\n self.map.toast(self.getLocaleString('baseLayerNotAvailable', { mapName: layer.title }), { type: TC.Consts.msgType.ERROR });\r\n }\r\n };\r\n\r\n ctlProto.getFallbackLayer = function (id) {\r\n const self = this;\r\n const filterFn = function (layer) {\r\n return layer.fallbackLayer && layer.fallbackLayer.id === id;\r\n };\r\n let baseLayersWithFallback = self.map.baseLayers.filter(filterFn);\r\n let result = baseLayersWithFallback.length ? baseLayersWithFallback[0].fallbackLayer : null;\r\n if (!result && self._moreBaseLayers) {\r\n baseLayersWithFallback = self._moreBaseLayers.filter(filterFn);\r\n result = baseLayersWithFallback.length ? baseLayersWithFallback[0].fallbackLayer : null;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.loadFallbackProjections = function () {\r\n const self = this;\r\n const lis = self._dialogDiv\r\n .querySelector('.' + self._cssClasses.CRS_DIALOG)\r\n .querySelectorAll('ul.' + self._cssClasses.CRS_LIST + ' li');\r\n lis.forEach(function (li) {\r\n li.classList.remove(TC.Consts.classes.HIDDEN);\r\n if (li.querySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON)) {\r\n li.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.showProjectionChangeDialog = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const layer = options.layer;\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-crs-dialog');\r\n const modalBody = dialog.querySelector('.tc-modal-body');\r\n modalBody.classList.add(TC.Consts.classes.LOADING);\r\n const blCRSList = layer.getCompatibleCRS();\r\n\r\n dialog.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n dialog.dataset.layerId = layer.id;\r\n const ul = dialog.querySelector('ul.' + self.CLASS + '-crs-list');\r\n ul.innerHTML = '';\r\n self.map.loadProjections({\r\n crsList: self.map.getCompatibleCRS({\r\n layers: self.map.workLayers.concat(layer),\r\n includeFallbacks: true\r\n }),\r\n orderBy: 'name'\r\n }).then(function (projList) {\r\n var hasFallbackCRS = false;\r\n const fragment = document.createDocumentFragment();\r\n projList\r\n .forEach(function (projObj) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n\r\n if (blCRSList.filter(function (crs) {\r\n return TC.Util.CRSCodesEqual(crs, projObj.code);\r\n }).length === 0) {\r\n // Es un CRS del fallback\r\n hasFallbackCRS = true;\r\n\r\n button.innerHTML = projObj.name + ' (' + projObj.code + ')';\r\n if (options.layer.fallbackLayer) {\r\n button.dataset.fallbackLayerId = options.layer.fallbackLayer.id;\r\n }\r\n button.dataset.crsCode = projObj.code;\r\n button.classList.add(TC.Consts.classes.WARNING);\r\n li.classList.add(TC.Consts.classes.HIDDEN);\r\n } else {\r\n button.innerHTML = self.getLocaleString('changeMapToCrs', { crs: projObj.name + ' (' + projObj.code + ')' });\r\n button.dataset.crsCode = projObj.code;\r\n }\r\n\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n });\r\n\r\n if (options.fallbackLayer) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.innerHTML = self.getLocaleString('reprojectOnTheFly');\r\n button.dataset.fallbackLayerId = options.fallbackLayer.id;\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n }\r\n\r\n if (hasFallbackCRS) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.classList.add(self._cssClasses.LOAD_CRS_BUTTON);\r\n button.innerHTML = self.getLocaleString('showOnTheFlyProjections');\r\n li.appendChild(button);\r\n fragment.appendChild(li);\r\n }\r\n ul.appendChild(fragment);\r\n\r\n modalBody.classList.remove(TC.Consts.classes.LOADING);\r\n });\r\n dialog.querySelector('.' + self.CLASS + '-name').innerHTML = layer.title || layer.name;\r\n TC.Util.showModal(dialog);\r\n };\r\n\r\n ctlProto.showMoreLayersDialog = function () {\r\n const self = this;\r\n\r\n const dialog = self._dialogDiv.querySelector('.' + self.CLASS + '-more-dialog');\r\n\r\n dialog.classList.toggle(TC.Consts.classes.THREED, !!self.map.on3DView);\r\n\r\n const modalBody = dialog.querySelector('.tc-modal-body');\r\n modalBody.innerHTML = '';\r\n modalBody.classList.add(TC.Consts.classes.LOADING);\r\n dialog.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n TC.Util.showModal(dialog, {\r\n closeCallback: function () {\r\n // no hay selección, vuelvo a seleccionar el mapa de fondo actual del mapa.\r\n this.update().then(() => this._currentSelection.checked = true);\r\n }.bind(self)\r\n });\r\n\r\n const parentTree = self.div.querySelector(`.${self._cssClasses.TREE}`);\r\n const isGrid = parentTree.classList.contains(self._cssClasses.GRID);\r\n const button = dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`);\r\n button.classList.toggle(self._cssClasses.DETAILS, isGrid);\r\n button.classList.toggle(self._cssClasses.GRID, !isGrid);\r\n button.setAttribute('title', self.getLocaleString(isGrid ? 'showDetailsView' : 'showGridView'));\r\n\r\n const processLayer = bl => {\r\n if (bl) {\r\n const info = bl.getInfo ? bl.getInfo(bl.names[0]) : null;\r\n return { layer: bl, info: info, controlId: self.id };\r\n }\r\n return {};\r\n };\r\n const renderBody = function () {\r\n const isGrid = dialog.querySelector(`.${self._cssClasses.VIEW_BTN}`).classList.contains(self._cssClasses.DETAILS);\r\n const moreBaseLayers = self._moreBaseLayers.slice();\r\n for (var i = 0, ii = moreBaseLayers.length; i < ii; i++) {\r\n if (!moreBaseLayers[i]) {\r\n moreBaseLayers[i] = false;\r\n }\r\n }\r\n self.getRenderedHtml(self.CLASS, {\r\n baseLayers: moreBaseLayers.map(processLayer),\r\n controlId: self.id\r\n }, function (html) {\r\n modalBody.innerHTML = html;\r\n const tree = modalBody.querySelector(`.${self._cssClasses.TREE}`);\r\n tree.classList.toggle(self._cssClasses.DETAILS, !isGrid);\r\n tree.classList.toggle(self._cssClasses.GRID, isGrid);\r\n modalBody.classList.remove(TC.Consts.classes.LOADING);\r\n\r\n self.update(modalBody);\r\n });\r\n };\r\n self._getMoreBaseLayers(function (layerIdx) {\r\n if (modalBody.classList.contains(TC.Consts.classes.LOADING)) {\r\n renderBody();\r\n }\r\n else {\r\n const li = modalBody.querySelector(`li.${self.CLASS}-node:nth-child(${layerIdx + 1})`);\r\n const bl = self._moreBaseLayers[layerIdx];\r\n if (bl) {\r\n self.getRenderedHtml(self.CLASS + '-node', processLayer(bl), function (html) {\r\n li.insertAdjacentHTML('beforebegin', html);\r\n li.remove();\r\n self.update(modalBody);\r\n });\r\n }\r\n }\r\n }).then(function () {\r\n renderBody();\r\n });\r\n };\r\n\r\n const toggleUI = function (ctl, container) {\r\n const tree = container.querySelector(`.${ctl._cssClasses.TREE}`);\r\n if (tree) {\r\n const btn = container.querySelector(`.${ctl._cssClasses.VIEW_BTN}`);\r\n const isGrid = btn.classList.toggle(ctl._cssClasses.DETAILS);\r\n btn.setAttribute('title', ctl.getLocaleString(btn.classList.toggle(ctl._cssClasses.GRID) ? 'showGridView' : 'showDetailsView'));\r\n tree.classList.remove(ctl._cssClasses.DETAILS, ctl._cssClasses.GRID);\r\n setTimeout(() => tree.classList.add(isGrid ? ctl._cssClasses.GRID : ctl._cssClasses.DETAILS), 20);\r\n }\r\n };\r\n\r\n ctlProto.toggleView = function () {\r\n const self = this;\r\n toggleUI(self, self.div);\r\n };\r\n\r\n ctlProto.toggleMoreLayersDialogView = function () {\r\n const self = this;\r\n if (self._dialogDiv) {\r\n toggleUI(self, self._dialogDiv);\r\n }\r\n };\r\n\r\n ctlProto.getLayer = function (id) {\r\n const self = this;\r\n return self.map && (self.map.getLayer(id) || self._moreBaseLayers && self._moreBaseLayers.filter(layer => layer.id === id)[0]);\r\n };\r\n\r\n const getTo3DVIew = function (baseLayer) {\r\n return new Promise(function (resolve, _reject) {\r\n Promise.all([\r\n baseLayer.getCapabilitiesPromise(),\r\n baseLayer.getFallbackLayer() ? baseLayer.getFallbackLayer().getCapabilitiesPromise() : Promise.resolve()\r\n ]).then(function () {\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n ctlProto._getMoreBaseLayers = function (partialCallback) {\r\n const self = this;\r\n\r\n if (!self._moreBaseLayers && !self._moreBaseLayersPromise) {\r\n\r\n self._moreBaseLayersPromise = new Promise(function (resolve, _reject) {\r\n\r\n // GLS: Carlos no quiere que se muestren los respectivos dinámicos así que los filtro.\r\n var noDyn = TC.Cfg.availableBaseLayers\r\n .filter(function (lyr) {\r\n return TC.Cfg.availableBaseLayers\r\n .filter(l => l.fallbackLayer)\r\n .map(l => l.fallbackLayer)\r\n .indexOf(lyr.id) === -1;\r\n })\r\n .map(function (baseLayer) {\r\n if (baseLayer.type === TC.Consts.layerType.WMS || baseLayer.type === TC.Consts.layerType.WMTS) {\r\n return new TC.layer.Raster(baseLayer);\r\n } else if (baseLayer.type === TC.Consts.layerType.VECTOR) {\r\n return new TC.layer.Vector(baseLayer);\r\n }\r\n });\r\n\r\n self._moreBaseLayers = new Array(noDyn.length);\r\n\r\n const resolvePromise = function () {\r\n self._moreBaseLayers = self._moreBaseLayers.filter(function (baseLayer) {\r\n return baseLayer !== null;\r\n });\r\n\r\n resolve(self._moreBaseLayers);\r\n };\r\n const addLayer = async function (i) {\r\n const baseLayer = this;\r\n\r\n baseLayer.map = self.map;\r\n baseLayer.isBase = baseLayer.options.isBase = true;\r\n\r\n if (baseLayer.type === TC.Consts.layerType.WMTS) {\r\n await baseLayer.getCapabilitiesPromise();\r\n var matrixSet = baseLayer.wrap.getCompatibleMatrixSets(self.map.getCRS())[0];\r\n baseLayer.mustReproject = !matrixSet;\r\n } else if (baseLayer.type === TC.Consts.layerType.WMS) {\r\n await baseLayer.getCapabilitiesPromise();\r\n baseLayer.mustReproject = !baseLayer.isCompatible(self.map.getCRS());\r\n }\r\n\r\n if (self.map.on3DView && baseLayer.mustReproject && baseLayer.getFallbackLayer) {\r\n const fbLayer = baseLayer.getFallbackLayer();\r\n if (fbLayer) {\r\n await fbLayer.getCapabilitiesPromise();\r\n baseLayer.mustReproject = !fbLayer.isCompatible(self.map.getCRS());\r\n }\r\n }\r\n\r\n self._moreBaseLayers.splice(i, 1, baseLayer);\r\n if (TC.Util.isFunction(partialCallback)) {\r\n partialCallback(i);\r\n }\r\n };\r\n\r\n Promise.all(noDyn.map(function (baseLayer, i) {\r\n return new Promise(function (res, _rej) {\r\n if (baseLayer.type === TC.Consts.layerType.WMS || baseLayer.type === TC.Consts.layerType.WMTS) {\r\n var promise = self.map.on3DView ? getTo3DVIew(baseLayer) : baseLayer.getCapabilitiesPromise();\r\n promise.then(\r\n function () {\r\n addLayer.call(baseLayer, i).then(res);\r\n },\r\n function (_fail) {\r\n self._moreBaseLayers.splice(i, 1, null);\r\n if (TC.Util.isFunction(partialCallback)) {\r\n partialCallback(i);\r\n }\r\n res();\r\n });\r\n } else {\r\n addLayer.call(baseLayer, i).then(res);\r\n }\r\n });\r\n })).finally(resolvePromise);\r\n });\r\n\r\n } else if (self._moreBaseLayers) {\r\n\r\n return new Promise(function (resolve, _reject) {\r\n Promise.all(self._moreBaseLayers.filter(function (baseLayer) {\r\n return baseLayer.type === TC.Consts.layerType.WMS || baseLayer.type === TC.Consts.layerType.WMTS;\r\n }).map(function (baseLayer) {\r\n return self.map.on3DView ? getTo3DVIew(baseLayer) : baseLayer.getCapabilitiesPromise();\r\n })).then(function () {\r\n\r\n self._moreBaseLayers = self._moreBaseLayers.map(function (baseLayer) {\r\n\r\n if (baseLayer.type === TC.Consts.layerType.WMTS) {\r\n var matrixSet = baseLayer.wrap.getCompatibleMatrixSets(self.map.getCRS())[0];\r\n baseLayer.mustReproject = !matrixSet;\r\n } else if (baseLayer.type === TC.Consts.layerType.WMS) {\r\n baseLayer.mustReproject = !baseLayer.isCompatible(self.map.getCRS());\r\n }\r\n if (self.map.on3DView && baseLayer.mustReproject && baseLayer.getFallbackLayer && baseLayer.getFallbackLayer()) {\r\n baseLayer.mustReproject = !baseLayer.getFallbackLayer().isCompatible(self.map.getCRS());\r\n\r\n return baseLayer;\r\n }\r\n\r\n return baseLayer;\r\n });\r\n\r\n resolve(self._moreBaseLayers);\r\n });\r\n });\r\n }\r\n\r\n return self._moreBaseLayersPromise;\r\n };\r\n})();\r\n\r\nconst BasemapSelector = TC.control.BasemapSelector;\r\nexport default BasemapSelector;","import TC from '../../TC';\r\nimport OfflineMapMaker from './OfflineMapMaker';\r\nTC.control = TC.control || {};\r\nTC.control.CacheBuilder = OfflineMapMaker;\r\nconst CacheBuilder = TC.control.CacheBuilder;\r\nexport default CacheBuilder;","\r\n/**\r\n * Opciones de control de clics de usuario.\r\n * @typedef ClickOptions\r\n * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a los clics hechos en el mapa desde el que se carga.\r\n * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n * @property {SITNA.Map~ClickCallback} callback - Función de callback que gestiona la respuesta al clic.\r\n */\r\n\r\n/**\r\n * Función de callback que gestiona los clic del usuario en la ventana de visualización del mapa.\r\n * @callback SITNA.Map~ClickCallback\r\n * @param {number[]} coords - Coordenadas del punto donde se ha realizado clic, en las unidades del sistema de referencia de coordenadas del mapa (Ver propiedad `crs`de {@link MapOptions}). Array de dos números correspondientes a las coordenadas x e y.\r\n * @example [Ver en vivo](../examples/cfg.ClickOptions.html) {@lang html} \r\n *
      \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport wrap from '../ol/ol';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\nTC.wrap = wrap;\r\n\r\nTC.control.Click = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n if (self.options && self.options.callback) {\r\n self.callback = self.options.callback;\r\n }\r\n\r\n self.wrap = new TC.wrap.control.Click(self);\r\n};\r\n\r\nTC.inherit(TC.control.Click, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Click.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-click';\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n self.wrap.register(map);\r\n return TC.Control.prototype.register.call(self, map);\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n TC.Control.prototype.activate.call(self);\r\n self.wrap.activate();\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n self.wrap.deactivate();\r\n TC.Control.prototype.deactivate.call(self);\r\n };\r\n\r\n ctlProto.callback = function (coord, point) {\r\n console.log('[Click][' + coord[0] + ', ' + coord[1] + '][' + point[0] + ', ' + point[1] + ']');\r\n };\r\n})();\r\n\r\nconst Click = TC.control.Click;\r\nexport default Click;","import TC from '../../TC';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.Container = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments); \r\n\r\n self.controlOptions = self.options.controls || [];\r\n\r\n self.ctlCount = self.controlOptions instanceof Array ? self.controlOptions.length : Object.keys(self.controlOptions).length; \r\n self.defaultSelection = self.options.defaultSelection;\r\n\r\n self._ctlPromises = new Array(self.ctlCount);\r\n};\r\n\r\nTC.inherit(TC.control.Container, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Container.prototype;\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const ctlRegister = TC.Control.prototype.register.call(self, map);\r\n\r\n self.uids = new Array(self.ctlCount);\r\n self.uids.forEach(function (_elm, idx, arr) {\r\n arr[idx] = self.getUID();\r\n });\r\n\r\n return new Promise(function (resolve, _reject) {\r\n Promise.all([ctlRegister, self.renderPromise()]).then(function () {\r\n self.onRender().then(ctl => resolve(ctl));\r\n });\r\n }); \r\n };\r\n\r\n ctlProto.onRender = function () {\r\n return Promise.resolve(this);\r\n };\r\n\r\n ctlProto.render = function (_callback) { };\r\n\r\n ctlProto.getControl = function (idx) {\r\n var promise = this._ctlPromises[idx];\r\n if (!promise) {\r\n return Promise.reject(Error('No control found')); \r\n }\r\n\r\n return promise;\r\n };\r\n\r\n ctlProto.getControls = function () {\r\n return Promise.all(this._ctlPromises);\r\n };\r\n\r\n ctlProto.onControlDisable = function (_control) {\r\n };\r\n\r\n ctlProto.onControlEnable = function (_control) {\r\n };\r\n})();\r\n\r\nconst Container = TC.control.Container;\r\nexport default Container;\r\n","import TC from '../../TC';\r\nimport Container from './Container';\r\n\r\nTC.control = TC.control || {};\r\nTC.control.Container = Container;\r\n\r\nTC.control.ControlContainer = function () {\r\n var self = this;\r\n\r\n TC.control.Container.apply(self, arguments);\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n if (!Array.isArray(self.controlOptions)) {\r\n console.log('Gestionamos config de controlContainer antiguo');\r\n\r\n var controlOptions = [];\r\n\r\n Object.keys(self.controlOptions).forEach((key) => {\r\n const ctl = self.controlOptions[key];\r\n var newCtl = {\r\n position: ctl.side\r\n };\r\n\r\n newCtl[key] = ctl.options;\r\n\r\n controlOptions.push(newCtl);\r\n });\r\n\r\n self.controlOptions = controlOptions;\r\n }\r\n};\r\n\r\nTC.inherit(TC.control.ControlContainer, TC.control.Container);\r\n\r\n(function () {\r\n var ctlProto = TC.control.ControlContainer.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-cctr';\r\n ctlProto.POSITION = {\r\n LEFT: \"left\",\r\n RIGHT: \"right\"\r\n };\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n ctlProto.SIDE = ctlProto.POSITION;\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"position\") : depth0),\"left\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":10},\"end\":{\"line\":3,\"column\":30}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":7,\"column\":11}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
    • \\r\\n
      \\r\\n
    • \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"position\") : depth0),\"right\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":10},\"end\":{\"line\":12,\"column\":31}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":4},\"end\":{\"line\":16,\"column\":11}}})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"controls\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":8,\"column\":13}}})) != null ? stack1 : \"\") + \"
      \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"controls\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":4},\"end\":{\"line\":17,\"column\":13}}})) != null ? stack1 : \"\") + \"
      \\r\\n\\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-node'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
    • \\r\\n
      \\r\\n
    • \\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.onRender = function () {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n for (var i = 0, len = self.controlOptions.length; i < len; i++) {\r\n var ctl = self.controlOptions[i];\r\n\r\n var ctlName = Object.keys(ctl).filter((key) => {\r\n return [\"position\", \"index\"].indexOf(key) < 0;\r\n })[0];\r\n self._ctlPromises[i] = self.map.addControl(ctlName, TC.Util.extend({\r\n id: self.uids[i],\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + i).querySelector('div')\r\n }, ctl[ctlName]));\r\n }\r\n\r\n Promise.all(self._ctlPromises).then(function () {\r\n for (var i = 0, len = arguments.length; i < len; i++) {\r\n var ctl = arguments[i];\r\n ctl.containerControl = self;\r\n }\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({\r\n controls: Object.keys(self.controlOptions).map(function (key, i) {\r\n return TC.Util.extend(self.controlOptions[key], { index: i });\r\n })\r\n }, callback));\r\n };\r\n\r\n ctlProto.addControl = function (control, options) {\r\n const self = this;\r\n options.position = options.position || options.side || self.POSITION.LEFT;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n const idx = ++self.ctlCount;\r\n self.renderPromise().then(function renderAndAdd() {\r\n self.getRenderedHtml(self.CLASS + '-node', { index: idx }, function (html) {\r\n var template = document.createElement('template');\r\n template.innerHTML = html.trim();\r\n\r\n self.div.querySelector('ul.' + self.CLASS + '-' + options.position).appendChild(template.content ? template.content.firstChild : template.firstChild);\r\n self.map.addControl(control, TC.Util.extend({\r\n id: self.getUID(),\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + idx).querySelector('div')\r\n }, options)).then(function (ctrl) {\r\n resolve(ctrl);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addElement = function (options) {\r\n const self = this;\r\n\r\n options.position = options.position || options.side || self.POSITION.LEFT;\r\n\r\n var li = document.createElement('li');\r\n li.setAttribute('class', self.CLASS + '-elm ' + (self.CLASS + '-elm-' + self.ctlCount++ + ' '));\r\n\r\n self.div.querySelector('ul.' + self.CLASS + '-' + options.position).appendChild(li);\r\n\r\n var addedElement = li.appendChild(options.htmlElement);\r\n addedElement.setAttribute('class', addedElement.getAttribute('class') + ' tc-ctl');\r\n return addedElement;\r\n };\r\n})();\r\n\r\nconst ControlContainer = TC.control.ControlContainer;\r\nexport default ControlContainer;","/**\r\n * Opciones de control de coordenadas.\r\n * @typedef CoordinatesOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [showGeo] - Determina si se muestran coordenadas geográficas (en EPSG:4326) además de las del mapa, que por defecto son UTM (EPSG:25830).\r\n * @example [Ver en vivo](../examples/cfg.CoordinatesOptions.html) {@lang html} \r\n *
      \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport ProjectionSelector from './ProjectionSelector';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.ProjectionSelector = ProjectionSelector;\r\n\r\nTC.control.Coordinates = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.crs = '';\r\n self.xy = [0, 0, 0];\r\n self.latLon = [0, 0, 0];\r\n self.x = 0;\r\n self.y = 0;\r\n self.lat = 0;\r\n self.lon = 0;\r\n self.units = TC.Consts.units.METERS;\r\n self.isGeo = false;\r\n self.allowReprojection = Object.prototype.hasOwnProperty.call(self.options, 'allowReprojection') ? self.options.allowReprojection : true;\r\n\r\n TC.control.ProjectionSelector.apply(self, arguments);\r\n\r\n TC.Util.extend(self._cssClasses, {\r\n CRS: self.CLASS + '-crs',\r\n GEOCRS: self.CLASS + '-geocrs',\r\n X: self.CLASS + '-x',\r\n Y: self.CLASS + '-y',\r\n LAT: self.CLASS + '-lat',\r\n LON: self.CLASS + '-lon',\r\n ELEVATION: self.CLASS + '-elevation',\r\n THREEDMARKER: self.CLASS + '-threed'\r\n });\r\n\r\n self.geoCrs = self.options.geoCrs || TC.Cfg.geoCrs;\r\n self.wrap = new TC.wrap.control.Coordinates(self);\r\n};\r\n\r\nTC.inherit(TC.control.Coordinates, TC.control.ProjectionSelector);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Coordinates.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-coords';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { return \" class=\\\"tc-active\\\"\";},\"3\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lat\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":4,\"column\":18}}})) + \": \" + alias2(alias3((depth0 != null ? lookupProperty(depth0,\"lat\") : depth0), depth0)) + \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lon\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":67},\"end\":{\"line\":4,\"column\":81}}})) + \": \" + alias2(alias3((depth0 != null ? lookupProperty(depth0,\"lon\") : depth0), depth0)) + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"ele\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":130},\"end\":{\"line\":4,\"column\":217}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":141},\"end\":{\"line\":4,\"column\":155}}})) + \": \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"ele\") : depth0), depth0)) + \" \";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" x: \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"x\") : depth0), depth0)) + \" y: \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"y\") : depth0), depth0)) + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"ele\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":96},\"end\":{\"line\":6,\"column\":170}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"9\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"z: \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"ele\") : depth0), depth0)) + \" \";},\"11\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      \\r\\n
      \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lat\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":8},\"end\":{\"line\":12,\"column\":22}}})) + \": \" + alias2(alias3((depth0 != null ? lookupProperty(depth0,\"lat\") : depth0), depth0)) + \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lon\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":71},\"end\":{\"line\":12,\"column\":85}}})) + \": \" + alias2(alias3((depth0 != null ? lookupProperty(depth0,\"lon\") : depth0), depth0)) + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"ele\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":134},\"end\":{\"line\":12,\"column\":221}}})) != null ? stack1 : \"\") + \"\\r\\n
      \\r\\n
      \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      CRS: \" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"crs\") : depth0), depth0)) + \"\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"allowReprojection\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":129},\"end\":{\"line\":1,\"column\":254}}})) != null ? stack1 : \"\") + \"
      \\r\\n
      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.program(8, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":7,\"column\":11}}})) != null ? stack1 : \"\") + \"
      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"showGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":0},\"end\":{\"line\":15,\"column\":7}}})) != null ? stack1 : \"\") + \"\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"changeCRS\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":36}}})) + \"

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"coords.currentProjection\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":15},\"end\":{\"line\":9,\"column\":50}}})) + \"

      \\r\\n

      \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"coords.noCrs.warning\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":47},\"end\":{\"line\":10,\"column\":83}}})) + \"

      \\r\\n
      \\r\\n

      \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"coords.instructions\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":19},\"end\":{\"line\":12,\"column\":54}}})) + \"

      \\r\\n

      \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"coords.instructions.warning\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":52},\"end\":{\"line\":13,\"column\":95}}})) + \"

      \\r\\n
      \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n const result = TC.control.ProjectionSelector.prototype.register.call(self, map);\r\n\r\n self.crs = self.map.crs;\r\n\r\n self.clear();\r\n\r\n map.on(TC.Consts.event.VIEWCHANGE, function (e) {\r\n const view = e.view;\r\n if (view === TC.Consts.view.PRINTING) {\r\n return;\r\n }\r\n\r\n const _3dContainerListener = function (e) {\r\n if (!self.isPointerOver(e)) {\r\n self.clear();\r\n }\r\n };\r\n\r\n if (view === TC.Consts.view.THREED) {\r\n self.isGeo = true;\r\n self.units = TC.Consts.units.DEGREES;\r\n self.crs = self.map.view3D.crs;\r\n\r\n self.map.view3D.container.addEventListener('mouseout', _3dContainerListener);\r\n\r\n /* provisional: faltaría el off cuando pasemos a default*/\r\n self.map.view3D.on(TC.Consts.event.MOUSEMOVE, function (coords) {\r\n if (coords) {\r\n if (TC.Util.detectMobile()) { // si estamos en móvil añadimos marcador al mapa 3D \r\n\r\n self.clear();\r\n\r\n self.coordsToClick({ coordinate: [coords.lon, coords.lat, coords.ele], cssClass: self._cssClasses.THREEDMARKER });\r\n }\r\n\r\n self.latLon = [coords.lat, coords.lon];\r\n if (coords.ele > 0) {\r\n var locale = TC.Util.getMapLocale(self.map);\r\n self.latLon.push(coords.ele.toLocaleString(locale) + \"m\");\r\n }\r\n\r\n self.update();\r\n } else {\r\n self.clear();\r\n }\r\n });\r\n\r\n } else if (view === TC.Consts.view.DEFAULT) {\r\n self.isGeo = self.map.wrap.isGeo();\r\n self.units = TC.Consts.units.METERS;\r\n self.crs = self.map.crs;\r\n\r\n if (self.map.view3D) {\r\n self.map.view3D.container.removeEventListener('mouseout', _3dContainerListener);\r\n } \r\n }\r\n\r\n if (self.map.view3D) {\r\n self.geoCrs = self.map.view3D.crs;\r\n self.render();\r\n } \r\n });\r\n\r\n map.loaded(function () {\r\n // Se espera antes de registrar el control a que se cargue el mapa para evitar que muestre valores extraños\r\n self.wrap.register(map).then(function () {\r\n self.render(function () {\r\n //self.update();\r\n self.clear();\r\n });\r\n });\r\n\r\n if (TC.Util.detectMobile()) {\r\n self.renderPromise().then(function () {\r\n self.getLayer();\r\n self.activateCoords();\r\n }); \r\n }\r\n\r\n map.on(TC.Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (!map.on3DView) {\r\n self.isGeo = map.wrap.isGeo();\r\n self.crs = e.newCrs;\r\n self.render();\r\n } \r\n });\r\n\r\n self.map.wrap.getViewport().then(function (viewport) {\r\n self.renderPromise().then(function () {\r\n viewport.addEventListener(TC.Consts.event.MOUSEMOVE, function (e) {\r\n if (self.map.on3DView) {\r\n return;\r\n }\r\n\r\n self.onMouseMove(e);\r\n });\r\n viewport.addEventListener(TC.Consts.event.MOUSELEAVE, function (e) {\r\n self.onMouseLeave(e);\r\n });\r\n }); \r\n });\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', null, function(html) {\r\n self._dialogDiv.innerHTML = html;\r\n }).then(function () {\r\n return TC.Control.prototype.renderData.call(self, {\r\n x: self.x,\r\n y: self.y,\r\n lat: self.lat,\r\n lon: self.lon,\r\n ele: self.isGeo && self.latLon.length > 2 ? self.latLon[2] : !self.isGeo && self.xy.length > 2 ? self.xy[2] : null,\r\n crs: self.crs,\r\n geoCrs: self.geoCrs,\r\n isGeo: self.isGeo,\r\n showGeo: !self.isGeo && self.options.showGeo,\r\n allowReprojection: self.allowReprojection\r\n }, function () {\r\n const button = self.div.querySelector('button.' + self._cssClasses.CRS);\r\n if (button) {\r\n button.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.showProjectionChangeDialog();\r\n }, { passive: true });\r\n }\r\n\r\n //self.div.addEventListener('mousemove', function (e) {\r\n // self.setVisibility([e.clientX, e.clientY]);\r\n //});\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n }));\r\n };\r\n\r\n ctlProto.onMouseMove = function (e) { \r\n this.wrap.onMouseMove(e);\r\n };\r\n\r\n ctlProto.onMouseLeave = function (e) {\r\n const self = this;\r\n setTimeout(function () {\r\n if (!self.isPointerOver(e)) {\r\n self.div.style.visibility = 'hidden';\r\n self.clear();\r\n }\r\n }, 200);\r\n };\r\n\r\n ctlProto.isPointerOver = function (e) {\r\n var self = this;\r\n\r\n var clientRect = self.div.getBoundingClientRect();\r\n return clientRect.left <= e.clientX &&\r\n clientRect.left + clientRect.width >= e.clientX &&\r\n clientRect.top <= e.clientY &&\r\n clientRect.top + clientRect.height >= e.clientY;\r\n }; \r\n\r\n ctlProto.update = function () {\r\n const self = this;\r\n\r\n if (!self.isGeo && self.options.showGeo) {\r\n self.latLon = TC.Util.reproject(self.xy, self.crs, self.geoCrs).reverse();\r\n }\r\n\r\n if (!self.isGeo) {\r\n self.x = TC.Util.formatCoord(self.xy[0], TC.Consts.METER_PRECISION);\r\n self.y = TC.Util.formatCoord(self.xy[1], TC.Consts.METER_PRECISION);\r\n }\r\n\r\n if (self.isGeo || self.options.showGeo) {\r\n self.lat = TC.Util.formatCoord(self.latLon[0], TC.Consts.DEGREE_PRECISION);\r\n self.lon = TC.Util.formatCoord(self.latLon[1], TC.Consts.DEGREE_PRECISION);\r\n }\r\n\r\n self.render(function () {\r\n const closeSpan = self.div.querySelector('span.close');\r\n if (TC.Util.detectMobile()) {\r\n closeSpan.addEventListener('click', function () {\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n self.clear();\r\n });\r\n\r\n closeSpan.style.display = '';\r\n }\r\n else {\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.div.style.visibility = 'visible';\r\n closeSpan.style.display = 'none';\r\n }\r\n });\r\n };\r\n\r\n ctlProto.clear = function () {\r\n const self = this;\r\n\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n self.div.style.visibility = 'hidden';\r\n\r\n delete self.currentCoordsMarker;\r\n self.getLayer().then(function (layer) {\r\n if (layer.features.length) {\r\n layer.clearFeatures();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.deactivateCoords = function () {\r\n var self = this;\r\n\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n self.clear();\r\n\r\n self.wrap.coordsDeactivate();\r\n };\r\n\r\n ctlProto.activateCoords = function () {\r\n var self = this;\r\n\r\n self.wrap.coordsActivate();\r\n };\r\n\r\n ctlProto.getCoords = function () {\r\n var self = this;\r\n // si hay visible un popup, establecemos la posición de la cruz en el punto en el cual se ha abierto el popup\r\n var popup = self.map.getControlsByClass(TC.control.Popup);\r\n if (popup && popup.length > 0 && popup[0].isVisible()) {\r\n self.coordsToPopup(popup[0]);\r\n }\r\n else { // si no hay popup, calculamos el centro del mapa \r\n self.updateCoordsCtrl([(self.map.getExtent()[0] + self.map.getExtent()[2]) / 2, (self.map.getExtent()[1] + self.map.getExtent()[3]) / 2]);\r\n\r\n self.coordsToClick.call(self, { coordinate: self.xy });\r\n }\r\n };\r\n\r\n ctlProto.coordsToPopup = function (popup) {\r\n var self = this;\r\n\r\n if (popup) {\r\n self.updateCoordsCtrl(popup.wrap.popup.getPosition());\r\n }\r\n };\r\n\r\n ctlProto.updateCoordsCtrl = function (position) {\r\n var self = this;\r\n\r\n if (position) {\r\n if (!self.isGeo) {\r\n self.x = position[0];\r\n self.y = position[1];\r\n self.xy = [self.x, self.y];\r\n\r\n if (position.length > 2) {\r\n self.xy.push(position[2]);\r\n }\r\n }\r\n if (self.isGeo || self.options.showGeo) {\r\n self.lat = position[0];\r\n self.lon = position[1];\r\n self.latLon = [self.lat, self.lon];\r\n\r\n if (position.length > 2) {\r\n self.latLon.push(position[2]);\r\n }\r\n }\r\n\r\n self.update();\r\n }\r\n };\r\n\r\n // Establece la posición de la cruz en la posición recibida\r\n //var animationTimeout;\r\n ctlProto.coordsToClick = function (e) {\r\n const self = this;\r\n\r\n // Si streetView está activo, no responde al click\r\n if (!self.map.div.classList.contains('tc-ctl-sv-active') || !self.map.div.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n\r\n var coordsBounding = self.div.getBoundingClientRect();\r\n if (coordsBounding.left <= e.clientX && e.clientX <= coordsBounding.right && coordsBounding.top <= e.clientY && e.clientY <= coordsBounding.bottom) {\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n self.clear();\r\n\r\n return;\r\n }\r\n\r\n self.div.classList.remove('tc-fading');\r\n setTimeout(function () {\r\n self.div.classList.add('tc-fading');\r\n // El siguiente código es para quitar el marcador al mismo tiempo que desaparece\r\n // el indicador de coordenadas\r\n const durationValue = getComputedStyle(self.div).getPropertyValue('animation-duration');\r\n let duration = 0;\r\n let match = durationValue.match(/^(\\d+)(m?s)$/i);\r\n if (match) {\r\n duration = parseInt(match[1]);\r\n if (match[2] === 's')\r\n duration = duration * 1000;\r\n }\r\n if (duration !== 0) {\r\n clearTimeout(self._markerRemoveTimeout);\r\n self._markerRemoveTimeout = setTimeout(() => {\r\n if (self.currentCoordsMarker) {\r\n self.getLayer().then(layer => {\r\n layer.removeFeature(self.currentCoordsMarker);\r\n self.currentCoordsMarker = null;\r\n });\r\n }\r\n }, duration);\r\n }\r\n }, 10);\r\n\r\n self.updateCoordsCtrl(e.coordinate);\r\n\r\n if (!self.map.on3DView) {\r\n self.coordsMarkerAdd(e.coordinate, e.cssClass);\r\n }\r\n\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n //self.div.style.visibility = 'visible';\r\n\r\n //self.div.style.opacity = '0.7';\r\n\r\n //animationTimeout = setTimeout(function () {\r\n // $(self.div).animate({ opacity: 0 }, 3000, \"linear\",\r\n // function () {\r\n // self.clear();\r\n // });\r\n //}, 5000);\r\n }\r\n };\r\n\r\n ctlProto.coordsMarkerAdd = function (position, cssClass) {\r\n var self = this;\r\n\r\n if (!self.currentCoordsMarker) {\r\n self.getLayer().then(function (layer) {\r\n layer.addMarker(position, { title: 'Coord', showsPopup: false, cssClass: cssClass || TC.Consts.classes.POINT, anchor: [0.5, 0.5] })\r\n .then(function (marker) {\r\n self.currentCoordsMarker = marker;\r\n });\r\n });\r\n } else {\r\n self.currentCoordsMarker.setCoords(position);\r\n }\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self.layer == undefined) {\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n stealth: true,\r\n owner: self,\r\n title: 'Coordenadas'\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n self.layer.map.putLayerOnTop(self.layer);\r\n resolve(self.layer);\r\n });\r\n } else {\r\n resolve(self.layer);\r\n }\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst Coordinates = TC.control.Coordinates;\r\nexport default Coordinates;","\r\n/**\r\n * Opciones de control para añadir datos geográficos.\r\n * \r\n * En el control se pueden añadir WMS escribiendo la dirección del servicio o eligiendo un servicio de la lista de sugerencias de servicios de interés.\r\n *\r\n * También se pueden añadir datos de archivos buscándolos en el cuadro de diálogo que se abre tras pulsar _Abrir archivo_ o arrastrándolos y soltándolos dentro del área del mapa.\r\n * @typedef DataLoaderOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [enableDragAndDrop] - Propiedad que establece si está permitido arrastrar y soltar archivos al área del mapa, además de abrirlos de la manera convencional abriendo el cuadro de diálogo de búsqueda de archivos.\r\n * @property {WMSGroupOptions[]} [wmsSuggestions] - Lista de grupos de sugerencias de servicios WMS ofrecidos por el control. Por ejemplo se puede establecer un grupo de servicios WMS estatales y otro de servicios WMS mundiales.\r\n * @example [Ver en vivo](../examples/cfg.DataLoaderOptions.html) {@lang html} \r\n *
        \r\n * \r\n */\r\n\r\n/**\r\n * Opciones de sugerencia de servicio externo WMS.\r\n * @typedef WMSOptions\r\n * @see WMSGroupOptions\r\n * @property {string} name - Nombre del servicio WMS. Se mostrará como un elemento en la lista de opciones del control.\r\n * @property {string} url - URL de acceso al servicio WMS.\r\n */\r\n\r\n/**\r\n * Opciones de grupo de sugerencias de servicios externos WMS.\r\n * @typedef WMSGroupOptions\r\n * @see DataLoaderOptions\r\n * @property {string} group - Nombre del grupo de sugerencias. Se mostrará como una sección en la lista de opciones del control.\r\n * @property {WMSOptions[]} items - Lista de sugerencias de servicios externos WMS.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport TabContainer from './TabContainer';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.TabContainer = TabContainer;\r\n\r\nTC.control.DataLoader = function () {\r\n const self = this;\r\n\r\n TC.control.TabContainer.apply(self, arguments);\r\n\r\n const fileControlConfig = {};\r\n const fileControlOptions = {\r\n enableDragAndDrop: self.options.enableDragAndDrop\r\n };\r\n const fileControlName = self.options.enableFileEditing ? 'fileEdit' : 'fileImport';\r\n fileControlConfig[fileControlName] = fileControlOptions;\r\n\r\n self.controlOptions = [\r\n {\r\n title: 'addWMS',\r\n externalWMS: { suggestions: self.options.wmsSuggestions } \r\n },\r\n fileControlConfig\r\n ];\r\n self.defaultSelection = 0;\r\n};\r\n\r\nTC.inherit(TC.control.DataLoader, TC.control.TabContainer);\r\n\r\n(function () {\r\n const ctlProto = TC.control.DataLoader.prototype;\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n self.map = map;\r\n self.title = self.getLocaleString('addMaps');\r\n return new Promise(function (resolve, _reject) {\r\n TC.control.TabContainer.prototype.register.call(self, map).then(ctl => {\r\n ctl.div.classList.add(self.CLASS + '-datldr');\r\n resolve(ctl);\r\n });\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst DataLoader = TC.control.DataLoader;\r\nexport default DataLoader;","\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapInfo from './MapInfo';\r\nimport filter from '../filter';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.MapInfo = MapInfo;\r\nTC.filter = filter;\r\n\r\nTC.control.Download = function (options) {\r\n var self = this;\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self._hiddenElms = [];\r\n\r\n var opts = options || {};\r\n self._dialogDiv = TC.Util.getDiv(opts.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!opts.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n } \r\n};\r\n\r\nTC.inherit(TC.control.Download, TC.control.MapInfo);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Download.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-download';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"download\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":23}}})) + \"

        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
        \\r\\n\\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"qrAdvice\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":15},\"end\":{\"line\":23,\"column\":39}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n\\r\\n
        \\r\\n \\r\\n
        \\r\\n\\r\\n
        \\r\\n \\r\\n
        \\r\\n\\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"tooManyFeatures\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":51},\"end\":{\"line\":45,\"column\":77}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"tooManyFeatures.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":88},\"end\":{\"line\":45,\"column\":127}}})) + \"

        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noLayersLoaded\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":53},\"end\":{\"line\":46,\"column\":78}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noLayersLoaded.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":89},\"end\":{\"line\":46,\"column\":127}}})) + \"

        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"tooManySelectedLayers\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":50},\"end\":{\"line\":47,\"column\":82}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"tooManySelectedLayers.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":93},\"end\":{\"line\":47,\"column\":138}}})) + \"

        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":48,\"column\":57},\"end\":{\"line\":48,\"column\":74}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noData.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":48,\"column\":85},\"end\":{\"line\":48,\"column\":115}}})) + \"

        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noValidService\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":49,\"column\":54},\"end\":{\"line\":49,\"column\":79}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noValidService.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":49,\"column\":90},\"end\":{\"line\":49,\"column\":128}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"downloadData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":39}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.1\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":15},\"end\":{\"line\":9,\"column\":48}}})) + \"

        \\r\\n
          \\r\\n
        • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.2\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":20},\"end\":{\"line\":11,\"column\":53}}})) + \"
        • \\r\\n
        • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.3\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":20},\"end\":{\"line\":12,\"column\":53}}})) + \"
        • \\r\\n
        • \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.4\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":24},\"end\":{\"line\":14,\"column\":57}}})) + \"\\r\\n
            \\r\\n
          • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.5\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":28},\"end\":{\"line\":16,\"column\":61}}})) + \"
          • \\r\\n
          • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"dl.instructions.6\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":17,\"column\":28},\"end\":{\"line\":17,\"column\":61}}})) + \"
          • \\r\\n
          \\r\\n
        • \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }).then(function () {\r\n return TC.Control.prototype.renderData.call(self, { controlId: self.id }, function () {\r\n\r\n const cs = '.tc-ctl-tctr';\r\n self._selectors = {\r\n TAB: cs + '-tab',\r\n RADIOBUTTON: `input[type=radio][name=\"${self.id}-sel\"]`,\r\n ELEMENT: cs + '-elm'\r\n };\r\n\r\n const clickHandler = function (_e) {\r\n var tab = this;\r\n while (tab && !tab.matches(self._selectors.TAB)) {\r\n tab = tab.parentElement;\r\n }\r\n if (tab) {\r\n const checkbox = tab.querySelector(self._selectors.RADIOBUTTON);\r\n const newValue = checkbox.value;\r\n const elms = self.div.querySelectorAll(self._selectors.ELEMENT);\r\n if (self._oldValue === newValue && self.options.deselectableTabs) {\r\n setTimeout(function () {\r\n checkbox.checked = false;\r\n }, 0);\r\n self._oldValue = null;\r\n self._activeElm = null;\r\n elms.forEach(function (elm) {\r\n self._hiddenElms.push(elm);\r\n });\r\n }\r\n else {\r\n elms.forEach(function (elm) {\r\n if (elm.matches(self._selectors.ELEMENT + '-' + newValue)) {\r\n self._activeElm = elm;\r\n }\r\n else {\r\n self._hiddenElms.push(elm);\r\n }\r\n });\r\n self._oldValue = newValue;\r\n }\r\n\r\n self._hiddenElms.forEach(function (elm) {\r\n elm.classList.add(TC.Consts.classes.COLLAPSED);\r\n });\r\n if (self._activeElm) {\r\n self._activeElm.classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n checkbox.checked = true;\r\n }\r\n };\r\n\r\n self.div.querySelectorAll('span').forEach(function (span) {\r\n span.addEventListener(TC.Consts.event.CLICK, clickHandler, { passive: true });\r\n });\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }));\r\n };\r\n\r\n const toFixed = function (number) {\r\n let result = number.toFixed(20);\r\n if (result.indexOf('.') >= 0) {\r\n result = result.replace(/0+$/, '').replace(/\\.$/, '');\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n const result = TC.control.MapInfo.prototype.register.call(self, map);\r\n\r\n // GLS: Añado el flag al mapa para tenerlo en cuenta cuando se establece la función de carga de imágenes\r\n self.map.crossOrigin = 'anonymous';\r\n\r\n const downLoadImage = function (format) {\r\n const li = self.map.getLoadingIndicator();\r\n const wait = li && li.addWait();\r\n const extent = self.map.getExtent();\r\n const doneQR = new Promise(function (resolve, _reject) {\r\n var canvases = self.map.wrap.getCanvas();\r\n var newCanvas = TC.Util.mergeCanvases(canvases);\r\n\r\n var sb = self.map.getControlsByClass(TC.control.ScaleBar);\r\n if (sb) {\r\n self.drawScaleBarIntoCanvas({ canvas: newCanvas, fill: true });\r\n }\r\n\r\n if (!self._activeElm.querySelector(`#${self.CLASS}-image-qr-${self.id}:disabled`) && self._activeElm.querySelector(`#${self.CLASS}-image-qr-${self.id}:checked`)) {\r\n const codeContainerId = 'qrcode';\r\n var codeContainer = document.getElementById(codeContainerId);\r\n if (codeContainer) {\r\n codeContainer.innerHTML = '';\r\n }\r\n else {\r\n codeContainer = document.createElement('div');\r\n codeContainer.setAttribute('id', codeContainerId);\r\n document.body.appendChild(codeContainer);\r\n }\r\n\r\n codeContainer.style.top = '-200px';\r\n codeContainer.style.left = '-200px';\r\n codeContainer.style.position = 'absolute';\r\n\r\n self.makeQRCode(codeContainer, 87, 87).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n var ctx = newCanvas.getContext(\"2d\");\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.fillRect(newCanvas.width - 91, newCanvas.height - 91, 91, 91);\r\n\r\n TC.Util.addToCanvas(newCanvas, qrCodeBase64, { x: newCanvas.width - 88, y: newCanvas.height - 88 }).then(function (mapCanvas) {\r\n resolve(mapCanvas);\r\n });\r\n } else { \r\n li && li.removeWait(wait);\r\n }\r\n });\r\n } else {\r\n resolve(newCanvas);\r\n }\r\n });\r\n\r\n doneQR.then(function (_canvas) {\r\n const fileName = window.location.hostname + '_' + self.map.crs.replace(':', '') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n const fileExtension = '.' + format.split('/')[1];\r\n const worldFileExtension = format === TC.Consts.mimeType.JPEG ? '.jgw' : '.pgw';\r\n if (self._activeElm.querySelector(`#${self.CLASS}-image-wld-${self.id}:checked`)) {\r\n TC.loadJS(!window.JSZip, TC.apiLocation + 'lib/jszip/jszip', function () {\r\n const xScale = (extent[2] - extent[0]) / _canvas.width;\r\n const ySkew = 0;\r\n const xSkew = 0;\r\n const yScale = (extent[1] - extent[3]) / _canvas.height;\r\n const xOrigin = extent[0];\r\n const yOrigin = extent[3];\r\n const zip = new JSZip();\r\n _canvas.toBlob(function (blob) {\r\n zip.file(fileName + fileExtension, blob);\r\n zip.file(fileName + worldFileExtension, `${toFixed(xScale)}\r\n${ySkew.toFixed(1)}\r\n${xSkew.toFixed(1)}\r\n${toFixed(yScale)}\r\n${toFixed(xOrigin)}\r\n${toFixed(yOrigin)}`);\r\n zip.generateAsync({ type: \"blob\" }).then(function (blob) {\r\n TC.Util.downloadBlob(fileName + \".zip\", blob);\r\n li && li.removeWait(wait);\r\n }, function (err) {\r\n TC.error(self.getLocaleString('dl.export.map.error') + ': ' + err.message);\r\n li && li.removeWait(wait);\r\n });\r\n }, format);\r\n });\r\n }\r\n else {\r\n try {\r\n const res = _canvas.toDataURL(format);\r\n TC.Util.downloadDataURI(fileName + fileExtension, format, res);\r\n } catch (e) {\r\n TC.error(self.getLocaleString('dl.export.map.error') + ': ' + e.message);\r\n }\r\n li && li.removeWait(wait);\r\n }\r\n });\r\n };\r\n\r\n\r\n /*\r\n * Descarga las features de las capas de trabajo actualmente seleccionadas. Comprueba que el número de features a descargar\r\n * no excede el límite impuesto por el servidor.\r\n */\r\n\r\n const downloadFeatures = function (format) {\r\n const li = self.map.getLoadingIndicator();\r\n const wait = li && li.addWait();\r\n\r\n const arrPromises = self.map.extractFeatures({\r\n filter: TC.filter.bbox(self.map.getExtent(), self.map.getCRS()),\r\n outputFormat: format,\r\n download: true\r\n });\r\n Promise.all(arrPromises).then(async function (responseArray) {\r\n\r\n var responses = responseArray.filter(item => !!item);\r\n if (responses.length === 0) {\r\n _showAlertMsg({ key: TC.Consts.WFSErrors.NO_LAYERS }, wait);\r\n return;\r\n }\r\n var arrDownloads = [];\r\n for (var i = 0; i < responses.length; i++) {\r\n //errores del WFS\r\n if (responses[i].errors && responses[i].errors.length) {\r\n for (var j = 0; j < responses[i].errors.length; j++) {\r\n var error = responses[i].errors[j];\r\n _showAlertMsg(error, wait);\r\n }\r\n continue;\r\n }\r\n var data = responses[i].data;\r\n var url = responses[i].url;\r\n if (data && url)\r\n arrDownloads.push({ url: url + \"?download=zip\", data: data });\r\n }\r\n try {\r\n await TC.Util.downloadFileForm(arrDownloads);\r\n }\r\n catch (err) {\r\n if (err.key === TC.Consts.DownloadError.MIMETYPE_NOT_SUPORTED) {\r\n const service = responseArray.find(response => response.data === err.data).service;\r\n const params = {\r\n plural: service.layers.length > 1 ? self.getLocaleString(\"dl.format.notSupported.plural\") : \"\",\r\n layerNames: service.layers.reduce(function (vi, va, i, array) {\r\n return (vi instanceof Array ? vi : [vi]).concat([va.title]).join(i < array.length - 1 ? \", \" : \" \" + self.getLocaleString(\"dl.format.notSupported.conjunction\") + \" \");\r\n }, []),\r\n serviceTitle: service.mapLayers[0].title,\r\n format: format\r\n };\r\n self.map.toast(self.getLocaleString(\"dl.format.notSupported\").format(params), { type: TC.Consts.msgType.ERROR });\r\n }\r\n }\r\n\r\n li && li.removeWait(wait);\r\n });\r\n };\r\n\r\n var _download = function () {\r\n var format = '';\r\n if (self._activeElm) {\r\n format = self._activeElm.querySelector('select').value;\r\n }\r\n if (format.indexOf('image') > -1) {\r\n downLoadImage(format);\r\n }\r\n else {\r\n downloadFeatures(format);\r\n }\r\n };\r\n\r\n var _showAlertMsg = function (error, wait) {\r\n const alert = self.div.querySelector('.alert-warning:not(.' + self.CLASS + '-alert)');\r\n var errorMsg;\r\n switch (error.key) {\r\n case TC.Consts.WFSErrors.MAX_NUM_FEATURES:\r\n errorMsg = alert.querySelector(\"#zoom-msg-\" + self.id).innerHTML.format({ serviceName: error.params.serviceTitle });\r\n break;\r\n case TC.Consts.WFSErrors.NO_LAYERS:\r\n errorMsg = self.getLocaleString('noLayersLoaded');\r\n break;\r\n case TC.Consts.WFSErrors.GETCAPABILITIES:\r\n errorMsg = alert.querySelector(\"#novalid-msg-\" + self.id).innerHTML.format({ serviceName: error.params.serviceTitle });\r\n break;\r\n case TC.Consts.WFSErrors.NO_FEATURES:\r\n errorMsg = alert.querySelector(\"#noFeatures-msg-\" + self.id).innerHTML;\r\n break;\r\n case TC.Consts.WFSErrors.INDETERMINATE:\r\n errorMsg = self.getLocaleString(\"wfs.IndeterminateError\");\r\n self.map.toast(errorMsg, { type: TC.Consts.msgType.ERROR });\r\n TC.error(\"Error:{error} \\r\\n Descripcion:{descripcion} \\r\\n Servicio:{serviceName}\".format({ error: error.params.err, descripcion: error.params.errorThrown, serviceName: error.params.serviceTitle }), TC.Consts.msgErrorMode.CONSOLE);\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n return;\r\n default:\r\n errorMsg = self.getLocaleString(\"wfs.\" + error.key, error.params);\r\n break;\r\n }\r\n self.map.toast(errorMsg, { type: TC.Consts.msgType.WARNING });\r\n\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n };\r\n\r\n var _showHelp = function (evt) {\r\n evt.stopPropagation();\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-help-dialog'));\r\n };\r\n\r\n self.div.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('.tc-ctl-download-btn', _download), { passive: true });\r\n self.div.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('.tc-ctl-download-help', _showHelp), { passive: true });\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`#${self.CLASS}-image-qr-${self.id}`, function (e) {\r\n if (e.target.checked) {\r\n self.generateLink();\r\n } else {\r\n self.div.querySelector('.' + self.CLASS + '-alert').classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n }));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('h2', function (evt) { \r\n if (!self.registeredListeners) {\r\n self.generateLink();\r\n }\r\n self.registerListeners();\r\n }));\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.manageMaxLengthExceed = function (maxLengthExceed) {\r\n const self = this;\r\n const alert = self.div.querySelector('.' + self.CLASS + '-alert');\r\n const checkboxQR = document.getElementById(`${self.CLASS}-image-qr-${self.id}`);\r\n\r\n checkboxQR.disabled = maxLengthExceed.qr;\r\n\r\n if (checkboxQR.checked) {\r\n alert.classList.toggle(TC.Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n } else {\r\n alert.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.generateLink = async function () {\r\n const self = this;\r\n const checkbox = self.div.querySelector(`.${self.CLASS}-div input[id|=\"${self.CLASS}-image-qr-download\"]`);\r\n const label = self.div.querySelector(`label[for=\"${checkbox.id}\"]`);\r\n checkbox.disabled = true;\r\n label.classList.add(TC.Consts.classes.LOADING);\r\n const result = await TC.control.MapInfo.prototype.generateLink.call(self);\r\n label.classList.remove(TC.Consts.classes.LOADING);\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst Download = TC.control.Download;\r\nexport default Download;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Point from '../feature/Point';\r\nimport Polyline from '../feature/Polyline';\r\nimport Polygon from '../feature/Polygon';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\nTC.feature = TC.feature || {};\r\nTC.feature.Point = Point;\r\nTC.feature.Polyline = Polyline;\r\nTC.feature.Polygon = Polygon;\r\n\r\nTC.Consts.event.DRAWSTART = 'drawstart.tc';\r\nTC.Consts.event.DRAWEND = 'drawend.tc';\r\nTC.Consts.event.DRAWCANCEL = 'drawcancel.tc';\r\nTC.Consts.event.DRAWUNDO = 'drawundo.tc';\r\nTC.Consts.event.DRAWREDO = 'drawredo.tc';\r\nTC.Consts.event.POINT = 'point.tc';\r\nTC.Consts.event.MEASURE = 'measure.tc';\r\nTC.Consts.event.MEASUREPARTIAL = 'measurepartial.tc';\r\nTC.Consts.event.STYLECHANGE = 'stylechange.tc';\r\nTC.Consts.event.CHANGE = 'change';\r\n\r\n(function () {\r\n\r\n const formatColor = function (color) {\r\n const match = color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n if (match && match.length) {\r\n return '#' + match[1] + match[1] + match[2] + match[2] + match[3] + match[3];\r\n }\r\n return color;\r\n };\r\n\r\n TC.control.Draw = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n if (!TC.browserFeatures.inputTypeColor() && !window.CP) {\r\n TC.loadCSS(TC.apiLocation + 'lib/color-picker/color-picker.min.css');\r\n TC.syncLoadJS(TC.apiLocation + 'lib/color-picker/color-picker.min.js');\r\n }\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self._pointClass = self.CLASS + '-point';\r\n self._lineClass = self.CLASS + '-line';\r\n self._polygonClass = self.CLASS + '-polygon';\r\n\r\n self.history = [];\r\n self.historyIndex = 0;\r\n self.exportsState = true;\r\n\r\n self\r\n .on(TC.Consts.event.DRAWSTART, function (e) {\r\n self.resetValues();\r\n if (e.feature) {\r\n self.history = e.feature.getCoordinates();\r\n self.historyIndex = self.history.length;\r\n }\r\n })\r\n .on(TC.Consts.event.POINT, function (e) {\r\n if (self.layer && !self.persistent && self.layer.features && self.layer.features.length > 0) {\r\n self.layer.clearFeatures();\r\n }\r\n\r\n self.history.length = self.historyIndex;\r\n self.history[self.historyIndex++] = e.point;\r\n\r\n setDrawState(self);\r\n })\r\n .on(TC.Consts.event.DRAWEND, function (e) {\r\n setFeatureAddReadyState(self);\r\n\r\n const featureId = TC.getUID({\r\n prefix: self.getLocaleString('sketch') + '.',\r\n banlist: self.layer.features.map(f => f.getId())\r\n });\r\n e.feature.setId(featureId);\r\n\r\n if (self.callback) {\r\n self.callback(e.feature);\r\n }\r\n });\r\n\r\n self._layerPromise = null;\r\n };\r\n\r\n TC.inherit(TC.control.Draw, TC.Control);\r\n\r\n var ctlProto = TC.control.Draw.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-draw';\r\n\r\n var setDrawState = function (ctl) {\r\n ctl._endBtn.disabled =\r\n ctl.historyIndex === 0 ||\r\n ctl.mode === TC.Consts.geom.POLYGON && ctl.historyIndex < 3 ||\r\n ctl.mode === TC.Consts.geom.POLYLINE && ctl.historyIndex < 2;\r\n ctl._redoBtn.disabled = ctl.history.length === ctl.historyIndex;\r\n ctl._undoBtn.disabled = ctl.historyIndex === 0;\r\n };\r\n\r\n var setFeatureAddReadyState = function (ctl) {\r\n ctl.resetValues();\r\n ctl._endBtn.disabled = true;\r\n ctl._cancelBtn.disabled = false;\r\n };\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"strokeColor\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":8},\"end\":{\"line\":11,\"column\":30}}})) + \"\\r\\n \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"width\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":8},\"end\":{\"line\":13,\"column\":24}}})) + \"\\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fillColor\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":8},\"end\":{\"line\":18,\"column\":28}}})) + \"\\r\\n \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"opacity\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":8},\"end\":{\"line\":20,\"column\":26}}})) + \"\\r\\n \\r\\n
        \\r\\n
        \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias2,(depth0 != null ? lookupProperty(depth0,\"styling\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":24,\"column\":7}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n let strToolTip;\r\n let strokeColor;\r\n let strokeWidth;\r\n let fillColor;\r\n let fillOpacity;\r\n switch (self.options.mode) {\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n strToolTip = self.getLocaleString('drawLine');\r\n self.div.classList.add(self._lineClass);\r\n strokeColor = self.styles.line.strokeColor;\r\n strokeWidth = self.styles.line.strokeWidth;\r\n fillColor = self.styles.polygon.fillColor;\r\n fillOpacity = self.styles.polygon.fillOpacity;\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n strToolTip = self.getLocaleString('drawPolygon');\r\n self.div.classList.add(self._polygonClass);\r\n strokeColor = self.styles.polygon.strokeColor;\r\n strokeWidth = self.styles.polygon.strokeWidth;\r\n fillColor = self.styles.polygon.fillColor;\r\n fillOpacity = self.styles.polygon.fillOpacity;\r\n break;\r\n case TC.Consts.geom.POINT:\r\n case TC.Consts.geom.MULTIPOINT:\r\n strToolTip = self.getLocaleString('drawPoint');\r\n self.div.classList.add(self._pointClass);\r\n strokeColor = self.styles.point.strokeColor;\r\n strokeWidth = self.styles.point.strokeWidth;\r\n fillColor = self.styles.point.fillColor;\r\n fillOpacity = self.styles.point.fillOpacity;\r\n break;\r\n default:\r\n strToolTip = self.getLocaleString('draw');\r\n strokeColor = self.styles.line.strokeColor;\r\n strokeWidth = self.styles.line.strokeWidth;\r\n fillColor = self.styles.polygon.fillColor;\r\n fillOpacity = self.styles.polygon.fillOpacity;\r\n break;\r\n }\r\n const renderObject = {\r\n tooltip: strToolTip,\r\n strokeColor: formatColor(strokeColor),\r\n strokeWidth: strokeWidth,\r\n fillColor: formatColor(fillColor),\r\n fillOpacity: fillOpacity * 100,\r\n styling: self.options.styling\r\n };\r\n return self._set1stRenderPromise(self.renderData(renderObject, function () {\r\n if (!TC.browserFeatures.inputTypeColor()) {\r\n // El navegador no soporta input[type=color], usamos polyfill\r\n const input = self.div.querySelector('input[type=color]');\r\n if (input) {\r\n input.style.backgroundColor = input.value;\r\n input.style.color = 'transparent';\r\n const picker = new CP(input, 'click', document.body);\r\n\r\n input.onclick = function (e) {\r\n e.preventDefault();\r\n };\r\n\r\n // Evitamos que salga el teclado virtual en iOS\r\n input.onfocus = function (_e) {\r\n this.blur();\r\n };\r\n\r\n input.onchange = function (_e) {\r\n this.style.backgroundColor = this.value;\r\n };\r\n\r\n self.map.loaded(function () {\r\n picker.on(\"change\", function (color) {\r\n self.setStrokeColor('#' + color);\r\n });\r\n });\r\n }\r\n }\r\n self.reset = true;\r\n self.callback = null;\r\n self.measure = false;\r\n self._cancelClick = false;\r\n\r\n self.mode = self.options.mode || TC.Consts.geom.POLYLINE;\r\n\r\n if (self.options.measure) {\r\n self.measure = self.options.measure;\r\n }\r\n if (TC.Util.isFunction(self.options.callback)) {\r\n self.callback = self.options.callback;\r\n }\r\n if (self.options.persistent === undefined) {\r\n self.persistent = true;\r\n }\r\n else {\r\n self.persistent = self.options.persistent;\r\n }\r\n\r\n self.wrap = new TC.wrap.control.Draw(self);\r\n\r\n self._newBtn = self.div.querySelector(self._classSelector + '-btn-new');\r\n self._newBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.new();\r\n }, { passive: true });\r\n\r\n self._cancelBtn = self.div.querySelector(self._classSelector + '-btn-cancel');\r\n self._cancelBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.cancel();\r\n }, { passive: true });\r\n\r\n self._endBtn = self.div.querySelector(self._classSelector + '-btn-end');\r\n self._endBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.end();\r\n }, { passive: true });\r\n\r\n self._undoBtn = self.div.querySelector(self._classSelector + '-btn-undo');\r\n self._undoBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.undo();\r\n }, { passive: true });\r\n\r\n self._redoBtn = self.div.querySelector(self._classSelector + '-btn-redo');\r\n self._redoBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.redo();\r\n }, { passive: true });\r\n\r\n if (self.options.styling) {\r\n self._strokeColorPicker = self.div.querySelector(self._classSelector + '-str-c');\r\n self._strokeColorPicker.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setStrokeColor(e.target.value);\r\n });\r\n\r\n self._strokeWidthSelector = self.div.querySelector(self._classSelector + '-str-w');\r\n self._strokeWidthSelector.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setStrokeWidth(e.target.value);\r\n });\r\n self._strokeWidthWatch = self.div.querySelector(self._classSelector + '-str-w-watch');\r\n\r\n self._fillColorPicker = self.div.querySelector(self._classSelector + '-fll-c');\r\n self._fillColorPicker.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setFillColor(e.target.value);\r\n });\r\n self._fillOpacitySelector = self.div.querySelector(self._classSelector + '-fll-w');\r\n self._fillOpacitySelector.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setFillOpacity(parseFloat(e.target.value) / 100);\r\n });\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n self.styles = TC.Util.extend(true, {}, map.options.styles, self.options.styles);\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.map\r\n .on(TC.Consts.event.VIEWCHANGE, function () {\r\n if (self.map.view === TC.Consts.view.PRINTING) {\r\n self.end();\r\n\r\n // No lanzo el evento porque da error al no llegar una feature\r\n // self.trigger(TC.Consts.event.DRAWEND);\r\n }\r\n })\r\n .on(TC.Consts.event.PROJECTIONCHANGE, function (e) {\r\n self.history.forEach(function (point, idx, arr) {\r\n arr[idx] = TC.Util.reproject(point, e.oldCrs, e.newCrs);\r\n });\r\n });\r\n\r\n self._layerPromise = new Promise(function (resolve, reject) {\r\n map.loaded(function () {\r\n if (self.options.layer) {\r\n self.setLayer(self.options.layer);\r\n resolve(self.layer);\r\n }\r\n else {\r\n // Si self.options.layer === false se instancia el control sin capa asociada\r\n if (self.options.layer === false) {\r\n self.setLayer(null);\r\n resolve(null);\r\n }\r\n else {\r\n map.addLayer({\r\n id: self.getUID(),\r\n title: 'DrawControl',\r\n stealth: true,\r\n owner: self,\r\n type: TC.Consts.layerType.VECTOR,\r\n styles: {\r\n point: self.styles.point,\r\n line: self.styles.line,\r\n polygon: self.styles.polygon\r\n }\r\n }).then(function (layer) {\r\n map.putLayerOnTop(layer);\r\n self.setLayer(layer);\r\n resolve(self.layer);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.new = function () {\r\n var self = this;\r\n if (self.layer && !self.persistent) {\r\n self.layer.clearFeatures();\r\n }\r\n self._cancelBtn.disabled = false;\r\n self.setMode(self.mode, true);\r\n return self;\r\n };\r\n\r\n ctlProto.undo = function () {\r\n var self = this;\r\n var result = self.wrap.undo();\r\n if (result) {\r\n self.historyIndex--;\r\n setDrawState(self);\r\n\r\n if (self.historyIndex <= 0) {\r\n self.resetValues();\r\n }\r\n self.trigger(TC.Consts.event.DRAWUNDO);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.redo = function () {\r\n var self = this;\r\n var result = this.wrap.redo();\r\n if (result) {\r\n self.historyIndex++;\r\n setDrawState(self);\r\n self.trigger(TC.Consts.event.DRAWREDO);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.cancel = function () {\r\n var self = this;\r\n self._cancelClick = true;\r\n this.setMode(null, false);\r\n self.resetValues();\r\n setFeatureAddReadyState(self);\r\n self._cancelBtn.disabled = true;\r\n self.trigger(TC.Consts.event.DRAWCANCEL, { ctrl: self });\r\n return self;\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n self._newBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n self._cancelBtn.disabled = false;\r\n TC.Control.prototype.activate.call(self);\r\n self.wrap.activate(self.mode);\r\n self.div.classList.remove(self._pointClass, self._lineClass, self._polygonClass);\r\n self.toggleFillStyleTools(self.mode !== TC.Consts.geom.POLYLINE && self.mode !== TC.Consts.geom.MULTIPOLYLINE);\r\n switch (self.mode) {\r\n case TC.Consts.geom.POINT:\r\n self.div.classList.add(self._pointClass);\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n self.div.classList.add(self._lineClass);\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n self.div.classList.add(self._polygonClass);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n if (self._newBtn) {\r\n self._newBtn.classList.remove(TC.Consts.classes.ACTIVE);\r\n }\r\n if (self._cancelBtn) {\r\n self._cancelBtn.disabled = true;\r\n }\r\n TC.Control.prototype.deactivate.call(self, !self._cancelClick);\r\n if (self.wrap) {\r\n self.wrap.deactivate();\r\n }\r\n self.resetValues();\r\n //self.trigger(TC.Consts.event.DRAWCANCEL, { ctrl: self });\r\n self._cancelClick = false;\r\n };\r\n\r\n ctlProto.clear = function () {\r\n const self = this;\r\n if (self.layer) {\r\n self.layer.clearFatures();\r\n }\r\n self.resetValues();\r\n return self;\r\n };\r\n\r\n ctlProto.isExclusive = function () {\r\n return true;\r\n };\r\n\r\n ctlProto.end = function () {\r\n const self = this;\r\n self.wrap.end();\r\n self.resetValues();\r\n return self;\r\n };\r\n\r\n ctlProto.setMode = function (mode, activate) {\r\n const self = this;\r\n\r\n if (mode) {\r\n self.mode = mode;\r\n self.toggleFillStyleTools(mode !== TC.Consts.geom.POLYLINE && mode !== TC.Consts.geom.MULTIPOLYLINE);\r\n }\r\n\r\n if (activate && mode) {\r\n //if (self.layer) {\r\n //self.layer.map.putLayerOnTop(self.layer);\r\n //}\r\n self.activate();\r\n }\r\n else {\r\n self.deactivate();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setStyle = function (style) {\r\n const self = this;\r\n switch (self.options.mode) {\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n case TC.Consts.geom.RECTANGLE:\r\n style = TC.Util.extend(self.styles.line, style);\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n style = TC.Util.extend(self.styles.polygon, style);\r\n break;\r\n case TC.Consts.geom.POINT:\r\n case TC.Consts.geom.MULTIPOINT:\r\n style = TC.Util.extend(self.styles.point, style);\r\n break;\r\n default:\r\n style = {};\r\n break;\r\n }\r\n self.style = TC.Util.extend(self.style, style);\r\n self.wrap.setStyle();\r\n };\r\n\r\n ctlProto.getModeStyle = function(mode) {\r\n const self = this;\r\n mode = mode || self.options.mode;\r\n switch (mode) {\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n return self.styles.line;\r\n case TC.Consts.geom.POLYGON:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n return self.styles.polygon;\r\n case TC.Consts.geom.POINT:\r\n case TC.Consts.geom.MULTIPOINT:\r\n return self.styles.point;\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const setColorWatch = function (colorPicker, color) {\r\n const toHex = c => new Number(c).toString(16).padStart(2, '0');\r\n if (Array.isArray(color)) {\r\n color = `#${toHex(color[0])}${toHex(color[1])}${toHex(color[2])}`;\r\n }\r\n else {\r\n const match = color.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n if (match && match.length) {\r\n color = '#' + match[1] + match[1] + match[2] + match[2] + match[3] + match[3];\r\n }\r\n }\r\n colorPicker.value = color;\r\n if (!TC.browserFeatures.inputTypeColor()) {\r\n const input = colorPicker;\r\n input.style.backgroundColor = color;\r\n input.blur();\r\n }\r\n };\r\n\r\n ctlProto.setStrokeColorWatch = function (color) {\r\n const self = this;\r\n if (self.options.styling) {\r\n if (color === undefined) {\r\n color = self.getModeStyle().strokeColor;\r\n }\r\n setColorWatch(self._strokeColorPicker, color);\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setFillColorWatch = function (color) {\r\n const self = this;\r\n if (self.options.styling) {\r\n if (color === undefined) {\r\n color = self.getModeStyle().fillColor;\r\n }\r\n setColorWatch(self._fillColorPicker, color);\r\n }\r\n return self;\r\n };\r\n\r\n const setPropertyColor = function (property, watchFn, color) {\r\n const self = this;\r\n const style = self.style || self.getModeStyle();\r\n if (style) {\r\n style[property] = color;\r\n }\r\n\r\n self.setStyle(style);\r\n\r\n watchFn.call(self, color);\r\n self.trigger(TC.Consts.event.STYLECHANGE, { property: property, value: color });\r\n return self;\r\n };\r\n\r\n ctlProto.setStrokeColor = function (color) {\r\n const self = this;\r\n return setPropertyColor.call(self, 'strokeColor', self.setStrokeColorWatch, color);\r\n };\r\n\r\n ctlProto.setFillColor = function (color) {\r\n const self = this;\r\n return setPropertyColor.call(self, 'fillColor', self.setFillColorWatch, color);\r\n };\r\n\r\n ctlProto.setFillOpacityWatch = function (percentage) {\r\n const self = this;\r\n if (self.options.styling) {\r\n if (percentage === undefined) {\r\n percentage = Math.round(self.getModeStyle().fillOpacity * 100);\r\n }\r\n percentage = parseInt(percentage, 10);\r\n if (percentage !== Number.NaN) {\r\n self._fillOpacitySelector.value = percentage;\r\n }\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setFillOpacity = function (alpha) {\r\n const self = this;\r\n if (alpha !== Number.NaN) {\r\n const style = self.getModeStyle();\r\n if (style) {\r\n style.fillOpacity = alpha;\r\n }\r\n\r\n self.setStyle(style);\r\n\r\n self.setFillOpacityWatch(Math.round(alpha * 100));\r\n self.trigger(TC.Consts.event.STYLECHANGE, { property: 'fillOpacity', value: alpha });\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setStrokeWidthWatch = function (width) {\r\n const self = this;\r\n if (self.options.styling) {\r\n if (width === undefined) {\r\n width = self.getModeStyle().strokeWidth;\r\n }\r\n width = parseInt(width, 10);\r\n if (width !== Number.NaN) {\r\n self._strokeWidthSelector.value = width;\r\n self._strokeWidthWatch.style.borderBottomWidth = width + 'px';\r\n }\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setStrokeWidth = function(width) {\r\n const self = this;\r\n width = parseInt(width, 10);\r\n if (width !== Number.NaN) {\r\n const style = self.getModeStyle();\r\n if (style) {\r\n style.strokeWidth = width;\r\n }\r\n\r\n self.setStyle(style);\r\n\r\n self.setStrokeWidthWatch(width);\r\n self.trigger(TC.Consts.event.STYLECHANGE, { property: 'strokeWidth', value: width });\r\n }\r\n return self;\r\n };\r\n\r\n const toggleTools = function (tools, visible) {\r\n if (tools) {\r\n const classToggle = visible !== undefined ? !visible : undefined;\r\n tools.classList.toggle(TC.Consts.classes.HIDDEN, classToggle);\r\n }\r\n };\r\n\r\n ctlProto.toggleStyleTools = function (visible) {\r\n const self = this;\r\n toggleTools(self.div.querySelector(`.${self.CLASS}-style`), visible);\r\n return self;\r\n };\r\n\r\n ctlProto.toggleFillStyleTools = function (visible) {\r\n const self = this;\r\n toggleTools(self.div.querySelector(`.${self.CLASS}-style-fill`), visible);\r\n return self;\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n const self = this;\r\n if (self.layer) {\r\n return Promise.resolve(self.layer);\r\n }\r\n return this._layerPromise;\r\n };\r\n\r\n ctlProto.setLayer = function (layer) {\r\n const self = this;\r\n if (self.map) {\r\n if (typeof layer === \"string\") {\r\n self.layer = self.map.getLayer(layer);\r\n }\r\n else {\r\n self.layer = layer;\r\n }\r\n\r\n self.styles = {};\r\n const layerStyles = self.layer && self.layer.styles || TC.Cfg.styles;\r\n TC.Util.extend(true, self.styles, self.options.styles || layerStyles);\r\n\r\n }\r\n };\r\n\r\n ctlProto.resetValues = function () {\r\n const self = this;\r\n self.history.length = 0;\r\n self.historyIndex = 0;\r\n setDrawState(self);\r\n return self;\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState && self.layer) {\r\n return {\r\n id: self.id,\r\n layer: self.layer.exportState()\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n self.getLayer().then(function (layer) {\r\n layer.importState(state.layer);\r\n });\r\n };\r\n})();\r\n\r\nconst Draw = TC.control.Draw;\r\nexport default Draw;","\r\n/**\r\n * Opciones del control de dibujo, medida y modificación de geometrías en el mapa.\r\n * @typedef DrawMeasureModifyOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean|ElevationOptions} [displayElevation=false] - Si se establece a un valor verdadero, los puntos dibujados mostrarán la elevación del mapa en las \r\n * coordenadas del punto, y las líneas dibujadas mostrarán un gráfico con su perfil de elevación.\r\n * @property {string} [mode] - Modo de dibujo, es decir, qué tipo de geometría se va a dibujar.\r\n * \r\n * Para establecer el modo hay que darle un valor de {@link SITNA.Consts.geom}. Este control tiene tres modos: \r\n * punto, línea y polígono, correspondientes con los valores {@link SITNA.Consts.geom.POINT}, \r\n * {@link SITNA.Consts.geom.POLYLINE} y {@link SITNA.Consts.geom.POLYGON}.\r\n * \r\n * Si esta opción no se especifica, se mostrarán los tres modos en tres pestañas de la interfaz de usuario del control.\r\n * @example [Ver en vivo](../examples/cfg.DrawMeasureModifyOptions.html) {@lang html}\r\n *
        \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Measure from './Measure';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.Measure = Measure;\r\n\r\nTC.control.DrawMeasureModify = function () {\r\n var self = this;\r\n\r\n TC.control.Measure.apply(self, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n const cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]'\r\n };\r\n\r\n self.persistentDrawControls = true;\r\n\r\n self.renderPromise().then(function () {\r\n self._1stCoordText = self.div.querySelector('.tc-ctl-meas-val-coord-1-t');\r\n self._2ndCoordText = self.div.querySelector('.tc-ctl-meas-val-coord-2-t');\r\n self._1stCoordValue = self.div.querySelector('.tc-ctl-meas-val-coord-1-v');\r\n self._2ndCoordValue = self.div.querySelector('.tc-ctl-meas-val-coord-2-v');\r\n self._elevationText = self.div.querySelector('.tc-ctl-meas-val-coord-ele-t');\r\n self._elevationValue = self.div.querySelector('.tc-ctl-meas-val-coord-ele-v');\r\n });\r\n\r\n};\r\n\r\nTC.inherit(TC.control.DrawMeasureModify, TC.control.Measure);\r\n\r\n(function () {\r\n var ctlProto = TC.control.DrawMeasureModify.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-dmm';\r\n\r\n TC.Consts.event.RESULTSPANELCLOSE = TC.Consts.event.RESULTSPANELCLOSE || 'resultspanelclose.tc';\r\n TC.Consts.event.FEATURESSELECT = TC.Consts.event.FEATURESSELECT || \"featuresselect.tc\";\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"drawAndMeasure\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":29}}})) + \"

        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"search.list.coordinates\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":33},\"end\":{\"line\":9,\"column\":67}}})) + \" \\r\\n \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"2dLength\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":33},\"end\":{\"line\":16,\"column\":52}}})) + \":
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"area\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":33},\"end\":{\"line\":20,\"column\":48}}})) + \": , \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"2dPerimeter\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":94},\"end\":{\"line\":20,\"column\":116}}})) + \":
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n \\r\\n \\r\\n
        \\r\\n
        \\r\\n\";},\"useData\":true} \r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const promise = self._set1stRenderPromise(TC.control.Measure.prototype.render.call(self, function () {\r\n self._clearBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-clr');\r\n self._clearBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n TC.confirm(self.getLocaleString('deleteAll.confirm'), function () {\r\n self.clear();\r\n cancelDraw.apply(self);\r\n });\r\n }, { passive: true });\r\n self._downloadBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-dl');\r\n self._downloadBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.showSketchDownloadDialog();\r\n }, { passive: true });\r\n\r\n self._elevProfileBtn = self.div.querySelector('.tc-ctl-meas-prof-btn');\r\n self._elevProfileBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.elevationProfileActive ? self.deactivateElevationProfile() : self.activateElevationProfile();\r\n }, { passive: true });\r\n\r\n const showHidenBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n showHidenBtn.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n const visibility = !e.target.classList.contains(TC.Consts.classes.ACTIVE);\r\n self.drawControls.forEach(function (dv) {\r\n dv.layer.setVisibility(visibility);\r\n if (dv.isActive)\r\n dv.wrap.setVisibility(visibility);\r\n });\r\n e.target.title = self.getLocaleString(visibility ? \"hideSketch\":\"showSketch\");\r\n e.target.classList.toggle(TC.Consts.classes.ACTIVE);\r\n }, { passive: true });\r\n\r\n if (!self.options.displayElevation) {\r\n self._elevProfileBtn.style.display = 'none';\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n \r\n return promise;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n TC.control.Measure.prototype.register.call(self, map).then(function () {\r\n const pointDrawControlId = self.getUID();\r\n const modifyId = self.getUID();\r\n\r\n Promise.all([self.layerPromise, self.renderPromise(), self.getElevationTool()]).then(function (objects) {\r\n const layer = objects[0];\r\n self.elevationProfileActive = !!objects[2];\r\n layer.title = self.getLocaleString('sketch');\r\n\r\n self._modifyPromise = map.addControl('modify', {\r\n id: modifyId,\r\n div: self.div.querySelector('.' + self.CLASS + '-mod'),\r\n layer: layer\r\n });\r\n\r\n self._modifyPromise.then(function (modify) {\r\n\r\n self.modify = modify;\r\n modify\r\n .on(TC.Consts.event.FEATURESSELECT, function (e) {\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel && !e.features.some(function (feature) {\r\n return ctl.resultsPanel.currentFeature === feature;\r\n })) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n const feature = e.features[e.features.length - 1];\r\n if (feature) {\r\n self.showMeasurements(self.getFeatureMeasureData(feature));\r\n const style = feature._originalStyle || feature.getStyle();\r\n switch (true) {\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n self.displayMode(TC.Consts.geom.POLYGON);\r\n console.log(style.fillOpacity);\r\n self.polygonDrawControl\r\n .setStrokeColorWatch(style.strokeColor)\r\n .setStrokeWidthWatch(style.strokeWidth)\r\n .setFillColorWatch(style.fillColor)\r\n .setFillOpacityWatch(style.fillOpacity * 100);\r\n break;\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n self.displayMode(TC.Consts.geom.POLYLINE);\r\n self.lineDrawControl\r\n .setStrokeColorWatch(style.strokeColor)\r\n .setStrokeWidthWatch(style.strokeWidth);\r\n if (self.elevationProfileActive) {\r\n ctl.displayElevationProfile(feature);\r\n }\r\n break;\r\n case TC.feature.Point && feature instanceof TC.feature.Point:\r\n self.displayMode(TC.Consts.geom.POINT);\r\n self.pointDrawControl\r\n .setStrokeColorWatch(style.strokeColor)\r\n .setStrokeWidthWatch(style.strokeWidth)\r\n .setFillColorWatch(style.fillColor)\r\n .setFillOpacityWatch(style.fillOpacity * 100);\r\n break;\r\n default:\r\n break;\r\n }\r\n self.modify\r\n .setFontColorWatch(style.fontColor)\r\n .setFontSizeWatch(style.fontSize);\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.FEATURESUNSELECT, function (_e) {\r\n const features = self.modify.getSelectedFeatures();\r\n if (!features.length) {\r\n self.resetDrawWatches();\r\n }\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.FEATUREMODIFY, function (e) {\r\n if (e.layer === self.layer) {\r\n const setMeasures = function (feature) {\r\n const measureData = self.getFeatureMeasureData(feature);\r\n self.showMeasurements(measureData);\r\n self.setFeatureMeasureData(feature);\r\n };\r\n setMeasures(e.feature);\r\n\r\n // Si es un punto metemos la elevación en la geometría (porque la mostramos en las medidas)\r\n if (TC.feature.Point && e.feature instanceof TC.feature.Point) {\r\n self.getElevationTool().then(function (tool) {\r\n if (tool) {\r\n tool\r\n .setGeometry({\r\n features: [e.feature],\r\n crs: self.map.crs\r\n })\r\n .then(\r\n function (features) {\r\n setMeasures(features[0]);\r\n },\r\n function (e) {\r\n console.warn(e.message);\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n const popups = self.map.getControlsByClass('TC.control.Popup');\r\n popups.forEach(function (pu) {\r\n if (pu.currentFeature === e.feature && pu.isVisible()) {\r\n pu.hide();\r\n }\r\n });\r\n }\r\n });\r\n\r\n map\r\n .on(TC.Consts.event.CONTROLDEACTIVATE, function (e) {\r\n const control = e.control;\r\n if (control === self.modify || control === self.lineDrawControl) {\r\n self.resetDrawWatches();\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n if (control === self.modify) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n }\r\n })\r\n .on(TC.Consts.event.POPUP, function (e) {\r\n // En líneas queremos mostrar el perfil en vez del popup\r\n const feature = e.control.currentFeature;\r\n if (TC.feature.Polyline && feature instanceof TC.feature.Polyline && self.layer.features.indexOf(feature) >= 0) {\r\n if (self.elevationProfileActive) {\r\n e.control.hide();\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.setCurrentFeature(feature);\r\n if (ctl.resultsPanel.isMinimized()) {\r\n ctl.resultsPanel.maximize();\r\n }\r\n }\r\n ctl.displayElevationProfile(feature);\r\n });\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (self.elevationChartData) {\r\n self.elevationChartData.coords = TC.Util.reproject(self.elevationChartData.coords, e.oldCrs, e.newCrs);\r\n }\r\n });\r\n\r\n });\r\n\r\n self._lineDrawControlPromise.then(function (lineDrawControl) {\r\n lineDrawControl\r\n .on(TC.Consts.event.DRAWSTART, function () {\r\n //self.resetElevationProfile();\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel && ctl.resultsPanel.currentFeature) {\r\n ctl.resultsPanel.setCurrentFeature(null);\r\n }\r\n self.resetValues();\r\n });\r\n //beginDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.DRAWUNDO + ' ' + TC.Consts.event.DRAWREDO, function () {\r\n const lineDrawControl = this;\r\n self.getElevationControl().then(function (ctl) {\r\n if (self.elevationProfileActive) {\r\n if (lineDrawControl.historyIndex) {\r\n ctl.displayElevationProfile(lineDrawControl.history.slice(0, lineDrawControl.historyIndex));\r\n }\r\n else {\r\n ctl.closeElevationProfile();\r\n }\r\n }\r\n });\r\n cancelDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.DRAWEND, function (e) {\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.currentFeature = e.feature;\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.POINT, function (e) {\r\n const lineDrawControl = this;\r\n const coords = lineDrawControl.history.slice(0, lineDrawControl.historyIndex);\r\n const lastCoord = coords[coords.length - 1];\r\n if (lastCoord[0] !== e.point[0] || lastCoord[1] !== e.point[1]) {\r\n coords.push(e.point);\r\n \r\n }\r\n self.getElevationControl().then(function (ctl) {\r\n if (self.elevationProfileActive) {\r\n if (navigator.onLine) {\r\n ctl.displayElevationProfile(coords);\r\n }\r\n else {\r\n ctl.closeElevationProfile();\r\n }\r\n }\r\n });\r\n if (e.target.historyIndex === 1)\r\n beginDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n }).on(TC.Consts.event.DRAWCANCEL, function () {\r\n cancelDraw.apply(self);\r\n });\r\n });\r\n\r\n self._polygonDrawControlPromise.then(function (polygonDrawControl) {\r\n polygonDrawControl\r\n .on(TC.Consts.event.DRAWSTART, function () {\r\n self.resetValues();\r\n //beginDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.POINT, function (e) {\r\n if (e.target.historyIndex===1)\r\n beginDraw.apply(self);\r\n })\r\n //.on(TC.Consts.event.DRAWEND, function (e) {\r\n // self.getElevationTool().then(function (tool) {\r\n // if (tool) {\r\n // tool.setGeometry({\r\n // features: [e.feature],\r\n // crs: self.map.crs\r\n // });\r\n // }\r\n // }\r\n //})\r\n .on(TC.Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n })\r\n .on(TC.Consts.event.DRAWCANCEL + ' ' + TC.Consts.event.DRAWUNDO, function () {\r\n cancelDraw.apply(self);\r\n });\r\n }); \r\n self._pointDrawControlPromise = map.addControl('draw', {\r\n id: pointDrawControlId,\r\n div: self.div.querySelector('.' + TC.control.Measure.prototype.CLASS + '-point'),\r\n mode: TC.Consts.geom.POINT,\r\n persistent: self.persistentDrawControls,\r\n styling: true,\r\n layer: self.layer\r\n });\r\n\r\n self._pointDrawControlPromise.then(function (pointDrawControl) {\r\n\r\n pointDrawControl.containerControl = self;\r\n self.drawControls.push(pointDrawControl);\r\n self.pointDrawControl = pointDrawControl;\r\n\r\n self.resetValues();\r\n\r\n pointDrawControl\r\n .on(TC.Consts.event.DRAWEND, function (e) {\r\n const updateChanges = function (feat) {\r\n self.showMeasurements({ coords: feat.geometry, units: map.wrap.isGeo() ? 'degrees' : 'm' });\r\n self.setFeatureMeasureData(feat);\r\n };\r\n updateChanges(e.feature);\r\n self.getElevationTool().then(function (tool) {\r\n if (tool) {\r\n tool.setGeometry({\r\n features: [e.feature],\r\n crs: self.map.crs\r\n }).then(function (features) {\r\n updateChanges(features[0]);\r\n }, function (e) {\r\n console.log(e.message);\r\n });\r\n }\r\n });\r\n beginDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.DRAWCANCEL, function (_e) {\r\n // Alerta de condición de carrera si no ponemos un timeout:\r\n // 1- Se llama a cancel de un control Draw.\r\n // 2- Se llama a deactivate (como es mediante cancel, no se se corta la cadena de activación controles).\r\n // 3- Si el control activo anterior era otro de los modos de dibujo de Measure, se activa.\r\n // 4- Se llama a cancel desde aquí.\r\n // 5- Se llama a deactivate del control que acabamos de activar en 3.\r\n // El activate de 3 y el deactivate de 5 sobre el mismo control entran en condición de carrera al crear/destruir la interaction\r\n // por tanto se puede quedar en un estado inconsistente. Para evitar eso, separamos 3 de 5 por el siguiente timeout.\r\n setTimeout(function () {\r\n self.cancel();\r\n }, 100);\r\n cancelDraw.apply(self);\r\n })\r\n .on(TC.Consts.event.STYLECHANGE, function (e) {\r\n self.onStyleChange(e);\r\n });\r\n // Desactivamos el método exportState que ya se encarga el control padre de ello\r\n pointDrawControl.exportsState = false;\r\n });\r\n\r\n self._elevationControlPromise = map.addControl('elevation', self.options.displayElevation);\r\n\r\n self.setMode(self.options.mode);\r\n\r\n map\r\n .on(TC.Consts.event.FEATUREADD, function (e) {\r\n const layer = e.layer;\r\n const feature = e.feature;\r\n if (layer === self.layer) {\r\n self.setFeatureMeasureData(feature);\r\n \r\n self._modifyPromise.then(function (modify) {\r\n modify.displayLabelText(feature.getStyle().label);\r\n });\r\n self._clearBtn.disabled = false;\r\n self._downloadBtn.disabled = false; \r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE + ' ' + TC.Consts.event.FEATURESCLEAR, function (e) {\r\n const layer = e.layer;\r\n if (layer === self.layer) {\r\n if (self.layer.features.length === 0) {\r\n self._clearBtn.disabled = true;\r\n self._downloadBtn.disabled = true;\r\n self.resetValues();\r\n cancelDraw.apply(self);\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n self.getElevationControl().then(function (ctl) {\r\n if (ctl === e.control) {\r\n ctl.setCurrentFeature(null);\r\n }\r\n });\r\n });\r\n\r\n resolve(self);\r\n });\r\n\r\n }).catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.displayMode = function (mode) {\r\n const self = this;\r\n if (mode === TC.Consts.geom.POINT) {\r\n self._activeMode = self.div.querySelector('.tc-ctl-meas-pt');\r\n }\r\n if (self.modify) {\r\n self.modify.div.classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n return TC.control.Measure.prototype.displayMode.call(self, mode);\r\n };\r\n\r\n ctlProto.setMode = function (mode) {\r\n const self = this;\r\n if (mode === TC.Consts.geom.POINT) {\r\n self._pointDrawControlPromise.then(function (ctl) {\r\n ctl.activate();\r\n TC.control.Measure.prototype.setMode.call(self, mode);\r\n cancelDraw.apply(self);\r\n });\r\n }\r\n else {\r\n TC.control.Measure.prototype.setMode.call(self, mode);\r\n cancelDraw.apply(self); \r\n }\r\n \r\n };\r\n\r\n ctlProto.setFeatureMeasureData = function (feature) {\r\n const self = this;\r\n const data = {};\r\n switch (true) {\r\n case TC.feature.Point && feature instanceof TC.feature.Point: {\r\n const firstCoordText = self._1stCoordText.innerHTML;\r\n const secondCoordText = self._2ndCoordText.innerHTML;\r\n const elevationText = self._elevationText.innerHTML;\r\n if (self._1stCoordValue.textContent.trim().length > 0 && self._2ndCoordValue.textContent.trim().length > 0) {\r\n data.CRS = self.map.crs;\r\n data[firstCoordText.substr(0, firstCoordText.indexOf(':'))] = parseFloat(self._1stCoordValue.dataset.value);\r\n data[secondCoordText.substr(0, secondCoordText.indexOf(':'))] = parseFloat(self._2ndCoordValue.dataset.value);\r\n if (elevationText) {\r\n data[self.getLocaleString('ele')] = parseFloat(self._elevationValue.dataset.value);\r\n }\r\n feature.setData(data);\r\n }\r\n break;\r\n }\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n if (self._len.innerHTML.trim() !== self.NOMEASURE) {\r\n data[self.getLocaleString('2dLength')] = self._len.innerHTML;\r\n feature.setData(data);\r\n }\r\n break;\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n if (self._area.innerHTML.trim() !== self.NOMEASURE && self._peri.innerHTML.trim() !== self.NOMEASURE) {\r\n data[self.getLocaleString('area')] = self._area.innerHTML;\r\n data[self.getLocaleString('2dPerimeter')] = self._peri.innerHTML;\r\n feature.setData(data);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getFeatureMeasureData = function (feature) {\r\n const self = this;\r\n const result = {\r\n units: 'm'\r\n };\r\n const measureOptions = {\r\n crs: self.map.options.utmCrs\r\n };\r\n switch (true) {\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n result.area = feature.getArea(measureOptions);\r\n result.perimeter = feature.getLength(measureOptions);\r\n break;\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n result.length = feature.getLength(measureOptions);\r\n self.getElevationControl().then(ctl => {\r\n if (self.elevationProfileActive) {\r\n ctl.displayElevationProfile(feature);\r\n }\r\n });\r\n break;\r\n case TC.feature.Point && feature instanceof TC.feature.Point:\r\n result.coords = feature.geometry;\r\n break;\r\n default:\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.showMeasurements = function (options) {\r\n const self = this;\r\n TC.control.Measure.prototype.showMeasurements.call(self, options);\r\n options = options || {};\r\n const locale = self.map.options.locale || TC.Cfg.locale;\r\n if (options.coords) {\r\n var precision;\r\n var coord1, coord2;\r\n if (options.units === 'm') {\r\n precision = TC.Consts.METER_PRECISION;\r\n coord1 = options.coords[0];\r\n coord2 = options.coords[1];\r\n self._1stCoordText.innerHTML = 'x: ';\r\n self._2ndCoordText.innerHTML = 'y: ';\r\n }\r\n else {\r\n precision = TC.Consts.DEGREE_PRECISION;\r\n coord1 = options.coords[1];\r\n coord2 = options.coords[0];\r\n self._1stCoordText.innerHTML = 'lat: ';\r\n self._2ndCoordText.innerHTML = 'lon: ';\r\n }\r\n const factor = Math.pow(10, precision);\r\n const round = function (val) {\r\n return Math.round(val * factor) / factor;\r\n };\r\n self._1stCoordValue.innerHTML = TC.Util.formatNumber(coord1.toFixed(precision), locale);\r\n self._1stCoordValue.dataset.value = round(coord1);\r\n self._2ndCoordValue.innerHTML = TC.Util.formatNumber(coord2.toFixed(precision), locale);\r\n self._2ndCoordValue.dataset.value = round(coord2);\r\n if (options.coords.length > 2) {\r\n const elevation = Math.round(options.coords[2]);\r\n self._elevationText.innerHTML = self.getLocaleString('ele').toLowerCase() + ': ';\r\n self._elevationValue.innerHTML = TC.Util.formatNumber(elevation.toFixed(TC.Consts.METER_PRECISION), locale) + ' m';\r\n self._elevationValue.dataset.value = elevation;\r\n }\r\n else {\r\n self._elevationText.innerHTML = '';\r\n self._elevationValue.innerHTML = '';\r\n self._elevationValue.dataset.value = '';\r\n }\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.resetValues = function () {\r\n const self = this;\r\n TC.control.Measure.prototype.resetValues.call(self);\r\n\r\n if (self._1stCoordText) {\r\n self._1stCoordText.innerHTML = self.NOMEASURE;\r\n self._2ndCoordText.innerHTML = '';\r\n self._1stCoordValue.innerHTML = '';\r\n self._1stCoordValue.dataset.value = '';\r\n self._2ndCoordValue.innerHTML = '';\r\n self._2ndCoordValue.dataset.value = '';\r\n self._elevationText.innerHTML = '';\r\n self._elevationValue.innerHTML = '';\r\n self._elevationValue.dataset.value = '';\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.resetDrawWatches = function () {\r\n const self = this;\r\n self.drawControls.forEach(function (ctl) {\r\n ctl\r\n .setStrokeColorWatch()\r\n .setStrokeWidthWatch();\r\n });\r\n };\r\n\r\n ctlProto.clear = function () {\r\n const self = this;\r\n self.resetValues();\r\n self.layer.clearFeatures();\r\n if (self.modify.isActive) {\r\n self.modify.deactivate();\r\n }\r\n if (self.options.displayElevation) {\r\n self.getElevationControl().then(function (ctl) {\r\n ctl.resetElevationProfile();\r\n if (ctl.resultsPanel) {\r\n ctl.resultsPanel.close();\r\n }\r\n });\r\n }\r\n self._clearBtn.disabled = true;\r\n self._downloadBtn.disabled = true;\r\n return self;\r\n };\r\n\r\n ctlProto.showSketchDownloadDialog = function (_options) {\r\n const self = this;\r\n\r\n self.getDownloadDialog().then(function (control) {\r\n var options = {\r\n title: self.getLocaleString(\"downloadSketch\"),\r\n fileName: self.getLocaleString('sketch').toLowerCase().replace(' ', '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true)\r\n };\r\n //si el control tiene su propia configuración de elevacion la pasamos para que sobrescriba a la del mapa\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n control.open(self.layer.features, options);\r\n \r\n });\r\n return self;\r\n \r\n };\r\n\r\n ctlProto.onStyleChange = function (e) {\r\n const self = this;\r\n var featureCtor;\r\n switch (e.target.mode) {\r\n case TC.Consts.geom.POLYGON:\r\n featureCtor = TC.feature.Polygon;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n featureCtor = TC.feature.Polyline;\r\n break;\r\n case TC.Consts.geom.POINT:\r\n featureCtor = TC.feature.Point;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (featureCtor) {\r\n self.modify.getSelectedFeatures().forEach(function (feature) {\r\n if (feature instanceof featureCtor) {\r\n const styleOptions = {};\r\n styleOptions[e.property] = e.value;\r\n //feature._originalStyle[e.property] = e.value;\r\n feature.setStyle(styleOptions);\r\n //clearTimeout(feature._selectionStyleTimeout);\r\n //feature._selectionStyleTimeout = setTimeout(function () {\r\n // feature.setStyle(self.modify.styleFunction(feature));\r\n //}, self.options.styleChangeDisplayTimeout || 1000);\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctlProto.activateElevationProfile = async function () {\r\n const self = this;\r\n self.elevationProfileActive = true;\r\n self._elevProfileBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n self._elevProfileBtn.setAttribute('title', self.getLocaleString('deactivateElevationProfile'));\r\n var profileDrawn = false;\r\n const elevationControl = await self.getElevationControl();\r\n if (self.lineDrawControl.historyIndex > 1) {\r\n elevationControl.displayElevationProfile(self.lineDrawControl.history.slice(0, self.lineDrawControl.historyIndex));\r\n profileDrawn = true;\r\n }\r\n else {\r\n const features = self.modify.getActiveFeatures().filter(function (feat) {\r\n return TC.feature.Polyline && feat instanceof TC.feature.Polyline;\r\n });\r\n if (features.length) {\r\n const feature = features[features.length - 1];\r\n elevationControl.displayElevationProfile(feature.geometry);\r\n profileDrawn = true;\r\n }\r\n }\r\n if (!profileDrawn) {\r\n elevationControl.resetElevationProfile();\r\n }\r\n if (elevationControl.resultsPanel) {\r\n elevationControl.resultsPanel.show();\r\n }\r\n };\r\n\r\n ctlProto.deactivateElevationProfile = async function () {\r\n const self = this;\r\n self.elevationProfileActive = false;\r\n self._elevProfileBtn.classList.remove(TC.Consts.classes.ACTIVE);\r\n self._elevProfileBtn.setAttribute('title', self.getLocaleString('activateElevationProfile'));\r\n const elevationControl = await self.getElevationControl();\r\n elevationControl.resetElevationProfile();\r\n if (elevationControl.resultsPanel) {\r\n elevationControl.resultsPanel.close();\r\n }\r\n };\r\n\r\n ctlProto.resetElevationProfile = function () {\r\n const self = this;\r\n if (self.options.displayElevation && self.resultsPanelChart) {\r\n self.elevationChartData = {\r\n x: [0],\r\n ele: [0],\r\n coords: [0, 0, 0],\r\n upHill: 0,\r\n downHill: 0\r\n };\r\n self.resultsPanelChart.openChart(self.elevationChartData);\r\n }\r\n };\r\n\r\n ctlProto.getElevationControl = function () {\r\n return this._elevationControlPromise;\r\n };\r\n\r\n const beginDraw = function () {\r\n const self = this;\r\n const showHideBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n if(showHideBtn)showHideBtn.disabled = false;\r\n }\r\n const cancelDraw = function () {\r\n const self = this;\r\n const showHideBtn = self.div.querySelector('.tc-ctl-dmm-cmd button.tc-ctl-dmm-btn-hide');\r\n if (showHideBtn) {\r\n const layerPromises = this.drawControls.reduce(function (i, a) { return i.concat([a.getLayer()]) }, []);\r\n Promise.all(layerPromises).then(function () {\r\n showHideBtn.disabled = !self.drawControls.some(dc => dc.layer.features.length || (dc.isActive && dc.historyIndex > 0));\r\n showHideBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n showHideBtn.title = self.getLocaleString(\"hideSketch\");\r\n }); \r\n }\r\n }\r\n\r\n})();\r\n\r\nconst DrawMeasureModify = TC.control.DrawMeasureModify;\r\nexport default DrawMeasureModify;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport wrap from '../ol/ol';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.wrap = wrap;\r\nTC.Control = Control;\r\n\r\n(function () {\r\n\r\n const setEditState = function (ctl, state) {\r\n ctl.div.querySelectorAll(ctl._selectors.MODE_RADIO_BUTTON).forEach(r => r.disabled = !state);\r\n }\r\n\r\n /* Creamos el constructor, llamando al constructor del padre */\r\n TC.control.Edit = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(this, arguments);\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self._selectors = {\r\n MODE_RADIO_BUTTON: `input[type=radio][name=\"${self.id}-mode\"]`\r\n };\r\n\r\n\r\n self.wrap = new TC.wrap.control.Edit(self);\r\n self.layer = null;\r\n //self.feature = self.options.feature ? self.options.feature : null;\r\n self.callback = TC.Util.isFunction(arguments[2]) ? arguments[2] : (self.options.callback ? self.options.callback : null);\r\n self.cancelActionConfirmTxt = self.options.cancelText ? self.options.eraseText : \"Si continua todos los cambios se perderán. ¿Desea continuar?\";\r\n self.styles = self.options.styles;\r\n self.layersEditData = {};\r\n self.pointDrawControl = null;\r\n self.lineDrawControl = null;\r\n self.polygonDrawControl = null;\r\n //self.cutDrawControl = null;\r\n self.modifyControl = null;\r\n self.snapping = (typeof self.options.snapping === 'boolean') ? self.options.snapping : true;\r\n\r\n\r\n //.on(TC.Consts.event.EDITIONSAVE, function (e) {\r\n // if (self.callback)\r\n // self.callback(e.added, e.removed, e.modified);\r\n //});\r\n };\r\n\r\n TC.inherit(TC.control.Edit, TC.Control);\r\n\r\n TC.control.Edit.mode = {\r\n MODIFY: 'modify',\r\n ADDPOINT: 'addpoint',\r\n ADDLINE: 'addline',\r\n ADDPOLYGON: 'addpolygon',\r\n CUT: 'cut',\r\n OTHER: 'other'\r\n }\r\n\r\n const ctlProto = TC.control.Edit.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-edit';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"featureEditing\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":29}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-attr'] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"readOnly\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.program(4, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":20},\"end\":{\"line\":48,\"column\":27}}})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"value\") : depth0), depth0)) + \"\\r\\n\";},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"availableValues\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":24},\"end\":{\"line\":19,\"column\":31}}})) != null ? stack1 : \"\") + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"int\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":30},\"end\":{\"line\":20,\"column\":45}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0, blockParams, depths),\"inverse\":container.program(10, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":24},\"end\":{\"line\":41,\"column\":31}}})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression; return \" \\r\\n\";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputNumber\"),depth0,{\"name\":\"inputNumber\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"integer\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":21,\"column\":34},\"end\":{\"line\":21,\"column\":53}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":21,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"11\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"double\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":34},\"end\":{\"line\":22,\"column\":52}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"12\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"boolean\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":34},\"end\":{\"line\":23,\"column\":53}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(15, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputCheckbox\"),depth0,{\"name\":\"inputCheckbox\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"15\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"date\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":34},\"end\":{\"line\":24,\"column\":50}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"16\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputDate\"),depth0,{\"name\":\"inputDate\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"time\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":34},\"end\":{\"line\":25,\"column\":50}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"19\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputTime\"),depth0,{\"name\":\"inputTime\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"21\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"dateTime\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":26,\"column\":34},\"end\":{\"line\":26,\"column\":54}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.program(24, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":26,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"22\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputDatetime\"),depth0,{\"name\":\"inputDatetime\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"24\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"byte\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":34},\"end\":{\"line\":27,\"column\":50}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(25, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"25\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"long\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":34},\"end\":{\"line\":28,\"column\":50}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(26, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"26\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"negativeInteger\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":29,\"column\":34},\"end\":{\"line\":29,\"column\":61}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(27, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":29,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"27\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"nonNegativeInteger\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":34},\"end\":{\"line\":30,\"column\":64}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(28, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"28\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"nonPositiveInteger\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":31,\"column\":34},\"end\":{\"line\":31,\"column\":64}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(29, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":31,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"29\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"positiveInteger\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":34},\"end\":{\"line\":32,\"column\":61}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(30, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"30\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"short\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":33,\"column\":34},\"end\":{\"line\":33,\"column\":51}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(31, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":33,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"31\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"unsignedLong\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":34},\"end\":{\"line\":34,\"column\":58}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(32, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"32\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"unsignedInt\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":34},\"end\":{\"line\":35,\"column\":57}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(33, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"33\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"unsignedShort\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":34},\"end\":{\"line\":36,\"column\":59}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(34, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"34\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"unsignedByte\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":34},\"end\":{\"line\":37,\"column\":58}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(35, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"35\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"float\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":34},\"end\":{\"line\":38,\"column\":51}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(36, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"36\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"type\") : depth0),\"decimal\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":39,\"column\":34},\"end\":{\"line\":39,\"column\":53}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(37, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":39,\"column\":24},\"end\":{\"line\":41,\"column\":24}}})) != null ? stack1 : \"\");},\"37\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"inputText\"),depth0,{\"name\":\"inputText\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \";},\"39\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"41\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"43\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"44\":function(container,depth0,helpers,partials,data) { return \" checked\";},\"46\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"48\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"50\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"attributeEdit\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":28}}})) + \"

        \\r\\n
        \\r\\n \\r\\n \\r\\n\" + ((stack1 = container.hooks.blockHelperMissing.call(depth0,container.lambda((depth0 != null ? lookupProperty(depth0,\"data\") : depth0), depth0),{\"name\":\"data\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":12},\"end\":{\"line\":51,\"column\":21}}})) != null ? stack1 : \"\") + \" \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n \\r\\n
        \\r\\n\";},\"4_d\": function(fn, props, container, depth0, data, blockParams, depths) { var decorators = container.decorators, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(39, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputText\"],\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":24},\"end\":{\"line\":42,\"column\":133}}}) || fn; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(41, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputNumber\"],\"data\":data,\"loc\":{\"start\":{\"line\":43,\"column\":24},\"end\":{\"line\":43,\"column\":137}}}) || fn; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(43, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputCheckbox\"],\"data\":data,\"loc\":{\"start\":{\"line\":44,\"column\":24},\"end\":{\"line\":44,\"column\":131}}}) || fn; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(46, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputDate\"],\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":24},\"end\":{\"line\":45,\"column\":133}}}) || fn; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(48, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputTime\"],\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":24},\"end\":{\"line\":46,\"column\":133}}}) || fn; fn = lookupProperty(decorators,\"inline\")(fn,props,container,{\"name\":\"inline\",\"hash\":{},\"fn\":container.program(50, data, 0, blockParams, depths),\"inverse\":container.noop,\"args\":[\"inputDatetime\"],\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":24},\"end\":{\"line\":47,\"column\":141}}}) || fn; return fn; },\"useDecorators\":true,\"usePartial\":true,\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + '-import'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-edit-import-layer\"),depth0,{\"name\":\"tc-ctl-edit-import-layer\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n
          \" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"layers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":30},\"end\":{\"line\":5,\"column\":21}}})) != null ? stack1 : \"\") + \"
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"thereAreNoCompatibleFeatures\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":49},\"end\":{\"line\":6,\"column\":88}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n\";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-import-layer'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-edit-import-feature\"),depth0,{\"name\":\"tc-ctl-edit-import-feature\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \\r\\n

        \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

        \\r\\n
          \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"features\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":6,\"column\":17}}})) != null ? stack1 : \"\") + \"
        \\r\\n
      • \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-import-feature'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \\r\\n\";},\"useData\":true}\r\n\r\n /* Extendemos el método register. \r\n La lógica del control suele definirse aquí. */\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n\r\n TC.Control.prototype.register.call(self, map).then(function () {\r\n\r\n const DRAW = 'draw';\r\n self._pointDrawCtlPromise = map.addControl(DRAW, {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-point`),\r\n mode: TC.Consts.geom.POINT,\r\n styling: self.options.styling,\r\n layer: false\r\n });\r\n self._lineDrawCtlPromise = map.addControl(DRAW, {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-line`),\r\n mode: TC.Consts.geom.POLYLINE,\r\n styling: self.options.styling,\r\n layer: false\r\n });\r\n self._polygonDrawCtlPromise = map.addControl(DRAW, {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-polygon`),\r\n mode: TC.Consts.geom.POLYGON,\r\n styling: self.options.styling,\r\n layer: false\r\n });\r\n //self._cutDrawCtlPromise = map.addControl(DRAW, {\r\n // id: self.getUID(),\r\n // div: self.div.querySelector(`.${self.CLASS}-cut`),\r\n // mode: TC.Consts.geom.POLYLINE,\r\n // snapping: true,\r\n // styles: {\r\n // line: {\r\n // lineDash: [5, 5]\r\n // }\r\n // },\r\n // layer: false\r\n //});\r\n self._modifyCtlPromise = map.addControl('modify', {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-modify`),\r\n snapping: self.snapping\r\n });\r\n Promise.all([\r\n self._pointDrawCtlPromise,\r\n self._lineDrawCtlPromise,\r\n self._polygonDrawCtlPromise,\r\n //self._cutDrawCtlPromise,\r\n self._modifyCtlPromise\r\n ]).then(function (controls) {\r\n self.pointDrawControl = controls[0];\r\n self.lineDrawControl = controls[1];\r\n self.polygonDrawControl = controls[2];\r\n //self.cutDrawControl = controls[3];\r\n self.modifyControl = controls[3];\r\n\r\n const drawendHandler = function (e) {\r\n self.trigger(TC.Consts.event.DRAWEND, { feature: e.feature });\r\n };\r\n const drawcancelHandler = function () {\r\n self.cancel();\r\n };\r\n self.pointDrawControl\r\n .on(TC.Consts.event.DRAWEND, drawendHandler)\r\n .on(TC.Consts.event.DRAWCANCEL, drawcancelHandler);\r\n self.lineDrawControl\r\n .on(TC.Consts.event.DRAWEND, drawendHandler)\r\n .on(TC.Consts.event.DRAWCANCEL, drawcancelHandler);\r\n self.polygonDrawControl\r\n .on(TC.Consts.event.DRAWEND, drawendHandler)\r\n .on(TC.Consts.event.DRAWCANCEL, drawcancelHandler);\r\n //self.cutDrawControl\r\n // .on(TC.Consts.event.DRAWEND, function (e) {\r\n // //TC.loadJS(\r\n // // !window.turf && !turf.lineSplit,\r\n // // [TC.apiLocation + 'lib/turf/line-split'],\r\n // // function () {\r\n\r\n // // }\r\n // //);\r\n\r\n // //self.layer.features.filter(f => f)\r\n // })\r\n // .on(TC.Consts.event.DRAWCANCEL, drawcancelHandler);\r\n self.modifyControl\r\n .on(TC.Consts.event.FEATUREMODIFY, function (e) {\r\n self.trigger(TC.Consts.event.FEATUREMODIFY, { feature: e.feature, layer: e.layer });\r\n })\r\n .on(TC.Consts.event.FEATUREADD, function (e) {\r\n self.trigger(TC.Consts.event.FEATUREADD, { feature: e.feature, layer: e.layer });\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n self.trigger(TC.Consts.event.FEATUREREMOVE, { feature: e.feature, layer: e.layer });\r\n });\r\n\r\n self.modifyControl.displayAttributes = function () {\r\n const selectedFeatures = self.getSelectedFeatures();\r\n const feature = selectedFeatures[selectedFeatures.length - 1];\r\n if (feature) {\r\n const data = feature.getData() || {};\r\n self.modifyControl._editAttrBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n let attributes = self.getLayerEditData(feature.layer).attributes;\r\n if (!Object.keys(attributes).lengh) {\r\n // No hay información de capa concerniente a atributos. \r\n // Tomamos los de la entidad seleccionada\r\n const feature = self.getSelectedFeatures()[0];\r\n if (feature && Object.keys(data).length) {\r\n attributes = {};\r\n for (var key in data) {\r\n attributes[key] = { name: key, value: data[key] };\r\n }\r\n }\r\n }\r\n const attrArray = Object.keys(attributes).map(k => attributes[k]);\r\n const jfa = self._joinedFeatureAttributes || [];\r\n\r\n attrArray.forEach(function (attributeObj) {\r\n attributeObj.value = data[attributeObj.name];\r\n if (attributeObj.name === 'id') {\r\n attributeObj.readOnly = true;\r\n }\r\n attributeObj.availableValues = [];\r\n jfa.forEach(function (jfaObj) {\r\n const val = jfaObj[attributeObj.name];\r\n if (val !== undefined && val !== '') {\r\n attributeObj.availableValues.push(val);\r\n }\r\n });\r\n });\r\n\r\n attrArray.sort(function (a, b) {\r\n if (a.readOnly ? !b.readOnly : b.readOnly) { //XOR\r\n return !a.readOnly - !b.readOnly; // Primero readOnly\r\n }\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n self.getRenderedHtml(self.CLASS + '-attr', { data: attrArray }, function (html) {\r\n self.modifyControl._attributesSection;\r\n const contentDiv = self.getAttributeDisplayTarget();\r\n contentDiv.classList.remove(TC.Consts.classes.HIDDEN);\r\n contentDiv.innerHTML = html;\r\n const inputs = contentDiv.querySelectorAll('input');\r\n const selects = contentDiv.querySelectorAll('select');\r\n inputs.forEach(function (elm) {\r\n elm.addEventListener('input', function (e) {\r\n const input = e.target;\r\n for (var i = 0, len = selects.length; i < len; i++) {\r\n const select = selects[i];\r\n if (select.matches(`[name=${e.target.getAttribute('name')}]`) && select.value !== input.value) {\r\n select.value = '';\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n selects.forEach(function (elm) {\r\n elm.addEventListener('change', function (e) {\r\n const select = e.target;\r\n for (var i = 0, len = inputs.length; i < len; i++) {\r\n const input = inputs[i];\r\n if (input.matches(`[name=${e.target.getAttribute('name')}]`)) {\r\n input.value = select.value;\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n\r\n contentDiv.querySelector(`.${self.modifyControl.CLASS}-btn-attr-ok`).addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.modifyControl._onAttrOK();\r\n }, { passive: true });\r\n\r\n contentDiv.querySelector(`.${self.modifyControl.CLASS}-btn-attr-cancel`).addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.modifyControl.closeAttributes();\r\n }, { passive: true });\r\n });\r\n }\r\n };\r\n\r\n self.modifyControl._onAttrOK = function () {\r\n const that = this;\r\n const feature = that.getSelectedFeatures()[0];\r\n if (feature) {\r\n const data = {};\r\n const attributes = self.getLayerEditData(feature.layer).attributes;\r\n const layerHasInfo = Object.keys(attributes).length > 0;\r\n const inputs = that.getAttributeDisplayTarget().querySelectorAll('input');\r\n inputs.forEach(function (input) {\r\n var name = input.getAttribute('name');\r\n var value = input.value;\r\n if (layerHasInfo) {\r\n switch (attributes[name].type) {\r\n case 'int':\r\n case 'integer':\r\n case 'byte':\r\n case 'long':\r\n case 'negativeInteger':\r\n case 'nonNegativeInteger':\r\n case 'nonPositiveInteger':\r\n case 'positiveInteger':\r\n case 'short':\r\n case 'unsignedLong':\r\n case 'unsignedInt':\r\n case 'unsignedShort':\r\n case 'unsignedByte':\r\n value = parseInt(value);\r\n if (!Number.isNaN(value)) {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'double':\r\n case 'float':\r\n case 'decimal':\r\n value = parseFloat(value);\r\n if (!Number.isNaN(value)) {\r\n data[name] = value;\r\n }\r\n break;\r\n case 'date':\r\n case 'time':\r\n case 'dateTime':\r\n data[name] = new Date(value);\r\n break;\r\n case 'boolean':\r\n data[name] = !!value;\r\n break;\r\n case undefined:\r\n break;\r\n default:\r\n data[name] = value;\r\n break;\r\n }\r\n }\r\n else {\r\n data[name] = value;\r\n }\r\n });\r\n feature.setData(data);\r\n that.trigger(TC.Consts.event.FEATUREMODIFY, { feature: feature, layer: that.layer });\r\n that.closeAttributes();\r\n }\r\n };\r\n\r\n if (Array.isArray(self.options.modes) && self.options.modes.length == 1) {\r\n self.setMode(self.options.modes[0], null);\r\n }\r\n\r\n resolve(self);\r\n\r\n map.loaded(function () {\r\n self.setLayer(self.options.layer);\r\n });\r\n\r\n map\r\n .on(TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === self.featureImportPanel) {\r\n self.featuresToImport = [];\r\n self.getHighlightsLayer().then(l => l.clearFeatures());\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE + ' ' + TC.Consts.event.FEATURESCLEAR, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.getHighlightsLayer().then(function (hlLayer) {\r\n for (let i = self.featuresToImport.length - 1; i >= 0; i--) {\r\n const fti = self.featuresToImport[i];\r\n if (fti.layer === e.layer || (fti.original && fti.original.layer === e.layer)) {\r\n self.featuresToImport.splice(i, 1);\r\n hlLayer.removeFeature(fti);\r\n }\r\n }\r\n const li = self.featureImportPanel.getInfoContainer().querySelector(`li[data-layer-id=\"${e.layer.id}\"]`);\r\n if (li) {\r\n li.remove();\r\n }\r\n });\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.getHighlightsLayer().then(function (hlLayer) {\r\n for (var i = 0, ii = self.featuresToImport.length; i < ii; i++) {\r\n const fti = self.featuresToImport[i];\r\n if (fti === e.feature || fti.original === e.feature) {\r\n self.featuresToImport.splice(i, 1);\r\n hlLayer.removeFeature(fti);\r\n const lli = self.featureImportPanel.getInfoContainer().querySelector(`li[data-layer-id=\"${e.layer.id}\"]`);\r\n if (lli) {\r\n const fli = lli.querySelector(`#tc-ctl-edit-import-list-cb-${e.layer.id}-${e.feature.id}`);\r\n if (fli) {\r\n fli.remove();\r\n }\r\n if (!lli.children.length) {\r\n lli.remove();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERUPDATE, function (e) { // TODO: Actualizar cuando la capa ya existe en la lista\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n const layerObj = self.getAvailableFeaturesToImport().filter(l => l.id === e.layer.id)[0];\r\n if (layerObj) {\r\n self.getRenderedHtml(self.CLASS + '-import-layer', layerObj, function (html) {\r\n const list = self\r\n .featureImportPanel\r\n .getInfoContainer()\r\n .querySelector(`.${self.CLASS}-import-list .tc-layers`);\r\n if (!list.querySelector(`li[data-layer-id=\"${e.layer.id}\"]`)) {\r\n list.insertAdjacentHTML('beforeend', html);\r\n }\r\n });\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREADD + ' ' + TC.Consts.event.FEATURESADD, function (e) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n const layer = e.layer;\r\n const features = (e.feature ? [e.feature] : e.features).filter(f => self.isFeatureAllowed(f));\r\n if (features.length) {\r\n self.displayLayerToImport({\r\n id: layer.id,\r\n title: layer.title,\r\n features: features\r\n });\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(TC.Control.prototype.renderData.call(self, { controlId: self.id}, function () {\r\n\r\n //control de renderizado enfunción del modo de edicion\r\n if (Array.isArray(self.options.modes) && self.options.modes.length > 0) {\r\n for (var m in TC.control.Edit.mode)\r\n if (typeof m === 'string' && self.options.modes.indexOf(TC.control.Edit.mode[m]) < 0) {\r\n const label = self.div.querySelector(`label${self._classSelector}-btn-${TC.control.Edit.mode[m]}`);\r\n label.parentElement.removeChild(label);\r\n const div = self.div.querySelector(`div${self._classSelector}-${TC.control.Edit.mode[m]}`);\r\n div.parentElement.removeChild(div);\r\n }\r\n if (self.options.modes.length === 1) {\r\n var mode = self.options.modes[0];\r\n const label = self.div.querySelector(`label${self._classSelector}-btn-${mode}`);\r\n label.parentElement.removeChild(label);\r\n }\r\n }\r\n\r\n self.div.querySelectorAll(self._selectors.MODE_RADIO_BUTTON).forEach(function (radio) {\r\n radio.addEventListener('change', function () {\r\n var newMode = this.value;\r\n var mode = self.mode === newMode ? undefined : newMode;\r\n self.setMode(mode);\r\n });\r\n });\r\n\r\n self.div.querySelector(self._classSelector + '-btn-import').addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.showFeatureImportPanel();\r\n }, { passive: true });\r\n\r\n self.div.querySelector(self._classSelector + '-btn-dl').addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.getDownloadDialog().then(function (dialog) {\r\n const options = {\r\n title: self.getLocaleString('download'),\r\n fileName: self.layer.id.toLowerCase().replace(' ', '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true),\r\n elevation: self.options.downloadElevation\r\n };\r\n dialog.open(self.layer.features, options);\r\n });\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.getGeometryType = function (geometryType) {\r\n switch (geometryType) {\r\n case 'gml:LinearRingPropertyType':\r\n case 'gml:PolygonPropertyType':\r\n case 'LinearRingPropertyType':\r\n case 'PolygonPropertyType':\r\n return TC.Consts.geom.POLYGON;\r\n case 'gml:MultiPolygonPropertyType':\r\n case 'gml:MultiSurfacePropertyType':\r\n case 'MultiPolygonPropertyType':\r\n case 'MultiSurfacePropertyType':\r\n return TC.Consts.geom.MULTIPOLYGON;\r\n case 'gml:LineStringPropertyType':\r\n case 'gml:CurvePropertyType':\r\n case 'LineStringPropertyType':\r\n case 'CurvePropertyType':\r\n return TC.Consts.geom.POLYLINE;\r\n case 'gml:MultiLineStringPropertyType':\r\n case 'gml:MultiCurvePropertyType':\r\n case 'MultiLineStringPropertyType':\r\n case 'MultiCurvePropertyType':\r\n return TC.Consts.geom.MULTIPOLYLINE;\r\n case 'gml:PointPropertyType':\r\n case 'gml:MultiPointPropertyType':\r\n case 'PointPropertyType':\r\n case 'MultiPointPropertyType':\r\n return TC.Consts.geom.POINT;\r\n case 'gml:BoxPropertyType':\r\n case 'BoxPropertyType':\r\n return TC.Consts.geom.RECTANGLE;\r\n case 'gml:GeometryCollectionPropertyType':\r\n case 'gml:GeometryAssociationType':\r\n case 'gml:GeometryPropertyType':\r\n case 'GeometryCollectionPropertyType':\r\n case 'GeometryAssociationType':\r\n case 'GeometryPropertyType':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n\r\n };\r\n\r\n ctlProto.setLayer = function (layer) {\r\n const self = this;\r\n self.modifyControl && self.modifyControl.unselectFeatures(self.getSelectedFeatures());\r\n self.layer = self.map.getLayer(layer);\r\n if (self.layer) {\r\n layer.describeFeatureType()\r\n .then(function (attributes) {\r\n const layerEditData = {\r\n attributes: {}\r\n };\r\n // recogemos los atributos no geométricos y definimos la geometría\r\n let key;\r\n for (key in attributes) {\r\n const attr = attributes[key];\r\n const geometryType = self.getGeometryType(attr.type);\r\n if (geometryType) {\r\n layerEditData.geometryName = attr.name;\r\n layerEditData.geometryType = typeof geometryType === 'boolean' ? null : geometryType;\r\n }\r\n else {\r\n layerEditData.attributes[key] = attr;\r\n }\r\n }\r\n for (key in layerEditData.attributes) {\r\n const attr = layerEditData.attributes[key];\r\n attr.type = attr.type.substr(attr.type.indexOf(':') + 1);\r\n }\r\n self.layersEditData[layer.id] = layerEditData;\r\n })\r\n .catch(function (_err) {\r\n self.layersEditData[layer.id] = {\r\n geometryType: null,\r\n attributes: {}\r\n };\r\n });\r\n }\r\n const setLayer = c => c.setLayer(self.layer);\r\n self.getModifyControl().then(setLayer);\r\n self.getPointDrawControl().then(setLayer);\r\n self.getLineDrawControl().then(setLayer);\r\n self.getPolygonDrawControl().then(setLayer);\r\n //self.getCutDrawControl().then(setLayer);\r\n self.setMode(self.layer ? TC.control.Edit.mode.MODIFY : null);\r\n setEditState(self, self.layer);\r\n };\r\n\r\n ctlProto.setMode = function (mode) {\r\n var self = this;\r\n self.mode = mode;\r\n //setFeatureSelectReadyState(self);\r\n\r\n var activateDraw = function (draw) {\r\n if (draw) {\r\n if (self.snapping) {\r\n draw.snapping = self.layer;\r\n }\r\n draw.activate();\r\n }\r\n };\r\n\r\n var active;\r\n var hiddenList;\r\n Promise.all([\r\n self._pointDrawCtlPromise,\r\n self._lineDrawCtlPromise,\r\n self._polygonDrawCtlPromise,\r\n //self._cutDrawCtlPromise,\r\n self._modifyCtlPromise\r\n ]).then(function (controls) {\r\n const pointDrawControl = controls[0];\r\n const lineDrawControl = controls[1];\r\n const polygonDrawControl = controls[2];\r\n //const cutDrawControl = controls[3];\r\n const modifyControl = controls[3];\r\n switch (mode) {\r\n case TC.control.Edit.mode.MODIFY:\r\n active = self.div.querySelector(self._classSelector + '-modify');\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-point,' + self._classSelector + '-line,' + self._classSelector + '-polygon,' + self._classSelector + '-other');\r\n modifyControl.activate();\r\n break;\r\n case TC.control.Edit.mode.ADDPOINT:\r\n active = self.div.querySelector(self._classSelector + '-point');\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-modify,' + self._classSelector + '-line,' + self._classSelector + '-polygon,' + self._classSelector + '-other');\r\n activateDraw(pointDrawControl);\r\n break;\r\n case TC.control.Edit.mode.ADDLINE:\r\n active = self.div.querySelector(self._classSelector + '-line');\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-modify,' + self._classSelector + '-point,' + self._classSelector + '-polygon,' + self._classSelector + '-other');\r\n activateDraw(lineDrawControl);\r\n break;\r\n case TC.control.Edit.mode.ADDPOLYGON:\r\n active = self.div.querySelector(self._classSelector + '-polygon');\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-modify,' + self._classSelector + '-point,' + self._classSelector + '-line,' + self._classSelector + '-other');\r\n activateDraw(polygonDrawControl);\r\n break;\r\n case TC.control.Edit.mode.OTHER:\r\n active = self.div.querySelector(self._classSelector + '-other');\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-modify,' + self._classSelector + '-point,' + self._classSelector + '-line,' + self._classSelector + '-polygon');\r\n if (controls.indexOf(self.map.activeControl) >= 0) {\r\n self.map.activeControl.deactivate();\r\n }\r\n break;\r\n default:\r\n active = null;\r\n hiddenList = self.div.querySelectorAll(self._classSelector + '-modify,' + self._classSelector + '-point,' + self._classSelector + '-line,' + self._classSelector + '-polygon,' + self._classSelector + '-other');\r\n if (controls.indexOf(self.map.activeControl) >= 0) {\r\n self.map.activeControl.deactivate();\r\n }\r\n //if (cutDrawControl.isActive) {\r\n // cutDrawControl.deactivate();\r\n //}\r\n break;\r\n }\r\n\r\n if (mode) {\r\n const radio = self.div.querySelector(`${self._selectors.MODE_RADIO_BUTTON}[value=${mode}]`);\r\n radio.checked = true;\r\n }\r\n else {\r\n self.div.querySelectorAll(self._selectors.MODE_RADIO_BUTTON).forEach(function (radio) {\r\n radio.checked = false;\r\n });\r\n }\r\n if (active) {\r\n active.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n hiddenList.forEach(function (hidden) {\r\n hidden.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.constrainModes = function (modes) {\r\n const self = this;\r\n if (!Array.isArray(modes)) {\r\n modes = [];\r\n }\r\n self.modes = modes\r\n .filter(function (m) {\r\n // Quitamos los valores que no sean modos de edición\r\n for (var key in TC.control.Edit.mode) {\r\n if (TC.control.Edit.mode[key] === m) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n })\r\n .filter(function (m) {\r\n // Quitamos los modos de edición que no se definieron en la configuración\r\n if (!Array.isArray(self.options.modes)) {\r\n return true;\r\n }\r\n return self.options.modes.indexOf(m) >= 0;\r\n });\r\n if (self.modes.indexOf(self.mode) < 0) {\r\n self.setMode(null);\r\n }\r\n const selector = self.modes.map(m => `[value=${m}]`).join() || '[value]';\r\n self.div.querySelectorAll(self._selectors.MODE_RADIO_BUTTON).forEach(function (rb) {\r\n rb.disabled = !rb.matches(selector);\r\n });\r\n };\r\n\r\n ctlProto.isFeatureAllowed = function (feature) {\r\n const self = this;\r\n switch (true) {\r\n case TC.feature.Point && feature instanceof TC.feature.Point:\r\n return self.modes.indexOf(TC.control.Edit.mode.ADDPOINT) >= 0;\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n return self.modes.indexOf(TC.control.Edit.mode.ADDLINE) >= 0;\r\n case TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline:\r\n return self.modes.indexOf(TC.control.Edit.mode.ADDLINE) >= 0 && self.isMultiple;\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n return self.modes.indexOf(TC.control.Edit.mode.ADDPOLYGON) >= 0;\r\n case TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon:\r\n return self.modes.indexOf(TC.control.Edit.mode.ADDPOLYGON) >= 0 && self.isMultiple;\r\n default:\r\n return true;\r\n }\r\n };\r\n\r\n ctlProto.setComplexGeometry = function (isMultiple) {\r\n const self = this;\r\n self.isMultiple = isMultiple;\r\n //self.getPointDrawControl().then(c => c.setMode(isMultiple ? TC.Consts.geom.MULTIPOINT : TC.Consts.geom.POINT));\r\n self.getLineDrawControl().then(c => c.setMode(isMultiple ? TC.Consts.geom.MULTIPOLYLINE : TC.Consts.geom.POLYLINE));\r\n self.getPolygonDrawControl().then(c => c.setMode(isMultiple ? TC.Consts.geom.MULTIPOLYGON : TC.Consts.geom.POLYGON));\r\n };\r\n\r\n ctlProto.getLayerEditData = function (optionalLayer) {\r\n const self = this;\r\n const layer = optionalLayer || self.layer;\r\n if (!layer) {\r\n return null;\r\n }\r\n return self.layersEditData[layer.id] = self.layersEditData[layer.id] || {\r\n checkedOut: false\r\n };\r\n };\r\n\r\n ctlProto.cancel = function () {\r\n var self = this;\r\n if (Array.isArray(self.options.modes) && self.options.modes.length == 1) {\r\n self.setMode(self.options.modes[0], null);\r\n }\r\n else {\r\n self.setMode(null, false);\r\n }\r\n self.wrap.cancel(true, self.cancelActionConfirmTxt);\r\n };\r\n\r\n ctlProto.onFeatureClick = function (e) {\r\n const self = this;\r\n if (!self.activeControl || !self.activeControl.isExclusive()) {\r\n e.feature.show();\r\n }\r\n };\r\n \r\n ctlProto.activate = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const activateCtl = function (ctl) {\r\n if (ctl !== self.map.activeControl) {\r\n self._previousActiveControl = self.map.activeControl;\r\n }\r\n };\r\n switch (options.mode) {\r\n case TC.control.Edit.mode.ADDPOINT:\r\n self.getPointDrawControl().then(activateCtl);\r\n break;\r\n case TC.control.Edit.mode.ADDLINE:\r\n self.getLineDrawControl().then(activateCtl);\r\n break;\r\n case TC.control.Edit.mode.ADDPOLYGON:\r\n self.getPolygonDrawControl().then(activateCtl);\r\n break;\r\n default:\r\n self.getModifyControl().then(activateCtl);\r\n break;\r\n }\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n const self = this;\r\n if (self._previousActiveControl) {\r\n self.map.previousActiveControl = self._previousActiveControl;\r\n switch (self.map.activeControl) {\r\n case self.pointDrawControl:\r\n self.pointDrawControl.deactivate();\r\n break;\r\n case self.lineDrawControl:\r\n self.lineDrawControl.deactivate();\r\n break;\r\n case self.polygonDrawControl:\r\n self.polygonDrawControl.deactivate();\r\n break;\r\n case self.modifyControl:\r\n self.modifyControl.deactivate();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n self.modifyControl && self.modifyControl.closeAttributes();\r\n };\r\n\r\n ctlProto.isExclusive = function () {\r\n return true;\r\n };\r\n\r\n ctlProto.getAttributeDisplayTarget = function () {\r\n return this.modifyControl._attributesSection;\r\n };\r\n\r\n //ctlProto.joinFeatures = function (features) {\r\n // var self = this;\r\n // if (self.geometryType === TC.Consts.geom.MULTIPOLYLINE ||\r\n // self.geometryType === TC.Consts.geom.MULTIPOLYGON ||\r\n // self.geometryType === TC.Consts.geom.MULTIPOINT) {\r\n // self._joinedFeatureAttributes = [];\r\n // if (features.length > 1) {\r\n // var geometries = features.map(function (elm) {\r\n // self._joinedFeatureAttributes.push(elm.getData());\r\n // return elm.geometry;\r\n // });\r\n // var newGeometry = geometries.reduce(function (a, b) {\r\n // return a.concat(b);\r\n // });\r\n // var newFeature = new features[0].constructor(newGeometry);\r\n // for (var i = 0, len = features.length; i < len; i++) {\r\n // var feature = features[i];\r\n // self.layer.removeFeature(feature);\r\n // self.trigger(TC.Consts.event.FEATUREREMOVE, { feature: feature });\r\n // }\r\n // self.layer.addFeature(newFeature).then(function (feat) {\r\n // self.setSelectedFeatures([newFeature]);\r\n // self.trigger(TC.Consts.event.FEATUREADD, { feature: feat });\r\n // feat.showPopup(self.attributeEditor);\r\n // });\r\n // }\r\n // setFeatureSelectedState(self, [newFeature]);\r\n // }\r\n //};\r\n\r\n //ctlProto.splitFeatures = function (features) {\r\n // var self = this;\r\n // var complexFeatures = features.filter(complexGeometryFilter);\r\n // var geometries = complexFeatures.map(function (elm) {\r\n // return elm.geometry;\r\n // });\r\n // var newFeatures = [];\r\n // for (var i = 0, ii = complexFeatures.length; i < ii; i++) {\r\n // var feature = complexFeatures[i];\r\n // var data = feature.getData();\r\n // var geometry = geometries[i];\r\n // for (var j = 0, jj = geometry.length; j < jj; j++) {\r\n // newFeatures.push(new feature.constructor([geometry[j]], { data: data }));\r\n // }\r\n // }\r\n // for (var i = 0, len = complexFeatures.length; i < len; i++) {\r\n // var feature = complexFeatures[i];\r\n // self.layer.removeFeature(feature);\r\n // self.trigger(TC.Consts.event.FEATUREREMOVE, { feature: feature });\r\n // }\r\n // var newFeatPromises = new Array(newFeatures.length);\r\n // for (var i = 0, len = newFeatures.length; i < len; i++) {\r\n // const promise = newFeatPromises[i] = self.layer.addFeature(newFeatures[i]);\r\n // promise.then(function (feat) {\r\n // self.trigger(TC.Consts.event.FEATUREADD, { feature: feat });\r\n // });\r\n // }\r\n // Promise.all(newFeatPromises).then(function() {\r\n // self.setSelectedFeatures(newFeatures);\r\n // });\r\n // setFeatureSelectedState(self, newFeatures);\r\n //};\r\n\r\n //ctlProto.deleteFeatures = function (features) {\r\n // var self = this;\r\n // self.wrap.deleteFeatures(features);\r\n // if (self.layer.features.length === 0) {\r\n // self._deleteBtn.disabled = true;\r\n // }\r\n //};\r\n\r\n ctlProto.getSelectedFeatures = function () {\r\n return this.modifyControl.getSelectedFeatures();\r\n };\r\n\r\n ctlProto.setSelectedFeatures = function (features) {\r\n return this.modifyControl.setSelectedFeatures(features);\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n var self = this;\r\n return self.layer;\r\n };\r\n\r\n ctlProto.getModifyControl = function () {\r\n const self = this;\r\n return self._modifyCtlPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.modifyControl));\r\n });\r\n };\r\n\r\n ctlProto.getPointDrawControl = function () {\r\n const self = this;\r\n return self._pointDrawCtlPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.pointDrawControl));\r\n });\r\n };\r\n\r\n ctlProto.getLineDrawControl = function () {\r\n const self = this;\r\n return self._lineDrawCtlPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.lineDrawControl));\r\n });\r\n };\r\n\r\n ctlProto.getPolygonDrawControl = function () {\r\n const self = this;\r\n return self._polygonDrawCtlPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.polygonDrawControl));\r\n });\r\n };\r\n\r\n //ctlProto.getCutDrawControl = function () {\r\n // const self = this;\r\n // return self._cutDrawCtlPromise || new Promise(function (resolve, reject) {\r\n // self.renderPromise().then(() => resolve(self.cutDrawControl));\r\n // });\r\n //};\r\n\r\n ctlProto.getFeatureImportPanel = function () {\r\n const self = this;\r\n if (!self._featureImportPanelPromise) {\r\n self._featureImportPanelPromise = self.map.addControl('resultsPanel', {\r\n titles: {\r\n main: self.getLocaleString('importFromOtherLayer')\r\n }\r\n });\r\n self._featureImportPanelPromise.then(panel => self.featureImportPanel = panel);\r\n }\r\n return self._featureImportPanelPromise;\r\n };\r\n\r\n ctlProto.getHighlightsLayer = function () {\r\n const self = this;\r\n if (!self._highlightsLayerPromise) {\r\n self._highlightsLayerPromise = self.map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n title: 'Highlights Layer',\r\n stealth: true,\r\n styles: self.map.options.styles.selection || TC.Cfg.styles.selection\r\n });\r\n self._highlightsLayerPromise.then(layer => self.highlightsLayer = layer);\r\n }\r\n return self._highlightsLayerPromise;\r\n };\r\n\r\n ctlProto.highlightFeatures = function (features) {\r\n const self = this;\r\n self.getHighlightsLayer().then(function (layer) {\r\n const featuresToHighlight = self.featuresToImport.concat(features);\r\n layer.features.slice().forEach(function (feature) {\r\n if (!feature.original || featuresToHighlight.indexOf(feature.original) < 0) {\r\n layer.removeFeature(feature);\r\n }\r\n });\r\n layer.addFeatures(featuresToHighlight\r\n .filter(function (feature) {\r\n return !layer.features.some(function (f) {\r\n return f.original && f.original === feature;\r\n });\r\n })\r\n .map(function (feature) {\r\n const newFeature = feature.clone();\r\n newFeature.toggleSelectedStyle(true);\r\n newFeature.original = feature;\r\n return newFeature;\r\n }));\r\n });\r\n };\r\n\r\n ctlProto.getAvailableFeaturesToImport = function () {\r\n const self = this;\r\n return self.map.workLayers\r\n .filter(l => !l.isRaster())\r\n .filter(l => l !== self.layer)\r\n .filter(l => l !== self.highlightsLayer)\r\n .map(function (l) {\r\n return {\r\n id: l.id,\r\n title: l.title,\r\n features: l.features.filter(function (f) {\r\n return self.isFeatureAllowed(f);\r\n })\r\n };\r\n })\r\n .filter(l => l.features.length);\r\n };\r\n\r\n ctlProto.getFeatureFromImportList = function (elm) {\r\n const self = this;\r\n const cb = elm.querySelector('input');\r\n const layer = self.map.getLayer(elm.parentElement.parentElement.dataset.layerId);\r\n if (layer) {\r\n return layer.getFeatureById(cb.value);\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importFeatures = function (features) {\r\n const self = this;\r\n let failure = false;\r\n const layerEditData = self.getLayerEditData();\r\n const featuresToImport = (features || self.featuresToImport || [])\r\n .filter(f => {\r\n const result = self.isFeatureAllowed(f);\r\n if (!result) {\r\n failure = true;\r\n }\r\n return result;\r\n });\r\n featuresToImport.map(function (feature) {\r\n let newFeature;\r\n const featureOptions = {\r\n data: feature.data,\r\n geometryName: layerEditData.geometryName\r\n };\r\n if (self.isMultiple) {\r\n switch (true) {\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n newFeature = new TC.feature.MultiPolygon([feature.geometry], featureOptions);\r\n break;\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n newFeature = new TC.feature.MultiPolyline([feature.geometry], featureOptions);\r\n break;\r\n default:\r\n newFeature = feature.clone();\r\n break;\r\n }\r\n }\r\n else {\r\n switch (true) {\r\n case TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon:\r\n newFeature = new TC.feature.Polygon(feature.geometry[0], featureOptions);\r\n break;\r\n case TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline:\r\n newFeature = new TC.feature.Polyline(feature.geometry[0], featureOptions);\r\n break;\r\n default:\r\n newFeature = feature.clone();\r\n break;\r\n }\r\n }\r\n newFeature.setStyle(null);\r\n return newFeature;\r\n }).forEach(function (feature) {\r\n self.layer.addFeature(feature);\r\n self.trigger(TC.Consts.event.FEATUREADD, { feature: feature, layer: self.layer });\r\n });\r\n \r\n if (failure) {\r\n self.map.toast(self.getLocaleString('importFromOtherLayer.warning'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n };\r\n\r\n const handleCheck = function (ctl, checkbox) {\r\n const feature = ctl.getFeatureFromImportList(checkbox.parentElement);\r\n if (checkbox.checked) {\r\n ctl.featuresToImport.push(feature);\r\n }\r\n else {\r\n const idx = ctl.featuresToImport.indexOf(feature);\r\n if (idx >= 0) {\r\n ctl.featuresToImport.splice(idx, 1);\r\n }\r\n }\r\n };\r\n\r\n ctlProto._addImportLayerEvents = function (li) {\r\n const self = this;\r\n \r\n li.querySelector('input').addEventListener('change', function (_e) {\r\n const cb = this;\r\n cb.parentElement.querySelectorAll('li.tc-feature input').forEach(function (ccb) {\r\n if (ccb.checked !== cb.checked) {\r\n ccb.checked = cb.checked;\r\n handleCheck(self, ccb);\r\n }\r\n });\r\n self.highlightFeatures([]);\r\n });\r\n\r\n li.querySelectorAll('li.tc-feature').forEach(function (elm) {\r\n self._addImportFeatureEvents(elm);\r\n });\r\n };\r\n\r\n ctlProto._addImportFeatureEvents = function (li) {\r\n const self = this;\r\n const highlightListener = function (_e) {\r\n const feature = self.getFeatureFromImportList(this);\r\n if (feature) {\r\n self.highlightFeatures([feature]);\r\n }\r\n };\r\n li.addEventListener(TC.Consts.event.CLICK, highlightListener, { passive: true });\r\n li.addEventListener('mouseover', highlightListener);\r\n li.querySelector('input').addEventListener('change', function (_e) {\r\n handleCheck(self, this);\r\n });\r\n };\r\n\r\n ctlProto.showFeatureImportPanel = function () {\r\n const self = this;\r\n\r\n self.featuresToImport = [];\r\n\r\n self.getFeatureImportPanel().then(function (panel) {\r\n const container = panel.getInfoContainer();\r\n self.getRenderedHtml(self.CLASS + '-import', { layers: self.getAvailableFeaturesToImport() }, function (html) {\r\n panel.open(html, container);\r\n container.querySelector('ul').addEventListener('mouseout', function (_e) {\r\n self.highlightFeatures([]);\r\n });\r\n container.querySelectorAll('li.tc-layer').forEach(function (elm) {\r\n self._addImportLayerEvents(elm);\r\n });\r\n container.querySelector(`.${self.CLASS}-import-btn-ok`).addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.importFeatures();\r\n self.featureImportPanel.close();\r\n }, { passive: true });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.displayLayerToImport = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self.featureImportPanel && !self.featureImportPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n const container = self.featureImportPanel.getInfoContainer();\r\n const list = container.querySelector(`.${self.CLASS}-import-list .tc-layers`);\r\n const layerElementSelector = `li[data-layer-id=\"${layer.id}\"]`;\r\n const li = list.querySelector(layerElementSelector);\r\n if (li) {\r\n layer.features.forEach(function (feature) {\r\n if (self.isFeatureAllowed(feature)) {\r\n self.getRenderedHtml(self.CLASS + '-import-feature', layer, function (html) {\r\n li.insertAdjacentHTML('beforeend', html);\r\n self._addImportFeatureEvents(li.querySelector('li:last-child'));\r\n });\r\n }\r\n });\r\n resolve(li);\r\n }\r\n else {\r\n self.getRenderedHtml(self.CLASS + '-import-layer', { id: layer.id, title: layer.title, features: layer.features }, function (html) {\r\n list.insertAdjacentHTML('beforeend', html);\r\n const newLi = list.querySelector(layerElementSelector);\r\n self._addImportLayerEvents(newLi);\r\n resolve(newLi);\r\n });\r\n }\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst Edit = TC.control.Edit;\r\nexport default Edit;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.Control = Control;\r\n\r\nTC.control.Elevation = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.displayElevation = true;\r\n self.resultsPanel = null;\r\n};\r\n\r\nTC.inherit(TC.control.Elevation, TC.Control);\r\n\r\n(function () {\r\n const ctlProto = TC.control.Elevation.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-elev';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
        \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-val'] = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":14},\"end\":{\"line\":3,\"column\":28}}})) + \" (\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"original\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":30},\"end\":{\"line\":3,\"column\":49}}})) + \")\\r\\n \" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"originalValue\") : depth0), depth0)) + \" m\\r\\n\\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"originalValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":14},\"end\":{\"line\":9,\"column\":101}}})) != null ? stack1 : \"\") + \"\\r\\n \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"elevationValue\") : depth0), depth0)) + \" m\\r\\n\\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":35},\"end\":{\"line\":9,\"column\":49}}})) + \" (\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"mdt\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":51},\"end\":{\"line\":9,\"column\":65}}})) + \")\";},\"6\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"elevation\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":74},\"end\":{\"line\":9,\"column\":94}}}));},\"8\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"heightOverTerrain\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":15,\"column\":14},\"end\":{\"line\":15,\"column\":42}}})) + \"\\r\\n \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"heightValue\") : depth0), depth0)) + \" m\\r\\n\\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"originalValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":7}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"elevationValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"heightValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":0},\"end\":{\"line\":18,\"column\":7}}})) != null ? stack1 : \"\");},\"useData\":true}\r\n\r\n const pointElevationCache = new WeakMap();\r\n const elevationProfileCache = new Map();\r\n\r\n const getElevationProfileFromCache = function (feature) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n return elevationProfileCache.get(coords.toString());\r\n }\r\n return null;\r\n }\r\n };\r\n\r\n const cacheElevationProfile = function (feature, data) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n elevationProfileCache.set(coords.toString(), data);\r\n }\r\n }\r\n };\r\n\r\n const removeElevationProfileFromCache = function (feature) {\r\n if (feature) {\r\n const coords = feature.getCoords();\r\n if (coords) {\r\n elevationProfileCache.delete(coords.toString());\r\n }\r\n }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n TC.Control.prototype.register.call(self, map).then(function () {\r\n\r\n map\r\n .on(TC.Consts.event.FEATUREMODIFY + ' ' + TC.Consts.event.FEATUREREMOVE, function (e) {\r\n removeElevationProfileFromCache(e.feature);\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n removeElevationProfileFromCache(e.feature);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n e.layer.features && e.layer.features.forEach(feat => removeElevationProfileFromCache(feat));\r\n })\r\n .on(TC.Consts.event.POPUP + ' ' + TC.Consts.event.DRAWTABLE, function (e) {\r\n // Añadimos datos de elevación si se han añadido previamente\r\n if (pointElevationCache.has(e.control.currentFeature)) {\r\n self.displayElevationValue(e.control.currentFeature);\r\n }\r\n });\r\n\r\n resolve(self);\r\n\r\n }).catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getElevationTool = function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n const proxyObj = {\r\n options: {\r\n displayElevation: self.options || true\r\n },\r\n elevation: self.elevation,\r\n map: self.map\r\n };\r\n TC.Control.prototype.getElevationTool.call(proxyObj).then(ctl => {\r\n self.elevation = ctl;\r\n resolve(ctl);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.setElevationToolOptions = function (options) {\r\n const self = this;\r\n TC.Util.extend(self.options, options); \r\n if (self.elevation) {\r\n TC.Util.extend(self.elevation.options, self.options);\r\n }\r\n };\r\n\r\n ctlProto.displayElevationValue = async function (feature, options) {\r\n const self = this;\r\n options = options || {};\r\n if (feature instanceof TC.feature.Point) {\r\n let elevationValues;\r\n if (options.ignoreCache) {\r\n pointElevationCache.delete(feature);\r\n }\r\n else {\r\n elevationValues = pointElevationCache.get(feature);\r\n }\r\n if (!elevationValues) {\r\n const tool = await self.getElevationTool();\r\n const elevation = await tool.getElevation({\r\n crs: self.map.crs,\r\n coordinates: [feature.geometry]\r\n });\r\n if (elevation.length) {\r\n const point = elevation[0];\r\n const tValue = point[2];\r\n const sValue = point.length > 3 ? point[3] : null;\r\n elevationValues = {\r\n elevation: tValue,\r\n height: sValue\r\n };\r\n pointElevationCache.set(feature, elevationValues);\r\n }\r\n }\r\n if (elevationValues) {\r\n const targets = [];\r\n let target;\r\n const locale = self.map.options.locale || TC.Cfg.locale;\r\n const displayControls = self.map.getControlsByClass('TC.control.Popup')\r\n .concat(self.map.getControlsByClass('TC.control.ResultsPanel'));\r\n displayControls\r\n .filter(ctl => ctl.caller && ctl.caller.highlightedFeature === feature)\r\n .forEach(function addElevElmToGfiCtl(ctl) {\r\n const featElm = ctl.caller.getFeatureElement(feature);\r\n if (featElm) {\r\n target = featElm.querySelector('tbody');\r\n targets.push(target);\r\n }\r\n });\r\n displayControls\r\n .filter(ctl => ctl.currentFeature === feature)\r\n .forEach(function addElevElmToCtl(ctl) {\r\n let container;\r\n switch (true) {\r\n case TC.control.Popup && ctl instanceof TC.control.Popup:\r\n container = ctl.getContainerElement();\r\n break;\r\n case TC.control.ResultsPanel && ctl instanceof TC.control.ResultsPanel:\r\n container = ctl.getInfoContainer();\r\n break;\r\n default:\r\n break;\r\n }\r\n if (container) {\r\n target = container.querySelector('tbody');\r\n targets.push(target);\r\n }\r\n });\r\n\r\n const renderOptions = {\r\n originalValue: feature.geometry[2] ? TC.Util.formatNumber(Math.round(feature.geometry[2]), locale) : '',\r\n elevationValue: elevationValues.elevation !== null ? TC.Util.formatNumber(Math.round(elevationValues.elevation), locale) : '',\r\n heightValue: elevationValues.height ? elevationValues.height.toLocaleString(locale, { maximumFractionDigits: 1 }) : ''\r\n };\r\n targets.forEach(function addElevElmToTarget(target) {\r\n self.getRenderedHtml(self.CLASS + '-val', renderOptions, function (html) {\r\n target.querySelectorAll(`tr[class|=${self.CLASS}-pair]`).forEach(elm => elm.remove());\r\n target.insertAdjacentHTML('beforeend', html);\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.displayElevationProfile = function (featureOrCoords, opts) {\r\n const self = this;\r\n const options = opts || {};\r\n let coords;\r\n switch (true) {\r\n case TC.feature.Polyline && featureOrCoords instanceof TC.feature.Polyline:\r\n coords = featureOrCoords.geometry;\r\n break;\r\n case TC.feature.MultiPolyline && featureOrCoords instanceof TC.feature.MultiPolyline:\r\n coords = featureOrCoords.geometry[0];\r\n break;\r\n case featureOrCoords instanceof TC.Feature:\r\n return;\r\n default:\r\n coords = featureOrCoords;\r\n }\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.open();\r\n });\r\n const renderProfile = function (profile) {\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.renderPromise().then(function () {\r\n self.renderElevationProfile(profile);\r\n });\r\n });\r\n };\r\n if (featureOrCoords instanceof TC.Feature) {\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.setCurrentFeature(featureOrCoords);\r\n });\r\n const profile = getElevationProfileFromCache(featureOrCoords);\r\n if (profile) {\r\n renderProfile(profile);\r\n return;\r\n }\r\n }\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n const render = function (elevCoords, options) {\r\n let distance = 0.0;\r\n let maxElevation = Number.NEGATIVE_INFINITY;\r\n let minElevation = Number.POSITIVE_INFINITY;\r\n if (self.map.crs !== self.map.options.utmCrs) {\r\n elevCoords = TC.Util.reproject(elevCoords, self.map.crs, self.map.options.utmCrs);\r\n }\r\n const profile = elevCoords\r\n .map(function calculateDistanceAndExtremes(point, idx, arr) {\r\n let prev = idx === 0 ? point : arr[idx - 1];\r\n const dx = point[0] - prev[0];\r\n const dy = point[1] - prev[1];\r\n distance += Math.sqrt(dx * dx + dy * dy);\r\n var ele = point[2] || 0;\r\n if (typeof ele === 'number') {\r\n maxElevation = Math.max(ele, maxElevation);\r\n minElevation = Math.min(ele, minElevation);\r\n }\r\n return [distance, ele];\r\n });\r\n if (profile.length === 1) {\r\n // Espera una línea, duplicamos el punto para que no se rompa el renderizado del gráfico\r\n profile.push(profile[0]);\r\n }\r\n let elevationData = {\r\n x: profile.map(function (elm) {\r\n return elm[0];\r\n }),\r\n ele: profile.map(function (elm) {\r\n return elm[1] || 0;\r\n }),\r\n coords: elevCoords,\r\n min: minElevation,\r\n max: maxElevation\r\n };\r\n\r\n const elevationGainOptions = {\r\n coords: elevCoords\r\n };\r\n if (typeof self.options === 'object' && self.map.options.elevation) {\r\n elevationGainOptions.hillDeltaThreshold = self.options.hillDeltaThreshold || self.map.options.elevation.hillDeltaThreshold;\r\n }\r\n if (minElevation === 0 && maxElevation === 0 && options.onlyOriginalElevation) {\r\n elevationData = {\r\n msg: self.getLocaleString(\"geo.trk.chart.chpe.empty\")\r\n };\r\n }\r\n TC.Util.extend(elevationData, TC.tool.Elevation.getElevationGain(elevationGainOptions), options);\r\n\r\n if (options.isSecondary && self.elevationProfileChartData) {\r\n if (!self.elevationProfileChartData.secondaryElevationProfileChartData) {\r\n self.elevationProfileChartData.showLegend = true;\r\n self.elevationProfileChartData.secondaryElevationProfileChartData = [];\r\n self.elevationProfileChartData.secondaryElevationProfileChartData.push(elevationData);\r\n } else {\r\n self.elevationProfileChartData.secondaryElevationProfileChartData[0] = elevationData;\r\n }\r\n }\r\n\r\n // Cacheamos el perfil\r\n if (featureOrCoords instanceof TC.Feature && !options.ignoreCaching) {\r\n cacheElevationProfile(featureOrCoords, elevationData);\r\n }\r\n\r\n renderProfile(elevationData);\r\n };\r\n \r\n self.getElevationTool().then(function (tool) {\r\n if (options.originalElevation) {\r\n render(coords, options);\r\n }\r\n if (options.onlyOriginalElevation) {\r\n li && li.removeWait(waitId);\r\n return;\r\n }\r\n\r\n const timestamp = Date.now();\r\n self._depTimestamp = timestamp;\r\n const elevationOptions = {\r\n crs: self.map.crs,\r\n coordinates: coords,\r\n partialCallback: function (elevCoords) {\r\n if (timestamp === self._depTimestamp) { // Evitamos que una petición anterior machaque una posterior\r\n render(elevCoords, { isSecondary: Object.keys(options).length === 0 ? false : true, ignoreCaching: options.ignoreCaching });\r\n }\r\n }\r\n };\r\n if (Object.prototype.hasOwnProperty.call(tool.options, \"resolution\")) {\r\n elevationOptions.resolution = tool.options.resolution;\r\n }\r\n if (Object.prototype.hasOwnProperty.call(tool.options, \"sampleNumber\") && tool.options.sampleNumber !== 0) {\r\n elevationOptions.resolution = 0;\r\n }\r\n tool.getElevation(elevationOptions)\r\n .then(function () {\r\n if (options.callback && TC.Util.isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n li && li.removeWait(waitId);\r\n })\r\n .catch(function (_error) {\r\n self.resetElevationProfile();\r\n li && li.removeWait(waitId);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.createProfilePanel = function () {\r\n const self = this;\r\n\r\n const resultsPanelOptions = {\r\n id: self.getUID(),\r\n content: \"chart\",\r\n titles: {\r\n main: self.getLocaleString(\"geo.trk.chart.chpe\"),\r\n max: self.getLocaleString(\"geo.trk.chart.chpe\")\r\n },\r\n chart: {\r\n ctx: self,\r\n onmouseout: ctlProto.removeElevationTooltip,\r\n tooltip: ctlProto.getElevationTooltip\r\n }\r\n };\r\n\r\n return new Promise(function (resolve, _reject) {\r\n var addControlPromise;\r\n const addResultsPanelChart = function (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n addControlPromise = controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n };\r\n\r\n if (self.options.displayOn) {\r\n var controlContainer = self.map.getControlsByClass('TC.control.' + self.options.displayOn[0].toUpperCase() + self.options.displayOn.substring(1))[0];\r\n if (!controlContainer) {\r\n self.map.addControl(self.options.displayOn).then(addResultsPanelChart);\r\n } else {\r\n addResultsPanelChart(controlContainer);\r\n }\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n addControlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n addControlPromise.then(function (resultsPanel) {\r\n resultsPanel.caller = self;\r\n self.resultsPanel = resultsPanel;\r\n self._decorateChartPanel();\r\n resolve(resultsPanel);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getProfilePanel = async function () {\r\n const self = this;\r\n if (!self._resultsPanelPromise) {\r\n self._resultsPanelPromise = self.createProfilePanel();\r\n }\r\n return await self._resultsPanelPromise;\r\n };\r\n\r\n ctlProto.resetElevationProfile = function () {\r\n const self = this;\r\n if (self.options.displayElevation && self.resultsPanel) {\r\n self.elevationProfileChartData = {\r\n x: [0],\r\n ele: [0],\r\n coords: [0, 0, 0],\r\n upHill: 0,\r\n downHill: 0\r\n };\r\n self.resultsPanel.openChart(self.elevationProfileChartData);\r\n }\r\n };\r\n\r\n ctlProto.renderElevationProfile = function (profileData) {\r\n const self = this;\r\n if (!profileData.isSecondary) {\r\n self.elevationProfileChartData = profileData || self.elevationProfileChartData;\r\n }\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n if (!resultsPanel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n if (profileData.isSecondary) {\r\n resultsPanel.loadDataOnChart(self.elevationProfileChartData);\r\n } else {\r\n resultsPanel.openChart(self.elevationProfileChartData);\r\n }\r\n if (!resultsPanel.isMinimized()) {\r\n resultsPanel.doVisible();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.closeElevationProfile = function () {\r\n const self = this;\r\n self.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.close();\r\n });\r\n };\r\n\r\n ctlProto._decorateChartPanel = function () {\r\n const self = this;\r\n self.resultsPanel.setCurrentFeature = function (feature) {\r\n const that = this;\r\n if (that.currentFeature) {\r\n that.currentFeature.toggleSelectedStyle(false);\r\n }\r\n that.currentFeature = feature;\r\n if (feature) {\r\n feature.toggleSelectedStyle(true);\r\n }\r\n };\r\n\r\n const oldClose = self.resultsPanel.close;\r\n self.resultsPanel.close = function () {\r\n const that = this;\r\n if (that.currentFeature) {\r\n that.currentFeature.toggleSelectedStyle(false);\r\n }\r\n oldClose.call(that);\r\n };\r\n };\r\n\r\n ctlProto.getElevationTooltip = function (d) {\r\n const self = this;\r\n self.resultsPanel.wrap.showElevationMarker({\r\n data: d,\r\n layer: self.resultsPanel.currentFeature && self.resultsPanel.currentFeature.layer,\r\n coords: self.elevationProfileChartData.coords\r\n });\r\n\r\n return self.resultsPanel.getElevationChartTooltip(d);\r\n };\r\n\r\n ctlProto.removeElevationTooltip = function () {\r\n const self = this;\r\n if (self.resultsPanel) {\r\n if (self.resultsPanel.chart && self.resultsPanel.chart.chart) {\r\n self.resultsPanel.chart.chart.tooltip.hide();\r\n }\r\n self.resultsPanel.wrap.hideElevationMarker();\r\n }\r\n };\r\n})();\r\n\r\nconst Elevation = TC.control.Elevation;\r\nexport default Elevation;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.Control = Control;\r\n\r\nTC.control.ExternalWMS = function (options) {\r\n const self = this;\r\n self.count = 0;\r\n self._addedUrls = [];\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.allowReprojection = self.options.hasOwnProperty('allowReprojection') ? self.options.allowReprojection : true;\r\n};\r\n\r\nTC.inherit(TC.control.ExternalWMS, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.ExternalWMS.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-xwms';\r\n\r\n /*\r\n * Marca como seleccionadas aquellas opciones del desplegable correspondientes a servicios WMS ya añadidos al TOC.\r\n */\r\n ctlProto.markServicesAsSelected = function (options) {\r\n if (options.length > 0) {\r\n const selectedOption = options[0];\r\n selectedOption.disabled = true;\r\n selectedOption.classList.add('tc-ctl-xwms-option-selected');\r\n }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('select', function (evt) {\r\n if (evt.target.value !== '') {\r\n var url = evt.target.value;\r\n if (url.indexOf('//') === 0) {\r\n url = location.protocol + url;\r\n }\r\n self.div.querySelector('input').value = url;\r\n evt.target.value = '';\r\n }\r\n }));\r\n\r\n /*\r\n * Borra parámetros no necesarios de la URL del servicio WMS.\r\n */\r\n var _removeParamsFromUrl = function (url, unwantedParams) {\r\n for (var i = 0; i < unwantedParams.length; i++) {\r\n url = TC.Util.removeURLParameter(url, unwantedParams[i]);\r\n }\r\n if (url.match(/\\?$/)) {\r\n url = url.substr(0, url.length - 1);\r\n }\r\n return url;\r\n };\r\n\r\n const addWMS = function () {\r\n var url = self.div.querySelector('input').value.trim();\r\n\r\n if (!url) {\r\n TC.alert(self.getLocaleString('typeAnAddress'));\r\n }\r\n else if (!/^((https?|ftp):)?(\\/\\/)?(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(url)) {\r\n TC.alert(self.getLocaleString('typeAValidAddress'));\r\n }\r\n else {\r\n if (self._addedUrls.some(function (addedUrl) {\r\n return addedUrl.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '');\r\n })) {\r\n TC.alert(self.getLocaleString('serviceAlreadyAdded'));\r\n }\r\n else {\r\n var loadingCtrl = self.map.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n loadingCtrl.show();\r\n var params = TC.Util.getQueryStringParams(url);\r\n\r\n if (!/https?:\\/\\/|\\/\\//i.test(url)) {\r\n url = \"//\" + url;\r\n }\r\n\r\n //Extraemos sólo los parámetros adicionales\r\n var unwantedParams = [\"version\", \"service\", \"request\"];\r\n var urlWithoutParams = _removeParamsFromUrl(url, Object.keys(params));\r\n\r\n for (var item in params) {\r\n if (unwantedParams.indexOf(item.toLowerCase()) >= 0) {\r\n delete params[item];\r\n }\r\n }\r\n\r\n const addButton = self.div.querySelector('button');\r\n addButton.setAttribute('type', 'button');\r\n addButton.disabled = true;\r\n\r\n var obj = {\r\n id: 'xwms' + (++self.count),\r\n //\"title\": \"Servicio externo\",\r\n type: 'WMS',\r\n url: urlWithoutParams,\r\n hideTree: false,\r\n queryParams: params\r\n };\r\n //URI: recorremos las opciones buscando el servicio que se va a agregar a ver si tiene parametro layerNames\r\n for (var i = 0; i < self.options.suggestions.length; i++) {\r\n var _current = self.options.suggestions[i].items.filter(item => item.url === url);\r\n if (_current.length > 0 && _current[0].layerNames) {\r\n obj.layerNames = _current[0].layerNames;\r\n break;\r\n }\r\n }\r\n\r\n var layer = new TC.layer.Raster(obj);\r\n layer.getCapabilitiesPromise().then(function (cap) {\r\n if (typeof cap.Capability === 'undefined') {\r\n TC.alert(self.getLocaleString('noLayersFoundInService'));\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n return;\r\n } else {\r\n var root = cap.Capability.Layer;\r\n if (root.CRS && root.CRS.indexOf(self.map.crs) === -1 && !self.allowReprojection) {\r\n //no soportado. avisar y fallar\r\n TC.alert(self.getLocaleString('serviceSrsNotCompatible'));\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n return;\r\n }\r\n\r\n self.map.trigger(TC.Consts.event.EXTERNALSERVICEADDED, { layer: layer });\r\n self.div.querySelector('input').value = '';\r\n\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (option.value.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '')) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n self.markServicesAsSelected(selectedOptions);\r\n self._addedUrls.push(url);\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n }\r\n },\r\n function (error) {\r\n TC.alert(self.getLocaleString('serviceCouldNotBeLoaded') + \":\\n\" + error);\r\n loadingCtrl.hide();\r\n addButton.disabled = false;\r\n });\r\n }\r\n }\r\n };\r\n\r\n self.renderPromise().then(() => {\r\n self.div.querySelector('input').addEventListener('keyup', (e) => {\r\n if (e.key && e.key.toLowerCase() === \"enter\" && self.div.querySelector('input').value.trim().length > 0) {\r\n addWMS();\r\n }\r\n });\r\n }); \r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('button[name=\"agregar\"]', addWMS));\r\n\r\n map.on(TC.Consts.event.LAYERADD, function (e) {\r\n const layer = e.layer;\r\n if (layer && !layer.isBase) {\r\n var url = layer.url;\r\n\r\n if (url) {\r\n self.pending_markServicesAsSelected = self.pending_markServicesAsSelected || [];\r\n if (self.div.querySelectorAll('select option').length === 0 && url && self.pending_markServicesAsSelected.indexOf(url) === -1) {\r\n self.pending_markServicesAsSelected.push(url);\r\n }\r\n\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (option.value.replace(/https?:\\/\\/|\\/\\//, '') === url.replace(/https?:\\/\\/|\\/\\//, '')) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n self.markServicesAsSelected(selectedOptions);\r\n self._addedUrls.push(url);\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"addMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":17},\"end\":{\"line\":1,\"column\":35}}})) + \"

        \";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"group\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":7},\"end\":{\"line\":9,\"column\":14}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"items\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":16},\"end\":{\"line\":12,\"column\":25}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"group\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":7},\"end\":{\"line\":15,\"column\":14}}})) != null ? stack1 : \"\");},\"4\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"8\":function(container,depth0,helpers,partials,data) { return \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"title\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":1,\"column\":47}}})) != null ? stack1 : \"\") + \"\\r\\n
        \\r\\n
        \\r\\n \\r\\n \\r\\n
        \\r\\n\\r\\n\\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(self.options, function () {\r\n self.pending_markServicesAsSelected = self.pending_markServicesAsSelected || [];\r\n\r\n self.pending_markServicesAsSelected.forEach(function (elemUrl) {\r\n const selectedOptions = [];\r\n self.div.querySelectorAll('select option').forEach(function (option) {\r\n if (TC.Util.addProtocol(option.value) === TC.Util.addProtocol(elemUrl)) {\r\n selectedOptions.push(option);\r\n }\r\n });\r\n\r\n self.markServicesAsSelected(selectedOptions);\r\n self._addedUrls.push(elemUrl);\r\n });\r\n\r\n self.pending_markServicesAsSelected = [];\r\n }));\r\n };\r\n\r\n\r\n})();\r\n\r\nconst ExternalWMS = TC.control.ExternalWMS;\r\nexport default ExternalWMS;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.Control = Control;\r\n\r\nTC.control.FeatureDownloadDialog = function () {\r\n var self = this;\r\n TC.Control.apply(self, arguments);\r\n self.title = self.options.title;\r\n self.cssClass = self.options.cssClass || \"\";\r\n\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: \".\" + self.CLASS + '-elev input[type=checkbox]',\r\n INTERPOLATION_PANEL: \".\" + self.CLASS + '-ip',\r\n INTERPOLATION_RADIO: `input[type=radio][name=${self.id}-finfo-ip-coords]`,\r\n INTERPOLATION_DISTANCE: \".\" + self.CLASS + '-ip-m'\r\n };\r\n self.features = [];\r\n self.options = {};\r\n};\r\n\r\nTC.inherit(TC.control.FeatureDownloadDialog, TC.Control);\r\n\r\n(function () {\r\n\r\n const ctlProto = TC.control.FeatureDownloadDialog.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-dldlog';\r\n\r\n var _formats = [\"KMZ\",/*\"KML\",*/ \"GML\", \"GeoJSON\", \"WKT\", \"GPX\", \"SHP\", \"GPKG\"];\r\n\r\n var displayElevation, interpolation = false;\r\n var interpolationDistance = null;\r\n\r\n ctlProto.template = {};\r\n\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,\"elevation\") : depth0)) != null ? lookupProperty(stack1,\"resolution\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":12},\"end\":{\"line\":29,\"column\":19}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { return \"checked\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"interpolateCoordsFromElevProfile\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":20},\"end\":{\"line\":18,\"column\":63}}})) + \"

        \\r\\n \\r\\n \\r\\n
        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"interpolateEveryXMeters.1\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":58},\"end\":{\"line\":27,\"column\":94}}})) + \"\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"interpolateEveryXMeters.2\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":186},\"end\":{\"line\":27,\"column\":222}}})) + \"
        \\r\\n
        \\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"KML\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":26},\"end\":{\"line\":34,\"column\":41}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":20},\"end\":{\"line\":50,\"column\":28}}})) != null ? stack1 : \"\");},\"7\":function(container,depth0,helpers,partials,data) { return \"\";},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"KMZ\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":31},\"end\":{\"line\":36,\"column\":46}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { return \"\";},\"12\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"GML\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":31},\"end\":{\"line\":38,\"column\":46}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(15, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"13\":function(container,depth0,helpers,partials,data) { return \"\";},\"15\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"GeoJSON\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":40,\"column\":31},\"end\":{\"line\":40,\"column\":50}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":40,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"16\":function(container,depth0,helpers,partials,data) { return \"\";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"WKT\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":31},\"end\":{\"line\":42,\"column\":46}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"19\":function(container,depth0,helpers,partials,data) { return \"\";},\"21\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"GPX\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":44,\"column\":31},\"end\":{\"line\":44,\"column\":46}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.program(24, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":44,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"22\":function(container,depth0,helpers,partials,data) { return \"\";},\"24\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"SHP\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":31},\"end\":{\"line\":46,\"column\":46}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.program(27, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"25\":function(container,depth0,helpers,partials,data) { return \"\";},\"27\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,\"GPKG\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":48,\"column\":31},\"end\":{\"line\":48,\"column\":47}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(28, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":48,\"column\":20},\"end\":{\"line\":50,\"column\":20}}})) != null ? stack1 : \"\");},\"28\":function(container,depth0,helpers,partials,data) { return \"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"elevation\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":12},\"end\":{\"line\":30,\"column\":19}}})) != null ? stack1 : \"\") + \"
        \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"formats\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":33,\"column\":20},\"end\":{\"line\":51,\"column\":29}}})) != null ? stack1 : \"\") + \"
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \";},\"useData\":true}\r\n\r\n const addElevationAndInterpolation = function (features, options) {\r\n const self = this;\r\n options = options || {};\r\n return new Promise(function (resolve, reject) {\r\n const cloneWithId = function (feat) {\r\n const result = feat.clone();\r\n result.id = feat.id;\r\n return result;\r\n };\r\n //si no se incluyen las elevaciones quito las Z de las geometrias que las tuvieran\r\n if (!options.displayElevation) {\r\n resolve(features.map(function (feat) {\r\n if (feat.getGeometryStride() > 2) {\r\n const f = cloneWithId(feat);\r\n f.id = feat.id;\r\n f.layer = feat.layer;\r\n f.getCoordsArray().forEach(coord => coord.length = 2);\r\n f.setCoords(f.geometry);\r\n return f;\r\n }\r\n return feat;\r\n }));\r\n return;\r\n }\r\n\r\n let mustInterpolate = options.elevation && options.elevation.resolution;\r\n // Array con features sin altura y nulo donde habia feature con alturas\r\n let featuresToAddElevation = mustInterpolate ? features.map(f => cloneWithId(f)) : features.map(f => {\r\n return f.getCoordsArray().every(p => !p[2]) ? cloneWithId(f) : null;\r\n });\r\n\r\n if (mustInterpolate || featuresToAddElevation.some(f => f !== null)) {\r\n const elevOptions = {\r\n crs: self.map.crs,\r\n features: featuresToAddElevation,\r\n maxCoordQuantity: options.elevation && options.elevation.maxCoordQuantity,\r\n resolution: options.elevation.resolution,\r\n sampleNumber: options.elevation.sampleNumber || 0\r\n };\r\n (self.map.elevation || new TC.tool.Elevation(typeof options.elevation === 'boolean' ? {} : options.elevation)).setGeometry(elevOptions).then(\r\n function (processedFeatures) {\r\n // Recombinamos features procesadas y sin procesar\r\n processedFeatures.forEach((f, index) => {\r\n if (!f) {\r\n processedFeatures[index] = features[index];\r\n }\r\n });\r\n resolve(processedFeatures);\r\n },\r\n function (error) {\r\n reject(error instanceof Error ? error : Error(error));\r\n }\r\n );\r\n }\r\n else {\r\n resolve(features);\r\n }\r\n });\r\n };\r\n const hasPoints = function () {\r\n return this.getFeatures().some(feature => TC.feature.Point && feature instanceof TC.feature.Point ||\r\n TC.feature.MultiPoint && feature instanceof TC.feature.MultiPoint);\r\n };\r\n const hasLines = function () {\r\n return this.getFeatures().some(feature => TC.feature.Polyline && feature instanceof TC.feature.Polyline ||\r\n TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline);\r\n };\r\n const hasPolygons = function () {\r\n return this.getFeatures().some(feature => TC.feature.Polygon && feature instanceof TC.feature.Polygon ||\r\n TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon);\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const result = TC.Control.prototype.renderData.call(self, { controlId: self.id }, callback);\r\n return result;\r\n };\r\n\r\n ctlProto.close = function (_callback) {\r\n const self = this;\r\n\r\n if (self.modal && self.modal.parentElement) {\r\n TC.Util.closeModal();\r\n self.modal.parentElement.removeChild(self.modal);\r\n }\r\n };\r\n\r\n ctlProto.open = function (featureOrFeatures, options) {\r\n const self = this;\r\n\r\n self.close();\r\n\r\n self.setFeatures(featureOrFeatures);\r\n options = options || {};\r\n options = Object.assign({}, {\r\n controlId: self.id,\r\n cssClass: self.cssClass,\r\n checkboxId: self.getUID(),\r\n elevation: options.elevation//options.elevation ? (options.elevation instanceof Object ? options.elevation : self.map.elevation.options) : options.elevation,\r\n }, options);\r\n //si solo hay poligonos ocultamos el botón de formato GPX\r\n const excludedFormats = options.excludedFormats ? options.excludedFormats.slice() : [];\r\n if (!hasPoints.call(self) && !hasLines.call(self) && hasPolygons.call(self)) {\r\n excludedFormats.push(TC.Consts.format.GPX);\r\n }\r\n options.formats = _formats.filter(item => excludedFormats.indexOf(item) < 0);\r\n self.setOptions(options);\r\n\r\n self.getRenderedHtml(ctlProto.CLASS, options, function (html) {\r\n const template = document.createElement('template');\r\n template.innerHTML = html;\r\n self.modal = template.content ? template.content.firstChild : template.firstChild;\r\n document.body.appendChild(self.modal);\r\n\r\n const modalBody = self.modalBody = self.modal.getElementsByClassName(\"tc-modal-body\")[0];\r\n modalBody.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('button[data-format]', function (e) {\r\n\r\n var resolution = displayElevation && interpolation ? parseFloat(modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + ' input[type=number]').value) || (self.options.elevation || self.map.elevation && self.map.elevation.options).resolution : 0;\r\n\r\n const endExport = async (features, opts) => {\r\n\r\n //checkear si son features con datos complejos\r\n var cancel = false;\r\n if (format !== TC.Consts.format.GEOJSON && opts.format !== TC.Consts.format.WKT && features.some(function (feat) {\r\n for (var attr in feat.getData()) {\r\n if (feat.data[attr] instanceof Object)\r\n return true;\r\n }\r\n return false;\r\n }))\r\n await TC.confirm(self.getLocaleString(\"dl.export.complexAttr\").format(format), null,\r\n function () {\r\n cancel = true;\r\n });\r\n if (cancel) {\r\n return;\r\n }\r\n\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n\r\n\r\n TC.Util.closeModal();\r\n addElevationAndInterpolation.apply(self, [features,\r\n {\r\n displayElevation: displayElevation,\r\n elevation: displayElevation ? Object.assign({}, opts.elevation || self.map.elevation && self.map.elevation.options, { resolution: resolution }) : null\r\n }]).then(\r\n function (features) {\r\n const innerFileName = opts.fileName ||\r\n (opts.title ? opts.title.toLowerCase().replace(/ /g, '_') : 'download');\r\n let fileName = opts.fileName || innerFileName + ' ' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n self.map.exportFeatures(features, {\r\n fileName: innerFileName,\r\n format: format\r\n }).then(data => {\r\n fileName = fileName || TC.getUID();\r\n switch (format) {\r\n case TC.Consts.format.SHAPEFILE:\r\n TC.Util.downloadBlob(fileName + \".zip\", data);\r\n break;\r\n case TC.Consts.format.GEOPACKAGE:\r\n TC.Util.downloadFile(fileName + \".gpkg\", \"application/geopackage+sqlite3\", data);\r\n break;\r\n case TC.Consts.format.KMZ:\r\n TC.Util.downloadBlob(fileName + \".kmz\", data);\r\n break;\r\n default: {\r\n const mimeType = TC.Consts.mimeType[options.format];\r\n TC.Util.downloadFile(fileName + '.' + format.toLowerCase(), mimeType, data);\r\n break;\r\n }\r\n }\r\n });\r\n },\r\n function (error) {\r\n self.open(features, opts);\r\n if (TC.tool.Elevation && error.message === TC.tool.Elevation.errors.MAX_COORD_QUANTITY_EXCEEDED) {\r\n TC.alert(self.getLocaleString('tooManyCoordinatesForElevation.warning'));\r\n return;\r\n }\r\n TC.error(self.getLocaleString('elevation.error'));\r\n }\r\n ).finally(function () {\r\n li && li.removeWait(waitId);\r\n });\r\n };\r\n\r\n const format = e.target.dataset.format;\r\n if (format === TC.Consts.format.GPX) {\r\n if (hasPolygons.call(self)) {\r\n TC.confirm(self.getLocaleString('gpxNotCompatible.confirm'), function () {\r\n endExport(self.getFeatures().filter(function (feature) {\r\n return (!TC.feature.Polygon || !(feature instanceof TC.feature.Polygon)) &&\r\n (!TC.feature.MultiPolygon || !(feature instanceof TC.feature.MultiPolygon));\r\n }), self.getOptions());\r\n });\r\n }\r\n else {\r\n endExport(self.getFeatures(), self.getOptions());\r\n }\r\n }\r\n else {\r\n endExport(self.getFeatures(), self.getOptions());\r\n }\r\n\r\n\r\n }), { passive: true });\r\n\r\n const interpolationPanel = modalBody.querySelector(self._selectors.INTERPOLATION_PANEL);\r\n const elevationCheckbox = modalBody.querySelector(self._selectors.ELEVATION_CHECKBOX);\r\n\r\n if (options.elevation) {\r\n displayElevation = options.elevation.checked ? options.elevation.checked : displayElevation;\r\n\r\n elevationCheckbox.checked = displayElevation;\r\n\r\n if (interpolationPanel) {\r\n if (displayElevation) {\r\n interpolationPanel.classList.remove(TC.Consts.classes.HIDDEN);\r\n } else { \r\n if (!interpolationPanel.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n } \r\n }\r\n\r\n if (displayElevation && (hasLines.call(self) || hasPolygons.call(self)) && options.elevation.resolution) {\r\n interpolationPanel.classList.remove(TC.Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n modalBody.querySelectorAll(self._selectors.INTERPOLATION_RADIO)[interpolation ? 1 : 0].checked = true;\r\n if (interpolation) {\r\n modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE).classList.remove(TC.Consts.classes.HIDDEN);\r\n modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value = interpolationDistance || modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value;\r\n }\r\n }\r\n }\r\n\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.ELEVATION_CHECKBOX, function (_e) {\r\n //self.showDownloadDialog(); // Recalculamos todo el aspecto del diálogo de descarga\r\n\r\n displayElevation = !displayElevation;\r\n\r\n if (interpolationPanel) {\r\n if (displayElevation) {\r\n interpolationPanel.classList.remove(TC.Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n }\r\n\r\n if (displayElevation && (hasLines.call(self) || hasPolygons.call(self))) {\r\n interpolationPanel.classList.remove(TC.Consts.classes.HIDDEN);\r\n } else {\r\n if (!interpolationPanel.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n }\r\n } \r\n \r\n }));\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.INTERPOLATION_RADIO, function (_e) {\r\n const idDiv = modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE);\r\n idDiv.classList.toggle(TC.Consts.classes.HIDDEN);\r\n interpolation = !interpolation;\r\n if (interpolation) modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value = interpolationDistance || modalBody.querySelector(self._selectors.INTERPOLATION_DISTANCE + \" input\").value;\r\n }));\r\n modalBody.addEventListener('change', TC.EventTarget.listenerBySelector(self._selectors.INTERPOLATION_DISTANCE, function (e) {\r\n interpolationDistance = e.target.value;\r\n }));\r\n\r\n let modalOptions = {\r\n closeCallback: function () {\r\n self.modal.parentElement.removeChild(self.modal);\r\n }\r\n };\r\n\r\n if (options.openCallback) {\r\n modalOptions.openCallback = options.openCallback;\r\n }\r\n\r\n TC.Util.showModal(self.modal, modalOptions);\r\n });\r\n };\r\n\r\n ctlProto.setFeatures = function (features) {\r\n this.features = Array.isArray(features) ? features : [features];\r\n };\r\n\r\n ctlProto.getFeatures = function () {\r\n return this.features;\r\n };\r\n\r\n ctlProto.setOptions = function (options) {\r\n this.options = Object.assign(this.options, options);\r\n };\r\n\r\n ctlProto.getOptions = function () {\r\n return this.options;\r\n };\r\n\r\n})();\r\n\r\nconst FeatureDownloadDialog = TC.control.FeatureDownloadDialog;\r\nexport default FeatureDownloadDialog;","\r\n/**\r\n * Opciones de control de obtención de información de entidades de mapa por click.\r\n * @typedef FeatureInfoOptions\r\n * @see MapControlOptions\r\n * @see MultiFeatureInfoModeOptions\r\n * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a los clics hechos en el mapa desde el que se carga.\r\n * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n * @property {boolean} [persistentHighlights] - Cuando el control `featureInfo` muestra los resultados de la consulta, si el servicio lo soporta, mostrará resaltadas sobre el mapa las geometrías\r\n * de las entidades geográficas de la respuesta. Si este valor es `true`, dichas geometrías se quedan resaltadas en el mapa indefinidamente. En caso contrario, las geometrías resaltadas se borran en el \r\n * momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n * @example [Ver en vivo](../examples/cfg.FeatureInfoOptions.persistentHighlights.html) {@lang html} \r\n *
        \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.FeatureInfoCommons = FeatureInfoCommons;\r\n\r\n(function () {\r\n TC.control.FeatureInfo = function () {\r\n var self = this;\r\n TC.control.FeatureInfoCommons.apply(this, arguments);\r\n self.wrap = new TC.wrap.control.FeatureInfo(self);\r\n\r\n TC.Consts.classes.FROMLEFT = 'tc-fromleft';\r\n TC.Consts.classes.FROMRIGHT = 'tc-fromright';\r\n };\r\n\r\n TC.inherit(TC.control.FeatureInfo, TC.control.FeatureInfoCommons);\r\n\r\n var ctlProto = TC.control.FeatureInfo.prototype;\r\n\r\n var roundCoordinates = function roundCoordinates(obj, precision) {\r\n var result;\r\n if (Array.isArray(obj)) {\r\n result = obj.slice();\r\n for (var i = 0, len = result.length; i < len; i++) {\r\n result[i] = roundCoordinates(result[i]);\r\n }\r\n }\r\n else if (typeof obj === \"number\") {\r\n result = Math.round(obj.toFixed(precision));\r\n }\r\n else {\r\n result = obj;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n TC.control.FeatureInfoCommons.prototype.register.call(self, map).then(\r\n function (ctl) {\r\n // Le ponemos un padre al div. Evitamos con esto que se añada el div al mapa (no es necesario, ya que es un mero buffer)\r\n document.createElement('div').appendChild(self.div);\r\n resolve(ctl);\r\n },\r\n error => reject(error)\r\n );\r\n });\r\n };\r\n\r\n ctlProto.callback = function (coords, _xy) {\r\n const self = this;\r\n\r\n self.querying = true;\r\n return new Promise(function (resolve, _reject) {\r\n const elevationTool = self.getElevationTool();\r\n elevationTool.then(function (tool) {\r\n if (tool) {\r\n self.elevationRequest = tool.getElevation({\r\n crs: self.map.crs,\r\n coordinates: [coords]\r\n });\r\n }\r\n });\r\n\r\n if (self.map && self.filterLayer) {\r\n //aquí se pone el puntito temporal\r\n var title = self.getLocaleString('featureInfo');\r\n var markerOptions = TC.Util.extend({}, self.map.options.styles.marker, self.markerStyle, { title: title, set: title, showsPopup: false });\r\n self.filterLayer.clearFeatures();\r\n self.highlightedFeature = null;\r\n self.filterFeature = null;\r\n self.filterLayer.addMarker(coords, markerOptions).then(function afterMarkerAdd(marker) {\r\n ////cuando se queda el puntito es porque esto sucede tras el cierre de la popup\r\n ////o sea\r\n ////lo normal es que primero se ejecute esto, y luego se procesen los eventos FEATUREINFO o NOFEATUREINFO\r\n ////pero en el caso raro (la primera vez), ocurre al revés. Entonces, ya se habrá establecido lastFeatureCount (no será null)\r\n //if (self.lastFeatureCount === null) {\r\n // self.map.putLayerOnTop(self.filterLayer);\r\n // self.filterFeature = marker;\r\n //}\r\n //else {\r\n // self.filterLayer.clearFeatures();\r\n //}\r\n self.map.putLayerOnTop(self.filterLayer);\r\n self.filterFeature = marker;\r\n\r\n elevationTool.then(function (tool) {\r\n self.renderResults({ coords: marker.geometry, displayElevation: tool, loading: true }, function () {\r\n self.displayResults();\r\n });\r\n });\r\n\r\n var visibleLayers = false;\r\n for (var i = 0; i < self.map.workLayers.length; i++) {\r\n var layer = self.map.workLayers[i];\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n if (layer.getVisibility() && layer.names.length > 0) {\r\n visibleLayers = true;\r\n break;\r\n }\r\n }\r\n }\r\n self.queryResolution = self.map.getResolution();\r\n if (visibleLayers) {\r\n self.wrap.getFeatureInfo(coords, self.queryResolution).then(() => resolve());\r\n }\r\n else {\r\n // Metemos setTimeout para salirnos del hilo. Sin él se corre el riesgo de que se ejecute esto antes del evento BEFOREFEATUREINFO\r\n setTimeout(function () {\r\n self.responseCallback({ coords: coords });\r\n resolve();\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.sendRequest = function (filter) {\r\n const self = this;\r\n return self.callback(filter.getCoordinates());\r\n };\r\n\r\n ctlProto.responseCallback = function (options) {\r\n const self = this;\r\n\r\n TC.control.FeatureInfoCommons.prototype.responseCallback.call(self, options);\r\n if (self.filterFeature) {\r\n var services = options.services;\r\n\r\n // Eliminamos capas sin resultados\r\n if (services) {\r\n for (var i = 0; i < services.length; i++) {\r\n var service = services[i];\r\n for (var j = 0; j < service.layers.length; j++) {\r\n if (!service.layers[j].features.length) {\r\n service.layers.splice(j, 1);\r\n j = j - 1;\r\n }\r\n }\r\n if (!service.layers.length) {\r\n services.splice(i, 1);\r\n i = i - 1;\r\n }\r\n }\r\n }\r\n\r\n self.info.defaultFeature = options.defaultFeature;\r\n\r\n if (self.elevationRequest) {\r\n options.displayElevation = true;\r\n }\r\n self.renderResults(options, function () {\r\n self.insertLinks();\r\n\r\n if (self.sharedFeatureInfo) {\r\n self.div.querySelectorAll('ul.' + self.CLASS + '-services li').forEach(function (li) {\r\n li.classList.add(TC.Consts.classes.CHECKED);\r\n });\r\n var sharedFeature;\r\n var featureObj = self.sharedFeatureInfo;\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n var service = self.info.services[i];\r\n if (service.mapLayers.some(ml => ml.url === featureObj.s)) {\r\n for (var j = 0, jj = service.layers.length; j < jj; j++) {\r\n var layer = service.layers[j];\r\n if (layer.name === featureObj.l) {\r\n for (var k = 0, kk = layer.features.length; k < kk; k++) {\r\n var feature = layer.features[k];\r\n if (feature.id === featureObj.f) {\r\n sharedFeature = feature;\r\n var hash = hex_md5(JSON.stringify({\r\n data: feature.getData(),\r\n geometry: roundCoordinates(feature.geometry, TC.Consts.DEGREE_PRECISION) // Redondeamos a la precisión más fina (grado)\r\n }));\r\n if (featureObj.h !== hash) {\r\n TC.alert(self.getLocaleString('finfo.featureChanged.warning'));\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (sharedFeature) {\r\n self.highlightedFeature = sharedFeature;\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n owner: self,\r\n stealth: true\r\n }).then(function (layer) {\r\n self.sharedFeatureLayer = layer;\r\n self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n layer.addFeature(sharedFeature);\r\n self.map.zoomToFeatures([sharedFeature]);\r\n });\r\n }\r\n delete self.sharedFeatureInfo;\r\n }\r\n else {\r\n self.displayResults();\r\n }\r\n //capturamos el click de label y enlaces para no propagarlos a las tablas y que haga zoom cuando no se quiere\r\n self.div.querySelectorAll('ul.' + self.CLASS + '-services label, ul.' + self.CLASS + '-services a').forEach(function (label) {\r\n label.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n }); \r\n });\r\n }\r\n };\r\n\r\n ctlProto.displayResultsCallback = function () {\r\n const self = this;\r\n TC.control.FeatureInfoCommons.prototype.displayResultsCallback.call(self);\r\n\r\n if (self.elevationRequest) {\r\n const ctl = self.getDisplayControl();\r\n self.getDisplayTarget().querySelectorAll(`.${self.CLASS}-elev,.${self.CLASS}-height`).forEach(elm => elm.classList.add(TC.Consts.classes.HIDDEN));\r\n self.elevationRequest.then(function (elevationCoords) {\r\n if (ctl.currentFeature && elevationCoords.length) {\r\n const currentCoords = ctl.currentFeature.geometry;\r\n const elevPoint = elevationCoords[0];\r\n if (currentCoords[0] === elevPoint[0] && currentCoords[1] === elevPoint[1]) {\r\n const elevationValues = elevationCoords.length ? elevationCoords[0].slice(2) : null;\r\n self.displayElevationValues(elevationValues);\r\n }\r\n }\r\n //self.elevationRequest = null;\r\n });\r\n }\r\n const resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n entry.target.querySelectorAll('ul.' + self.CLASS + '-services label, ul.' + self.CLASS + '-services h4, ul.' + self.CLASS + '-services h3 span').forEach(function (h4) {\r\n h4.addEventListener(\"mouseenter\", function (e) {\r\n if (this.offsetWidth < this.scrollWidth) {\r\n this.title = this.childNodes.item(this.tagName === \"H4\" ? 2 : 0).textContent;\r\n }\r\n else {\r\n this.title = \"\";\r\n }\r\n }, { passive: true });\r\n });\r\n }\r\n });\r\n resizeObserver.observe(self.getDisplayTarget()); \r\n\r\n // 26/04/2021 ahora siempre mostramos XY aunque no haya elevación o resultado GFI\r\n //else if (!self.querying && (!self.info || !self.info.services)) {\r\n // self.closeResults();\r\n //}\r\n };\r\n\r\n ctlProto.renderResults = function (options, callback) {\r\n const self = this;\r\n if (self.filterFeature) {\r\n const currentCoords = self.filterFeature.geometry;\r\n if (options.coords && currentCoords[0] === options.coords[0] && currentCoords[1] === options.coords[1]) {\r\n options.isGeo = self.map.wrap.isGeo();\r\n if (options.coords) {\r\n options.crs = self.map.crs;\r\n options.coords = options.coords.map(function (value) {\r\n const precision = options.isGeo ? TC.Consts.DEGREE_PRECISION : TC.Consts.METER_PRECISION;\r\n return TC.Util.formatCoord(value, precision);\r\n });\r\n }\r\n self.renderData(options, callback);\r\n }\r\n }\r\n };\r\n\r\n ctlProto.displayElevationValues = function (value) {\r\n const self = this;\r\n let tValue, sValue;\r\n if (Array.isArray(value)) {\r\n tValue = value[0];\r\n sValue = value.length > 1 ? value[1] : null;\r\n }\r\n else {\r\n tValue = value;\r\n sValue = null;\r\n }\r\n const locale = self.map.options.locale || TC.Cfg.locale;\r\n let elevationString = tValue === null ? '-' : TC.Util.formatNumber(Math.round(tValue), locale) + ' m';\r\n let heightString = sValue ? sValue.toLocaleString(locale, { maximumFractionDigits: 1 }) + ' m' : '-';\r\n const elevationDisplay = self.getDisplayTarget().querySelector(`.${self.CLASS}-elev`);\r\n const heightDisplay = self.getDisplayTarget().querySelector(`.${self.CLASS}-height`);\r\n if (elevationDisplay && heightDisplay) {\r\n elevationDisplay.classList.toggle(TC.Consts.classes.HIDDEN, tValue === null);\r\n heightDisplay.classList.toggle(TC.Consts.classes.HIDDEN, !sValue);\r\n elevationDisplay.querySelector(`.${self.CLASS}-coords-val`).innerHTML = elevationString;\r\n heightDisplay.querySelector(`.${self.CLASS}-coords-val`).innerHTML = heightString;\r\n }\r\n };\r\n\r\n ctlProto.loadSharedFeature = function (featureObj) {\r\n // Función para dar compatibilidad hacia atrás, ahora las features se comparten por URL\r\n const self = this;\r\n if (featureObj) {\r\n //buscamos si la feature compartida pertenece a alguna de las capas añadidas\r\n if (self.map.workLayers.filter(function (item, _i) {\r\n return item.type === TC.Consts.layerType.WMS && item.url === featureObj.s && item.getDisgregatedLayerNames().indexOf(featureObj.l) >= 0;\r\n }).length === 0) {\r\n TC.error(self.getLocaleString('sharedFeatureNotValid'), TC.Consts.msgErrorMode.TOAST);\r\n return;\r\n }\r\n self.sharedFeatureInfo = featureObj;\r\n TC.loadJS(\r\n !window.hex_md5,\r\n [TC.apiLocation + TC.Consts.url.HASH],\r\n function () {\r\n // Creamos una consulta getFeatureInfo ad-hoc, con la resolución a la que estaba la consulta original.\r\n const coords = [-100, -100];\r\n self.beforeRequest({ xy: coords }); // xy negativo para que no se vea el marcador, ya que no sabemos dónde ponerlo.\r\n //aquí se pone el puntito temporal\r\n self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n self.filterLayer.addMarker(coords).then(function (marker) {\r\n self.filterFeature = marker;\r\n self.wrap.getFeatureInfo(featureObj.xy, featureObj.r, {\r\n serviceUrl: featureObj.s,\r\n layerName: featureObj.l,\r\n featureId: featureObj.f\r\n });\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n ctlProto.exportQuery = function () {\r\n const self = this;\r\n const result = TC.control.FeatureInfoCommons.prototype.exportQuery.call(self);\r\n result.res = self.queryResolution;\r\n return result;\r\n };\r\n\r\n ctlProto.importQuery = function (query) {\r\n const self = this;\r\n if (query.filter) {\r\n self.map.setResolution(query.res)\r\n .then(() => TC.control.FeatureInfoCommons.prototype.importQuery.call(self, query));\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst FeatureInfo = TC.control.FeatureInfo;\r\nexport default FeatureInfo;","\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Click from './Click';\r\nimport Print from './Print';\r\nimport infoShare from './infoShare';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.Click = Click;\r\nTC.control.Print = Print;\r\nTC.control.infoShare = infoShare;\r\n\r\nTC.Consts.event.POPUP = TC.Consts.event.POPUP || 'popup.tc';\r\nTC.Consts.event.POPUPHIDE = TC.Consts.event.POPUPHIDE || 'popuphide.tc';\r\nTC.Consts.event.DRAWCHART = TC.Consts.event.DRAWCHART || 'drawchart.tc';\r\nTC.Consts.event.DRAWTABLE = TC.Consts.event.DRAWTABLE || 'drawtable.tc';\r\nTC.Consts.event.RESULTSPANELCLOSE = TC.Consts.event.RESULTSPANELCLOSE || 'resultspanelclose.tc';\r\nTC.Consts.event.FEATUREHIGHLIGHT = 'featurehighlight.tc';\r\nTC.Consts.event.FEATUREDOWNPLAY = 'featuredownplay.tc';\r\n\r\nTC.control.FeatureInfoCommons = function () {\r\n const self = this;\r\n TC.control.Click.apply(self, arguments);\r\n\r\n self._selectors = {\r\n LIST_ITEM: `ul.${self.CLASS}-features li`,\r\n SHOW_ALL_CHECKBOX: `.${self.CLASS}-btn input[type=\"checkbox\"].${self.CLASS}-btn-show-all`,\r\n ZOOM_ALL_BUTTON: `.${self.CLASS}-btn .${self.CLASS}-btn-zoom-all`,\r\n DEL_ALL_BUTTON: `.${self.CLASS}-btn .${self.CLASS}-btn-del-all`\r\n };\r\n\r\n self.resultsLayer = null;\r\n self.filterLayer = null;\r\n self._layersPromise = null;\r\n self.filterFeature = null;\r\n self.info = null;\r\n self._infoHistory = {};\r\n self.popup = null;\r\n self.resultsPanel = null;\r\n self.lastFeatureCount = null;\r\n self.exportsState = true;\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n};\r\n\r\n(function () {\r\n\r\n var layerCount = function (ctl) {\r\n return ctl.info && ctl.info.services ?\r\n ctl.info.services.reduce(function (sCount, service) {\r\n return sCount + service.layers.reduce(function (lCount, _layer) {\r\n return lCount + 1;\r\n }, 0);\r\n }, 0) : 0;\r\n };\r\n\r\n TC.inherit(TC.control.FeatureInfoCommons, TC.control.Click);\r\n TC.mix(TC.control.FeatureInfoCommons, TC.control.infoShare);\r\n\r\n var ctlProto = TC.control.FeatureInfoCommons.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-finfo';\r\n\r\n ctlProto.CURRENT_CLASS = 'tc-current';\r\n\r\n ctlProto.TITLE_SEPARATOR = ' › ';\r\n ctlProto.DEFAULT_STROKE_COLOR = '#0000ff';\r\n \r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lat\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":67},\"end\":{\"line\":4,\"column\":81}}})) + \": \" + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,\"coords\") : depth0)) != null ? lookupProperty(stack1,\"1\") : stack1), depth0)) + \"\\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"lon\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":67},\"end\":{\"line\":5,\"column\":81}}})) + \": \" + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,\"coords\") : depth0)) != null ? lookupProperty(stack1,\"0\") : stack1), depth0)) + \"\\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" x: \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"coords\") : depth0)) != null ? lookupProperty(stack1,\"0\") : stack1), depth0)) + \"\\r\\n y: \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"coords\") : depth0)) != null ? lookupProperty(stack1,\"1\") : stack1), depth0)) + \"\\r\\n\";},\"5\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":114},\"end\":{\"line\":10,\"column\":128}}})) + \": \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"height\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":278},\"end\":{\"line\":10,\"column\":295}}})) + \": \";},\"7\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"gt\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"featureCount\") : depth0),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":58},\"end\":{\"line\":12,\"column\":77}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":52},\"end\":{\"line\":12,\"column\":110}}})) != null ? stack1 : \"\") + \" \";},\"8\":function(container,depth0,helpers,partials,data) { return \" tc-ctl-finfo-multilayer\";},\"10\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \\r\\n

        \\r\\n \\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"title\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0, blockParams, depths),\"inverse\":container.program(13, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":20},\"end\":{\"line\":18,\"column\":130}}})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n

        \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"hasLimits\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(18, data, 0, blockParams, depths),\"inverse\":container.program(20, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":16},\"end\":{\"line\":69,\"column\":25}}})) != null ? stack1 : \"\") + \"
        \\r\\n
      • \\r\\n\";},\"11\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0));},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"layers\") : depth0)) != null ? lookupProperty(stack1,\"0\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":17,\"column\":59},\"end\":{\"line\":17,\"column\":132}}})) != null ? stack1 : \"\");},\"14\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"layers\") : depth0)) != null ? lookupProperty(stack1,\"0\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0));},\"16\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"layer\") : depth0)) != null ? lookupProperty(stack1,\"name\") : stack1), depth0));},\"18\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"hasLimits\") : depth0), depth0)) + \"\\r\\n\";},\"20\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"layers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(21, data, 0, blockParams, depths),\"inverse\":container.program(45, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":26,\"column\":24},\"end\":{\"line\":67,\"column\":33}}})) != null ? stack1 : \"\") + \"
        \\r\\n\";},\"21\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \\r\\n \\r\\n \" + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"features\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1), depth0)) + \" \" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"path\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(25, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":29,\"column\":94},\"end\":{\"line\":29,\"column\":164}}})) != null ? stack1 : \"\") + \"\\r\\n
        \\r\\n
          \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"features\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(28, data, 0, blockParams, depths),\"inverse\":container.program(43, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":40},\"end\":{\"line\":61,\"column\":49}}})) != null ? stack1 : \"\") + \"
        \\r\\n
        \\r\\n
      • \\r\\n\";},\"22\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"gt\").call(alias1,(depths[2] != null ? lookupProperty(depths[2],\"featureCount\") : depths[2]),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":63},\"end\":{\"line\":28,\"column\":88}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":57},\"end\":{\"line\":28,\"column\":130}}})) != null ? stack1 : \"\") + \" \";},\"23\":function(container,depth0,helpers,partials,data) { return \" class=\\\"tc-ctl-finfo-multilayer\\\" \";},\"25\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":160},\"end\":{\"line\":28,\"column\":199}}})) != null ? stack1 : \"\") + container.escapeExpression(container.lambda(depth0, depth0));},\"26\":function(container,depth0,helpers,partials,data) { return \" › \";},\"28\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"rawContent\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(29, data, 0),\"inverse\":container.program(38, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":44},\"end\":{\"line\":57,\"column\":51}}})) != null ? stack1 : \"\") + \"
      • \\r\\n\";},\"29\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"feature\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":48},\"end\":{\"line\":35,\"column\":66}}})) + \"
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"rawFormat\") : depth0),\"text/html\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":50},\"end\":{\"line\":36,\"column\":76}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(30, data, 0),\"inverse\":container.program(36, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":44},\"end\":{\"line\":49,\"column\":51}}})) != null ? stack1 : \"\");},\"30\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"expandUrl\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(31, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":44},\"end\":{\"line\":46,\"column\":51}}})) != null ? stack1 : \"\");},\"31\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"expandUrl\") : depth0),\"\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":54},\"end\":{\"line\":38,\"column\":71}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(32, data, 0),\"inverse\":container.program(34, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":44},\"end\":{\"line\":45,\"column\":55}}})) != null ? stack1 : \"\");},\"32\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n
        \\r\\n\";},\"34\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"36\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \"    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"rawContent\") : depth0), depth0))    + \"
        \\r\\n\";},\"38\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"error\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(39, data, 0),\"inverse\":container.program(41, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":44},\"end\":{\"line\":56,\"column\":51}}})) != null ? stack1 : \"\");},\"39\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"fi.error\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":52,\"column\":78},\"end\":{\"line\":52,\"column\":97}}})) + \"\" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"error\") : depth0), depth0)) + \"\\r\\n\";},\"41\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"id\") : depth0), depth0)) + \"
        \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr\"),depth0,{\"name\":\"tc-ctl-finfo-attr\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"43\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"noDataInThisLayer\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":71},\"end\":{\"line\":60,\"column\":99}}})) + \"
      • \\r\\n\";},\"45\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"noDataAtThisService\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":66,\"column\":59},\"end\":{\"line\":66,\"column\":89}}})) + \"
      • \\r\\n\";},\"47\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"displayElevation\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(48, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":73,\"column\":8},\"end\":{\"line\":77,\"column\":15}}})) != null ? stack1 : \"\");},\"48\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"loading\") : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(49, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":74,\"column\":12},\"end\":{\"line\":76,\"column\":23}}})) != null ? stack1 : \"\");},\"49\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"displayElevation\") : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(50, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":75,\"column\":16},\"end\":{\"line\":75,\"column\":108}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"50\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
      • \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"noData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":75,\"column\":75},\"end\":{\"line\":75,\"column\":92}}})) + \"
      • \";},\"52\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"gt\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"featureCount\") : depth0),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":82,\"column\":10},\"end\":{\"line\":82,\"column\":29}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(53, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":82,\"column\":4},\"end\":{\"line\":86,\"column\":11}}})) != null ? stack1 : \"\");},\"53\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n
        /\" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"featureCount\") : depth0), depth0)) + \"
        \\r\\n\\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n CRS: \" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"crs\") : depth0), depth0)) + \"\\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.program(3, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":9,\"column\":11}}})) != null ? stack1 : \"\") + \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"displayElevation\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":10,\"column\":356}}})) != null ? stack1 : \"\") + \"\\r\\n
        \\r\\n
        \\r\\n
          \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"services\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.program(47, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":8},\"end\":{\"line\":78,\"column\":17}}})) != null ? stack1 : \"\") + \"
        \\r\\n
        \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"featureCount\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(52, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":81,\"column\":0},\"end\":{\"line\":87,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"attributes\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":6,\"column\":13}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"getHeader\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"getHeader\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":14},\"end\":{\"line\":3,\"column\":30}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":8},\"end\":{\"line\":5,\"column\":15}}})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"<\" + alias2(lookupProperty(helpers,\"getHeader\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"getHeader\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":1},\"end\":{\"line\":4,\"column\":19}}})) + \">\" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"value\") : depth0), depth0)) + \"\\r\\n\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"getHeader\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"getHeader\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":14},\"end\":{\"line\":11,\"column\":30}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":4},\"end\":{\"line\":60,\"column\":15}}})) != null ? stack1 : \"\");},\"6\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isVideoAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isVideoAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":14},\"end\":{\"line\":12,\"column\":43}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":8},\"end\":{\"line\":59,\"column\":15}}})) != null ? stack1 : \"\");},\"7\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(lookupProperty(helpers,\"removeSpecialAttributeTag\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"removeSpecialAttributeTag\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":54},\"end\":{\"line\":14,\"column\":88}}})) + \"\\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-video\"),depth0,{\"name\":\"tc-ctl-finfo-attr-video\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isImageAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isImageAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":18},\"end\":{\"line\":22,\"column\":47}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":12},\"end\":{\"line\":58,\"column\":19}}})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(lookupProperty(helpers,\"removeSpecialAttributeTag\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"removeSpecialAttributeTag\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":54},\"end\":{\"line\":24,\"column\":88}}})) + \"\\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-image\"),depth0,{\"name\":\"tc-ctl-finfo-attr-image\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"12\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isAudioAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isAudioAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":22},\"end\":{\"line\":32,\"column\":51}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(15, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":16},\"end\":{\"line\":57,\"column\":23}}})) != null ? stack1 : \"\");},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(lookupProperty(helpers,\"removeSpecialAttributeTag\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"removeSpecialAttributeTag\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":54},\"end\":{\"line\":34,\"column\":88}}})) + \"\\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-audio\"),depth0,{\"name\":\"tc-ctl-finfo-attr-audio\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"15\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isEmbedAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isEmbedAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":26},\"end\":{\"line\":42,\"column\":55}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":20},\"end\":{\"line\":56,\"column\":27}}})) != null ? stack1 : \"\");},\"16\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(lookupProperty(helpers,\"removeSpecialAttributeTag\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"removeSpecialAttributeTag\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":44,\"column\":54},\"end\":{\"line\":44,\"column\":88}}})) + \"\\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-embed\"),depth0,{\"name\":\"tc-ctl-finfo-attr-embed\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),null,{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":54,\"column\":51},\"end\":{\"line\":54,\"column\":66}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":54,\"column\":41},\"end\":{\"line\":54,\"column\":111}}})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\";},\"19\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"singleFeature\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":7,\"column\":7}}})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"attributes\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":61,\"column\":9}}})) != null ? stack1 : \"\") + \" \\r\\n
        \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-object\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":41,\"column\":13}}})) != null ? stack1 : \"\") + \" \\r\\n
        \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":18},\"end\":{\"line\":5,\"column\":33}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":40,\"column\":19}}})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(data && lookupProperty(data,\"key\")),\"_content_\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":18},\"end\":{\"line\":7,\"column\":39}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":12},\"end\":{\"line\":14,\"column\":19}}})) != null ? stack1 : \"\") + \" \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isEmpty\").call(alias1,depth0,{\"name\":\"isEmpty\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":26},\"end\":{\"line\":8,\"column\":40}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":16},\"end\":{\"line\":10,\"column\":27}}})) != null ? stack1 : \"\");},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n\";},\"7\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda((data && lookupProperty(data,\"key\")), depth0)) + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isEmpty\").call(alias1,depth0,{\"name\":\"isEmpty\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":61},\"end\":{\"line\":13,\"column\":75}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":51},\"end\":{\"line\":13,\"column\":119}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(container.lambda((data && lookupProperty(data,\"key\")), depth0)) + \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":22},\"end\":{\"line\":20,\"column\":37}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.program(13, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":16},\"end\":{\"line\":35,\"column\":23}}})) != null ? stack1 : \"\") + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"
        \\r\\n \\r\\n \\r\\n\";},\"11\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \\r\\n
        \\r\\n \\r\\n
        \\r\\n\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isArray\").call(alias1,depth0,{\"name\":\"isArray\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":26},\"end\":{\"line\":27,\"column\":40}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":20},\"end\":{\"line\":33,\"column\":27}}})) != null ? stack1 : \"\") + \" \\r\\n\";},\"14\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n
        \\r\\n
        \\r\\n\";},\"16\":function(container,depth0,helpers,partials,data) { return \"
        \\r\\n\";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isArray\").call(alias1,depth0,{\"name\":\"isArray\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":10},\"end\":{\"line\":45,\"column\":24}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(22, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":4},\"end\":{\"line\":68,\"column\":11}}})) != null ? stack1 : \"\");},\"19\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n
        \\r\\n \\r\\n
        \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":53,\"column\":16},\"end\":{\"line\":57,\"column\":25}}})) != null ? stack1 : \"\") + \" \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\";},\"20\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n\";},\"22\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isUrl\").call(alias1,depth0,{\"name\":\"isUrl\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":14},\"end\":{\"line\":63,\"column\":26}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.program(25, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":8},\"end\":{\"line\":67,\"column\":15}}})) != null ? stack1 : \"\");},\"23\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + alias1(lookupProperty(helpers,\"i18n\").call(alias2,\"open\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":70},\"end\":{\"line\":64,\"column\":85}}})) + \"\\r\\n\";},\"25\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"formatDateOrNumber\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"formatDateOrNumber\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":66,\"column\":0},\"end\":{\"line\":66,\"column\":30}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":6},\"end\":{\"line\":1,\"column\":21}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":69,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-buttons\"] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
        \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-dialog\"] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n
        \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"src\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":30},\"end\":{\"line\":3,\"column\":69}}})) != null ? stack1 : \"\") + \"
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"shareQuery\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":16},\"end\":{\"line\":9,\"column\":37}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr-val\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-video\"),depth0,{\"name\":\"tc-ctl-finfo-attr-video\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isImageAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isImageAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":10},\"end\":{\"line\":4,\"column\":39}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":16,\"column\":11}}})) != null ? stack1 : \"\");},\"4\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-image\"),depth0,{\"name\":\"tc-ctl-finfo-attr-image\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"6\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isAudioAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isAudioAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":14},\"end\":{\"line\":7,\"column\":43}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":8},\"end\":{\"line\":15,\"column\":15}}})) != null ? stack1 : \"\");},\"7\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-audio\"),depth0,{\"name\":\"tc-ctl-finfo-attr-audio\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isEmbedAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isEmbedAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":18},\"end\":{\"line\":10,\"column\":47}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":12},\"end\":{\"line\":14,\"column\":19}}})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-embed\"),depth0,{\"name\":\"tc-ctl-finfo-attr-embed\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"12\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),null,{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":26},\"end\":{\"line\":13,\"column\":41}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":16},\"end\":{\"line\":13,\"column\":86}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isVideoAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isVideoAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":6},\"end\":{\"line\":1,\"column\":35}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":17,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr-video\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { return \"max-height:none;\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"getYoutubeId\").call(alias1,lookupProperty(helpers,\"removeSpecialAttributeTag\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"removeSpecialAttributeTag\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":20},\"end\":{\"line\":1,\"column\":53}}}),{\"name\":\"getYoutubeId\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":6},\"end\":{\"line\":1,\"column\":54}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(4, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":5,\"column\":7}}})) != null ? stack1 : \"\");},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr-image\"] = {\"1\":function(container,depth0,helpers,partials,data) { return \"max-height:none;\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr-audio\"] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-attr-embed\"] = {\"1\":function(container,depth0,helpers,partials,data) { return \"max-height:none\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n\";},\"useData\":true}\r\n\r\n\r\n const setShowAllUI = function () {\r\n const self = this;\r\n const menu = self.getMenuTarget();\r\n const showAllCb = menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX);\r\n if (showAllCb) {\r\n showAllCb.checked = true;\r\n const text = self.getLocaleString('doNotShowOnMapAllResults');\r\n showAllCb.innerHTML = text;\r\n showAllCb.setAttribute('title', text);\r\n }\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).classList.remove(TC.Consts.classes.HIDDEN);\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).classList.remove(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n const setNotShowAllUI = function () {\r\n const self = this;\r\n const menu = self.getMenuTarget();\r\n const showAllCb = menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX);\r\n if (showAllCb) {\r\n showAllCb.checked = false;\r\n const text = self.getLocaleString('showOnMapAllResults');\r\n showAllCb.innerHTML = text;\r\n showAllCb.setAttribute('title', text);\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).classList.add(TC.Consts.classes.HIDDEN);\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.register = async function (map) {\r\n const self = this;\r\n\r\n const clickRegisterPromise = TC.control.Click.prototype.register.call(self, map);\r\n self._createLayers();\r\n\r\n map.loaded(function () {\r\n const shareCtl = map.getControlsByClass('TC.control.Share')[0];\r\n if (shareCtl) {\r\n self.loadSharedFeature(shareCtl.loadParamFeature());\r\n }\r\n self.setDisplayMode(self.options.displayMode || map.defaultInfoContainer || TC.Consts.infoContainer.POPUP);\r\n });\r\n\r\n map\r\n .on(TC.Consts.event.POPUPHIDE + ' ' + TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === self.getDisplayControl() && self.resultsLayer) {\r\n if (self.highlightedFeature && !self.options.persistentHighlights) {\r\n self.downplayFeature(self.highlightedFeature);\r\n self.highlightedFeature = null;\r\n }\r\n if (!self.querying && e.feature) {\r\n self.filterLayer.removeFeature(e.feature);\r\n }\r\n }\r\n })\r\n //.on(TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n // self.highlightedFeature = null;\r\n //})\r\n .on(TC.Consts.event.POPUP + ' ' + TC.Consts.event.DRAWTABLE + ' ' + TC.Consts.event.DRAWCHART, function (e) {\r\n const control = e.control;\r\n if (control.currentFeature !== self.filterFeature) {\r\n self.highlightedFeature = control.currentFeature;\r\n }\r\n\r\n // GLS: si la feature es resultado de GFI decoramos\r\n if (e.control.caller === self) {\r\n self._decorateDisplay(control);\r\n }\r\n\r\n })\r\n .on(TC.Consts.event.DRAWCHART, function (e) {\r\n setTimeout(function () {\r\n self.highlightedFeature = e.control.currentFeature;\r\n }, 50);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function () {\r\n if (Object.keys(self._infoHistory).length) {\r\n const services = {};\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return layer.type === TC.Consts.layerType.WMS;\r\n })\r\n .forEach(function (layer) {\r\n const names = services[layer.url] || [];\r\n services[layer.url] = names.concat(layer.getDisgregatedLayerNames());\r\n });\r\n let featuresDeleted = false;\r\n for (let url in self._infoHistory) {\r\n const historyService = self._infoHistory[url];\r\n if (Object.prototype.hasOwnProperty.call(services, url)) {\r\n const service = services[url];\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n if (service.indexOf(name) < 0) {\r\n historyLayer.slice().forEach(f => self.downplayFeature(f));\r\n historyLayer.length = 0;\r\n featuresDeleted = true;\r\n }\r\n }\r\n }\r\n else {\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n historyLayer.slice().forEach(f => self.downplayFeature(f));\r\n featuresDeleted = true;\r\n }\r\n delete self._infoHistory[url];\r\n }\r\n }\r\n if (featuresDeleted) {\r\n self.closeResults();\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n // Quitamos del historial de resaltes las entidades que se borran\r\n if (e.layer === self.resultsLayer) {\r\n for (let url in self._infoHistory) {\r\n const historyService = self._infoHistory[url];\r\n for (let name in historyService) {\r\n const historyLayer = historyService[name];\r\n historyService[name] = historyLayer.filter(f => f !== e.feature);\r\n }\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.FEATURESCLEAR, function (e) {\r\n if (e.layer === self.resultsLayer) {\r\n self._infoHistory = {};\r\n }\r\n })\r\n .on(TC.Consts.event.VIEWCHANGE, function (_e) {\r\n self.closeResults();\r\n });\r\n\r\n await clickRegisterPromise;\r\n if (self.options.share) {\r\n await self.getShareDialog();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n // Este div se usa como buffer, así que no debe ser visible.\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', {\r\n checkboxId: self.getUID(),\r\n elevation: self.options.displayElevation\r\n }, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }));\r\n };\r\n\r\n ctlProto.responseCallback = function (options) {\r\n const self = this;\r\n self.querying = false;\r\n\r\n if (self.filterFeature) {\r\n self.info = { services: options.services };\r\n if (self.options.persistentHighlights) {\r\n // Eliminamos de la respuesta las entidades que ya están resaltadas\r\n for (let url in self._infoHistory) {\r\n const infoService = (self.info.services || []).find(s => s.url === url);\r\n if (infoService) {\r\n const historyService = self._infoHistory[url];\r\n for (let name in historyService) {\r\n const infoLayer = infoService.layers.filter(l => l.name === name)[0];\r\n if (infoLayer) {\r\n const historyLayer = historyService[name];\r\n historyLayer.forEach(function (feature) {\r\n const id = feature.wrap.getId();\r\n const idx = infoLayer.features.findIndex(f => f.wrap.getId() === id);\r\n if (idx !== -1) {\r\n infoLayer.features.splice(idx, 1);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!options.featureCount) {\r\n self.lastFeatureCount = 0;\r\n self.map.trigger(TC.Consts.event.NOFEATUREINFO, { control: self });\r\n }\r\n else {\r\n self._addSourceAttributes();\r\n self.lastFeatureCount = options.featureCount;\r\n self.map.trigger(TC.Consts.event.FEATUREINFO, TC.Util.extend({ control: self }, options));\r\n }\r\n };\r\n\r\n ctlProto.responseError = function (options) {\r\n const self = this;\r\n if (options.status === 404) {\r\n self.map.toast(self.getLocaleString(\"featureInfo.tooManyLayers\"), { type: TC.Consts.msgType.ERROR });\r\n }\r\n self.responseCallback({});\r\n };\r\n\r\n ctlProto.markerStyle = {\r\n cssClass: TC.Consts.classes.POINT,\r\n anchor: [0.5, 0.5],\r\n width: 15,\r\n height: 15,\r\n noPrint: true\r\n };\r\n\r\n ctlProto.setDisplayMode = async function (mode) {\r\n const self = this;\r\n self.displayMode = mode;\r\n switch (mode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n await self.getResultsPanel();\r\n break;\r\n default:\r\n self.displayMode = TC.Consts.infoContainer.POPUP;\r\n await self.getPopup();\r\n break;\r\n }\r\n };\r\n\r\n ctlProto.getPopup = async function () {\r\n const self = this;\r\n if (!self.popup) {\r\n self.popup = await self.map.addControl('popup', {\r\n closeButton: true,\r\n draggable: self.options.draggable,\r\n share: self.options.share\r\n });\r\n self.popup.caller = self;\r\n self.map.on(TC.Consts.event.POPUP, function (e) {\r\n self.onShowPopup(e);\r\n });\r\n }\r\n return self.popup;\r\n };\r\n\r\n ctlProto.getResultsPanel = async function () {\r\n const self = this;\r\n if (!self.resultsPanel) {\r\n let ctlPromise;\r\n const resultsPanelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: self.getLocaleString(\"threed.rs.panel.gfi\"),\r\n max: self.getLocaleString(\"threed.rs.panel.gfi\")\r\n },\r\n share: self.options.share\r\n };\r\n const container = self.map.getControlsByClass('TC.control.ControlContainer')[0];\r\n if (container) {\r\n resultsPanelOptions.position = container.POSITION.RIGHT;\r\n ctlPromise = container.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n ctlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n self.resultsPanel = await ctlPromise;\r\n self.resultsPanel.caller = self;\r\n }\r\n return self.resultsPanel;\r\n };\r\n\r\n ctlProto.getDisplayControl = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel;\r\n default:\r\n return self.popup;\r\n }\r\n };\r\n\r\n ctlProto.getDisplayTarget = function (options) {\r\n var self = this;\r\n options = options || {};\r\n if (options.control) {\r\n switch (true) {\r\n case TC.control.Popup && options.control instanceof TC.control.Popup:\r\n return options.control.getContainerElement();\r\n case TC.control.ResultsPanel && options.control instanceof TC.control.ResultsPanel:\r\n return options.control.getInfoContainer();\r\n default:\r\n return null;\r\n }\r\n }\r\n switch (self.displayMode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel.getInfoContainer();\r\n default:\r\n return self.popup.getContainerElement();\r\n }\r\n };\r\n\r\n ctlProto.getMenuTarget = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n return self.resultsPanel.getMenuElement();\r\n default:\r\n return self.popup.getMenuElement();\r\n }\r\n };\r\n\r\n ctlProto.displayResults = function () {\r\n var self = this;\r\n const clone = self.div.cloneNode(true);\r\n clone.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.filterFeature.data = clone.outerHTML;\r\n switch (self.displayMode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n if (self.resultsPanel) {\r\n // GLS: si contamos con el control de controles no es necesario cerrar los paneles visibles ya que no habría solape\r\n if (self.map.getControlsByClass(TC.control.ControlContainer).length === 0) {\r\n self.map.getControlsByClass(TC.control.ResultsPanel).forEach(function (p) {\r\n if (p.isVisible()) {\r\n p.close();\r\n }\r\n });\r\n }\r\n\r\n // cerramos los paneles con feature asociada\r\n const panels = self.map.getControlsByClass('TC.control.ResultsPanel');\r\n panels.forEach(function (p) {\r\n if (p !== self.resultsPanel && p.currentFeature && !p.chart) {\r\n p.close();\r\n }\r\n });\r\n\r\n self.resultsPanel.currentFeature = self.filterFeature;\r\n self.resultsPanel.open(self.filterFeature.data, self.resultsPanel.getInfoContainer());\r\n \r\n self.getMenuTarget().innerHTML = \"\";\r\n self.displayResultsCallback();\r\n \r\n }\r\n\r\n break;\r\n default:\r\n self.getPopup().then(popup => self.filterFeature.showPopup(popup));\r\n break;\r\n }\r\n };\r\n\r\n const getElementIndex = function (elm) {\r\n return Array.from(elm.parentElement.children).indexOf(elm);\r\n };\r\n\r\n const getParentElement = function (elm, tagName) {\r\n var result = elm;\r\n do {\r\n result = result.parentElement;\r\n }\r\n while (result && result.tagName !== tagName);\r\n return result;\r\n };\r\n\r\n const getFeatureFromListItem = function (ctl, li) {\r\n const currentFeatureLi = li;\r\n const currentLayerLi = getParentElement(li, 'LI');\r\n const currentServiceLi = getParentElement(currentLayerLi, 'LI');\r\n return ctl.getFeature(getElementIndex(currentServiceLi), getElementIndex(currentLayerLi), getElementIndex(currentFeatureLi));\r\n };\r\n\r\n ctlProto.getFeatureElement = function (feature) {\r\n const self = this;\r\n let result;\r\n\r\n const lis = self.getDisplayTarget().querySelectorAll(self._selectors.LIST_ITEM);\r\n for (var i = 0, ii = lis.length; i < ii; i++) {\r\n const li = lis[i];\r\n const feat = getFeatureFromListItem(self, li);\r\n if (feat === feature) {\r\n result = li;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getNextFeatureElement = function (delta) {\r\n const self = this;\r\n const lis = self.getDisplayTarget().querySelectorAll('ul.' + self.CLASS + '-features > li');\r\n const length = lis.length;\r\n for (var i = 0; i < length; i++) {\r\n if (lis[i].matches('.' + self.CURRENT_CLASS)) {\r\n return lis[(i + delta + length) % length];\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.getFeaturePath = function (feature) {\r\n const self = this;\r\n if (self.info && self.info.services) {\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n const service = self.info.services[i];\r\n for (var j = 0, jj = service.layers.length; j < jj; j++) {\r\n const layer = service.layers[j];\r\n for (var k = 0, kk = layer.features.length; k < kk; k++) {\r\n if (layer.features[k] === feature) {\r\n return {\r\n service: service.title || service.mapLayers.reduce(function (prev, cur) {\r\n return prev || cur.title;\r\n }, ''),\r\n layer: layer.path\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.closeResults = function () {\r\n var self = this;\r\n switch (self.displayMode) {\r\n case TC.Consts.infoContainer.RESULTS_PANEL:\r\n if (self.resultsPanel && self.resultsPanel.isVisible()) {\r\n self.resultsPanel.close();\r\n }\r\n break;\r\n default:\r\n if (self.popup && self.popup.isVisible()) {\r\n self.popup.hide();\r\n }\r\n break;\r\n }\r\n };\r\n\r\n ctlProto.displayResultsCallback = function () {\r\n var self = this;\r\n const content = self.getDisplayTarget().querySelector('.' + self.CLASS);\r\n\r\n //// Evento para resaltar una feature\r\n //const onListItemClick = function (e) {\r\n // self.highlightFeature(e.target);\r\n //};\r\n //// En iPad se usa click en vez de touchstart para evitar que se resalte una feature al hacer scroll\r\n //content.querySelectorAll(self._selectors.LIST_ITEM).forEach(li => li.addEventListener('click', onListItemClick));\r\n\r\n // Evento para ir a la siguiente feature\r\n const nextBtn = content.querySelector(`.${self.CLASS}-btn-next`);\r\n if (nextBtn) {\r\n nextBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.highlightFeature(self.getNextFeatureElement(1), 1);\r\n return false;\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para ir a la feature anterior\r\n const prevBtn = content.querySelector(`.${self.CLASS}-btn-prev`);\r\n if (prevBtn) {\r\n prevBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.highlightFeature(self.getNextFeatureElement(-1), -1);\r\n return false;\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para desplegar/replegar features de capa\r\n const onTitleClick = function (e) {\r\n const li = getParentElement(e.target, 'LI');\r\n if (li.classList.contains(TC.Consts.classes.CHECKED)) {\r\n // Si no está en modo móvil ocultamos la capa (si hay más de una)\r\n const anotherLayer = content.querySelector(`.${self.CLASS}-layers li:not(.tc-checked)`);\r\n if (anotherLayer && getComputedStyle(anotherLayer).display !== 'none') {\r\n self.downplayFeatures();\r\n }\r\n }\r\n else {\r\n self.highlightFeature(li.querySelector(self._selectors.LIST_ITEM));\r\n if (self.displayMode === TC.Consts.infoContainer.POPUP) {\r\n self.popup.fitToView(true);\r\n }\r\n }\r\n };\r\n content.querySelectorAll(`ul.${self.CLASS}-layers h4`).forEach(h => h.addEventListener(TC.Consts.event.CLICK, onTitleClick, { passive: true }));\r\n if (self.displayMode === TC.Consts.infoContainer.POPUP) {\r\n content.querySelectorAll('img').forEach(img => img.addEventListener('load', () => self.popup.fitToView()));\r\n }\r\n\r\n // Evento para borrar la feature resaltada\r\n //selector = '.' + self.CLASS + '-del-btn';\r\n //content.addEventListener(eventType, TC.EventTarget.listenerBySelector(selector, function (e) {\r\n // self.downplayFeatures();\r\n // self.closeResults();\r\n //}));\r\n\r\n if (self.info) {\r\n const features = self.getFeatures();\r\n const menu = self.getMenuTarget();\r\n if (features.length > 1) {\r\n // Hay más de una feature\r\n self.getRenderedHtml(`${self.CLASS}-buttons`, { id: self.id }).then(function (html) {\r\n if (!menu.querySelector(`.${self.CLASS}-btn-dl`)) {\r\n menu.insertAdjacentHTML('beforeend', html);\r\n menu.querySelector(`.${self.CLASS}-btn-dl`).addEventListener(TC.Consts.event.CLICK, async function (_e) {\r\n const downloadDialog = await self.getDownloadDialog();\r\n let options = {\r\n title: self.getLocaleString(\"featureInfo\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self._getFileName()\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n downloadDialog.open(features, options);\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.SHOW_ALL_CHECKBOX).addEventListener('change', function (e) {\r\n if (e.target.checked) {\r\n self.showAllFeatures();\r\n }\r\n else {\r\n self.hideAllFeatures();\r\n }\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.ZOOM_ALL_BUTTON).addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.map.zoomToFeatures(features);\r\n }, { passive: true });\r\n\r\n menu.querySelector(self._selectors.DEL_ALL_BUTTON).addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.downplayFeatures();\r\n self.filterLayer.removeFeature(self.filterFeature);\r\n }, { passive: true });\r\n }\r\n });\r\n }\r\n else {\r\n const button = menu.querySelector(`.${self.CLASS}-btn`);\r\n if (button) {\r\n button.remove();\r\n }\r\n }\r\n if (self.info.defaultFeature && self.getFeatureElement(self.info.defaultFeature)) {\r\n self.getFeatureElement(self.info.defaultFeature).classList.add(TC.Consts.classes.DEFAULT);\r\n self.highlightFeature(self.info.defaultFeature);\r\n }\r\n else if (content.querySelector(self._selectors.LIST_ITEM)) {\r\n self.highlightFeature(content.querySelector(self._selectors.LIST_ITEM));\r\n }\r\n }\r\n\r\n content.querySelectorAll('table:not(.complexAttr)').forEach(function (table) {\r\n if (!table.parentElement.classList.contains(TC.Consts.classes.CHECKED)) {\r\n table.setAttribute('title', self.getLocaleString('clickToShowOnMap'));\r\n }\r\n // En iPad se usa click en vez de touchstart para evitar que se resalte una feature al hacer scroll\r\n table.addEventListener('click', function (e) {\r\n const li = this.parentElement;\r\n if (li.classList.contains(TC.Consts.classes.DISABLED)) {\r\n return;\r\n }\r\n if (li.classList.contains(TC.Consts.classes.CHECKED)) {\r\n // Si ya está seleccionada hacemos zoom\r\n const feature = getFeatureFromListItem(self, li);\r\n if (feature && window.getSelection() && window.getSelection().toString().trim().length === 0) {\r\n // Proceso para desactivar highlightFeature mientras hacemos zoom\r\n var zoomHandler = function zoomHandler() {\r\n self._zooming = false;\r\n self.map.off(TC.Consts.event.ZOOM, zoomHandler);\r\n };\r\n self.map.on(TC.Consts.event.ZOOM, zoomHandler);\r\n self._zooming = true;\r\n ///////\r\n\r\n self.map.zoomToFeatures([feature], { animate: true });\r\n }\r\n }\r\n else {\r\n // Si no está seleccionada la seleccionamos\r\n self.highlightFeature(li);\r\n }\r\n e.stopPropagation();\r\n }, { passive: true });\r\n });\r\n content.querySelectorAll('table a, table label, table input').forEach(function (a) {\r\n a.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n });\r\n\r\n if (TC.browserFeatures.touch() && self.displayMode === TC.Consts.infoContainer.RESULTS_PANEL) {\r\n const prevBtn = content.querySelector('.' + self.CLASS + '-btn-prev');\r\n if (!prevBtn || prevBtn.style.display !== 'none') { // Si los botones de anterior/siguiente están visibles, montamos el swipe\r\n if (self.resultsPanel) {\r\n TC.Util.swipe(self.resultsPanel.div, 'disable');\r\n }\r\n\r\n if (layerCount(self) > 1) {\r\n TC.Util.swipe(content, {\r\n left: function () {\r\n self.highlightFeature(self.getNextFeatureElement(1), 1);\r\n },\r\n right: function () {\r\n self.highlightFeature(self.getNextFeatureElement(-1), -1);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.onShowPopup = function (e) {\r\n const self = this;\r\n if (e.control === self.popup) {\r\n self.displayResultsCallback();\r\n }\r\n };\r\n\r\n ctlProto.loadSharedFeature = function (_featureObj) {\r\n\r\n };\r\n\r\n ctlProto.insertLinks = function () {\r\n var self = this;\r\n const linkText = self.getLocaleString('open');\r\n const titleText = self.getLocaleString('linkInNewWindow');\r\n self.div.querySelectorAll('td.' + self.CLASS + '-val').forEach(function (td) {\r\n const text = td.textContent;\r\n if (TC.Util.isURL(text)) {\r\n td.innerHTML = '' + linkText + '';\r\n }\r\n });\r\n };\r\n\r\n ctlProto.highlightFeature = function (featureOrElement, delta) {\r\n const self = this;\r\n var feature;\r\n if (!self._zooming) {\r\n var featureLi;\r\n // this puede ser o el elemento HTML de la lista correspondiente a la feature o la feature en sí\r\n if (featureOrElement instanceof TC.Feature) {\r\n feature = featureOrElement;\r\n featureLi = self.getFeatureElement(feature);\r\n }\r\n else {\r\n featureLi = featureOrElement;\r\n while (featureLi && featureLi.tagName !== 'LI') {\r\n featureLi = featureLi.parentElement;\r\n }\r\n }\r\n const layerLi = getParentElement(featureLi, 'LI');\r\n const serviceLi = getParentElement(layerLi, 'LI');\r\n\r\n const serviceIdx = getElementIndex(serviceLi);\r\n const layerIdx = getElementIndex(layerLi);\r\n const featureIdx = getElementIndex(featureLi);\r\n feature = feature || self.getFeature(serviceIdx, layerIdx, featureIdx);\r\n\r\n self.downplayFeatures({ exception: feature });\r\n\r\n // Añadimos feature al historial de features resaltadas\r\n const service = self.info.services[serviceIdx];\r\n if (!Object.prototype.hasOwnProperty.call(self._infoHistory, service.url)) {\r\n self._infoHistory[service.url] = {};\r\n }\r\n const historyService = self._infoHistory[service.url];\r\n const layer = service.layers[layerIdx];\r\n const historyLayer = historyService[layer.name] || [];\r\n if (!historyLayer.includes(feature)) {\r\n historyService[layer.name] = historyLayer.concat(feature);\r\n }\r\n\r\n const displayTarget = self.getDisplayTarget();\r\n displayTarget.querySelectorAll('li').forEach(elm => elm.classList.remove(self.CURRENT_CLASS));\r\n featureLi.classList.add(TC.Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n layerLi.classList.add(TC.Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n serviceLi.classList.add(TC.Consts.classes.CHECKED, self.CURRENT_CLASS);\r\n if (delta > 0) {\r\n featureLi.classList.add(TC.Consts.classes.FROMLEFT);\r\n layerLi.classList.add(TC.Consts.classes.FROMLEFT);\r\n serviceLi.classList.add(TC.Consts.classes.FROMLEFT);\r\n }\r\n else if (delta < 0) {\r\n featureLi.classList.add(TC.Consts.classes.FROMRIGHT);\r\n layerLi.classList.add(TC.Consts.classes.FROMRIGHT);\r\n serviceLi.classList.add(TC.Consts.classes.FROMRIGHT);\r\n }\r\n\r\n if (featureLi.querySelector('table')) {\r\n featureLi.querySelector('table').setAttribute('title', self.getLocaleString('clickToCenter'));\r\n }\r\n\r\n // Añadida esta condición porque si el servicio no devuelve datos parseables como feature se devuelve una pseudofeature sin geometría\r\n if (!(feature instanceof TC.Feature)) {\r\n feature = null;\r\n }\r\n\r\n //Si la feature a resaltar ya está resaltada, no hacemos nada. Así evitamos parpadeo\r\n if (feature && feature === self.highlightedFeature) {\r\n return;\r\n }\r\n\r\n self.highlightedFeature = feature;\r\n\r\n const counter = displayTarget.querySelector('.' + self.CLASS + '-counter-current');\r\n if (counter) {\r\n counter.innerHTML = self.getFeatureIndex(serviceIdx, layerIdx, featureIdx) + 1;\r\n }\r\n\r\n\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => {\r\n if (f !== feature) {\r\n self.downplayFeature(f);\r\n }\r\n });\r\n }\r\n if (feature) {\r\n const triggerEvent = f => self.map.trigger(TC.Consts.event.FEATUREHIGHLIGHT, { feature: f, control: self });\r\n if (feature.geometry) {\r\n feature.showsPopup = self.options.persistentHighlights;\r\n // Si persistentHighlights == true, es posible que la entidad que queremos añadir ya está en la capa de una consulta anterior\r\n // En ese caso, no añadimos entidad nueva\r\n let prevFeat;\r\n if (self.options.persistentHighlights) {\r\n prevFeat = self.resultsLayer.getFeatureById(feature.wrap.getId());\r\n if (prevFeat) {\r\n triggerEvent(prevFeat);\r\n }\r\n }\r\n if (!prevFeat) {\r\n self.resultsLayer.addFeature(feature).then(function (_f) {\r\n triggerEvent(feature);\r\n });\r\n }\r\n }\r\n else {\r\n featureLi.classList.add(TC.Consts.classes.DISABLED);\r\n triggerEvent(feature);\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.downplayFeature = function (feature) {\r\n const self = this;\r\n const li = self.getFeatureElement(feature);\r\n if (li) {\r\n li.classList.remove(TC.Consts.classes.CHECKED);\r\n }\r\n // Si persistentHighlights = true, puede que la entidad a borrar sea una persistida de una petición anterior\r\n let prevFeat;\r\n if (self.options.persistentHighlights) {\r\n prevFeat = self.resultsLayer.getFeatureById(feature.wrap.getId());\r\n }\r\n self.resultsLayer.removeFeature(prevFeat || feature);\r\n for (var url in self._infoHistory) {\r\n const service = self._infoHistory[url];\r\n for (var name in service) {\r\n let layer = service[name];\r\n layer = service[name] = layer.filter(f => f !== feature);\r\n if (!layer.length) {\r\n delete service[name];\r\n }\r\n }\r\n }\r\n if (self.highlightedFeature === feature) {\r\n self.highlightedFeature = null;\r\n }\r\n self.map.trigger(TC.Consts.event.FEATUREDOWNPLAY, { feature: feature, control: self });\r\n };\r\n\r\n ctlProto.downplayFeatures = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const prevHlFeature = self.highlightedFeature;\r\n if (prevHlFeature && prevHlFeature !== options.exception) {\r\n self.downplayFeature(prevHlFeature);\r\n self.highlightedFeature = null;\r\n }\r\n self.getFeatures()\r\n .filter(f => f !== prevHlFeature)\r\n .forEach(f => self.resultsLayer.removeFeature(f));\r\n\r\n const exceptionFLi = options.exception ? self.getFeatureElement(options.exception) : undefined;\r\n var exceptionLLi, exceptionSLi;\r\n if (exceptionFLi) {\r\n exceptionLLi = getParentElement(exceptionFLi, 'LI');\r\n exceptionSLi = getParentElement(exceptionLLi, 'LI');\r\n }\r\n\r\n const target = self.getDisplayTarget();\r\n Array.from(target.querySelectorAll('ul.' + self.CLASS + '-services li'))\r\n .filter(function (li) {\r\n return li !== exceptionFLi && li !== exceptionLLi && li !== exceptionSLi;\r\n })\r\n .forEach(function (li) {\r\n li.classList.remove(\r\n TC.Consts.classes.CHECKED,\r\n TC.Consts.classes.DISABLED,\r\n TC.Consts.classes.FROMLEFT,\r\n TC.Consts.classes.FROMRIGHT);\r\n });\r\n target.querySelectorAll('.' + self.CLASS + '-features table:not(.complexAttr)').forEach(function (table) {\r\n table.setAttribute('title', self.getLocaleString('clickToShowOnMap'));\r\n });\r\n\r\n setNotShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.showAllFeatures = function () {\r\n const self = this;\r\n if (self.highlightedFeature) {\r\n self.downplayFeature(self.highlightedFeature);\r\n }\r\n\r\n for (var i = 0, ii = self.info.services.length; i < ii; i++) {\r\n const currentService = self.info.services[i];\r\n const historyService = self._infoHistory[currentService.url] = self._infoHistory[currentService.url] || {};\r\n for (var j = 0, jj = currentService.layers.length; j < jj; j++) {\r\n const currentLayer = currentService.layers[j];\r\n let historyLayer = historyService[currentLayer.name] || [];\r\n for (var k = 0, kk = currentLayer.features.length; k < kk; k++) {\r\n const currentFeature = currentLayer.features[k];\r\n currentFeature.showsPopup = self.options.persistentHighlights;\r\n if (!historyLayer.includes(currentFeature)) {\r\n historyService[currentLayer.name] = historyLayer = historyLayer.concat(currentFeature);\r\n }\r\n if (!self.resultsLayer.features.includes(currentFeature)) {\r\n self.resultsLayer.addFeature(currentFeature);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.hideAllFeatures = function () {\r\n const self = this;\r\n const checkedLayer = self.getDisplayTarget().querySelector(`ul.${self.CLASS}-layers > li.${TC.Consts.classes.CHECKED}`);\r\n self.downplayFeatures();\r\n if (checkedLayer) {\r\n checkedLayer.classList.add(TC.Consts.classes.CHECKED);\r\n }\r\n //setNotShowAllUI.call(self);\r\n };\r\n\r\n ctlProto.getFeature = function (serviceIdx, layerIdx, featureIdx) {\r\n const self = this;\r\n var result;\r\n const info = self.info;\r\n if (info && info.services) {\r\n result = info.services[serviceIdx];\r\n if (result) {\r\n result = result.layers[layerIdx];\r\n if (result) {\r\n result = result.features[featureIdx];\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getFeatures = function () {\r\n const self = this;\r\n let result = [];\r\n const info = self.info;\r\n if (info && info.services) {\r\n result = info.services.reduce((prev, cur) => {\r\n return prev.concat(cur.layers.reduce((p, c) => {\r\n return p.concat(c.features);\r\n }, []));\r\n }, result);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getFeatureIndex = function (serviceIdx, layerIdx, featureIdx) {\r\n const self = this;\r\n var result = -1;\r\n const info = self.info;\r\n if (info) {\r\n for (var i = 0; i <= serviceIdx; i++) {\r\n var service = info.services[i];\r\n var maxj = i === serviceIdx ? layerIdx : service.layers.length - 1;\r\n for (var j = 0; j <= maxj; j++) {\r\n var layer = service.layers[j];\r\n var maxk = j === layerIdx && i === serviceIdx ? featureIdx : layer.features.length - 1;\r\n for (var k = 0; k <= maxk; k++) {\r\n result = result + 1;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.beforeRequest = function (options) {\r\n var self = this;\r\n self.querying = true;\r\n self.map.trigger(TC.Consts.event.BEFOREFEATUREINFO, {\r\n xy: options.xy,\r\n control: self\r\n });\r\n self.closeResults();\r\n if (self.map && self.resultsLayer) {\r\n self.lastFeatureCount = null;\r\n\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => self.downplayFeature(f));\r\n }\r\n self.info = null;\r\n }\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n if (self.wrap) {\r\n self.wrap.activate();\r\n }\r\n TC.Control.prototype.activate.call(self);\r\n };\r\n\r\n ctlProto.deactivate = function (stopChain) {\r\n var self = this;\r\n if (self.popup && self.popup.isVisible()) {\r\n self.popup.hide();\r\n }\r\n if (!self.options.persistentHighlights) {\r\n self.resultsLayer.features.slice().forEach(f => self.downplayFeature(f));\r\n self.info = null;\r\n self._infoHistory = {};\r\n }\r\n self.filterLayer && self.filterLayer.clearFeatures();\r\n self.filterFeature = null;\r\n if (self.wrap) {\r\n self.wrap.deactivate();\r\n }\r\n TC.Control.prototype.deactivate.call(self, stopChain);\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState && self.resultsLayer) {\r\n const exportStateOptions = {};\r\n // Si exportamos una consulta, tenemos que quitar las entidades resaltadas para evitar exportarlas dos veces\r\n if (self.toShare) {\r\n exportStateOptions.features = [];\r\n }\r\n return {\r\n id: self.id,\r\n layer: self.resultsLayer.exportState(exportStateOptions),\r\n query: self.toShare\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n self._layersPromise.then(function () {\r\n self.resultsLayer.importState(state.layer);\r\n if (state.query) {\r\n self.importQuery(state.query);\r\n }\r\n });\r\n };\r\n\r\n ctlProto._createLayers = function () {\r\n const self = this;\r\n\r\n var resultsLayer;\r\n if (self.options.resultsLayer) { // En caso de que se haya indicado una capa por configuración, la utilizamos\r\n resultsLayer = self.options.resultsLayer;\r\n } else {\r\n resultsLayer = {\r\n id: self.getUID(),\r\n title: self.CLASS + ': Results layer',\r\n type: TC.Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true\r\n };\r\n }\r\n var filterLayer;\r\n if (self.options.filterLayer) {\r\n filterLayer = self.options.filterLayer;\r\n }\r\n else {\r\n const styles = {};\r\n if (self.geometryType === TC.Consts.geom.POLYLINE) {\r\n styles.line = self.style;\r\n }\r\n if (self.geometryType === TC.Consts.geom.POLYGON) {\r\n styles.polygon = self.style;\r\n }\r\n\r\n filterLayer = {\r\n id: self.getUID(),\r\n title: self.CLASS + ': Filter layer',\r\n owner: self,\r\n stealth: true,\r\n type: TC.Consts.layerType.VECTOR,\r\n styles: styles\r\n };\r\n }\r\n\r\n const map = self.map;\r\n self._layersPromise = new Promise(function (resolve, _reject) {\r\n map.loaded(function () {\r\n const rlPromise = map.layers.indexOf(resultsLayer) >= 0 ?\r\n Promise.resolve(resultsLayer) : map.addLayer(resultsLayer);\r\n const flPromise = map.layers.indexOf(filterLayer) >= 0 ?\r\n Promise.resolve(filterLayer) : map.addLayer(filterLayer);\r\n Promise.all([rlPromise, flPromise]).then(function (layers) {\r\n self.resultsLayer = layers[0];\r\n self.filterLayer = layers[1];\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return self._layersPromise;\r\n };\r\n\r\n ctlProto._decorateDisplay = function (displayControl) {\r\n const self = this;\r\n\r\n const resultsContainer = self.getMenuTarget({ control: displayControl });\r\n\r\n // Añadimos botón de imprimir\r\n const printBtn = resultsContainer.querySelector('.' + TC.control.Print.prototype.CLASS + '-btn');\r\n if (printBtn) {\r\n // Si no hay datos porque el popup es de un GFI sin éxito y no es de una feature resaltada borramos impresora\r\n if (!self.lastFeatureCount && (!displayControl.currentFeature || displayControl.currentFeature.showsPopup !== true)) {\r\n printBtn.remove();\r\n }\r\n }\r\n else {\r\n var printTitle = self.getLocaleString(\"feature\");\r\n if (displayControl === self.getDisplayControl()) {\r\n if (TC.feature.Point && self.filterFeature instanceof TC.feature.Point) {\r\n const geom = self.filterFeature.geometry;\r\n printTitle = self.getLocaleString('featuresAt', {\r\n crs: self.map.crs,\r\n x: TC.Util.formatCoord(geom[0], self.map.wrap.isGeo() ? TC.Consts.DEGREE_PRECISION : TC.Consts.METER_PRECISION),\r\n y: TC.Util.formatCoord(geom[1], self.map.wrap.isGeo() ? TC.Consts.DEGREE_PRECISION : TC.Consts.METER_PRECISION)\r\n });\r\n }\r\n else {\r\n printTitle = self.getLocaleString('spatialQueryResults');\r\n }\r\n }\r\n else if (displayControl.currentFeature) {\r\n printTitle = displayControl.currentFeature.id;\r\n }\r\n\r\n // Si hay datos porque el popup es de un GFI con éxito o es de una feature resaltada damos la opción de imprimirlos\r\n if (self.lastFeatureCount || displayControl.currentFeature && displayControl.currentFeature.showsPopup === true) {\r\n new TC.control.Print({\r\n target: resultsContainer,\r\n printableElement: self.getDisplayTarget({ control: displayControl }),\r\n title: printTitle\r\n });\r\n }\r\n }\r\n\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners(displayControl.getContainerElement());\r\n\r\n };\r\n\r\n ctlProto._addSourceAttributes = function () {\r\n const self = this;\r\n const serviceAttrName = 'h3_' + self.getLocaleString('service');\r\n const layerAttrName = 'h4_' + self.getLocaleString('layer');\r\n // Añadimos como atributos los títulos de servicio y capa\r\n if (self.info && self.info.services) {\r\n self.info.services.forEach(function (service) {\r\n service.layers.forEach(function (layer) {\r\n layer.features.forEach(function (feature) {\r\n if (feature instanceof TC.Feature) {\r\n const path = self.getFeaturePath(feature);\r\n if (path) {\r\n const newData = {};\r\n newData[serviceAttrName] = path.service;\r\n if (path.layer) {\r\n newData[layerAttrName] = path.layer.join(self.TITLE_SEPARATOR);\r\n }\r\n const allData = TC.Util.extend(newData, feature.getData());\r\n feature.clearData();\r\n feature.setData(allData);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n };\r\n\r\n ctlProto._getFileName = function () {\r\n const self = this;\r\n return self.getLocaleString('featureInfo').toLowerCase().replace(/\\s/gi, '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n };\r\n\r\n ctlProto.showShareDialog = function (dialogDiv) {\r\n const self = this;\r\n self.toShare = self.exportQuery();\r\n return TC.control.infoShare.showShareDialog.call(self, dialogDiv);\r\n };\r\n\r\n ctlProto.exportQuery = function () {\r\n const self = this;\r\n const result = {};\r\n if (self.filterFeature) {\r\n const filterLayerState = self.filterLayer.exportState();\r\n filterLayerState.features.forEach(f => delete f.data);\r\n result.filter = filterLayerState;\r\n if (self.highlightedFeature) {\r\n result.hlf = self.highlightedFeature.getId();\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.importQuery = function (query) {\r\n const self = this;\r\n if (query.filter) {\r\n self.activate();\r\n self.filterLayer.importState(query.filter)\r\n .then(function () {\r\n self.filterFeature = self.filterLayer.features[0];\r\n self.sendRequest(self.filterFeature);\r\n const onFeatureHighlight = function (e) {\r\n if (e.control === self) {\r\n const feature = self.getFeatures().find(f => f.getId() === query.hlf);\r\n if (feature) {\r\n self.highlightFeature(feature);\r\n }\r\n else {\r\n if (!Object.prototype.hasOwnProperty.call(query, \"hlf\")) {\r\n // timeout porque se está generando asíncronamente el botón de mostrar todas\r\n setTimeout(() => self.showAllFeatures(), 100);\r\n }\r\n }\r\n self.map.off(TC.Consts.event.FEATUREHIGHLIGHT, onFeatureHighlight);\r\n }\r\n };\r\n self.map.on(TC.Consts.event.FEATUREHIGHLIGHT, onFeatureHighlight);\r\n });\r\n }\r\n };\r\n\r\n const staticMethodMock = {};\r\n\r\n TC.control.FeatureInfoCommons.renderFeatureAttributeTable = function (options) {\r\n if (!staticMethodMock.template) {\r\n staticMethodMock.template = TC.Util.extend({}, ctlProto.template);\r\n }\r\n return ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-attr', options);\r\n };\r\n\r\n TC.control.FeatureInfoCommons.renderFeatureAttribute = function (options) {\r\n if (!staticMethodMock.template) {\r\n staticMethodMock.template = TC.Util.extend({}, ctlProto.template);\r\n }\r\n return ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-attr-val', options);\r\n };\r\n\r\n TC.control.FeatureInfoCommons.showImageDialog = function (img) {\r\n if (!staticMethodMock.template) {\r\n staticMethodMock.template = TC.Util.extend({}, ctlProto.template);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n ctlProto.getRenderedHtml.call(staticMethodMock, ctlProto.CLASS + '-dialog', {\r\n src: img.getAttribute('src')\r\n }).then(function (html) {\r\n const container = document.createElement('div');\r\n document.body.appendChild(container);\r\n container.innerHTML = html;\r\n TC.Util.showModal(container.querySelector(`.${ctlProto.CLASS}-img-dialog`), {\r\n closeCallback: () => container.remove()\r\n });\r\n container.querySelector('.tc-modal-img img').addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n TC.Util.closeModal();\r\n }, { passive: true });\r\n resolve(container);\r\n });\r\n });\r\n };\r\n\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners = function (container) {\r\n container.querySelectorAll('img.tc-img-attr').forEach(function (img) {\r\n img.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n setTimeout(() => TC.control.FeatureInfoCommons.showImageDialog(e.target), 50);\r\n e.stopPropagation(); // No queremos zoom si pulsamos en una imagen\r\n }, { passive: true });\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst FeatureInfoCommons = TC.control.FeatureInfoCommons;\r\nexport default FeatureInfoCommons;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\nimport Print from './Print';\r\n\r\nTC.control = TC.control || {};\r\nTC.control.infoShare = infoShare;\r\nTC.control.Print = Print;\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\n\r\nTC.Consts.event.POPUP = TC.Consts.event.POPUP || 'popup.tc';\r\nTC.Consts.event.POPUPHIDE = TC.Consts.event.POPUPHIDE || 'popuphide.tc';\r\nTC.Consts.event.DRAWCHART = TC.Consts.event.DRAWCHART || 'drawchart.tc';\r\nTC.Consts.event.DRAWTABLE = TC.Consts.event.DRAWTABLE || 'drawtable.tc';\r\nTC.Consts.event.DIALOG = TC.Consts.event.DIALOG || 'dialog.tc';\r\nTC.Consts.event.FEATUREHIGHLIGHT = TC.Consts.event.FEATUREHIGHLIGHT || 'featurehighlight.tc';\r\nTC.Consts.event.FEATUREDOWNPLAY = TC.Consts.event.FEATUREDOWNPLAY || 'featuredownplay.tc';\r\n\r\nTC.control.FeatureTools = function() {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.exportsState = true;\r\n const cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]',\r\n INTERPOLATION_RADIO: 'input[type=radio][name=finfo-ip-coords]',\r\n INTERPOLATION_DISTANCE: cs + '-dialog-ip-m'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n};\r\n\r\nTC.inherit(TC.control.FeatureTools, TC.Control);\r\nTC.mix(TC.control.FeatureTools, TC.control.infoShare);\r\n\r\n(function() {\r\n var ctlProto = TC.control.FeatureTools.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-ftools';\r\n\r\n ctlProto.TITLE_SEPARATOR = ' › ';\r\n ctlProto.FILE_TITLE_SEPARATOR = '__';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
        \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"feature\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":34}}})) + \" - \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"share\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":37},\"end\":{\"line\":5,\"column\":53}}})) + \"

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.register = function(map) {\r\n const self = this;\r\n map\r\n .on(TC.Consts.event.POPUP + ' ' + TC.Consts.event.DRAWTABLE + ' ' + TC.Consts.event.DRAWCHART, function(e) {\r\n const control = e.control;\r\n if (control.caller || control.currentFeature) {\r\n self.addUI(control);\r\n }\r\n // TODO: ¿Y si miramos si la feature del control ya está asociada a otro control abierto para decir si decoramos o no?\r\n })\r\n .on(TC.Consts.event.FEATUREHIGHLIGHT, function(e) {\r\n self.addUI(e.control.getDisplayControl());\r\n })\r\n .on(TC.Consts.event.FEATUREDOWNPLAY, function(e) {\r\n self.updateUI(e.control.getDisplayControl());\r\n });\r\n\r\n return new Promise(function(resolve, reject) {\r\n Promise.all([TC.Control.prototype.register.call(self, map), self.renderPromise()]).then(function() {\r\n self.getShareDialog().then(function() {\r\n resolve(self);\r\n }).catch(function(err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function() {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n self.renderData({ elevation: self.options.displayElevation }),\r\n self.getRenderedHtml(self.CLASS + '-dialog', {\r\n checkboxId: self.getUID(),\r\n elevation: self.options.displayElevation\r\n }, function(html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n };\r\n\r\n ctlProto.addUI = function(ctl) {\r\n const self = this;\r\n const menuContainer = ctl.getMenuElement();\r\n // Nos aseguramos de que el se decora el control una sola vez\r\n const menuIsMissing = function() {\r\n return menuContainer && !menuContainer.querySelector('.' + self.CLASS);\r\n };\r\n\r\n if (self.getCurrentFeature(ctl)) {\r\n if (menuIsMissing()) {\r\n // Añadimos los botones de herramientas\r\n self.getRenderedHtml(self.CLASS, null, function (html) {\r\n\r\n // Añadimos botón de imprimir\r\n if (menuIsMissing()) {\r\n let endAddUIPromise = Promise.resolve();\r\n const container = ctl.getContainerElement();\r\n if (!container.querySelectorAll('.' + TC.control.Print.prototype.CLASS + '-btn').length) {\r\n const highlightedFeature = !ctl.caller && ctl.currentFeature ? ctl.currentFeature : ctl.caller.highlightedFeature;\r\n if (highlightedFeature && highlightedFeature.showsPopup === true) {\r\n self.printControl = new TC.control.Print({\r\n target: menuContainer,\r\n printableElement: container,\r\n title: highlightedFeature.id\r\n });\r\n endAddUIPromise = self.printControl.renderPromise();\r\n }\r\n }\r\n\r\n endAddUIPromise.then(function endAddUI() {\r\n if (menuIsMissing()) {\r\n const parser = new DOMParser();\r\n const tools = parser.parseFromString(html, 'text/html').body.firstChild;\r\n menuContainer.appendChild(tools);\r\n\r\n self.updateUI(ctl);\r\n\r\n self._setToolButtonHandlers(ctl);\r\n\r\n self._decorateDisplay(ctl);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n self.updateUI(ctl);\r\n }\r\n }\r\n };\r\n\r\n ctlProto._decorateDisplay = function(displayControl) {\r\n const self = this;\r\n\r\n displayControl.getContainerElement().querySelectorAll('table.tc-attr').forEach(function(attributeTable) {\r\n if (!displayControl.caller && displayControl.currentFeature) { // Si es un popup/panel propio de la feature\r\n\r\n // Añadimos un zoom a la feature al pulsar en la tabla\r\n attributeTable.addEventListener(TC.Consts.event.CLICK, function(_e) {\r\n self.zoomToFeatures([self.getCurrentFeature(displayControl)]);\r\n }, { passive: true });\r\n\r\n attributeTable.classList.add(self.CLASS + '-zoom');\r\n attributeTable.setAttribute('title', self.getLocaleString('clickToCenter'));\r\n }\r\n\r\n attributeTable.querySelectorAll('a, label, input, video, audio').forEach(function(a) {\r\n a.addEventListener(TC.Consts.event.CLICK, function(e) {\r\n e.stopPropagation(); // No queremos zoom si pulsamos en un enlace\r\n }, { passive: true });\r\n });\r\n });\r\n const table = displayControl.getContainerElement().querySelector(\".prpanel-body > table\");\r\n if (table) table.parentElement.classList.add(self.CLASS + '-zoom');\r\n };\r\n\r\n ctlProto.updateUI = function(ctl) {\r\n const self = this;\r\n const uiDiv = ctl.getMenuElement().querySelector('.' + self.CLASS);\r\n const currentFeature = self.getCurrentFeature(ctl);\r\n // Primer caso para que isActive == true: que esté resaltada una feature.\r\n // Segundo caso: que la feature no sea de GFI.\r\n // Se puede haber llamado a updateUI después de haber eliminado la feature(FEATUREDOWNPLAY)\r\n // por es necesario que la feature tenga capa para considerar isActive == true.\r\n const isActive = currentFeature && currentFeature.layer && currentFeature.layer.owner ?\r\n currentFeature.layer.owner.filterLayer !== currentFeature.layer : currentFeature && !!currentFeature.layer;\r\n if (isActive) {\r\n if (currentFeature) {\r\n uiDiv.dataset.layerId = currentFeature.layer.id;\r\n uiDiv.dataset.featureId = currentFeature.id;\r\n\r\n const isCluster = !!currentFeature.layer.cluster && currentFeature.features.length > 1;\r\n const shareBtn = uiDiv.querySelector(`.${self.CLASS}-share-btn`);\r\n shareBtn && shareBtn.classList.toggle(TC.Consts.classes.HIDDEN, isCluster);\r\n uiDiv.querySelector(`.${self.CLASS}-dl-btn`).classList.toggle(TC.Consts.classes.HIDDEN, isCluster);\r\n uiDiv.querySelector(`.${self.CLASS}-del-btn`).classList.toggle(TC.Consts.classes.HIDDEN, isCluster);\r\n\r\n self.getElevationTool().then(function(tool) {\r\n const profileBtn = uiDiv.querySelector(`.${self.CLASS}-prof-btn`);\r\n if (profileBtn) {\r\n profileBtn.classList.toggle(TC.Consts.classes.HIDDEN,\r\n !tool ||\r\n !(TC.feature.Polyline && currentFeature instanceof TC.feature.Polyline ||\r\n TC.feature.MultiPolyline && currentFeature instanceof TC.feature.MultiPolyline) ||\r\n !!ctl.chart);\r\n }\r\n const elevBtn = uiDiv.querySelector(`.${self.CLASS}-elev-btn`);\r\n if (elevBtn) {\r\n elevBtn.classList.toggle(TC.Consts.classes.HIDDEN, !tool || !(currentFeature instanceof TC.feature.Point) || isCluster);\r\n }\r\n });\r\n }\r\n else {\r\n delete uiDiv.dataset.layerId;\r\n delete uiDiv.dataset.featureId;\r\n }\r\n }\r\n if (self.printControl && currentFeature) {\r\n self.printControl.title = currentFeature.id;\r\n }\r\n if (uiDiv) {\r\n uiDiv.classList.remove(TC.Consts.classes.ACTIVE);\r\n setTimeout(function() {\r\n uiDiv.classList.toggle(TC.Consts.classes.ACTIVE, !!isActive);\r\n }, 100);\r\n }\r\n };\r\n\r\n const getSingleClusteredFeature = function (feature) {\r\n if (feature && Array.isArray(feature.features)) {\r\n if (feature.features.length === 1) {\r\n return feature.features[0];\r\n }\r\n return null;\r\n }\r\n return feature;\r\n };\r\n\r\n const getClusteredFeatures = function (feature) {\r\n if (feature) {\r\n if (Array.isArray(feature.features)) {\r\n return feature.features;\r\n }\r\n return [feature];\r\n }\r\n return [];\r\n };\r\n\r\n ctlProto.onDownloadButtonClick = function (e) {\r\n const self = this;\r\n let feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n if (feature) {\r\n self.showDownloadDialog(feature);\r\n }\r\n };\r\n\r\n ctlProto.onShareButtonClick = function (e) {\r\n const self = this;\r\n const feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n if (feature) {\r\n prepareFeatureToShare(self, { feature: feature }).then(async function (f) {\r\n self.toShare = {\r\n feature: f\r\n };\r\n\r\n self.showShareDialog();\r\n });\r\n } else {\r\n throw \"FeatureTools: there is not a feature to share\";\r\n }\r\n };\r\n\r\n ctlProto.onZoomButtonClick = function (e) {\r\n const self = this;\r\n const features = getClusteredFeatures(self.getFeatureFromElement(e.target.parentElement));\r\n if (features.length) {\r\n self.zoomToFeatures(features);\r\n }\r\n };\r\n\r\n ctlProto.onDeleteButtonClick = function (e) {\r\n const self = this;\r\n self.removeFeature(self.getFeatureFromElement(e.target.parentElement));\r\n };\r\n\r\n ctlProto.onProfileButtonClick = function (e) {\r\n const self = this;\r\n const feature = getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement));\r\n const depOptions = {};\r\n if (feature) {\r\n self.getElevationControl().then(function (elevCtl) {\r\n if (elevCtl) {\r\n if (feature.getGeometryStride() > 2) {\r\n depOptions.originalElevation = true;\r\n depOptions.onlyOriginalElevation = false;\r\n\r\n elevCtl.setElevationToolOptions({\r\n resolution: self.options.resolution || 0,\r\n sampleNumber: self.options.sampleNumber || 0\r\n });\r\n } else {\r\n elevCtl.setElevationToolOptions(Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation));\r\n }\r\n elevCtl.displayElevationProfile(feature, depOptions);\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctlProto.onElevationButtonClick = function (e) {\r\n const self = this;\r\n self.getElevationControl().then(elevCtl => elevCtl &&\r\n elevCtl.displayElevationValue(getSingleClusteredFeature(self.getFeatureFromElement(e.target.parentElement)), {\r\n ignoreCache: true\r\n }));\r\n };\r\n\r\n ctlProto._setToolButtonHandlers = function(ctl) {\r\n const self = this;\r\n\r\n const container = ctl.getMenuElement();\r\n\r\n // Evento para mostrar diálogo modal de descarga\r\n container.querySelector('.' + self.CLASS + '-dl-btn').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onDownloadButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para mostrar diálogo modal de compartir\r\n container.querySelector('.' + self.CLASS + '-share-btn').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onShareButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para hacer zoom\r\n container.querySelector('.' + self.CLASS + '-zoom-btn').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onZoomButtonClick(e);\r\n }, { passive: true });\r\n\r\n // Evento para hacer ver perfil\r\n const profileBtn = container.querySelector(`.${self.CLASS}-prof-btn`);\r\n if (profileBtn) {\r\n profileBtn.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onProfileButtonClick(e);\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para hacer ver elevación\r\n const elevBtn = container.querySelector(`.${self.CLASS}-elev-btn`);\r\n if (elevBtn) {\r\n elevBtn.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onElevationButtonClick(e);\r\n }, { passive: true });\r\n }\r\n\r\n // Evento para borrar la feature\r\n container.querySelector('.' + self.CLASS + '-del-btn').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self.onDeleteButtonClick(e);\r\n }, { passive: true });\r\n };\r\n\r\n ctlProto.getElevationControl = async function() {\r\n const self = this;\r\n if (!self.options.displayElevation) {\r\n return null;\r\n }\r\n if (!self.elevationControl) {\r\n self.elevationControl = await self.map.addControl('elevation', self.options.displayElevation);\r\n }\r\n return self.elevationControl;\r\n };\r\n\r\n ctlProto.showDownloadDialog = async function(feature) {\r\n const self = this;\r\n\r\n const downloadDialog = await self.getDownloadDialog();\r\n\r\n var options = {\r\n title: self.getLocaleString(\"feature\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self._getFeatureFilename(feature)\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n\r\n options.openCallback = function() {\r\n self.map.trigger(TC.Consts.event.DIALOG, { control: downloadDialog, action: \"download\" });\r\n };\r\n\r\n downloadDialog.open(feature, options);\r\n };\r\n\r\n ctlProto.getCurrentFeature = function(ctl) {\r\n return ctl &&\r\n (ctl.caller && ctl.caller.highlightedFeature || ctl.currentFeature);\r\n };\r\n\r\n ctlProto.getFeatureFromElement = function (elm) {\r\n const self = this;\r\n const layer = self.map.getLayer(elm.dataset.layerId);\r\n if (layer) {\r\n return layer.getFeatureById(elm.dataset.featureId);\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.zoomToFeatures = function(features) {\r\n const self = this;\r\n if (self.map) {\r\n self.map.zoomToFeatures(features, { animate: true });\r\n }\r\n };\r\n\r\n ctlProto.removeFeature = function(feature) {\r\n const self = this;\r\n const removeFeature = function () {\r\n if (feature && feature.layer) {\r\n feature.layer.removeFeature(feature);\r\n }\r\n };\r\n const closeDisplay = function() {\r\n const filterFn = ctl => ctl.caller && ctl.caller.highlightedFeature === feature && ctl.isVisible();\r\n const popups = self.map.getControlsByClass(TC.control.Popup);\r\n popups\r\n .filter(filterFn)\r\n .forEach(pu => pu.hide());\r\n\r\n const panels = self.map.getControlsByClass(TC.control.ResultsPanel);\r\n panels\r\n .filter(filterFn)\r\n .forEach(p => p.close());\r\n };\r\n // No pedimos confirmación para borrar si es un resalte de GFI.\r\n if (feature && feature.layer && feature.layer.owner && feature.layer === feature.layer.owner.resultsLayer) {\r\n removeFeature();\r\n closeDisplay();\r\n }\r\n else {\r\n TC.confirm(self.getLocaleString('deleteFeature.confirm'), function() {\r\n removeFeature();\r\n closeDisplay();\r\n });\r\n }\r\n };\r\n\r\n const prepareFeatureToShare = function(ctl, options) {\r\n options = options || {};\r\n return new Promise(function(resolve, reject) {\r\n const currentFeature = options.feature;\r\n if (currentFeature) {\r\n const feature = currentFeature.clone();\r\n feature.setId(currentFeature.id);\r\n feature.layer = currentFeature.layer;\r\n if (options.elevation) {\r\n var mustGetElevations = true;\r\n if (!options.elevation.resolution && feature.getGeometryStride() > 2) {\r\n mustGetElevations = false;\r\n }\r\n if (mustGetElevations) {\r\n const elevOptions = {\r\n crs: ctl.map.crs,\r\n features: [feature],\r\n maxCoordQuantity: ctl.options.displayElevation && ctl.options.displayElevation.maxCoordQuantity,\r\n resolution: options.elevation.resolution,\r\n sampleNumber: 0 // No queremos determinar el número de muestras\r\n };\r\n ctl.getElevationTool().then(function(tool) {\r\n tool.setGeometry(elevOptions).then(\r\n function(features) {\r\n resolve(features[0]);\r\n },\r\n function(error) {\r\n reject(error instanceof Error ? error : Error(error));\r\n }\r\n );\r\n });\r\n }\r\n else {\r\n resolve(feature);\r\n }\r\n }\r\n else {\r\n const coordsArray = feature.getCoordsArray();\r\n const firstCoord = coordsArray[0];\r\n if (firstCoord && firstCoord.length > 2) {\r\n coordsArray.forEach(function(coord) {\r\n coord.length = 2;\r\n });\r\n feature.setCoords(feature.geometry);\r\n }\r\n resolve(feature);\r\n }\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getFeatureTitle = function(feature) {\r\n var result = \"\";\r\n if (feature) {\r\n result = feature.id;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto._getFeatureFilename = function(feature) {\r\n const self = this;\r\n const layerTitle = self.getFeatureTitle(feature).toString().replace(new RegExp(self.TITLE_SEPARATOR, 'g'), self.FILE_TITLE_SEPARATOR) || self.getLocaleString('feature');\r\n return layerTitle.toLowerCase().replace(/\\s/gi, '_') + '_' + TC.Util.getFormattedDate(new Date().toString(), true);\r\n };\r\n\r\n ctlProto.exportState = function() {\r\n const self = this;\r\n\r\n if (self.toShare) {\r\n const state = {};\r\n if (self.toShare.doZoom) {\r\n state.doZoom = self.toShare.doZoom;\r\n }\r\n state.id = self.id;\r\n if (self.toShare.feature) {\r\n let layerState;\r\n const featureToShare = self.toShare.feature.clone();\r\n featureToShare.showsPopup = true;\r\n layerState = self.toShare.feature.layer.exportState({\r\n features: [featureToShare]\r\n });\r\n state.features = layerState.features;\r\n if (layerState.crs) {\r\n state.crs = layerState.crs;\r\n }\r\n } else if (self.toShare.features) {\r\n state.features = self.toShare.features;\r\n if (self.sharedFeaturesLayer) {\r\n let layerState = self.sharedFeaturesLayer.exportState();\r\n state.features = layerState.features;\r\n }\r\n if (self.toShare.crs) {\r\n state.crs = self.toShare.crs;\r\n }\r\n }\r\n return state;\r\n\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function(state) {\r\n const self = this;\r\n if (self.map && state.features && state.features.length) {\r\n self.toShare = {\r\n features: state.features\r\n };\r\n if (state.crs) {\r\n self.toShare.crs = state.crs;\r\n }\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n owner: self,\r\n type: TC.Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n stealth: true\r\n }).then(function(layer) {\r\n self.sharedFeaturesLayer = layer;\r\n layer.importState({ features: state.features, crs: state.crs }).then(function() {\r\n if (state.doZoom) {\r\n self.map.zoomToFeatures(layer.features);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst FeatureTools = TC.control.FeatureTools;\r\nexport default FeatureTools;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport FileImport from './FileImport';\r\nimport Geometry from '../Geometry';\r\nimport Util from '../Util';\r\nimport Vector from '../layer/Vector';\r\nimport filter from '../filter';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Geometry = Geometry;\r\nTC.layer = TC.layer || {};\r\nTC.layer.Vector = Vector;\r\nTC.filter = filter;\r\n\r\nconst editedLayers = new Set();\r\nwindow.addEventListener('beforeunload', function onBeforeunload(e) {\r\n if (editedLayers.size > 0) {\r\n e.preventDefault();\r\n e.returnValue = '';\r\n }\r\n}, { capture: true });\r\n\r\nclass FileEdit extends FileImport {\r\n\r\n TITLE_SEPARATOR = ' › ';\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n self.CLASS = 'tc-ctl-fedit';\r\n self.template[self.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":163},\"end\":{\"line\":5,\"column\":193}}})) != null ? stack1 : \"\") + \".\" + container.escapeExpression(container.lambda(depth0, depth0));},\"2\":function(container,depth0,helpers,partials,data) { return \",\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"openFile\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":23}}})) + \"

        \\r\\n
        \\r\\n

        \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fileImport.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":7},\"end\":{\"line\":3,\"column\":41}}})) + \"

        \\r\\n
        \\r\\n \\r\\n
        \\r\\n
          \\r\\n
          \\r\\n\";},\"useData\":true}\r\n self.template[self.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          \\r\\n
          \\r\\n
          \\r\\n
          \\r\\n

          \\r\\n
          \\r\\n
          \\r\\n
          \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fileAccessPrompt\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":12},\"end\":{\"line\":9,\"column\":39}}})) + \"\\r\\n
          \\r\\n
          \\r\\n \\r\\n
          \\r\\n
          \\r\\n
          \\r\\n\";},\"useData\":true}\r\n self.template[self.CLASS + '-panel'] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          \\r\\n
          \\r\\n
          \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"includeSaveAs\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":7,\"column\":15}}})) != null ? stack1 : \"\") + \"
          \\r\\n
          \";},\"useData\":true}\r\n\r\n self.layer = null;\r\n self.styles = self.options.styles || {\r\n point: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n radius: 6\r\n },\r\n line: {\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n },\r\n polygon: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n };\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n const result = await super.register(map);\r\n\r\n map\r\n .on(TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control === self.panel) {\r\n self.closeEditSession();\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n editedLayers.delete(e.layer);\r\n if (e.layer === self.getLayer()) {\r\n self.closeEditSession();\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREADD, function (e) {\r\n if (e.layer === self.getLayer()) {\r\n const firstFeature = e.layer.features[0];\r\n if (firstFeature !== e.feature) {\r\n e.feature.folders = firstFeature.folders.slice();\r\n e.feature.wrap.feature._folders = e.feature.folders;\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREADD + ' ' + TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (e.layer === self.getLayer()) {\r\n if (!editedLayers.has(e.layer)) {\r\n editedLayers.add(e.layer);\r\n }\r\n }\r\n });\r\n\r\n self.getEditControl().then(editCtl => {\r\n editCtl.getModifyControl().then(modifyCtl => {\r\n modifyCtl.on(TC.Consts.event.FEATUREMODIFY, function (e) {\r\n if (!editedLayers.has(e.layer)) {\r\n editedLayers.add(e.layer);\r\n }\r\n });\r\n });\r\n });\r\n\r\n map.ready(function () {\r\n map.getControlsByClass(TC.control.WorkLayerManager).forEach(function (ctl) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const layer = map.getLayer(layerId);\r\n if (layer.type !== TC.Consts.layerType.VECTOR) {\r\n return;\r\n }\r\n const className = self.CLASS + '-btn-edit';\r\n let checkbox = container.querySelector('sitna-toggle.' + className);\r\n if (!checkbox) {\r\n const text = self.getLocaleString('editFeatures');\r\n checkbox = new Toggle();\r\n checkbox.text = text;\r\n checkbox.checkedIconText = getComputedStyle(document.querySelector(':root'))\r\n .getPropertyValue('--icon-edit')\r\n .replaceAll('\"', '');\r\n checkbox.uncheckedIconText = checkbox.checkedIconText;\r\n checkbox.dataset.layerId = layerId;\r\n }\r\n return checkbox;\r\n },\r\n updateEvents: [TC.Consts.event.CONTROLACTIVATE, TC.Consts.event.CONTROLDEACTIVATE],\r\n updateFn: function (_e) {\r\n const checkbox = this;\r\n const layer = map.getLayer(checkbox.dataset.layerId);\r\n checkbox.checked = self.getLayer() === layer;\r\n },\r\n actionFn: function () {\r\n const checkbox = this;\r\n const layer = map.getLayer(checkbox.dataset.layerId);\r\n if (!layer.isRaster()) {\r\n self.closeEditSession();\r\n if (checkbox.checked) {\r\n self.setLayer(layer).then(() => {\r\n self.openEditSession();\r\n });\r\n }\r\n }\r\n }\r\n });\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n async render(callback) {\r\n const self = this;\r\n await super.render.call(self, callback);\r\n const includeSaveAsButton = !!window.showSaveFilePicker;\r\n const html = await self.getRenderedHtml(self.CLASS + '-panel', { includeSaveAs : includeSaveAsButton });\r\n \r\n if (!self.panel) {\r\n self.panel = await self.map.addResultsPanel({\r\n resize: false,\r\n content: 'table',\r\n titles: {\r\n main: self.getLocaleString('editFeatures')\r\n }\r\n });\r\n self.panel.div.querySelector('.' + self.panel.CLASS + '-info').insertAdjacentHTML('beforeend', html);\r\n }\r\n self.saveButton = self.panel.div.querySelector(`.${self.CLASS}-actions sitna-button.${self.CLASS}-btn-save`);\r\n self.saveButton.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.editControl.modifyControl.unselectFeatures(self.editControl.getSelectedFeatures());\r\n self.save();\r\n }, { passive: true });\r\n if (includeSaveAsButton) {\r\n self.saveAsButton = self.panel.div.querySelector(`.${self.CLASS}-actions sitna-button.${self.CLASS}-btn-saveas`);\r\n self.saveAsButton.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.editControl.modifyControl.unselectFeatures(self.editControl.getSelectedFeatures());\r\n self.save({ showDialog: true });\r\n }, { passive: true });\r\n }\r\n self._editPromise = self._editPromise || self.map.addControl('edit', {\r\n id: self.getUID(),\r\n div: self.panel.div.querySelector(`.${self.CLASS}-edit`),\r\n layer: false,\r\n styles: self.styles,\r\n styling: true,\r\n snapping: self.options.snapping\r\n });\r\n self.editControl = await self._editPromise;\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n\r\n\r\n getEditControl() {\r\n const self = this;\r\n return self._editPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.editControl));\r\n });\r\n }\r\n\r\n async openEditSession() {\r\n const self = this;\r\n await self.renderPromise();\r\n const layer = self.getLayer();\r\n const styles = layer\r\n .features\r\n .map(f => f.getStyle())\r\n .filter(s => Object.keys(s).length);\r\n const editControl = await self.getEditControl();\r\n const pointControl = await editControl.getPointDrawControl();\r\n pointControl.toggleStyleTools(styles.length);\r\n const lineControl = await editControl.getLineDrawControl();\r\n lineControl.toggleStyleTools(styles.length);\r\n const polygonControl = await editControl.getPolygonDrawControl();\r\n polygonControl.toggleStyleTools(styles.length);\r\n if (styles.length) {\r\n const style = styles[0];\r\n if (style.strokeColor) {\r\n pointControl.setStrokeColor(style.strokeColor);\r\n lineControl.setStrokeColor(style.strokeColor);\r\n polygonControl.setStrokeColor(style.strokeColor);\r\n }\r\n if (style.strokeWidth) {\r\n pointControl.setStrokeWidth(style.strokeWidth);\r\n lineControl.setStrokeWidth(style.strokeWidth);\r\n polygonControl.setStrokeWidth(style.strokeWidth);\r\n }\r\n if (style.fillColor) {\r\n pointControl.setFillColor(style.fillColor);\r\n polygonControl.setFillColor(style.fillColor);\r\n }\r\n if (style.fillOpacity) {\r\n pointControl.setFillOpacity(style.fillOpacity);\r\n polygonControl.setFillOpacity(style.fillOpacity);\r\n }\r\n }\r\n self.panel.open();\r\n }\r\n\r\n closeEditSession() {\r\n const self = this;\r\n if (self.editControl) {\r\n self.editControl.setLayer(null);\r\n }\r\n if (self.panel && !self.panel.div.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.panel.close();\r\n }\r\n }\r\n\r\n setLayer(layer) {\r\n const self = this;\r\n if (self.editControl) {\r\n self.editControl.setLayer(layer);\r\n return Promise.resolve();\r\n }\r\n return Promise.reject(new Error('Edit control not initialized'));\r\n }\r\n\r\n getLayer() {\r\n const self = this;\r\n if (self.editControl) {\r\n return self.editControl.getLayer();\r\n }\r\n return null;\r\n }\r\n\r\n async save(options) {\r\n const self = this;\r\n options = options || {};\r\n const layer = options.layer || await self.getLayer();\r\n let endFn;\r\n let filterFn;\r\n let fileName;\r\n let format;\r\n let features;\r\n let permission;\r\n let fileHandle;\r\n let oldFileHandle;\r\n const cleanEditedLayerList = async function () {\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n filteredLayers.forEach(l => editedLayers.delete(l));\r\n };\r\n if (layer._fileHandle) {\r\n // Con File System Access API: guardamos archivo\r\n oldFileHandle = layer._fileHandle;\r\n fileHandle = oldFileHandle;\r\n fileName = fileHandle.name;\r\n filterFn = async function (layers) {\r\n const results = await Promise.all(layers.map(l => l._fileHandle && l._fileHandle.isSameEntry(oldFileHandle)));\r\n return layers.filter((_l, idx) => results[idx]);\r\n };\r\n const getPermission = async function (handle) {\r\n const permissionDescriptor = { mode: 'readwrite' };\r\n let result = await handle.queryPermission(permissionDescriptor);\r\n if (result !== 'granted') {\r\n result = await handle.requestPermission(permissionDescriptor);\r\n }\r\n return result;\r\n };\r\n if (!options.showDialog) {\r\n // El fileHandle no ha cambiado. \r\n // Pedimos ahora permiso porque estamos en una ruta\r\n // directa desde la intervención del usuario.\r\n permission = await getPermission(fileHandle);\r\n }\r\n endFn = async function () {\r\n if (options.showDialog) {\r\n if (window.showSaveFilePicker) {\r\n const mimeType = Util.getMimeTypeFromUrl(fileHandle.name);\r\n const type = self.fileTypes.find(type => type.accept[mimeType]);\r\n try {\r\n fileHandle = await window.showSaveFilePicker({\r\n suggestedName: fileHandle.name,\r\n types: [type]\r\n });\r\n permission = await getPermission(fileHandle);\r\n }\r\n catch (e) {\r\n console.log(e.message);\r\n return;\r\n }\r\n }\r\n }\r\n if (permission === 'granted') {\r\n const writable = await fileHandle.createWritable();\r\n const data = await self.map.exportFeatures(features, {\r\n fileName: fileName,\r\n format: format\r\n });\r\n try {\r\n await writable.write(data);\r\n writable.close();\r\n await cleanEditedLayerList();\r\n // Reasignamos el índice de grupo, porque es un achivo nuevo ahora\r\n let groupIndex = 0;\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n filteredLayers.forEach(async l => {\r\n // Si hemos \"guardado como\", asignamos el nuevo fileHandle\r\n if (options.showDialog) {\r\n l._fileHandle = fileHandle;\r\n }\r\n l.options.groupIndex = groupIndex++;\r\n await self.saveLayerMetadata(l);\r\n });\r\n // Si hemos \"guardado como\", metemos el nuevo archivo en la lista de archivos recientes\r\n if (options.showDialog) {\r\n await self.addRecentFile(fileHandle);\r\n }\r\n self.map.toast(self.getLocaleString('fileSaved'), { type: TC.Consts.msgType.INFO });\r\n }\r\n catch (e) {\r\n TC.error(e.message);\r\n }\r\n }\r\n };\r\n }\r\n else {\r\n // Sin File System Access API: descargamos archivo\r\n fileName = layer.options.fileSystemFile || layer.options.file;\r\n filterFn = async function (layers) {\r\n return layers.filter(l => layer.options.fileSystemFile ?\r\n l.options.fileSystemFile === layer.options.fileSystemFile :\r\n l.options.file === layer.options.file);\r\n };\r\n endFn = async function () {\r\n const data = await self.map.exportFeatures(features, {\r\n fileName: fileName,\r\n format: format\r\n })\r\n cleanEditedLayerList();\r\n switch (format) {\r\n case TC.Consts.format.SHAPEFILE:\r\n TC.Util.downloadBlob(fileName, data);\r\n break;\r\n case TC.Consts.format.GEOPACKAGE:\r\n TC.Util.downloadFile(fileName, \"application/geopackage+sqlite3\", data);\r\n break;\r\n case TC.Consts.format.KMZ:\r\n TC.Util.downloadBlob(fileName, data);\r\n break;\r\n default: {\r\n const mimeType = TC.Consts.mimeType[format];\r\n TC.Util.downloadFile(fileName, mimeType, data);\r\n break;\r\n }\r\n }\r\n };\r\n }\r\n if (fileName) {\r\n format = TC.Util.getFormatFromFileExtension(fileName.substr(fileName.lastIndexOf('.')));\r\n if (!format) {\r\n format = TC.Util.getFormatFromFileExtension(layer.options.file.substr(layer.options.file.lastIndexOf('.')));\r\n }\r\n const filteredLayers = await filterFn(self.map.workLayers);\r\n features = filteredLayers\r\n .map(l => l.features)\r\n .flat();\r\n const siblings = await filterFn(self.map.workLayers.filter(l => l !== layer));\r\n if (siblings.length) {\r\n TC.confirm(self.getLocaleString(\"fileSave.otherLayers.confirm\", {\r\n layerList: siblings.map(l => {\r\n if (l.features.length) {\r\n return l.features[0].getPath().join(self.TITLE_SEPARATOR);\r\n }\r\n return l.title;\r\n }).join(', ')\r\n }), endFn);\r\n }\r\n else {\r\n endFn();\r\n }\r\n }\r\n }\r\n}\r\ncustomElements.define('sitna-file-edit', FileEdit);\r\n\r\nexport default FileEdit;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Button from '../../SITNA/ui/Button';\r\nimport layerOwner from './layerOwner';\r\nimport Util from '../Util';\r\nimport localforage from 'localforage';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.Util = Util;\r\n\r\nclass FileImport extends WebComponentControl {\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n self.CLASS = 'tc-ctl-file';\r\n self.LAYER_METADATA_STORE_KEY_PREFIX = 'TC.fileLayerMetadata.';\r\n self.RECENT_FILES_STORE_KEY_PREFIX = 'TC.fileImportRecent.';\r\n self.template = {};\r\n self.template[self.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":163},\"end\":{\"line\":5,\"column\":193}}})) != null ? stack1 : \"\") + \".\" + container.escapeExpression(container.lambda(depth0, depth0));},\"2\":function(container,depth0,helpers,partials,data) { return \",\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

          \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"openFile\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":23}}})) + \"

          \\r\\n
          \\r\\n

          \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fileImport.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":7},\"end\":{\"line\":3,\"column\":41}}})) + \"

          \\r\\n
          \\r\\n \\r\\n
          \\r\\n
            \\r\\n
            \\r\\n\";},\"useData\":true}\r\n self.template[self.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fileAccessPrompt\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":12},\"end\":{\"line\":9,\"column\":39}}})) + \"\\r\\n
            \\r\\n
            \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n\";},\"useData\":true}\r\n\r\n self.recentFileCount = 8;\r\n self.recentFiles = [];\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.fileTypes = [\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.KML]: ['.' + TC.Consts.format.KML]\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.KMZ]: ['.' + TC.Consts.format.KMZ]\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.GML]: ['.' + TC.Consts.format.GML, '.' + TC.Consts.format.GML2]\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.GEOJSON]: ['.' + TC.Consts.format.GEOJSON, '.' + TC.Consts.format.JSON]\r\n }\r\n },\r\n {\r\n accept: {\r\n 'text/plain': ['.' + TC.Consts.format.WKT]\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.ZIP]: ['.zip']\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.GEOPACKAGE]: ['.' + TC.Consts.format.GEOPACKAGE]\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.SHAPEFILE]: ['.shp', '.dbf', '.prj', '.cst', '.cpg']\r\n }\r\n },\r\n {\r\n accept: {\r\n [TC.Consts.mimeType.GPX]: ['.' + TC.Consts.format.GPX]\r\n }\r\n }\r\n ];\r\n\r\n if (Array.isArray(self.options.formats)) {\r\n self.formats = self.options.formats;\r\n const mimeTypes = self.format.map(f => TC.Util.getMimeTypeFromUrl(f));\r\n self.fileTypes = self.fileTypes.filter(ft => {\r\n ft.accept.keys.some(key => mimeTypes.includes(key));\r\n });\r\n }\r\n else {\r\n self.formats = self.fileTypes.reduce((acc, ft) => {\r\n for (var key in ft.accept) {\r\n acc = acc.concat(ft.accept[key].map(ext => ext.substr(1)));\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n self.apiAttribution = '';\r\n self.mainDataAttribution = '';\r\n self.dataAttributions = [];\r\n\r\n self.exportsState = true;\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n self.registerLayerAdd();\r\n\r\n if (self.options.enableDragAndDrop) {\r\n map.wrap.enableDragAndDrop(self.options);\r\n }\r\n\r\n map._bufferFeatures = [];\r\n\r\n document.addEventListener('paste', async e => {\r\n if (e.clipboardData.files && e.clipboardData.files.length) {\r\n let files = e.clipboardData.files;\r\n if (DataTransferItem.prototype.getAsFileSystemHandle) {\r\n // Ruta de File System Access API\r\n files = [];\r\n for (var i = 0, ii = e.clipboardData.items.length; i < ii; ++i) {\r\n const item = e.clipboardData.items[i];\r\n const handle = await item.getAsFileSystemHandle();\r\n if (handle)files.push(handle);\r\n }\r\n }\r\n self.loadFiles(files);\r\n }\r\n else {\r\n if (!e.clipboardData.items.length) {\r\n map.toast(self.getLocaleString('fileImport.pasteNotSupported'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n }\r\n });\r\n map\r\n .on(TC.Consts.event.FEATURESIMPORT, async function (e) {\r\n const fileName = e.fileName;\r\n const fileHandle = e.fileHandle;\r\n const target = e.dropTarget;\r\n const features = e.features;\r\n const timeStamp = e.timeStamp;\r\n const groupIndex = e.groupIndex;\r\n const fileSystemFile = e.fileSystemFile && e.fileSystemFile.name;\r\n\r\n const projectGeom = function (feature) {\r\n const geogCrs = 'EPSG:4326';\r\n const geom = feature.geometry;\r\n if (geom) {\r\n var coordinates;\r\n switch (true) {\r\n case TC.feature.Point && feature instanceof TC.feature.Point:\r\n coordinates = [geom];\r\n break;\r\n case TC.feature.MultiPoint && feature instanceof TC.feature.MultiPoint:\r\n case TC.feature.Polyline && feature instanceof TC.feature.Polyline:\r\n coordinates = geom;\r\n break;\r\n case TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline:\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n coordinates = geom.flat();\r\n break;\r\n case TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon:\r\n coordinates = geom.flat(2);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (coordinates && coordinates.every(function (coord) {\r\n return Math.abs(coord[0]) <= 180 && Math.abs(coord[1]) <= 90; // Parecen geográficas\r\n })) {\r\n feature.setCoords(TC.Util.reproject(geom, geogCrs, self.map.crs));\r\n }\r\n }\r\n\r\n return feature;\r\n };\r\n // Ignoramos los GPX (se supone que los gestionará Geolocation)\r\n var gpxPattern = '.' + TC.Consts.format.GPX.toLowerCase();\r\n if (fileName.toLowerCase().indexOf(gpxPattern) === fileName.length - gpxPattern.length ||\r\n target && target !== self.map.div && target !== self) {\r\n return;\r\n }\r\n\r\n const addLayer = (id) => map.addLayer({\r\n id: id || self.getUID(fileHandle || timeStamp),\r\n title: fileName,\r\n owner: self,\r\n type: TC.Consts.layerType.VECTOR,\r\n file: fileName,\r\n groupIndex: groupIndex,\r\n fileSystemFile: fileSystemFile\r\n });\r\n\r\n let targetLayers = e.targetLayers || [];\r\n if (!targetLayers.length) {\r\n targetLayers.push(await addLayer());\r\n }\r\n for (var i = 0; i < targetLayers.length; i++) {\r\n const targetLayer = targetLayers[i];\r\n const mapLayer = self.map.getLayer(targetLayer) || await addLayer(targetLayer.id);\r\n const metadata = await self.loadLayerMetadata(mapLayer);\r\n if (!metadata || metadata.groupIndex === groupIndex) {\r\n targetLayers[i] = mapLayer;\r\n }\r\n else {\r\n // Este grupo de entidades no es para esta capa\r\n targetLayers[i] = false;\r\n }\r\n }\r\n targetLayers = targetLayers.filter(tl => tl);\r\n\r\n map._fileDropLoadingIndicator = map.getLoadingIndicator().addWait(map._fileDropLoadingIndicator);\r\n\r\n targetLayers.forEach(async function (layer) {\r\n if (fileHandle) {\r\n layer._fileHandle = fileHandle;\r\n if (e.additionalFileHandles) {\r\n layer._additionalFileHandles = e.additionalFileHandles;\r\n }\r\n await self.saveLayerMetadata(layer);\r\n if (!e.targetLayers) {\r\n // Es un archivo nuevo: lo guardamos en la lista\r\n let recentFileEntry = {\r\n mainHandle: fileHandle\r\n };\r\n if (layer._additionalFileHandles) {\r\n recentFileEntry.additionalHandles = layer._additionalFileHandles;\r\n }\r\n await self.addRecentFileEntry(recentFileEntry);\r\n }\r\n\r\n }\r\n layer._timeStamp = timeStamp;\r\n layer.owner = self;\r\n self.getLayers().push(layer);\r\n\r\n const uidPrefix = layer.id + '.';\r\n const ids = features.map(f => f.getId());\r\n const fixId = function (feature, idx) {\r\n const id = feature.getId();\r\n // Si está el id en el array de ids sin contar el índice del elemento actual\r\n if (ids.filter((_v, i) => i !== idx).includes(id)) {\r\n const newId = TC.getUID({\r\n prefix: uidPrefix,\r\n banlist: ids\r\n });\r\n ids[idx] = newId;\r\n feature.setId(newId);\r\n }\r\n return feature;\r\n };\r\n layer.addFeatures(\r\n features\r\n .map(projectGeom)\r\n .map(fixId)\r\n )\r\n .then(() => self.subtrackPendingFile());\r\n\r\n if (!e.targetLayer) {\r\n map._bufferFeatures = map._bufferFeatures.concat(layer.features);\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.FEATURESIMPORTERROR, function (e) {\r\n var dictKey;\r\n var fileName = e.file.name;\r\n if (fileName.toLowerCase().substr(fileName.length - 4) === '.kmz') {\r\n dictKey = 'fileImport.error.reasonKmz';\r\n }\r\n else {\r\n dictKey = 'fileImport.error.reasonUnknown';\r\n }\r\n\r\n TC.error(e.message ? self.getLocaleString(e.message) : self.getLocaleString(dictKey, { fileName: fileName }), TC.Consts.msgErrorMode.TOAST);\r\n\r\n var reader = new FileReader();\r\n reader.onload = function (event) {\r\n TC.error(\"Nombre del archivo: \" + fileName + \" \\n Contenido del archivo: \\n\\n\" + event.target.result, TC.Consts.msgErrorMode.EMAIL, \"Error en la subida de un archivo\");\r\n };\r\n self.subtrackPendingFile();\r\n })\r\n .on(TC.Consts.event.FEATURESIMPORTPARTIAL, function (e) {\r\n self.map.toast(self.getLocaleString(\"fileImport.partial.problem\", { fileName: e.file.name, table: e.table, reason: e.reason }), { type: TC.Consts.msgType.ERROR });\r\n })\r\n .on(TC.Consts.event.FEATURESIMPORTWARN, function (e) {\r\n self.map.toast(self.getLocaleString(\"fileImport.geomEmpty\", { fileName: e.file.name }), { type: TC.Consts.msgType.WARNING });\r\n })\r\n .on(TC.Consts.event.LAYERADD, function (e) {\r\n self.loadLayersFromFile([e.layer]);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n if (e.layer.owner === self) {\r\n self.deleteLayerMetadata(e.layer);\r\n }\r\n const ownLayers = self.getLayers();\r\n const idx = ownLayers.indexOf(e.layer);\r\n if (idx >= 0) {\r\n ownLayers.splice(idx, 1);\r\n }\r\n });\r\n\r\n map.loaded(() => {\r\n self.loadLayersFromFile(map.workLayers);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData({ formats: self.formats }, function () {\r\n const fileInput = self.querySelector('input[type=file]');\r\n // GLS: Eliminamos el archivo subido, sin ello no podemos subir el mismo archivo seguido varias veces\r\n fileInput.addEventListener(TC.Consts.event.CLICK, async function (e) {\r\n const input = this;\r\n // Envolvemos el input en un form\r\n const form = document.createElement('form');\r\n const parent = input.parentElement;\r\n parent.insertBefore(form, input);\r\n form.appendChild(input);\r\n form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', input);\r\n parent.removeChild(form);\r\n\r\n if (TC.Util.isFunction(window.showOpenFilePicker)) {\r\n e.preventDefault();\r\n let fileHandles;\r\n try {\r\n fileHandles = await window.showOpenFilePicker({\r\n multiple: true\r\n });\r\n }\r\n catch (e) {\r\n if (!(e instanceof AbortError)) {\r\n throw e;\r\n }\r\n }\r\n if (fileHandles) {\r\n self.loadFiles(fileHandles);\r\n }\r\n }\r\n });\r\n fileInput.addEventListener('change', function (e) {\r\n if (self.map) {\r\n self.loadFiles(e.target.files);\r\n }\r\n });\r\n\r\n self.renderRecentFileList();\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n resolve(self);\r\n });\r\n });\r\n }));\r\n }\r\n\r\n loadFiles(files) {\r\n const self = this;\r\n self.map.loadFiles(files, { control: self });\r\n return self;\r\n }\r\n\r\n async loadLayersFromFile(layers) {\r\n const self = this;\r\n // Verificamos si son capas propias y si son de archivo local serializadas\r\n const ownLayers = layers.filter(l => self.getIdCount(l.id) && !l.options.owner && l.options.file);\r\n if (ownLayers.length) {\r\n const fileHandles = [];\r\n const idCount = Math.max(...ownLayers.map(l => self.getIdCount(l.id)));\r\n TC.setUIDStart(idCount + 1, { prefix: self.id + '-' });\r\n const layersMetadata = await Promise.all(ownLayers.map(l => self.loadLayerMetadata(l)));\r\n ownLayers.forEach((l, idx) => {\r\n l.options.groupIndex = layersMetadata[idx]?.groupIndex;\r\n });\r\n const layerGroups = new Map();\r\n const additionalFileHandleDictionary = new Map();\r\n for (var i = 0; i < layersMetadata.length; i++) {\r\n const metadata = layersMetadata[i];\r\n if (metadata?.fileHandle) {\r\n let group;\r\n for (const [fileHandle, currentGroup] of layerGroups.entries()) {\r\n if (await fileHandle.isSameEntry(metadata.fileHandle)) {\r\n group = currentGroup;\r\n break;\r\n }\r\n }\r\n if (!group) {\r\n group = [];\r\n layerGroups.set(metadata.fileHandle, group);\r\n fileHandles.push(metadata.fileHandle);\r\n if (metadata.additionalFileHandles) {\r\n additionalFileHandleDictionary.set(metadata.fileHandle, metadata.additionalFileHandles);\r\n }\r\n }\r\n group.push(ownLayers[i]);\r\n }\r\n else {\r\n // Error: no existe el archivo en este navegador, por tanto eliminamos capa\r\n self.map.removeLayer(layers[i]);\r\n }\r\n }\r\n await self.renderPromise();\r\n const dialog = self._dialogDiv.querySelector(`.tc-ctl-file-dialog`);\r\n const title = dialog.querySelector('h3');\r\n const button = self._dialogDiv.querySelector('sitna-button.tc-ctl-file-dialog-ok');\r\n\r\n const endFn = handles => {\r\n self.map.loadFiles(handles, {\r\n layers: layerGroups.get(handles[0]),\r\n target: self\r\n });\r\n };\r\n\r\n for (const fileHandle of layerGroups.keys()) {\r\n let fileHandles = [fileHandle];\r\n const additionalFileHandles = additionalFileHandleDictionary.get(fileHandle);\r\n if (additionalFileHandles) {\r\n fileHandles = fileHandles.concat(additionalFileHandles);\r\n }\r\n\r\n const permissions = [];\r\n for await (let permission of fileHandles.map(h => h.queryPermission())) {\r\n permissions.push(permission);\r\n }\r\n let promptRequired = false;\r\n for (var j = 0; j < permissions.length; j++) {\r\n let permission = permissions[j];\r\n if (permission === 'prompt') {\r\n promptRequired = true;\r\n const pendingFileHandle = fileHandles[j];\r\n if (title.innerHTML.length) {\r\n const files = title.innerHTML.split(', ');\r\n if (!files.includes(pendingFileHandle.name)) {\r\n title.innerHTML = title.innerHTML + ', ' + pendingFileHandle.name;\r\n }\r\n }\r\n else {\r\n title.innerHTML = pendingFileHandle.name;\r\n }\r\n }\r\n }\r\n const isPermissionGranted = p => p === 'granted';\r\n if (promptRequired) {\r\n TC.Util.showModal(dialog);\r\n button.addEventListener('click', async function (_e) {\r\n for (var k = 0; k < permissions.length; k++) {\r\n permissions[k] = await fileHandles[k].requestPermission();\r\n }\r\n if (permissions.every(isPermissionGranted)) {\r\n endFn(fileHandles);\r\n }\r\n title.innerHTML = '';\r\n TC.Util.closeModal();\r\n });\r\n }\r\n else if (permissions.every(isPermissionGranted)) {\r\n endFn(fileHandles);\r\n }\r\n }\r\n }\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n if (self.exportsState && self.getLayers().length) {\r\n return {\r\n id: self.id,\r\n layers: self.getLayers().map(function (layer) {\r\n const layerState = {\r\n title: layer.title,\r\n state: TC.Util.extend(layer.exportState(), { path: layer.features?.length ? layer.features[0].getPath() : undefined })\r\n };\r\n if (layer._fileHandle) {\r\n layerState.file = layer._fileHandle.name;\r\n }\r\n return layerState;\r\n })\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n async importState(state) {\r\n const self = this;\r\n if (self.map) {\r\n const layerPromises = [];\r\n await self.loadLayersFromFile(self.map.workLayers);\r\n state.layers\r\n .filter(function (layer) {\r\n return !self.map.workLayers.some(l => l.options.file && layer.file === l.options.file);\r\n })\r\n .forEach(function (layerData) {\r\n layerPromises.push(self.map.addLayer({\r\n id: self.getUID(),\r\n title: layerData.title,\r\n owner: self,\r\n type: TC.Consts.layerType.VECTOR\r\n }));\r\n });\r\n\r\n const layers = await Promise.all(layerPromises);\r\n for (var i = 0, len = layers.length; i < len; i++) {\r\n const layer = layers[i];\r\n const ii = i;\r\n layer.importState(state.layers[i].state).then(function () {\r\n for (var j = 0; j < layer.features.length; j++) {\r\n layer.features[j].folders = state.layers[ii].state.path;\r\n }\r\n });\r\n self.getLayers().push(layer);\r\n }\r\n }\r\n }\r\n\r\n async saveLayerMetadata(layer) {\r\n const self = this;\r\n const storageItem = {\r\n fileHandle: layer._fileHandle,\r\n groupIndex: layer.options.groupIndex\r\n };\r\n if (layer._additionalFileHandles) {\r\n storageItem.additionalFileHandles = layer._additionalFileHandles;\r\n }\r\n const setItemPromise = localforage.setItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-' + layer.id,\r\n storageItem);\r\n setItemPromise.catch(function (e) {\r\n console.warn(e.message);\r\n });\r\n return await setItemPromise;\r\n }\r\n\r\n async loadLayerMetadata(layer) {\r\n const self = this;\r\n let metadata = {};\r\n try {\r\n metadata = await localforage.getItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-'+ layer.id);\r\n }\r\n catch (err) {\r\n console.warn(err.message);\r\n }\r\n return metadata;\r\n }\r\n\r\n deleteLayerMetadata(layer) {\r\n const self = this;\r\n localforage.removeItem(self.LAYER_METADATA_STORE_KEY_PREFIX + self.map.id + '-' + layer.id)\r\n .catch(function (e) {\r\n console.warn(e.message);\r\n });\r\n return self;\r\n }\r\n\r\n async loadRecentFiles() {\r\n const self = this;\r\n const recentFilePromises = [];\r\n for (var i = 0; i < self.recentFileCount; i++) {\r\n try {\r\n recentFilePromises.push(localforage.getItem(self.RECENT_FILES_STORE_KEY_PREFIX + i));\r\n }\r\n catch (err) {\r\n console.warn(err.message);\r\n }\r\n }\r\n const results = [];\r\n for await (const entry of recentFilePromises) {\r\n if (entry) {\r\n results.push(entry);\r\n }\r\n }\r\n self.recentFiles = results;\r\n return results;\r\n }\r\n\r\n storeRecentFiles(entries) {\r\n const self = this;\r\n entries = entries || self.recentFiles;\r\n for (var i = 0; i < self.recentFileCount; i++) {\r\n if (i < entries.length) {\r\n const entry = entries[i];\r\n try {\r\n localforage.setItem(self.RECENT_FILES_STORE_KEY_PREFIX + i, entry);\r\n }\r\n catch (err) {\r\n console.warn(err.message);\r\n }\r\n }\r\n else {\r\n try {\r\n localforage.removeItem(self.RECENT_FILES_STORE_KEY_PREFIX + i);\r\n }\r\n catch (err) {\r\n console.warn(err.message);\r\n }\r\n }\r\n }\r\n self.recentFiles = entries;\r\n return self;\r\n }\r\n\r\n async addRecentFileEntry(newEntry) {\r\n const self = this;\r\n let fileExists = false;\r\n for await (const isSame of self.recentFiles.map(entry => {\r\n const handle = entry.mainHandle || entry;\r\n return handle.isSameEntry(newEntry.mainHandle);\r\n })) {\r\n if (isSame) {\r\n fileExists = true;\r\n break;\r\n }\r\n }\r\n if (fileExists) {\r\n // Archivo existente, lo eliminamos del sitio anterior\r\n const fileIndex = self.recentFiles.findIndex(f => (f.mainHandle?.name || f.name) === newEntry.mainHandle.name);\r\n self.recentFiles.splice(fileIndex, 1);\r\n }\r\n else {\r\n // Archivo nuevo, corremos lista\r\n if (self.recentFiles.length >= self.recentFileCount) {\r\n self.recentFiles.pop();\r\n }\r\n }\r\n self.recentFiles.unshift(newEntry);\r\n await self.storeRecentFiles(self.recentFiles);\r\n self.renderRecentFileList();\r\n }\r\n\r\n async removeRecentFileEntry(index) {\r\n const self = this;\r\n self.recentFiles.splice(index, 1);\r\n await self.storeRecentFiles(self.recentFiles);\r\n self.renderRecentFileList();\r\n }\r\n\r\n async loadRecentFileEntry(index) {\r\n const self = this;\r\n const entry = self.recentFiles[index];\r\n if (entry) {\r\n for await (const isSame of self.map.workLayers\r\n .filter(l => l._fileHandle)\r\n .map(l => {\r\n const handle = entry.mainHandle || entry;\r\n return l._fileHandle.isSameEntry(handle);\r\n })) {\r\n if (isSame) {\r\n self.map.toast(self.getLocaleString('fileLoadedMoreThanOnce'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n }\r\n let handles = [entry.mainHandle || entry];\r\n if (entry.additionalHandles) {\r\n handles = handles.concat(entry.additionalHandles);\r\n }\r\n const permissions = [];\r\n for await (let permission of handles.map(h => h.queryPermission())) {\r\n permissions.push(permission);\r\n }\r\n for (var i = 0; i < permissions.length; i++) {\r\n let permission = permissions[i];\r\n if (permission === 'prompt') {\r\n permissions[i] = await handles[i].requestPermission();\r\n }\r\n }\r\n if (permissions.every(p => p === 'granted')) {\r\n self.loadFiles(handles);\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n renderRecentFileList(fileList) {\r\n const self = this;\r\n const onLinkClick = function (e) {\r\n self.loadRecentFileEntry(e.target.dataset.fileIndex);\r\n };\r\n const onButtonClick = function (e) {\r\n self.removeRecentFileEntry(e.target.dataset.fileIndex);\r\n };\r\n const list = self.querySelector('.tc-ctl-file-recent');\r\n if (list) {\r\n const buttonText = self.getLocaleString('removeFromList');\r\n const promise = fileList ? Promise.resolve(fileList) : self.loadRecentFiles();\r\n promise.then(entries => {\r\n list.replaceChildren();\r\n if (entries.length) {\r\n const li = document.createElement('li');\r\n const header = document.createElement('h3');\r\n header.innerHTML = self.getLocaleString('recentFiles');\r\n li.appendChild(header);\r\n list.appendChild(li);\r\n }\r\n entries.forEach((entry, index) => {\r\n const li = document.createElement('li');\r\n const link = document.createElement('sitna-button');\r\n link.dataset.fileIndex = index;\r\n link.addEventListener(TC.Consts.event.CLICK, onLinkClick);\r\n link.setAttribute('variant', Button.variant.LINK);\r\n link.setAttribute('text', entry.mainHandle?.name || entry.name);\r\n li.appendChild(link);\r\n const button = document.createElement('sitna-button');\r\n button.text = buttonText;\r\n button.dataset.fileIndex = index;\r\n button.addEventListener(TC.Consts.event.CLICK, onButtonClick);\r\n button.setAttribute('variant', Button.variant.MINIMAL);\r\n button.setAttribute('icon', Button.action.CLOSE);\r\n li.appendChild(button);\r\n list.appendChild(li);\r\n });\r\n });\r\n }\r\n }\r\n\r\n subtrackPendingFile = function () {\r\n const self = this;\r\n window.dropFilesCounter--;\r\n if (window.dropFilesCounter === 0) {\r\n self.map.zoomToFeatures(self.map._bufferFeatures);\r\n self.map._bufferFeatures = [];\r\n delete window.dropFilesCounter;\r\n }\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n if (self.map._featureImportWaitId) {\r\n li.removeWait(self.map._featureImportWaitId);\r\n }\r\n if (self.map._fileDropLoadingIndicator) {\r\n li.removeWait(self.map._fileDropLoadingIndicator);\r\n }\r\n }\r\n return self;\r\n }\r\n \r\n getUID = function (fileHandle) {\r\n const self = this;\r\n if (fileHandle) {\r\n const propertyname = Object.prototype.hasOwnProperty.call(window, \"FileSystemFileHandle\") ? \"_fileHandle\":\"_timeStamp\";\r\n const grouped = self.getLayers().reduce((vi, va) => {\r\n return vi.findByProperty(propertyname, va[propertyname]) && vi.some((l) => /^[\\w]*-\\d-\\d/gi.exec(va.id)[0] === /^[\\w]*-\\d-\\d/gi.exec(l.id)[0]) ? vi : vi.concat(va);\r\n }, []); \r\n return TC.getUID({\r\n prefix: self.id + '-' + (grouped.filter((l) => l[propertyname] != fileHandle).length + 1) + '-'\r\n });\r\n }\r\n else\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n }\r\n}\r\n\r\nTC.mix(FileImport, layerOwner);\r\n\r\ncustomElements.define('sitna-file-import', FileImport);\r\n\r\nexport default FileImport;\r\n","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\n\r\nTC.control.FullScreen = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.FullScreen, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.FullScreen.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-fscreen';\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"useData\":true}\r\n\r\n const key = {\r\n fullscreenEnabled: 0,\r\n fullscreenElement: 1,\r\n requestFullscreen: 2,\r\n exitFullscreen: 3,\r\n fullscreenchange: 4,\r\n fullscreenerror: 5\r\n };\r\n\r\n const webkit = [\r\n 'webkitFullscreenEnabled',\r\n 'webkitFullscreenElement',\r\n 'webkitRequestFullscreen',\r\n 'webkitExitFullscreen',\r\n 'webkitfullscreenchange',\r\n 'webkitfullscreenerror'\r\n ];\r\n\r\n const moz = [\r\n 'mozFullScreenEnabled',\r\n 'mozFullScreenElement',\r\n 'mozRequestFullScreen',\r\n 'mozCancelFullScreen',\r\n 'mozfullscreenchange',\r\n 'mozfullscreenerror'\r\n ];\r\n\r\n const ms = [\r\n 'msFullscreenEnabled',\r\n 'msFullscreenElement',\r\n 'msRequestFullscreen',\r\n 'msExitFullscreen',\r\n 'MSFullscreenChange',\r\n 'MSFullscreenError'\r\n ];\r\n\r\n const document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\r\n\r\n const vendor = 'fullscreenEnabled' in document && Object.keys(key) ||\r\n webkit[0] in document && webkit ||\r\n moz[0] in document && moz ||\r\n ms[0] in document && ms ||\r\n [];\r\n\r\n ctlProto.fscreen = {\r\n inFullscreen: false,\r\n requestFullscreen: element => element[vendor[key.requestFullscreen]](),\r\n requestFullscreenFunction: element => element[vendor[key.requestFullscreen]],\r\n get exitFullscreen() { return document[vendor[key.exitFullscreen]].bind(document); },\r\n addEventListener: (type, handler, options) => document.addEventListener(vendor[key[type]], handler, options),\r\n removeEventListener: (type, handler, options) => document.removeEventListener(vendor[key[type]], handler, options),\r\n get fullscreenEnabled() { return Boolean(document[vendor[key.fullscreenEnabled]]); },\r\n set fullscreenEnabled(val) { },\r\n get fullscreenElement() { return document[vendor[key.fullscreenElement]]; },\r\n set fullscreenElement(val) { },\r\n get onfullscreenchange() { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()]; },\r\n set onfullscreenchange(handler) { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler; },\r\n get onfullscreenerror() { return document[\"on\" + vendor[key.fullscreenerror].toLowerCase()]; },\r\n set onfullscreenerror(handler) { return document[\"on\" + vendor[key.fullscreenerror].toLowerCase()] = handler; }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n result.then(function () {\r\n const btn = self.div.querySelector('.' + self.CLASS + '-btn');\r\n\r\n if (self.fscreen.fullscreenEnabled) {\r\n\r\n const doFullscreenChange = () => {\r\n btn.classList.toggle(TC.Consts.classes.ACTIVE, self.fscreen.inFullscreen);\r\n btn.setAttribute('title', self.fscreen.inFullscreen ? self.getLocaleString(\"fscreen.tip.return\") : self.getLocaleString(\"fscreen.tip\"));\r\n };\r\n\r\n self.fscreen.addEventListener('fullscreenchange', () => {\r\n self.fscreen.inFullscreen = self.fscreen.fullscreenElement !== null;\r\n doFullscreenChange();\r\n }, false);\r\n\r\n btn.addEventListener('click', function () {\r\n self.byBtn = true;\r\n if (!self.fscreen.inFullscreen) {\r\n self.fscreen.requestFullscreen(document.body);\r\n } else {\r\n self.fscreen.exitFullscreen();\r\n }\r\n }, false);\r\n\r\n if (!TC.Util.detectMobile()) {\r\n window.addEventListener('resize', () => {\r\n if (self.byBtn) {\r\n self.byBtn = false;\r\n return;\r\n }\r\n\r\n const windowWidth = window.innerWidth * window.devicePixelRatio;\r\n const windowHeight = window.innerHeight * window.devicePixelRatio;\r\n const screenWidth = window.screen.width;\r\n const screenHeight = window.screen.height;\r\n\r\n if (windowWidth / screenWidth >= 0.95 && windowHeight / screenHeight >= 0.95) {\r\n self.fscreen.inFullscreen = true;\r\n } else {\r\n self.fscreen.inFullscreen = false;\r\n }\r\n\r\n doFullscreenChange();\r\n\r\n let header = document.body.getElementsByTagName('header');\r\n if (self.fscreen.inFullscreen) {\r\n btn.setAttribute('disabled', 'disabled');\r\n\r\n if (header.length > 0) {\r\n header[0].classList.add(\"tc-ctl-fscreenToHeader\");\r\n }\r\n\r\n self.map.div.classList.add(\"tc-ctl-fscreenToMap\");\r\n if (self.map.view3D) {\r\n self.map.view3D.container.classList.add(\"tc-ctl-fscreenToMap\");\r\n }\r\n\r\n } else {\r\n btn.removeAttribute('disabled');\r\n\r\n if (header.length > 0) {\r\n header[0].classList.remove(\"tc-ctl-fscreenToHeader\");\r\n }\r\n\r\n self.map.div.classList.remove(\"tc-ctl-fscreenToMap\");\r\n if (self.map.view3D) {\r\n self.map.view3D.container.classList.remove(\"tc-ctl-fscreenToMap\");\r\n }\r\n }\r\n\r\n btn.setAttribute('title', self.fscreen.inFullscreen ? self.getLocaleString('fscreen.tip.keyboard') : self.getLocaleString(\"fscreen.tip\"));\r\n\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n self.map.div.dispatchEvent(resizeEvent); // Para evitar que el mapa quede estirado o achatado después de gestionar la cabecera.\r\n });\r\n }\r\n } else {\r\n // GLS: 19/02/2019 en lugar de ocultar el botón, deshabilitamos el control para que no quede espacio de más entre los botones\r\n self.disable();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst FullScreen = TC.control.FullScreen;\r\nexport default FullScreen;","/**\r\n * Opciones del control GPS y rutas.\r\n * @typedef GeolocationOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [displayElevation=true] - Si se establece a `true`, se completará el gráfico del perfil de elevación de la ruta (si esta cuenta con datos de elevación) añadiendo el perfil de elevación resultante del MDT (Modelo Digital de Terreno)\r\n \r\n * @example [Ver en vivo](../examples/cfg.GeolocationOptions.html) {@lang html}\r\n *
            \r\n * \r\n */\r\n\r\nimport localforage from 'localforage';\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\n\r\nTC.control = TC.control || {};\r\nTC.control.infoShare = infoShare;\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\n\r\n(function () {\r\n Math.hypot = Math.hypot || function () {\r\n var y = 0;\r\n var length = arguments.length;\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (arguments[i] === Infinity || arguments[i] === -Infinity) {\r\n return Infinity;\r\n }\r\n y += arguments[i] * arguments[i];\r\n }\r\n return Math.sqrt(y);\r\n };\r\n}());\r\n(function () {\r\n var lastTime = 0,\r\n vendors = ['ms', 'moz', 'webkit', 'o'],\r\n // Feature check for performance (high-resolution timers)\r\n hasPerformance = !!(window.performance && window.performance.now);\r\n\r\n for (var x = 0, max = vendors.length; x < max && !window.requestAnimationFrame; x += 1) {\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||\r\n window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n\r\n if (!window.requestAnimationFrame) {\r\n window.requestAnimationFrame = function (callback, _element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = window.setTimeout(function () { callback(currTime + timeToCall); },\r\n timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n }\r\n\r\n if (!window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame = function (id) {\r\n clearTimeout(id);\r\n };\r\n }\r\n\r\n // Add new wrapper for browsers that don't have performance\r\n if (!hasPerformance) {\r\n // Store reference to existing rAF and initial startTime\r\n var rAF = window.requestAnimationFrame,\r\n startTime = +new Date();\r\n\r\n // Override window rAF to include wrapped callback\r\n window.requestAnimationFrame = function (callback, element) {\r\n // Wrap the given callback to pass in performance timestamp\r\n var wrapped = function (timestamp) {\r\n // Get performance-style timestamp\r\n var performanceTimestamp = timestamp < 1e12 ? timestamp : timestamp - startTime;\r\n\r\n return callback(performanceTimestamp);\r\n };\r\n\r\n // Call original rAF with wrapped callback\r\n rAF(wrapped, element);\r\n };\r\n }\r\n})();\r\n(function () {\r\n // Polyfill window.performance.now\r\n if (!window.performance) {\r\n window.performance = {\r\n offset: Date.now(),\r\n now: function () {\r\n return Date.now() - this.offset;\r\n }\r\n };\r\n } else if (window.performance && !window.performance.now) {\r\n window.performance.offset = Date.now();\r\n window.performance.now = function () {\r\n return Date.now() - window.performance.offset;\r\n };\r\n }\r\n}());\r\n\r\n\r\nTC.Consts.event.DIALOG = TC.Consts.event.DIALOG || 'dialog.tc';\r\nTC.Consts.classes.UNPLUGGED = \"tc-unplugged\";\r\n\r\nTC.control.Geolocation = function (options) {\r\n var self = this;\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self._layerPromises = {};\r\n\r\n self.Const = {\r\n Classes: {\r\n ACTIVE: 'tc-ctl-geolocation-active',\r\n CLOSED: 'closed',\r\n SELECTEDTRACK: 'selectedTrack',\r\n DRAWACTIVATED: 'draw-activated',\r\n SIMULATIONACTIVATED: 'simulation-activated'\r\n },\r\n Selector: {\r\n //SIMULATE: '.tc-btn-simulate',\r\n DRAW: '.tc-draw',\r\n EDIT: '.tc-btn-edit',\r\n DELETE: '.tc-btn-delete',\r\n SAVE: '.tc-btn-save',\r\n CANCEL: '.tc-btn-cancel',\r\n EXPORT: '.tc-btn-export',\r\n SHARE: '.tc-btn-share',\r\n STOP: '.tc-btn-stop',\r\n PAUSE: '.tc-btn-pause',\r\n BACKWARD: '.tc-btn-backward',\r\n FORWARD: '.tc-btn-forward',\r\n SPEED: '.tc-spn-speed',\r\n VISIBILITY: 'tc-chk-track-visibility'\r\n },\r\n LocalStorageKey: {\r\n TRACKING: 'trk',\r\n TRACKINGTEMP: 'trktemp',\r\n TRACKINGSHOWADVERTISEMENT: 'trkAdvertisement',\r\n GPSSHOWADVERTISEMENT: 'gpsAdvertisement',\r\n TEST: 'test'\r\n },\r\n Message: {\r\n VALIDATENAME: ''\r\n },\r\n Event: {\r\n POSITIONCHANGE: 'positionchange.tc.geolocation',\r\n GPSPOSITIONCHANGE: 'gpspositionchange.tc.geolocation',\r\n GPSPOSITIONERROR: 'positionerror.tc.geolocation',\r\n STATEUPDATED: 'stateupdated.tc.geolocation',\r\n GPSADD: 'gpsadd.tc.geolocation',\r\n TRACKSNAPPING: 'tracksnapping.tc.geolocation',\r\n DRAWTRACK: 'drawtrack.tc.geolocation',\r\n CLEARTRACK: 'cleartrack.tc.geolocation',\r\n IMPORTEDTRACK: 'importedtrack.tc.geolocation'\r\n },\r\n MimeMap: {\r\n KML: 'application/vnd.google-earth.kml+xml',\r\n GPX: 'application/gpx+xml'\r\n },\r\n SupportedFileExtensions: [\r\n '.kml',\r\n '.gpx'\r\n ],\r\n Tabs: {\r\n GPS: \"gps\"\r\n },\r\n Layers: {\r\n GPS: \"gps\",\r\n TRACK: \"track\",\r\n TRACKING: \"tracking\"\r\n }\r\n };\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n var opts = options || {};\r\n self._dialogDiv = TC.Util.getDiv(opts.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!opts.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self._shareDialogDiv = TC.Util.getDiv({});\r\n document.body.appendChild(self._shareDialogDiv);\r\n\r\n self.delta = 500;\r\n self.walkingSpeed = 5000;\r\n\r\n self.snappingTolerance = self.options.snappingTolerance || 50;\r\n\r\n self.notificationConf = {};\r\n\r\n self.exportsState = true;\r\n\r\n self.storageCRS = 'EPSG:4326';\r\n\r\n self.simulate_stopped = true;\r\n\r\n};\r\n\r\nTC.inherit(TC.control.Geolocation, TC.Control);\r\nTC.mix(TC.control.Geolocation, TC.control.infoShare);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Geolocation.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-geolocation';\r\n\r\n ctlProto.CHART_SIZE = {\r\n MIN_HEIGHT: 75,\r\n MAX_HEIGHT: 128,\r\n\r\n MIN_WIDTH: 315,\r\n MEDIUM_WIDTH: 310,\r\n MAX_WIDTH: 445\r\n };\r\n\r\n ctlProto.featuresToShare = [];\r\n\r\n TC.Consts.event.TOOLSCLOSE = TC.Consts.event.TOOLSCLOSE || 'toolsclose.tc';\r\n TC.Consts.event.TOOLSOPEN = TC.Consts.event.TOOLSOPEN || 'toolsopen.tc';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":18}}})) + \"

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n
              \\r\\n
            1. \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.noTracks\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":79},\"end\":{\"line\":19,\"column\":102}}})) + \"
            2. \\r\\n \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.panel.1\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":24},\"end\":{\"line\":30,\"column\":50}}})) + \" \\r\\n

              \\r\\n
            • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.panel.2\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":32},\"end\":{\"line\":32,\"column\":58}}})) + \"
            • \\r\\n
            • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.panel.3\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":33,\"column\":32},\"end\":{\"line\":33,\"column\":58}}})) + \"
            • \\r\\n
            • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.panel.4\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":34,\"column\":32},\"end\":{\"line\":34,\"column\":58}}})) + \"
            • \\r\\n
            • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.panel.5\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":32},\"end\":{\"line\":35,\"column\":58}}})) + \"
            • \\r\\n
            \\r\\n

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n
            \\r\\n \\r\\n \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \\r\\n
            \\r\\n\\r\\n\\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-track-node'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
            \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
            \\r\\n
          • \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-track-snapping-node'] = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \\r\\n \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geo.trk.snapping.name\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":14},\"end\":{\"line\":4,\"column\":46}}})) + \": \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"n\") : depth0), depth0)) + \"\\r\\n
          • \\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"lon\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":28},\"end\":{\"line\":7,\"column\":42}}}));},\"5\":function(container,depth0,helpers,partials,data) { return \"X\";},\"7\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"lat\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":28},\"end\":{\"line\":8,\"column\":42}}}));},\"9\":function(container,depth0,helpers,partials,data) { return \"Y\";},\"11\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"z\") : depth0),0,{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":14},\"end\":{\"line\":10,\"column\":22}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(12, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":4},\"end\":{\"line\":12,\"column\":15}}})) != null ? stack1 : \"\");},\"12\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • Z: \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"z\") : depth0), depth0)) + \"
          • \\r\\n\";},\"14\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"mdtz\") : depth0),0,{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":15,\"column\":14},\"end\":{\"line\":15,\"column\":25}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":15,\"column\":4},\"end\":{\"line\":17,\"column\":15}}})) != null ? stack1 : \"\");},\"15\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • Z: \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"mdtz\") : depth0), depth0)) + \"
          • \\r\\n\";},\"17\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"m\") : depth0), depth0)) + \"
          • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"n\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\") + \"
            • \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":15},\"end\":{\"line\":7,\"column\":58}}})) != null ? stack1 : \"\") + \": \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"x\") : depth0), depth0)) + \"
            • \\r\\n
            • \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":15},\"end\":{\"line\":8,\"column\":58}}})) != null ? stack1 : \"\") + \": \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"y\") : depth0), depth0)) + \"
            • \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"z\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":4},\"end\":{\"line\":13,\"column\":11}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"mdtz\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":4},\"end\":{\"line\":18,\"column\":11}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"m\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":4},\"end\":{\"line\":21,\"column\":11}}})) != null ? stack1 : \"\") + \"
            \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.gps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":34}}})) + \"

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n \\r\\n \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.track.activate.title\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":16},\"end\":{\"line\":19,\"column\":51}}})) + \"

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.trk.page.blur\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":32},\"end\":{\"line\":23,\"column\":60}}})) + \"

            \\r\\n

            \\r\\n \\r\\n

            \\r\\n
            \\r\\n
            \\r\\n \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n\\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-tracking-toast'] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"lon\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":25},\"end\":{\"line\":3,\"column\":39}}}));},\"3\":function(container,depth0,helpers,partials,data) { return \"X\";},\"5\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geo.trk.accuracy\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":12},\"end\":{\"line\":6,\"column\":39}}})) + \":\\r\\n \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"accuracy\") : depth0), depth0)) + \" m \\r\\n\";},\"7\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"lat\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":25},\"end\":{\"line\":11,\"column\":39}}}));},\"9\":function(container,depth0,helpers,partials,data) { return \"Y\";},\"11\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geo.trk.speed\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":12},\"end\":{\"line\":14,\"column\":36}}})) + \":\\r\\n \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"speed\") : depth0), depth0)) + \" km/h\\r\\n\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":12},\"end\":{\"line\":20,\"column\":55}}})) != null ? stack1 : \"\") + \":\\r\\n \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"z\") : depth0), depth0)) + \" m \\r\\n\";},\"14\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":25},\"end\":{\"line\":20,\"column\":39}}}));},\"16\":function(container,depth0,helpers,partials,data) { return \"Z\";},\"18\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"ele\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":42},\"end\":{\"line\":24,\"column\":56}}})) + \" (\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"mdt\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":58},\"end\":{\"line\":24,\"column\":72}}})) + \"):\\r\\n \" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"mdt\") : depth0), depth0)) + \" m \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"accuracy\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":8,\"column\":15}}})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"speed\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":8},\"end\":{\"line\":16,\"column\":15}}})) != null ? stack1 : \"\") + \" \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"z\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":8},\"end\":{\"line\":22,\"column\":15}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"mdt\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":8},\"end\":{\"line\":26,\"column\":15}}})) != null ? stack1 : \"\") + \" \\r\\n
            \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":12},\"end\":{\"line\":3,\"column\":55}}})) != null ? stack1 : \"\") + \": \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"x\") : depth0), depth0)) + \"
            \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"isGeo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":12},\"end\":{\"line\":11,\"column\":55}}})) != null ? stack1 : \"\") + \": \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"y\") : depth0), depth0)) + \"
            \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-ext-dldlog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n \\r\\n \\r\\n
            \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-share-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"geo.track.1\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":38}}})) + \" - \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"share\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":41},\"end\":{\"line\":5,\"column\":57}}})) + \"

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n\\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n var onFeatureRemove = function (e) {\r\n const self = this;\r\n\r\n if (e.feature === self.wrap.simulateMarker) {\r\n return;\r\n }\r\n\r\n if (e.layer === self.layerTrack) {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.wrap = new TC.wrap.control.Geolocation(self);\r\n self.wrap.register(map);\r\n\r\n map._bufferFeatures = [];\r\n\r\n self.hillDeltaThreshold = self.options && self.options.hillDeltaThreshold ||\r\n self.map.options.elevation && self.map.options.elevation.hillDeltaThreshold ||\r\n 20;\r\n\r\n var arrProm = [];\r\n\r\n arrProm.push(map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.GPS'\r\n }).then(function (layer) {\r\n self.layerGPS = layer;\r\n }));\r\n arrProm.push(map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.Tracking',\r\n styles: {\r\n point: {\r\n radius: 3,\r\n fillColor: \"#00ced1\",\r\n fillOpacity: function () {\r\n return this.track.renderTrack.checked ? 1 : 0;\r\n }.bind(self),\r\n strokeColor: \"#ffffff\",\r\n fontColor: \"#00ced1\",\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 1,\r\n label: function (feature) {\r\n var name = feature.getData().name;\r\n if (name && (name + '').trim().length > 0) {\r\n name = (name + '').trim().toLowerCase();\r\n } else {\r\n name = '';\r\n }\r\n\r\n return name;\r\n }\r\n },\r\n line: [\r\n {\r\n strokeOpacity: function () {\r\n return this.track.renderTrack.checked ? 1 : 0;\r\n }.bind(self),\r\n strokeWidth: 8,\r\n strokeColor: \"#ffffff\"\r\n },\r\n {\r\n strokeOpacity: function () {\r\n return this.track.renderTrack.checked ? 1 : 0;\r\n }.bind(self),\r\n strokeWidth: 4,\r\n strokeColor: \"#00ced1\"\r\n }]\r\n }\r\n }).then(function (layer) {\r\n self.layerTracking = layer;\r\n }));\r\n arrProm.push(map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n title: 'Posicionar.Track',\r\n styles: {\r\n line: {\r\n strokeWidth: 2,\r\n strokeColor: \"#C52737\"\r\n },\r\n point: {\r\n radius: function (feature) {\r\n var name = feature.getData().name;\r\n if (name && (name + '').trim().length > 0) {\r\n return 3;\r\n } else {\r\n return 6;\r\n }\r\n },\r\n fillColor: \"#C52737\",\r\n strokeColor: \"#ffffff\",\r\n fontColor: \"#C52737\",\r\n fontSize: 10,\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 2,\r\n label: function (feature) {\r\n var name = feature.getData().name;\r\n if (name && (name + '').trim().length > 0) {\r\n name = (name + '').trim().toLowerCase();\r\n } else {\r\n name = '';\r\n }\r\n\r\n return name;\r\n }\r\n }\r\n }\r\n }).then(function (layer) {\r\n self.layerTrack = layer;\r\n }));\r\n\r\n Promise.all(arrProm).then(function () {\r\n const newPosition = self.map.layers.indexOf(self.layerTrack);\r\n self.map.insertLayer(self.layerGPS, newPosition)\r\n })\r\n\r\n map.on(TC.Consts.event.FEATURESIMPORT, function (e) {\r\n const self = this;\r\n\r\n const featuresImport = function (e) {\r\n const fileName = e.fileName;\r\n const target = e.dropTarget;\r\n var kmlPattern = '.' + TC.Consts.format.KML.toLowerCase();\r\n var gpxPattern = '.' + TC.Consts.format.GPX.toLowerCase();\r\n\r\n // GLS: ¿es un GPX?\r\n if (fileName.toLowerCase().indexOf(gpxPattern) === fileName.length - gpxPattern.length ||\r\n // GLS: ¿es un KML y viene desde el upload de Geolocation?\r\n fileName.toLowerCase().indexOf(kmlPattern) === fileName.length - kmlPattern.length && target === self) {\r\n\r\n self.clear(self.Const.Layers.TRACK);\r\n const importedGPX = function () {\r\n //Controlamos que todo ha acabado para hacer zoom a las features y ocultar el loading\r\n setTimeout(function () {\r\n self.map._bufferFeatures = self.map._bufferFeatures.concat(e.features);\r\n window.dropFilesCounter--;\r\n if (window.dropFilesCounter === 0) {\r\n self.map.zoomToFeatures(self.map._bufferFeatures);\r\n self.map._bufferFeatures = [];\r\n delete window.dropFilesCounter;\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n li.removeWait(self.map._fileDropLoadingIndicator);\r\n }\r\n self.off(self.Const.Event.IMPORTEDTRACK, importedGPX);\r\n }\r\n }, 0);\r\n };\r\n self.on(self.Const.Event.IMPORTEDTRACK, importedGPX);\r\n self.importTrack(e);\r\n\r\n if (/.kml$/g.test(fileName.toLowerCase()) && self.layerTrack) {\r\n if (self.layerTrack.styles) {\r\n self.layerTrack.features.forEach(function (feature) {\r\n if (TC.feature.Point && feature instanceof TC.feature.Point && self.layerTrack.styles.point) {\r\n feature.setStyle(self.layerTrack.styles.point);\r\n } else if (TC.feature.Polyline && feature instanceof TC.feature.Polyline && self.layerTrack.styles.line) {\r\n feature.setStyle(self.layerTrack.styles.line);\r\n }\r\n });\r\n }\r\n }\r\n } else {\r\n //GLS: si es un KML pero viene desde el mapa o es otro tipo de archivo que no es ni GPX ni KML, lo ignoramos\r\n return;\r\n }\r\n };\r\n\r\n if (self.working && TC.Util.isFunction(self.working.then)) {\r\n self.working.then(featuresImport(e));\r\n } else {\r\n self.working = true;\r\n featuresImport(e);\r\n }\r\n\r\n }.bind(self));\r\n\r\n map.on(TC.Consts.event.PROJECTIONCHANGE, function (e) {\r\n if (self.elevationChartData) {\r\n self.elevationChartData.coords = TC.Util.reproject(self.elevationChartData.coords, e.oldCrs, e.newCrs);\r\n if (self.elevationChartData.secondaryElevationProfileChartData && self.elevationChartData.secondaryElevationProfileChartData.length)\r\n self.elevationChartData.secondaryElevationProfileChartData.forEach((secElevChartData) => {\r\n secElevChartData.eleCoordinates = TC.Util.reproject(secElevChartData.eleCoordinates, e.oldCrs, e.newCrs);\r\n });\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.DIALOG, function (e) {\r\n if (e.control) {\r\n switch (e.action) {\r\n case \"share\":\r\n if (e.control.caller !== self) {\r\n self.onShowShareDialog(e.control.caller);\r\n }\r\n break;\r\n case \"download\":\r\n self.onShowDownloadDialog(e.control.caller);\r\n break;\r\n }\r\n }\r\n });\r\n\r\n self.notificationConf = Object.assign(self.options.notification || {}, {\r\n tag: \"Geolocation Track\",\r\n vibrate: [200],\r\n renotify: true,\r\n requireInteraction: true,\r\n body: self.getLocaleString(\"geo.trk.notification.body\")\r\n }, {\r\n title: self.options.notification && self.options.notification.title ? self.getLocaleString(self.options.notification.title) : document.title\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.getElevationControl = async function () {\r\n const self = this;\r\n\r\n if (!self.elevationControl) {\r\n let options = {};\r\n if (!self.options.displayElevation && self.options.displayOn) {\r\n options.displayOn = self.options.displayOn;\r\n } else if (self.options.displayElevation) {\r\n options = self.options.displayElevation;\r\n }\r\n if (Object.prototype.hasOwnProperty.call(self.options, 'resolution')) { // la configuración de la resolución es distinta al obtener el perfil (0) que para la descarga (20). La configuración para la descarga se gestiona en getDownloadDialog...\r\n options.resolution = self.options.resolution;\r\n } else {\r\n options.resolution = 0;\r\n }\r\n self.elevationControl = await self.map.addControl('elevation', options);\r\n\r\n self.elevationControl._decorateChartPanel = function () {\r\n this.resultsPanel.setCurrentFeature = function (_feature) {\r\n const that = this;\r\n that.currentFeature = self.layerTrack.features.filter((feature) => {\r\n return !(TC.feature.Marker && feature instanceof TC.feature.Marker) && !(TC.feature.Point && feature instanceof TC.feature.Point);\r\n })[0];\r\n const currentSelectedTrack = self.getSelectedTrack();\r\n if (currentSelectedTrack) {\r\n that.currentFeature.uid = currentSelectedTrack.dataset.uid;\r\n that.currentFeature.fileName = getDownloadFileName.call(self, currentSelectedTrack);\r\n }\r\n\r\n };\r\n };\r\n\r\n }\r\n return self.elevationControl;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }).then(function () {\r\n return self.getDownloadDialog().then(() => {\r\n self._downloadDialog.caller = self;\r\n self.getRenderedHtml(self.CLASS + '-ext-dldlog', { controlId: self.id }, function (html) {\r\n var template = document.createElement('template');\r\n template.innerHTML = html;\r\n self._downloadDialogExtNode = template.content ? template.content.firstChild : template.firstChild;\r\n self.getRenderedHtml(self.CLASS + '-share-dialog', {}, function (html) {\r\n self._shareDialogDiv.innerHTML = html;\r\n return self.renderData({ controlId: self.id }, callback);\r\n });\r\n });\r\n });\r\n }));\r\n };\r\n\r\n ctlProto.importTrack = function (options) {\r\n var self = this;\r\n self.map.off(TC.Consts.event.FEATUREREMOVE, onFeatureRemove);\r\n if (!self.isDisabled) {\r\n if (options.fileName && options.features && options.features.length > 0) {\r\n var wait = self.getLoadingIndicator().addWait();\r\n self.importedFileName = options.fileName;\r\n const addPromises = [];\r\n for (var i = 0, len = options.features.length; i < len; i++) {\r\n addPromises.push(self.layerTrack.addFeature(options.features[i]));\r\n }\r\n Promise.all(addPromises).then(function () {\r\n self.wrap.processImportedFeatures({ wait: wait, notReproject: options.notReproject });\r\n if (self.layerTrack) { // Si tenemos capa es que todo ha ido bien y gestionamos el despliegue del control\r\n // Desplegamos el control \"ubicar\" al importar mediante drag&drop\r\n if (self.map && self.map.layout && self.map.layout.accordion) {\r\n if (self.div.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n self.map.controls\r\n .filter(function (ctl) {\r\n // Todos los otros controles que no cuelgan de otro control\r\n return ctl !== self && !ctl.containerControl;\r\n })\r\n .forEach(function (ctl) {\r\n ctl.div.classList.add(TC.Consts.classes.COLLAPSED);\r\n });\r\n }\r\n }\r\n\r\n self.div.classList.remove(TC.Consts.classes.COLLAPSED);\r\n self.div.querySelector('.' + self.CLASS + '-btn-tracks > span').click();\r\n\r\n if (!options.isShared) {\r\n // abrimos el panel de herramientas\r\n self.map.trigger(TC.Consts.event.TOOLSOPEN);\r\n }\r\n }\r\n });\r\n }\r\n } else if (/.gpx$/g.test(options.fileName.toLowerCase())) {\r\n self.map.toast(self.getLocaleString(\"geo.trk.import.disabled\"), { type: TC.Consts.msgType.WARNING });\r\n }\r\n };\r\n\r\n ctlProto.prepareFeaturesToShare = function (options) {\r\n const self = this;\r\n let trackUid = options.uid;\r\n return new Promise(function (resolve, reject) {\r\n if (trackUid) {\r\n var storageData = self.availableTracks.filter(function (saved) {\r\n return saved.uid.toString() === trackUid.toString();\r\n })[0].data;\r\n\r\n var storageFeatures = new ol.format.GeoJSON().readFeatures(storageData);\r\n const promises = new Array(storageFeatures.length);\r\n storageFeatures.forEach(function (f, idx) {\r\n promises[idx] = TC.wrap.Feature.createFeature(f);\r\n });\r\n\r\n Promise.all(promises).then(function (tcFeatures) {\r\n let features = tcFeatures.map(function (f) {\r\n const fObj = {};\r\n switch (true) {\r\n case TC.feature.Marker && f instanceof TC.feature.Marker:\r\n fObj.type = TC.Consts.geom.MARKER;\r\n break;\r\n case TC.feature.Point && f instanceof TC.feature.Point:\r\n fObj.type = TC.Consts.geom.POINT;\r\n break;\r\n case TC.feature.Polyline && f instanceof TC.feature.Polyline:\r\n fObj.type = TC.Consts.geom.POLYLINE;\r\n break;\r\n case TC.feature.MultiPolyline && f instanceof TC.feature.MultiPolyline:\r\n fObj.type = TC.Consts.geom.MULTIPOLYLINE;\r\n break;\r\n }\r\n fObj.id = f.id;\r\n fObj.geom = f.geometry; // El redondeo hace que ya no podamos validar con los tracks existentes.\r\n fObj.data = f.getData();\r\n\r\n return fObj;\r\n });\r\n\r\n if (options.setFeaturesToShare) {\r\n self.featuresToShare = features;\r\n }\r\n resolve(features);\r\n });\r\n } else {\r\n reject();\r\n }\r\n });\r\n\r\n\r\n };\r\n\r\n const getDownloadFileName = function (elem) {\r\n const self = this;\r\n var filename = elem.querySelector('span').textContent;\r\n var regex = new RegExp(self.Const.SupportedFileExtensions.join('|'), 'gi');\r\n return filename.replace(regex, '') + \"_\" + TC.Util.getFormattedDate(new Date(), true);\r\n };\r\n\r\n const getElevationFromService = async function (feature) {\r\n const self = this;\r\n let cachedFeature = getElevationFromServiceOnCache(feature);\r\n if (cachedFeature) {\r\n console.log('Tengo datos en cache');\r\n return cachedFeature.data;\r\n } else {\r\n console.log('NO tengo datos en cache');\r\n const tool = await self.getElevationTool();\r\n if (tool) {\r\n let cloned = feature.clone();\r\n try {\r\n let toDownload = await tool.setGeometry({ features: [cloned], crs: self.map.crs });\r\n cacheElevationFromService(feature, toDownload[0]);\r\n return toDownload[0];\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.onShowShareDialog = function (caller) {\r\n const self = this;\r\n if (caller instanceof Element || caller instanceof HTMLDocument) {\r\n if (caller.classList.contains(self.CLASS + '-share-dialog')) {\r\n return TC.control.infoShare.onShowShareDialog.call(self);\r\n } else {\r\n return Promise.resolve();\r\n }\r\n } else if (caller === self) {\r\n return TC.control.infoShare.onShowShareDialog.call(self);\r\n }\r\n else if (caller !== self &&\r\n caller.toShare &&\r\n caller.toShare.feature &&\r\n caller.toShare.feature.layer === self.layerTrack) {\r\n // cerramos el diálogo abierto por featureTools para mostrar el de geolocation\r\n TC.Util.closeModal(function () {\r\n TC.control.infoShare.onCloseShareDialog.call(caller);\r\n const selectedTrack = self.getSelectedTrack();\r\n if (selectedTrack) {\r\n return self.shareTrack(selectedTrack).then(function () {\r\n const shareDialog = self._shareDialogDiv.querySelector('.' + self.CLASS + '-share-dialog');\r\n TC.Util.showModal(shareDialog, {\r\n openCallback: function () {\r\n return TC.control.infoShare.onShowShareDialog.call(self);\r\n },\r\n closeCallback: function () {\r\n TC.control.infoShare.onCloseShareDialog.call(self);\r\n }\r\n });\r\n\r\n });\r\n } else {\r\n return Promise.resolve();\r\n }\r\n });\r\n }\r\n };\r\n\r\n var interpolationPanel = null; /* tengo que dejar fuera la vble porque con const y let dentro del bloque una vez cerrado el modal no funciona. \r\n Ejecuta la intrucción pero no produce cambios en el HTML, es como si se quedase alguna referencia interna pocha */\r\n var checkboxElevations = null; /* pasa lo mismo que con el panel ¿?¿?¿? */\r\n ctlProto.onShowDownloadDialog = function (caller, allFeatures) {\r\n const self = this;\r\n const RADIO_TRACK = \"track\";\r\n const RADIO_MDT = \"mdt\";\r\n const originalDialogFeatures = self._downloadDialog.getFeatures();\r\n\r\n // llega desde el panel del perfil del track: hacemos que el diálogo sea igual que cuando llega desde la lista aunque lo invoque featureTools\r\n if (caller !== self && self._downloadDialog.getFeatures().every(f => f && f.layer === self.layerTrack)) {\r\n let currentOptions = self._downloadDialog.getOptions();\r\n let controlOptions = self.getDownloadDialogOptions();\r\n currentOptions.elevation = controlOptions.elevation;\r\n delete currentOptions.openCallback;\r\n\r\n self._downloadDialog.open(self._downloadDialog.getFeatures(), currentOptions);\r\n }\r\n\r\n // normalizamos el nombre del archivo de la descarga\r\n if (originalDialogFeatures.length === 1 && originalDialogFeatures.every((f) => f && f.fileName)) {\r\n self._downloadDialog.setOptions({ fileName: originalDialogFeatures[0].fileName });\r\n }\r\n\r\n // si no tenemos configurada la opción del perfil desde MDT retornamos sin gestionar nada más\r\n if (!self.options.displayElevation) {\r\n return;\r\n }\r\n\r\n // llega desde la lista de tracks || llega desde el panel del perfil de un track \r\n if (caller === self || self._downloadDialog.getFeatures().every(f => f && f.layer === self.layerTrack)) {\r\n if (!self._downloadDialog.modalBody.querySelector('.' + self.CLASS + \"-ext-dldlog\")) {\r\n let divToExtensions = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-ext\");\r\n if (divToExtensions) {\r\n divToExtensions.appendChild(self._downloadDialogExtNode);\r\n\r\n checkboxElevations = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-elev input[type='checkbox']\");\r\n interpolationPanel = self._downloadDialog.modalBody.querySelector('.' + self._downloadDialog.CLASS + \"-ip\");\r\n const radioDlSource = self._downloadDialog.modalBody.querySelectorAll(`input[type=radio][name=\"${self.id}-dldlog-source\"]`);\r\n\r\n // si el track no tiene elevaciones y solo contamos con las del MDT ocultamos el botón de descargar originales \r\n const disableOriginalsRadio = function (condition) {\r\n const originalsRadio = radioDlSource[0];\r\n if (condition) {\r\n if (!originalsRadio.classList.contains(TC.Consts.classes.DISABLED)) {\r\n originalsRadio.classList.add(TC.Consts.classes.DISABLED);\r\n }\r\n } else {\r\n originalsRadio.classList.remove(TC.Consts.classes.DISABLED);\r\n }\r\n };\r\n let feature = originalDialogFeatures.filter((feat) => {\r\n return TC.feature.Polyline && feat instanceof TC.feature.Polyline;\r\n })[0];\r\n let noZ = feature.geometry[0].length === 2;\r\n if (noZ) {\r\n disableOriginalsRadio(noZ);\r\n } else if (feature.geometry[0].length > 2) {\r\n disableOriginalsRadio(feature.geometry.map((c) => c[2]).every((val) => val === 0));\r\n }\r\n\r\n\r\n const interpolationPanelIsHidden = function () {\r\n return interpolationPanel && interpolationPanel.classList.contains(TC.Consts.classes.HIDDEN);\r\n };\r\n const setInterpolationPanelVisibility = function () {\r\n if (radioDlSource[0].checked && !interpolationPanelIsHidden()) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n } else if (radioDlSource[0].checked) {\r\n let observer = new MutationObserver(function (mutations) {\r\n mutations.filter(m => m.attributeName === \"class\").forEach(function (mutation) {\r\n if (mutation.oldValue.indexOf(TC.Consts.classes.HIDDEN) > -1) {\r\n if (radioDlSource[0].checked) {\r\n interpolationPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n observer.disconnect();\r\n } else {\r\n observer.disconnect();\r\n }\r\n }\r\n });\r\n });\r\n\r\n let config = { attributes: true, attributeOldValue: true };\r\n observer.observe(interpolationPanel, config);\r\n } else {\r\n if (interpolationPanelIsHidden() && checkboxElevations.checked) {\r\n interpolationPanel.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n }\r\n };\r\n\r\n if (checkboxElevations) {\r\n if (checkboxElevations.checked) {\r\n setInterpolationPanelVisibility();\r\n self._downloadDialogExtNode.classList.remove(TC.Consts.classes.HIDDEN);\r\n } else if (!self._downloadDialogExtNode.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self._downloadDialogExtNode.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n checkboxElevations.addEventListener(\"change\", function () {\r\n setInterpolationPanelVisibility();\r\n self._downloadDialogExtNode.classList.toggle(TC.Consts.classes.HIDDEN);\r\n });\r\n }\r\n\r\n if (radioDlSource) {\r\n setInterpolationPanelVisibility();\r\n radioDlSource.forEach(item => {\r\n if (item.dataset.hasChangeEvent) {\r\n return;\r\n }\r\n item.dataset.hasChangeEvent = true;\r\n item.addEventListener(\"change\", async function (e) {\r\n if (e.target.checked) {\r\n setInterpolationPanelVisibility();\r\n let featuresToDownload;\r\n if (e.target.value === RADIO_TRACK) {\r\n featuresToDownload = originalDialogFeatures;\r\n } else {\r\n let featuresFromDialog = originalDialogFeatures;\r\n let feature = featuresFromDialog.filter((feat) => {\r\n return TC.feature.Polyline && feat instanceof TC.feature.Polyline;\r\n })[0];\r\n\r\n if (allFeatures) {\r\n featuresToDownload = featuresFromDialog.filter((feat) => {\r\n return TC.feature.Point && feat instanceof TC.feature.Point;\r\n });\r\n }\r\n\r\n let uid = feature.uid;\r\n let cachedProfile = getElevationProfileFromCache(uid);\r\n if (cachedProfile) {\r\n // Clonamos la feature para presevar la geometría original por si el usuario cambia de nuevo a track\r\n let toDownload = feature.clone();\r\n toDownload.setCoords(cachedProfile.data.secondaryElevationProfileChartData[0].coords);\r\n if (allFeatures) {\r\n if (!featuresToDownload) {\r\n featuresToDownload = getCurrentPoints.call(self) || [];\r\n }\r\n featuresToDownload.push(toDownload);\r\n } else {\r\n featuresToDownload = toDownload;\r\n }\r\n } else {\r\n self._downloadDialog.modalBody.classList.add(TC.Consts.classes.LOADING);\r\n\r\n let toDownload = await getElevationFromService.call(self, feature);\r\n if (toDownload) {\r\n if (allFeatures) {\r\n featuresToDownload.push(toDownload);\r\n } else {\r\n featuresToDownload = toDownload;\r\n }\r\n } else {\r\n self.map.toast(self.getLocaleString(\"elevation.error\"), { type: TC.Consts.msgType.ERROR, duration: 5000 });\r\n radioDlSource[0].checked = true;\r\n }\r\n\r\n self._downloadDialog.modalBody.classList.remove(TC.Consts.classes.LOADING);\r\n }\r\n }\r\n\r\n self._downloadDialog.setFeatures(featuresToDownload);\r\n }\r\n });\r\n });\r\n\r\n if (radioDlSource[0].classList.contains(TC.Consts.classes.DISABLED) ||\r\n document.querySelector('.' + self.CLASS + '-ext-dldlog input[type=radio]:checked').value === RADIO_MDT) {\r\n const mdtRadio = radioDlSource[1];\r\n mdtRadio.checked = true;\r\n mdtRadio.dispatchEvent(new Event('change'));\r\n }\r\n }\r\n\r\n if (originalDialogFeatures.length === 1 && originalDialogFeatures[0].fileName) {\r\n self._downloadDialog.setOptions({ fileName: originalDialogFeatures[0].fileName });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.getDownloadDialogOptions = function (fileName) {\r\n const self = this;\r\n\r\n const options = {\r\n title: self.getLocaleString('download'),\r\n fileName: fileName,\r\n openCallback: function () {\r\n self.onShowDownloadDialog(self, true);\r\n }\r\n };\r\n if (self.options.displayElevation) {\r\n options.elevation = {\r\n resolution: self.options.displayElevation && self.options.displayElevation.resolution || self.map.options.elevation && self.map.options.elevation.resolution || 20,\r\n sampleNumber: self.options.displayElevation && self.options.displayElevation.sampleNumber || self.map.options.elevation && self.map.options.elevation.sampleNumber || 0,\r\n checked: true\r\n };\r\n } else {\r\n options.elevation = {\r\n checked: true\r\n };\r\n }\r\n\r\n return options;\r\n };\r\n\r\n var visibilityTrack = true;\r\n ctlProto.renderData = function (data, callback) {\r\n const self = this;\r\n\r\n var sel = self.Const.Selector;\r\n\r\n return TC.Control.prototype.renderData.call(self, data, function () {\r\n\r\n const options = self.div.querySelectorAll(self._classSelector + '-panel');\r\n self.div.querySelectorAll('.' + self.CLASS + '-select span').forEach(function (span) {\r\n span.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n var label = e.target;\r\n while (label && label.tagName !== 'LABEL') {\r\n label = label.parentElement;\r\n }\r\n const newFormat = label.querySelector(`input[type=radio][name=\"${self.id}-mode\"]`).value;\r\n\r\n options.forEach(function (option) {\r\n option.classList.toggle(TC.Consts.classes.HIDDEN, !option.matches('.' + self.CLASS + '-' + newFormat));\r\n });\r\n }, { passive: true });\r\n });\r\n\r\n self.track = {\r\n activateButton: self.div.querySelector(self._classSelector + '-track-ui-activate'),\r\n deactivateButton: self.div.querySelector(self._classSelector + '-track-ui-deactivate'),\r\n trackSearch: self.div.querySelector(self._classSelector + '-track-available-srch'),\r\n trackImportFile: self.div.querySelector(self._classSelector + '-track-import'),\r\n trackSave: self.div.querySelector(self._classSelector + '-track-save'),\r\n trackAdd: self.div.querySelector(self._classSelector + '-track-add-wpt'),\r\n trackContinue: self._dialogDiv.querySelector('.' + self.CLASS + '-track-continue'),\r\n trackRenew: self._dialogDiv.querySelector('.' + self.CLASS + '-track-new'),\r\n trackClose: self._dialogDiv.querySelector('.' + self.CLASS + '-continue-track-dialog button.tc-modal-close'),\r\n //trackAddSegment: self.div.querySelector('#tc-ctl-geolocation-track-segment'),\r\n trackAdvertisementOK: self._dialogDiv.querySelector('.' + self.CLASS + '-track-advert-ok')\r\n };\r\n\r\n self.track.trackList = self.div.querySelector(self._classSelector + '-track-available-lst');\r\n\r\n self.track.trackToolPanelOpened = self.div.querySelector('#tc-ctl-geolocation-track-panel-opened-' + self.id);\r\n\r\n self.div.querySelector('.' + ctlProto.CLASS + '-track-panel-help').addEventListener('click', function () {\r\n _showAlerMsg.call(self);\r\n });\r\n\r\n self.track.trackName = self.div.querySelector(self._classSelector + '-track-title');\r\n\r\n self.track.trackWPT = self.div.querySelector(self._classSelector + '-track-waypoint');\r\n\r\n if (TC.Util.detectMobile()) {\r\n if (matchMedia('screen and (max-height: 50em) and (max-width: 50em)').matches)\r\n self.track.trackToolPanelOpened.checked = false;\r\n }\r\n\r\n if (window.File && window.FileReader && window.FileList && window.Blob) {\r\n self.track.trackImportFile.disabled = false;\r\n // GLS: Eliminamos el archivo subido, sin ello no podemos subir el mismo archivo seguido varias veces\r\n self.track.trackImportFile.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n // Envolvemos el input en un form\r\n const input = this;\r\n const form = document.createElement('form');\r\n const parent = input.parentElement;\r\n parent.insertBefore(form, input);\r\n form.appendChild(input);\r\n form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', input);\r\n parent.removeChild(form);\r\n }, { passive: true });\r\n\r\n const _layerError = function () {\r\n self.map.off(TC.Consts.event.LAYERERROR, _layerError);\r\n self.clearFileInput(self.track.trackImportFile);\r\n\r\n TC.alert(self.getLocaleString(\"geo.trk.upload.error3\"));\r\n };\r\n\r\n self.track.trackImportFile.addEventListener('change', function (e) {\r\n if (!self._cleaning) { // Valido que el evento import no lo provoco yo al limpiar el fileinput (al limpiar se lanza el change) \r\n self.clear(self.Const.Layers.TRACK);\r\n\r\n if (self.map) {\r\n self.map.on(TC.Consts.event.LAYERERROR, _layerError);\r\n self.map.wrap.loadFiles(e.target.files, { control: self });\r\n }\r\n }\r\n });\r\n } else {\r\n console.log('no es posible la importación');\r\n }\r\n\r\n self.track.activateButton.addEventListener('click', function () {\r\n self.activateTracking();\r\n _activateTrackingBtns.call(self);\r\n\r\n });\r\n self.track.deactivateButton.addEventListener('click', function () {\r\n self.deactivateTracking();\r\n _deactivateTrackingBtns.call(self);\r\n });\r\n\r\n var _filter = function (searchTerm) {\r\n searchTerm = searchTerm.toLowerCase();\r\n //tc-ctl-geolocation-track-available-empty\r\n const lis = Array.from(self.track.trackList.querySelectorAll('li'));\r\n lis.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n const trackLis = lis.filter(function (li) {\r\n return li.matches('li:not([class]),li.' + self.Const.Classes.SELECTEDTRACK);\r\n });\r\n\r\n const searchIcon = self.div.querySelector(self._classSelector + '-track-search-icon');\r\n if (searchTerm.length === 0) {\r\n trackLis.forEach(function (li) {\r\n li.style.display = '';\r\n });\r\n searchIcon.style.visibility = 'visible';\r\n } else {\r\n searchIcon.style.visibility = 'hidden';\r\n var r = new RegExp(searchTerm, 'i');\r\n trackLis.forEach(function (li) {\r\n li.style.display = r.test(li.querySelector('span').textContent) ? '' : 'none';\r\n });\r\n\r\n if (!trackLis.some(function (li) {\r\n return li.style.display === '';\r\n })) {\r\n lis.forEach(function (li) {\r\n if (li.matches('[class^=\"tc-ctl-geolocation-track-not\"]')) {\r\n li.style.display = '';\r\n }\r\n });\r\n }\r\n }\r\n };\r\n const trackSearchListener = function () {\r\n _filter(this.value.toLowerCase().trim());\r\n };\r\n self.track.trackSearch.addEventListener(\"keyup\", trackSearchListener);\r\n self.track.trackSearch.addEventListener(\"search\", trackSearchListener);\r\n\r\n // en el panel\r\n self.track.trackSave.addEventListener('click', self.saveTrack.bind(self));\r\n self.track.trackAdd.addEventListener('click', self.addWaypoint.bind(self));\r\n\r\n const list = self.div.querySelector(self._classSelector + '-track-available-lst');\r\n\r\n // en lista\r\n var _edit = function (edit, elm) {\r\n if (elm.tagName !== 'LI') {\r\n elm = elm.parentElement;\r\n }\r\n\r\n const input = elm.querySelector('input');\r\n const span = elm.querySelector('span');\r\n\r\n if (edit) {\r\n\r\n input.classList.remove(TC.Consts.classes.HIDDEN);\r\n input.focus();\r\n input.value = span.textContent;\r\n span.classList.add(TC.Consts.classes.HIDDEN);\r\n elm.dataset.title = elm.title;\r\n elm.title = \"\";\r\n\r\n //elm.querySelector(sel.SIMULATE).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EDIT).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DELETE).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DRAW).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EXPORT).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.SHARE).classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n elm.querySelector(sel.SAVE).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.CANCEL).classList.remove(TC.Consts.classes.HIDDEN);\r\n } else {\r\n\r\n input.classList.add(TC.Consts.classes.HIDDEN);\r\n span.classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.title = elm.dataset.title;\r\n delete elm.dataset.title;\r\n\r\n //elm.querySelector(sel.SIMULATE).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EDIT).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DELETE).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.DRAW).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.EXPORT).classList.remove(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.SHARE).classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n elm.querySelector(sel.SAVE).classList.add(TC.Consts.classes.HIDDEN);\r\n elm.querySelector(sel.CANCEL).classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n self.uiSimulate = function (simulate, elm) {\r\n if (elm) {\r\n \r\n var cnt = elm.tagName === 'LI' ? elm : elm.parentNode;\r\n const btnPause = cnt.querySelector(sel.PAUSE);\r\n btnPause.classList.add('play');\r\n btnPause.setAttribute('title', self.getLocaleString(\"tr.lst.start\"));\r\n self.simulate_stopped = true;\r\n \r\n }\r\n };\r\n\r\n //list.addEventListener('click', TC.EventTarget.listenerBySelector(sel.SIMULATE, function (e) {\r\n // var wait = self.getLoadingIndicator().addWait();\r\n\r\n // e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n\r\n // _loadTrack(self, e.target).then(function () { //Para evitar el bloqueo de la interfaz en móviles\r\n // self.getLoadingIndicator().removeWait(wait);\r\n // });\r\n //}));\r\n list.addEventListener('change', TC.EventTarget.listenerBySelector(\"input.\" + sel.VISIBILITY, function (e) {\r\n self.layerTrack.setVisibility(e.target.checked);\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(sel.DRAW, function (e) {\r\n var wait = self.getLoadingIndicator().addWait();\r\n\r\n _drawTrack(self, e.target).then(function () {\r\n self.getLoadingIndicator().removeWait(wait);\r\n });\r\n }));\r\n\r\n self.on(self.Const.Event.IMPORTEDTRACK, function (e) {\r\n if (!self.isDisabled) {\r\n const listElement = self.track.trackList.querySelector('li[data-id=\"' + e.index + '\"]');\r\n _drawTrack(self, listElement.querySelector(sel.DRAW)).then(function () {\r\n if (self.loadingState) {\r\n delete self.loadingState;\r\n delete self.toShare;\r\n }\r\n });\r\n const transitionEvent = function (event) {\r\n if (!HTMLElement.prototype.scrollIntoView) {\r\n self.track.trackList.scrollTop = e.index * listElement.offsetHeight;\r\n }\r\n else {\r\n listElement.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n }\r\n listElement.removeEventListener(\"transitionend\", transitionEvent, false);\r\n }; \r\n listElement.addEventListener(\"transitionend\", transitionEvent, false);\r\n } else {\r\n self.map.toast(self.getLocaleString(\"geo.trk.import.disabled\"), { type: TC.Consts.msgType.WARNING });\r\n }\r\n });\r\n\r\n const _stopOtherTracks = function (self, trackLiId) {\r\n self.track.trackList.querySelectorAll('li[data-id]').forEach(function (listItem) {\r\n if (listItem.dataset.id !== trackLiId) {\r\n //const btnSimulate = listItem.querySelector(sel.SIMULATE);\r\n const btnPause = listItem.querySelector(sel.PAUSE);\r\n self.simulate_stopped = true;\r\n\r\n //btnSimulate.classList.remove(self.Const.Classes.SIMULATIONACTIVATED);\r\n //btnSimulate.setAttribute('title', self.getLocaleString(\"tr.lst.simulate\"));\r\n btnPause.classList.add('play');\r\n btnPause.setAttribute('title', self.getLocaleString(\"tr.lst.start\"));\r\n\r\n //self.uiSimulate(false, listItem);\r\n _edit(false, listItem);\r\n }\r\n });\r\n\r\n // para el resize no me va bien aquí\r\n //self.clear(self.Const.Layers.TRACK);\r\n };\r\n\r\n var _drawTrack = function (self, btnDraw) {\r\n return new Promise(function (resolve, _reject) {\r\n\r\n const trackLi = btnDraw.parentElement;\r\n\r\n setTimeout(function () {\r\n if (trackLi.classList.contains(self.Const.Classes.SELECTEDTRACK)) {\r\n //self.uiSimulate(false, btnDraw);\r\n\r\n self.clear(self.Const.Layers.TRACK);\r\n self.map.off(TC.Consts.event.FEATUREREMOVE, onFeatureRemove);\r\n\r\n btnDraw.setAttribute('title', btnDraw.textContent);\r\n //\r\n }\r\n else if (self.getSelectedTrack()) { // GLS: si hay elemento seleccionado actuamos\r\n _stopOtherTracks(self, trackLi.dataset.id);\r\n self.working = self.drawTrack(trackLi);\r\n } else {\r\n self.working = self.drawTrack(trackLi);\r\n }\r\n\r\n /* GLS: 15/02/2019 Preparamos la feature por si se comparte, necesito hacerlo aquí \r\n porque la gestión en asíncrona y todo el flujo de exportación es síncrono */\r\n if (trackLi.classList.contains(self.Const.Classes.SELECTEDTRACK)) {\r\n self.prepareFeaturesToShare({ uid: trackLi.dataset.uid, setFeaturesToShare: true }).then(function () {\r\n resolve();\r\n });\r\n } else {\r\n resolve();\r\n }\r\n }, 0);\r\n });\r\n };\r\n\r\n var _loadTrack = function (self, btnSimulate) {\r\n return new Promise(function (resolve, _reject) {\r\n setTimeout(function () {\r\n const trackLi = btnSimulate.closest(\"li\");\r\n const selectedTrack = self.getSelectedTrack();\r\n _stopOtherTracks(self, trackLi.dataset.id);\r\n //self.uiSimulate(false, selectedTrack);\r\n //self.uiSimulate(true, btnSimulate);\r\n\r\n // para el resize con película mejor así\r\n if (selectedTrack && trackLi.dataset.id !== selectedTrack.dataset.id) {\r\n self.clear(self.Const.Layers.TRACK);\r\n }\r\n\r\n self.simulate_paused = false;\r\n self.simulateTrack(trackLi);\r\n\r\n resolve();\r\n }, 0);\r\n });\r\n };\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.EDIT, function (e) {\r\n _edit(true, e.target);\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.DELETE, function (e) {\r\n self.removeTrack(e.target.parentElement);\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.SAVE, function (e) {\r\n var newName = e.target.parentElement.querySelector('input').value;\r\n if (newName.trim().length === 0) {\r\n TC.alert(self.getLocaleString('geo.trk.edit.alert'));\r\n }\r\n else {\r\n self.editTrackName(e.target.parentElement.dataset.id, e.target.parentElement.querySelector('input').value);\r\n _edit(false, e.target);\r\n }\r\n }));\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.CANCEL, function (e) {\r\n _edit(false, e.target);\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.SHARE, function (e) {\r\n self.shareTrack(e.target.parentElement).then(function () {\r\n self.showShareDialog(self._shareDialogDiv);\r\n });\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.EXPORT, function (e) {\r\n const parent = e.target.parentElement;\r\n e.target.setAttribute('disabled', \"\");\r\n\r\n self.export(parent).then((features) => {\r\n self.getDownloadDialog().then(function (dialog) {\r\n const options = self.getDownloadDialogOptions(getDownloadFileName.call(self, parent));\r\n dialog.open(features.map((f) => { f.uid = parent.dataset.uid; return f; }), options);\r\n\r\n e.target.removeAttribute('disabled');\r\n });\r\n });\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.STOP, function (e) {\r\n //self.uiSimulate(false, e.target);\r\n self.wrap.simulateTrackEnd();\r\n const btnPause = e.target.parentElement.querySelector(sel.PAUSE);\r\n btnPause.classList.add('play');\r\n btnPause.setAttribute('title', self.getLocaleString('tr.lst.start'));\r\n if (!self.simulate_stopped)\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n self.simulate_speed = 1;\r\n self.simulate_stopped = true;\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.PAUSE, function (e) {\r\n self.simulate_paused = !e.target.classList.contains('play');\r\n if (self.simulate_paused)\r\n self.simulate_pausedElapse = -1;\r\n else {\r\n \r\n if (self.simulate_stopped) {\r\n var wait = self.getLoadingIndicator().addWait();\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = 'x 1';\r\n _loadTrack(self, e.target).then(function () { //Para evitar el bloqueo de la interfaz en móviles\r\n self.getLoadingIndicator().removeWait(wait);\r\n self.simulate_stopped = false;\r\n });\r\n }\r\n \r\n \r\n }\r\n\r\n e.target.setAttribute('title', self.getLocaleString(self.simulate_paused ? 'tr.lst.play' : 'tr.lst.pause'));\r\n e.target.classList.toggle('play', !!self.simulate_paused);\r\n }));\r\n\r\n var lapse = 0.5;\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.BACKWARD, function (e) {\r\n if (self.simulate_speed === 1)\r\n self.simulate_speed = lapse;\r\n else self.simulate_speed = self.simulate_speed / 2;\r\n\r\n e.target.parentElement.querySelector(self._classSelector + \" \" + sel.FORWARD).disabled = false;\r\n\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = self.simulate_speed < 1 ? '/ ' + 1 / self.simulate_speed : 'x ' + self.simulate_speed;\r\n\r\n if (self.simulate_speed === 0.000244140625) {\r\n e.target.disabled = true;\r\n }\r\n }));\r\n\r\n list.addEventListener('click', TC.EventTarget.listenerBySelector(self._classSelector + ' ' + sel.FORWARD, function (e) {\r\n self.simulate_speed = self.simulate_speed / lapse;\r\n\r\n e.target.parentElement.querySelector(sel.SPEED).textContent = self.simulate_speed < 1 ? '/ ' + 1 / self.simulate_speed : 'x ' + self.simulate_speed;\r\n\r\n e.target.parentElement.querySelector(self._classSelector + \" \" + sel.BACKWARD).disabled = false;\r\n\r\n if (self.simulate_speed === 4096) {\r\n e.target.disabled = true;\r\n }\r\n }));\r\n\r\n\r\n // popup\r\n self.track.trackContinue.addEventListener('click', function () {\r\n // cerramos popup y continuamos con el track de session y almacenando en session\r\n TC.Util.closeModal();\r\n // al obtener la posición se almacena en session y continuamos almacenando en session mientras se mueve\r\n _tracking.call(self);\r\n });\r\n self.track.trackRenew.addEventListener('click', function () {\r\n // eliminamos el track actual de session - restablecemos el tracking\r\n delete self.sessionTracking;\r\n TC.Util.storage.setSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP, undefined);\r\n localforage.removeItem(self.Const.LocalStorageKey.TRACKINGTEMP);\r\n // cerramos el popup\r\n TC.Util.closeModal();\r\n // al obtener la posición se almacena en session y continuamos almacenando en session mientras se mueve\r\n _tracking.call(self);\r\n });\r\n self.track.trackClose.addEventListener('click', function () {\r\n _deactivateTrackingBtns.call(self);\r\n });\r\n //self.track.trackAddSegment.addEventListener('click', function () {\r\n // TC.alert('pendiente');\r\n // // cerramos el popup\r\n // TC.Util.closeModal();\r\n //});\r\n\r\n // popup advertencia\r\n self.track.trackAdvertisementOK.addEventListener('click', function () {\r\n\r\n const checkboxes = document.body.querySelectorAll('input[name*=\"Advertisement\"]:checked');\r\n\r\n if (checkboxes.length > 0) {\r\n localforage.setItem(checkboxes[0].getAttribute('name'), false);\r\n }\r\n\r\n TC.Util.closeModal();\r\n });\r\n\r\n self.track.renderTrack = self.div.querySelector('#tc-ctl-geolocation-track-render-' + self.id);\r\n self.track.renderTrack.addEventListener('change', function () {\r\n if (self.track.activateButton.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.layerTracking.setVisibility(this.checked);\r\n }\r\n\r\n visibilityTrack = this.checked;\r\n });\r\n\r\n self.bindTracks();\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.shareTrack = function (li) {\r\n const self = this;\r\n return self.getShareDialog(self._shareDialogDiv).then(function () {\r\n return self.prepareFeaturesToShare({ uid: li.dataset.uid, setFeaturesToShare: false })\r\n .then(function (features) {\r\n self.toShare = {\r\n trackName: li.querySelector('span').innerHTML,\r\n features: features\r\n };\r\n });\r\n });\r\n };\r\n\r\n ctlProto.activate = function () {\r\n //var self = this;\r\n //TC.Control.prototype.activate.call(self);\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n\r\n TC.Util.closeModal();\r\n self.clearSelection();\r\n self.deactivateTracking();\r\n //TC.Control.prototype.deactivate.call(self);\r\n };\r\n\r\n var _activateTrackingBtns = function () {\r\n var self = this;\r\n\r\n self.track.activateButton.classList.add(TC.Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.remove(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n var _deactivateTrackingBtns = function () {\r\n var self = this;\r\n\r\n self.track.activateButton.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.add(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n var _showAlerMsg = function () {\r\n var self = this;\r\n self.map.toast(self.div.querySelector(\".alert-warning\").innerHTML, {\r\n duration: 10000\r\n });\r\n };\r\n\r\n ctlProto.markerStyle = {\r\n radius: 10,\r\n fillColor: [255, 0, 0, 100],\r\n strokeColor: [255, 255, 255, 255],\r\n strokeWidth: 2\r\n };\r\n\r\n ctlProto.lineStyle = {\r\n strokeWidth: 2,\r\n strokeColor: [0, 206, 209, 255]\r\n };\r\n\r\n ctlProto.setFormatInfoNewPosition = function (newPosition) {\r\n var self = this;\r\n\r\n var data = {};\r\n var locale = TC.Util.getMapLocale(self.map);\r\n\r\n if (self.map.on3DView) {\r\n var geoCoords = self.map.crs !== self.map.view3D.crs ? TC.Util.reproject(newPosition.position, self.map.crs, self.map.view3D.crs) : newPosition.position;\r\n data.x = geoCoords[0].toLocaleString(locale);\r\n data.y = geoCoords[1].toLocaleString(locale);\r\n\r\n data.mdt = Math.round(self.map.view3D.getHeightFromMDT(geoCoords)).toLocaleString(locale);\r\n\r\n data.isGeo = true;\r\n\r\n } else {\r\n data.x = newPosition.position[0].toLocaleString(locale);\r\n data.y = newPosition.position[1].toLocaleString(locale);\r\n }\r\n\r\n data.z = Math.round(newPosition.altitude).toLocaleString(locale);\r\n data.accuracy = Math.round(newPosition.accuracy).toLocaleString(locale);\r\n data.speed = newPosition.speed.toLocaleString(locale, { minimumFractionDigits: 1, maximumFractionDigits: 1 });\r\n\r\n return data;\r\n };\r\n\r\n ctlProto.getTrackInfoPanel = function () {\r\n const self = this;\r\n if (!self.track._infoPanelPromise) {\r\n self.track._infoPanelPromise = new Promise(function (resolve, _reject) {\r\n if (!self.track.infoPanel) {\r\n\r\n var resultsPanelOptions = {\r\n content: \"table\",\r\n resize: false,\r\n titles: {\r\n main: self.getLocaleString(\"geo.mylocation\"),\r\n max: self.getLocaleString(\"geo.mylocation.show\")\r\n },\r\n classes: {\r\n collapsed: \"tracking\"\r\n }\r\n };\r\n\r\n var ctlPromise;\r\n const addResultsPanelInfo = function (controlContainer) {\r\n resultsPanelOptions.position = controlContainer.POSITION.RIGHT;\r\n ctlPromise = controlContainer.addControl('resultsPanel', resultsPanelOptions);\r\n };\r\n\r\n let displayOn;\r\n if (!self.options.displayElevation && self.options.displayOn) {\r\n displayOn = self.options.displayOn;\r\n } else if (self.options.displayElevation) {\r\n displayOn = self.options.displayElevation.displayOn;\r\n }\r\n if (displayOn) {\r\n var controlContainer = self.map.getControlsByClass('TC.control.' + displayOn[0].toUpperCase() + displayOn.substring(1))[0];\r\n if (!controlContainer) {\r\n self.map.addControl(displayOn).then(addResultsPanelInfo);\r\n } else {\r\n addResultsPanelInfo(controlContainer);\r\n }\r\n } else {\r\n resultsPanelOptions.div = document.createElement('div');\r\n self.map.div.appendChild(resultsPanelOptions.div);\r\n ctlPromise = self.map.addControl('resultsPanel', resultsPanelOptions);\r\n }\r\n\r\n ctlPromise.then(function (resultsPanelInfo) {\r\n self.track.infoPanel = resultsPanelInfo;\r\n resolve(resultsPanelInfo);\r\n });\r\n } else {\r\n resolve(self.track.infoPanel);\r\n }\r\n });\r\n }\r\n return self.track._infoPanelPromise;\r\n };\r\n\r\n ctlProto.renderInfoNewPosition = function (d) {\r\n const self = this;\r\n\r\n self.getRenderedHtml(self.CLASS + '-tracking-toast', self.setFormatInfoNewPosition(d.pd), function (html) {\r\n self.getTrackInfoPanel().then(function (infoPanel) {\r\n if (!infoPanel.isMinimized()) {\r\n self.map.getControlsByClass(TC.control.ResultsPanel)\r\n .filter(panel => panel.content === panel.contentType.TABLE && panel !== infoPanel)\r\n .forEach(function (panel) {\r\n panel.close();\r\n });\r\n infoPanel.renderPromise().then(function () {\r\n infoPanel.options.collidingPriority = infoPanel.COLLIDING_PRIORITY.IGNORE;\r\n infoPanel.open(html);\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n\r\n var duringTrackingToolsPanel = function () {\r\n var self = this;\r\n\r\n if (!self.track.trackToolPanelOpened.checked) {\r\n self.map.trigger(TC.Consts.event.TOOLSCLOSE);\r\n }\r\n };\r\n var _isFollowing = true;\r\n var _zoomFollowing = false;\r\n var _lastMapCenter = null;\r\n ctlProto.setFollowing = function (value) {\r\n const self = this;\r\n _isFollowing = value;\r\n if (self.trackCenterButton) {\r\n const btn = self.trackCenterButton.querySelector(\"button\");\r\n btn.classList.toggle(TC.Consts.classes.UNPLUGGED, !value);\r\n btn.title = self.getLocaleString(value ? \"geo.trk.notCenter\" : \"geo.trk.center\")\r\n }\r\n !value && self.trackCenterButton && self.trackCenterButton.querySelector(\"button\").classList.add(TC.Consts.classes.UNPLUGGED);\r\n value && self.trackCenterButton && self.trackCenterButton.querySelector(\"button\").classList.remove(TC.Consts.classes.UNPLUGGED);\r\n\r\n }\r\n ctlProto.Move = async function (where) {\r\n const self = this;\r\n if (where && Array.isArray(where) && where.length > 0) {\r\n _zoomFollowing = true;\r\n if (where[0] instanceof TC.Feature) {\r\n await self.map.zoomToFeatures(where, { animate: false });\r\n }\r\n else {\r\n await self.map.setCenter(where, { animate: false })\r\n }\r\n setTimeout(function () {\r\n _zoomFollowing = false;\r\n }, 300);\r\n }\r\n\r\n }\r\n const _manageZoomEvents = function () {\r\n if (!_lastMapCenter || (_lastMapCenter[0] !== this.getCenter()[0] && _lastMapCenter[1] !== this.getCenter()[1])) {\r\n _lastMapCenter = this.getCenter();\r\n if (!_zoomFollowing)\r\n this.getControlsByClass(TC.control.Geolocation)[0].setFollowing(false);\r\n\r\n }\r\n\r\n }\r\n var _tracking = function () {\r\n var self = this;\r\n\r\n self.activate();\r\n _isFollowing = true;\r\n _activateTrackingBtns.call(self);\r\n duringTrackingToolsPanel.call(self);\r\n\r\n self.map.on(TC.Consts.event.ZOOM, _manageZoomEvents)\r\n\r\n self.on(self.Const.Event.POSITIONCHANGE, function (d) {\r\n if (self.currentPoint && (self.currentPoint.position[0] !== d.pd.position[0] && self.currentPoint.position[1] !== d.pd.position[1])) {\r\n //cambio real de coordenadas\r\n if (_isFollowing) {\r\n self.Move(d.pd.position);\r\n }\r\n }\r\n self.currentPoint = d.pd;\r\n self.renderInfoNewPosition(d);\r\n\r\n self.track.trackName.disabled = false;\r\n self.track.trackSave.disabled = false;\r\n\r\n self.track.trackWPT.disabled = false;\r\n self.track.trackAdd.disabled = false;\r\n\r\n // cada vez que se registra una nueva posición almacenamos en sessionStorage\r\n TC.Util.storage.setSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP, self.wrap.formattedToStorage(self.layerTracking).features);\r\n });\r\n self.on(self.Const.Event.STATEUPDATED, function (_data) {\r\n //self.track.htmlMarker.setAttribute('src', data.moving ? 'layout/idena/img/geo-marker-heading.png' : 'layout/idena/img/geo-marker.png');\r\n });\r\n\r\n self.clear(self.Const.Layers.TRACKING);\r\n\r\n advertisement.call(self, self.Const.LocalStorageKey.TRACKINGSHOWADVERTISEMENT);\r\n\r\n self.wrap.setTracking(true);\r\n };\r\n\r\n /* inicio gestión suspensión de la pantalla en móviles */\r\n let isSupported = false;\r\n let wakeLock = null;\r\n let notifications = null;\r\n if ('wakeLock' in navigator) {\r\n isSupported = true;\r\n }\r\n\r\n var keepWakeLock = function () {\r\n var self = this;\r\n if (!isSupported)\r\n addVideoKeepScreenOn.apply(self);\r\n else {\r\n\r\n // create an async function to request a wake lock\r\n const requestWakeLock = async () => {\r\n try {\r\n wakeLock = await navigator.wakeLock.request('screen');\r\n console.log(\"Wake Lock active\");\r\n wakeLock.addEventListener('release', () => {\r\n // if wake lock is released alter the button accordingly\r\n console.log(\"Wake Lock released\");\r\n });\r\n } catch (err) {\r\n // if wake lock request fails - usually system related, such as battery\r\n console.error(err);\r\n }\r\n };\r\n requestWakeLock();\r\n //al cambiar de pestaña volvemos a activar el wakeLock\r\n //document.addEventListener('visibilitychange', handleVisibilityChange);\r\n }\r\n };\r\n var releaseLock = function () {\r\n var self = this;\r\n if (!isSupported)\r\n removeVideoKeepScreenOn.apply(self);\r\n else {\r\n //document.removeEventListener('visibilitychange', handleVisibilityChange);\r\n wakeLock.release()\r\n .then(() => {\r\n wakeLock = null;\r\n });\r\n }\r\n };\r\n var addVideoKeepScreenOn = function () {\r\n var self = this;\r\n\r\n if (!self.videoScreenOn) {\r\n var media = {\r\n WebM: \"data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=\",\r\n MP4: \"data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw==\"\r\n };\r\n\r\n self.videoScreenOn = document.createElement('video');\r\n self.videoScreenOn.setAttribute(\"loop\", \"\");\r\n self.videoScreenOn.setAttribute(\"muted\", \"\");\r\n self.videoScreenOn.setAttribute(\"webkit-playsinline\", \"\");\r\n self.videoScreenOn.setAttribute(\"playsinline\", \"\");\r\n self.videoScreenOn.setAttribute(\"style\", \"transform: translateZ(0px);\");\r\n\r\n var sourceWebM = document.createElement('source');\r\n sourceWebM.src = media.WebM;\r\n sourceWebM.type = \"video/webm\";\r\n self.videoScreenOn.appendChild(sourceWebM);\r\n\r\n var sourceMP4 = document.createElement('source');\r\n sourceMP4.src = media.MP4;\r\n sourceMP4.type = \"video/mp4\";\r\n self.videoScreenOn.appendChild(sourceMP4);\r\n }\r\n\r\n self.videoScreenOn.play();\r\n };\r\n var removeVideoKeepScreenOn = function () {\r\n var self = this;\r\n if (self.videoScreenOn) {\r\n self.videoScreenOn.pause();\r\n }\r\n };\r\n\r\n var _onWindowBlurred;\r\n var onWindowBlurred = function () {\r\n var self = this;\r\n\r\n fromSessionToStorage.apply(self);\r\n };\r\n\r\n var _onWindowFocused;\r\n var onWindowFocused = function () {\r\n var self = this;\r\n\r\n if (self.videoScreenOn && self.videoScreenOn.paused)\r\n self.videoScreenOn.play();\r\n\r\n fromStorageToSession.apply(self);\r\n };\r\n\r\n var getHiddenProperty = function () {\r\n var prefixes = ['webkit', 'moz', 'ms', 'o'];\r\n\r\n if ('hidden' in document) return 'hidden';\r\n\r\n for (var i = 0; i < prefixes.length; i++) {\r\n if (prefixes[i] + 'Hidden' in document) {\r\n return prefixes[i] + 'Hidden';\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n var _onWindowVisibility;\r\n var onWindowVisibility = async function () {\r\n var self = this;\r\n\r\n var hidden = getHiddenProperty();\r\n\r\n if (!document[hidden]) {\r\n if (wakeLock !== null) {\r\n keepWakeLock.apply(self);\r\n }\r\n else\r\n onWindowFocused.apply(self);\r\n }\r\n else if (notifications) {\r\n if (navigator.serviceWorker &&\r\n //si se pulta shift + F5 el objeto controller de serviceWorkerContainer es null\r\n (navigator.serviceWorker.controller ||\r\n //entonces ontenemos el SW del control SWCache client si existe y miramos si está activo\r\n self.map.getControlsByClass(TC.control.SWCacheClient).length && (await self.map.getControlsByClass(TC.control.SWCacheClient)[0].getServiceWorker()).state === \"activated\"))\r\n try {\r\n const registration = await navigator.serviceWorker.ready;\r\n registration.showNotification(self.notificationConf.title, Object.assign(self.notificationConf, {\r\n actions: [{\r\n action: \"back\",\r\n title: self.getLocaleString(\"geo.trk.notification.backButton\")\r\n }], data: {\r\n \"url\": document.location.href\r\n }\r\n }));\r\n }\r\n catch (ex) {\r\n const notification = new Notification(self.notificationConf.title, self.notificationConf);\r\n }\r\n else {\r\n const notification = new Notification(self.notificationConf.title, self.notificationConf);\r\n }\r\n }\r\n if (!wakeLock && self.videoScreenOn)\r\n console.log('video is: ' + self.videoScreenOn.paused);\r\n\r\n };\r\n var addWindowEvents = function () {\r\n var self = this;\r\n\r\n if (!_onWindowVisibility)\r\n _onWindowVisibility = onWindowVisibility.bind(self);\r\n\r\n if (!_onWindowBlurred)\r\n _onWindowBlurred = onWindowBlurred.bind(self);\r\n\r\n if (!_onWindowFocused)\r\n _onWindowFocused = onWindowFocused.bind(self);\r\n\r\n window.addEventListener('visibilitychange', _onWindowVisibility, false);\r\n\r\n // ipad / iphone / ipod (Safari mobile, not Android default browsers not Chrome Mobile that is)\r\n if (TC.Util.detectSafari() && TC.browserFeatures.touch() && !navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/CriOS/i)) {\r\n window.addEventListener('pagehide', _onWindowBlurred, false);\r\n window.addEventListener('pageshow', _onWindowFocused, false);\r\n } else { // the rest \r\n window.addEventListener('blur', _onWindowBlurred, false);\r\n window.addEventListener('focus', _onWindowFocused, false);\r\n }\r\n };\r\n var removeWindowEvents = function () {\r\n\r\n window.removeEventListener('visibilitychange', _onWindowVisibility, false);\r\n\r\n // ipad / iphone / ipod (Safari mobile, not Android default browsers not Chrome Mobile that is)\r\n if (TC.Util.detectSafari() && TC.browserFeatures.touch() && !navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/CriOS/i)) {\r\n window.removeEventListener('pagehide', _onWindowBlurred, false);\r\n window.removeEventListener('pageshow', _onWindowFocused, false);\r\n } else { // the rest \r\n window.removeEventListener('blur', _onWindowBlurred, false);\r\n window.removeEventListener('focus', _onWindowFocused, false);\r\n }\r\n };\r\n\r\n var fromSessionToStorage = function () {\r\n var self = this;\r\n\r\n var sessionTracking = TC.Util.storage.getSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP);\r\n if (sessionTracking && sessionTracking.length > 0)\r\n localforage.setItem(self.Const.LocalStorageKey.TRACKINGTEMP, typeof sessionTracking === \"string\" ? sessionTracking : JSON.stringify(sessionTracking));\r\n };\r\n var fromStorageToSession = function () {\r\n var self = this;\r\n\r\n localforage.getItem(self.Const.LocalStorageKey.TRACKINGTEMP).then(function (storageData) {\r\n if (storageData !== null && storageData !== \"null\" && storageData.length > 0) {\r\n TC.Util.storage.setSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP, storageData);\r\n }\r\n });\r\n };\r\n /* final gestión suspensión de la pantalla en móviles */\r\n\r\n var advertisement = function (showAdvertisement) {\r\n const self = this;\r\n\r\n localforage.getItem(showAdvertisement).then(function (registeredShowAdvertisement) {\r\n if (registeredShowAdvertisement == null) {\r\n const dialog = self._dialogDiv.querySelector('.tc-ctl-geolocation-track-advert-dialog');\r\n const checkbox = dialog.querySelector('input[type=\"checkbox\"]');\r\n checkbox.setAttribute('name', showAdvertisement);\r\n checkbox.checked = false;\r\n\r\n document.querySelector('#pageBlurMsg').textContent = TC.Util.detectMobile() ? self.getLocaleString('geo.trk.page.blur') : self.getLocaleString('geo.trk.page.blur.desktop');\r\n\r\n dialog.querySelector('h3').textContent = showAdvertisement === self.Const.LocalStorageKey.GPSSHOWADVERTISEMENT ?\r\n self.getLocaleString(\"geo.track.activate\") + \" \" + self.getLocaleString(\"geo.gps\") :\r\n self.getLocaleString('geo.track.activate.title');\r\n\r\n TC.Util.showModal(self._dialogDiv.querySelector('.tc-ctl-geolocation-track-advert-dialog'));\r\n }\r\n });\r\n\r\n self.map.toast(!TC.Util.detectMobile() ? self.getLocaleString('geo.trk.page.blur.desktop') : self.getLocaleString('geo.trk.page.blur'), {\r\n type: TC.Consts.msgType.WARNING\r\n });\r\n };\r\n\r\n ctlProto._askTracking = function (callback) {\r\n var self = this;\r\n\r\n TC.Util.showModal(self._dialogDiv.querySelector('.tc-ctl-geolocation-continue-track-dialog'), {\r\n closeCallback: function () {\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n });\r\n\r\n return true;\r\n };\r\n\r\n ctlProto.activateTracking = function () {\r\n var self = this;\r\n var trackingAvailable = true;\r\n\r\n if (!self.isActive) {\r\n self.activate();\r\n }\r\n\r\n self.clear(self.Const.Layers.TRACKING);\r\n\r\n try {\r\n TC.Util.storage.setSessionLocalValue(self.Const.LocalStorageKey.TEST, self.Const.LocalStorageKey.TEST);\r\n } catch (error) {\r\n if (error.code === DOMException.QUOTA_EXCEEDED_ERR)\r\n TC.alert(self.getLocaleString(\"geo.error.trackinglocalstorage\"));\r\n else TC.error(error);\r\n\r\n trackingAvailable = false;\r\n }\r\n\r\n if (trackingAvailable) {\r\n if (window.Notification || window.webkitNotifications) {\r\n var checkNotificationsReply = function (permission) {\r\n if (permission === \"granted\") notifications = _notifications;\r\n };\r\n const _notifications = window.Notification || window.webkitNotifications;\r\n if (_notifications.permission === \"denied\") {\r\n notifications = null;\r\n } else if (_notifications.permission === \"granted\") notifications = _notifications;\r\n else _notifications.requestPermission(checkNotificationsReply);\r\n }\r\n keepWakeLock.apply(self);\r\n addWindowEvents.apply(self);\r\n\r\n self.sessionTracking = TC.Util.storage.getSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP);\r\n if (self.sessionTracking) {\r\n var asked = self._askTracking(function () {\r\n _deactivateTrackingBtns.call(self);\r\n });\r\n\r\n if (!asked) {\r\n self.track.trackRenew.click();\r\n }\r\n } else _tracking.call(self);\r\n } else { _deactivateTrackingBtns.call(self); }\r\n };\r\n\r\n ctlProto.deactivateTracking = function () {\r\n var self = this;\r\n\r\n var _deactivateTracking = function () {\r\n\r\n self.getTrackInfoPanel().then(panel => panel.close());\r\n\r\n fromSessionToStorage.apply(self);\r\n\r\n self.wrap.setTracking(false);\r\n\r\n\r\n delete self.geopositionTracking;\r\n\r\n if (!visibilityTrack) {\r\n self.div.querySelector(self._classSelector + '-track-render').querySelector('label').click();\r\n }\r\n\r\n releaseLock.apply(self);\r\n removeWindowEvents.apply(self);\r\n\r\n self.off(self.Const.Event.POSITIONCHANGE);\r\n self.off(self.Const.Event.STATEUPDATED);\r\n\r\n _deactivateTrackingBtns.call(self);\r\n\r\n self.track.trackName.value = '';\r\n self.track.trackName.disabled = true;\r\n self.track.trackSave.disabled = true;\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n self.clear(self.Const.Layers.TRACKING);\r\n self.clear(self.Const.Layers.GPS);\r\n\r\n\r\n self.map.off(TC.Consts.event.ZOOM, _manageZoomEvents)\r\n\r\n //TC.Control.prototype.deactivate.call(self);\r\n\r\n return true;\r\n };\r\n\r\n if (self.wrap.hasCoordinates()) {\r\n self.map.toast(self.getLocaleString(\"geo.trk.deactivate.alert\"), {\r\n duration: 10000\r\n });\r\n //TC.alert(self.getLocaleString(\"geo.trk.deactivate.alert\"));\r\n return _deactivateTracking();\r\n } else return _deactivateTracking();\r\n };\r\n\r\n /* Obtengo los tracks desde localForage */\r\n ctlProto.getStoredTracks = function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n var tracks = [];\r\n\r\n const onResolve = function (toResolve) {\r\n // estamos en la carga inicial\r\n if (elevationProfileCache.length === 0) {\r\n toResolve\r\n .filter(elm => elm.profile)\r\n .forEach((elm) => elevationProfileCache.push({ uid: elm.uid, data: JSON.parse(elm.profile) }));\r\n }\r\n resolve(toResolve);\r\n };\r\n\r\n localforage.keys()\r\n .then(function (keys) {\r\n keys = keys.filter(function (k) {\r\n if (k.indexOf(self.Const.LocalStorageKey.TRACKINGTEMP) !== 0 && k.indexOf(self.Const.LocalStorageKey.TRACKING) === 0) {\r\n return /trk#\\d/i.exec(k);\r\n }\r\n return false;\r\n });\r\n\r\n if (keys.length === 0) {\r\n self.availableTracks = tracks;\r\n onResolve(tracks);\r\n }\r\n\r\n const promises = new Array(keys.length);\r\n keys.forEach(function (key, idx) {\r\n promises[idx] = new Promise(function (res, _rej) {\r\n localforage.getItem(key, function (_e, v) {\r\n res(v);\r\n });\r\n });\r\n });\r\n\r\n Promise.all(promises).then(function (results) {\r\n if (results && results.length) {\r\n results.forEach(function (res) {\r\n const r = JSON.parse(res);\r\n if (r instanceof Array) {\r\n tracks = tracks.concat(r);\r\n } else {\r\n tracks.push(r);\r\n }\r\n });\r\n\r\n var tracksArray = tracks.length > 1 ? _orderTracks(tracks) : tracks;\r\n self.availableTracks = tracksArray;\r\n onResolve(tracksArray);\r\n }\r\n });\r\n })\r\n .catch((_err) => {\r\n console.log('Capturamos error que se produce por configuración del navegador.');\r\n TC.error(self.getLocaleString('couldNotAccessLocalStorage'));\r\n });\r\n });\r\n };\r\n\r\n /*\r\n * Recibe una sucesión de tracks y la ordena por nombre.\r\n */\r\n var _orderTracks = function (tracks) {\r\n var tracksArray = [];\r\n\r\n for (var index in tracks) {\r\n if (tracks[index] && typeof tracks[index] === \"object\") {\r\n tracksArray.push(tracks[index]);\r\n tracksArray.sort(function (a, b) {\r\n if (typeof a.name === \"string\") {\r\n return TC.Util.isFunction(a.name.localeCompare) ? a.name.localeCompare(b.name) : 0;\r\n } else { return 0; }\r\n });\r\n }\r\n }\r\n\r\n return tracksArray;\r\n };\r\n\r\n /* Almaceno los tracks mediante localForage, actualizo la vble availableTracks y actualizo la lista de tracks */\r\n ctlProto.setStoredTracks = function (tracks) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n const promises = [];\r\n tracks.forEach(function (t) {\r\n promises.push(new Promise(function (res, _rej) {\r\n localforage.setItem(self.Const.LocalStorageKey.TRACKING + \"#\" + t.uid, JSON.stringify(t), function (e, v) {\r\n res(v);\r\n });\r\n }));\r\n });\r\n\r\n Promise.all(promises).then(function () {\r\n self.getStoredTracks().then(function () {\r\n self.bindTracks();\r\n resolve();\r\n });\r\n });\r\n });\r\n };\r\n\r\n /* Obtengo los tracks desde vble local */\r\n ctlProto.getAvailableTracks = function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (!self.availableTracks) {\r\n self.getStoredTracks().then(function (availableTracks) {\r\n resolve(availableTracks);\r\n });\r\n }\r\n else {\r\n resolve(self.availableTracks);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.bindTracks = function () {\r\n var self = this;\r\n\r\n const listItems = self.track.trackList.querySelectorAll('li');\r\n listItems.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n\r\n self.getAvailableTracks().then(function (tracks) {\r\n\r\n if (_isEmpty(tracks)) {\r\n self.track.trackList.querySelectorAll('li[class^=\"tc-ctl-geolocation-track-available-empty\"]').forEach(function (li) {\r\n li.style.display = '';\r\n });\r\n self.track.trackSearch.disabled = true;\r\n }\r\n else {\r\n const currentSelectedTrack = self.getSelectedTrack();\r\n var currentSelectedTrackId;\r\n if (currentSelectedTrack) {\r\n currentSelectedTrackId = currentSelectedTrack.dataset.uid;\r\n }\r\n self.track.trackList.querySelectorAll('li[data-id]').forEach(function (li) {\r\n self.track.trackList.removeChild(li);\r\n });\r\n\r\n for (var i = 0; i < tracks.length; i++) {\r\n var t = tracks[i];\r\n if (t && typeof t === \"object\") {\r\n self.getRenderedHtml(self.CLASS + '-track-node', {\r\n id: i, uid: t.uid, name: t.name ? t.name.trim() : ''\r\n }, function (html) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(html, 'text/html').body.firstChild;\r\n self.track.trackList.appendChild(newLi);\r\n });\r\n }\r\n }\r\n\r\n if (currentSelectedTrackId) {\r\n self.setSelectedTrack(self.track.trackList.querySelector('li[data-uid=\"' + currentSelectedTrackId + '\"]'));\r\n }\r\n\r\n self.track.trackSearch.disabled = false;\r\n }\r\n });\r\n };\r\n\r\n ctlProto.chartProgressClear = function () {\r\n const self = this;\r\n\r\n self.getElevationControl().then(elevCtl => elevCtl && elevCtl.removeElevationTooltip());\r\n };\r\n\r\n ctlProto.chartSetProgress = function (previous, _current, _distance, _doneTime) {\r\n var self = this;\r\n\r\n if (self.elevationControl && self.elevationControl.resultsPanel && (!self.elevationControl.resultsPanel.isVisible() || self.elevationControl.resultsPanel.isMinimized())) {\r\n return;\r\n }\r\n\r\n var done = previous.d;\r\n //var locale = self.map.options.locale && self.map.options.locale.replace('_', '-') || undefined;\r\n\r\n const hasSecondaryElevationProfileChartData = self.elevationChartData && self.elevationChartData.secondaryElevationProfileChartData &&\r\n Array.isArray(self.elevationChartData.secondaryElevationProfileChartData) && self.elevationChartData.secondaryElevationProfileChartData.length > 0 &&\r\n self.elevationChartData.secondaryElevationProfileChartData[0];\r\n\r\n if (hasSecondaryElevationProfileChartData &&\r\n self.elevationChartData.secondaryElevationProfileChartData[0].elev &&\r\n !self.elevationChartData.secondaryElevationProfileChartData[0].elevCoords &&\r\n !self.elevationChartData.secondaryElevationProfileChartData[0].eleCoordinates) {\r\n\r\n let coords = [...self.elevationChartData.coords];\r\n\r\n if (Array.isArray(coords) && Array.isArray(coords[0])) {\r\n coords.forEach((c, i) => {\r\n c.splice(2, 1, self.elevationChartData.secondaryElevationProfileChartData[0].ele[i]);\r\n });\r\n\r\n self.elevationChartData.secondaryElevationProfileChartData[0].elevCoords = self.elevationChartData.secondaryElevationProfileChartData[0].eleCoordinates = coords;\r\n }\r\n }\r\n\r\n //let ele2;\r\n //if (hasSecondaryElevationProfileChartData &&\r\n // self.elevationChartData.secondaryElevationProfileChartData[0].eleCoordinates) {\r\n // ele2 = TC.wrap.Geometry.getNearest(current, self.elevationChartData.secondaryElevationProfileChartData[0].eleCoordinates);\r\n // ele2 = parseInt(ele2[2].toFixed(0)).toLocaleString(locale);\r\n //}\r\n\r\n if (self.elevationChartData) {\r\n let iX = 0;\r\n while (self.elevationChartData.x[iX] <= done) {\r\n iX++;\r\n }\r\n\r\n self.getElevationControl().then(elevCtl => elevCtl &&\r\n elevCtl.getProfilePanel().then(function (panel) {\r\n if (panel) {\r\n panel.chart.chart.tooltip.show({ x: self.elevationChartData.x[iX === 0 ? 0 : iX - 1] });\r\n panel.wrap.hideElevationMarker();\r\n }\r\n }));\r\n }\r\n };\r\n\r\n ctlProto._getTime = function (timeFrom, timeTo) {\r\n var diff = timeTo - timeFrom;\r\n var d = {};\r\n var daysDifference = Math.floor(diff / 1000 / 60 / 60 / 24);\r\n diff -= daysDifference * 1000 * 60 * 60 * 24;\r\n\r\n var hoursDifference = Math.floor(diff / 1000 / 60 / 60);\r\n diff -= hoursDifference * 1000 * 60 * 60;\r\n\r\n d.h = hoursDifference + daysDifference * 24;\r\n\r\n var minutesDifference = Math.floor(diff / 1000 / 60);\r\n diff -= minutesDifference * 1000 * 60;\r\n\r\n d.m = minutesDifference;\r\n\r\n d.s = Math.floor(diff / 1000);\r\n\r\n return TC.Util.extend({}, d, { toString: (\"00000\" + d.h).slice(-2) + ':' + (\"00000\" + d.m).slice(-2) + ':' + (\"00000\" + d.s).slice(-2) });\r\n };\r\n\r\n ctlProto.simulateTrack = async function (li) {\r\n var self = this;\r\n\r\n const elevCtl = await self.getElevationControl();\r\n elevCtl.removeElevationTooltip();\r\n self.simulate_speed = 1;\r\n if (self.getSelectedTrack() === li && // si el usuario a activado la película del track ya seleccionado no repintamos\r\n elevCtl.resultsPanel && elevCtl.resultsPanel.chart && elevCtl.resultsPanel.chart.chart) {\r\n if (!self.hasElevation) {\r\n self.hasElevation = elevCtl.elevationProfileChartData.min === 0 && elevCtl.elevationProfileChartData.max === 0 ? false : true;\r\n }\r\n self.wrap.simulateTrack();\r\n } else {\r\n self.drawTrack(li, false).then(function () {\r\n if (self.elevationChartData &&\r\n self.elevationChartData.min === 0 &&\r\n self.elevationChartData.max === 0) { // no tenemos elevación original\r\n self.map.toast(self.getLocaleString(\"geo.trk.simulate.empty\"), { duration: 10000 });\r\n self.hasElevation = false; // establecemos a false para que no muestra el progreso en el perfil ya que siempre será elevación 0\r\n } else if (!(self.elevationChartData.min === 0 && self.elevationChartData.max === 0)) {\r\n self.hasElevation = true;\r\n }\r\n\r\n self.wrap.simulateTrack();\r\n });\r\n }\r\n };\r\n\r\n ctlProto.drawTrack = function (li, _activateSnapping) {\r\n var self = this;\r\n\r\n self.clear(self.Const.Layers.TRACK);\r\n\r\n duringTrackingToolsPanel.call(self);\r\n return new Promise(function (resolve, reject) {\r\n self.setSelectedTrack(li);\r\n self.drawTrackingData(li).then(function () {\r\n self.elevationTrack(li).then(() => {\r\n self.activate();\r\n\r\n resolve();\r\n }).catch(reject);\r\n });\r\n });\r\n };\r\n\r\n const elevationProfileCache = [];\r\n\r\n const getElevationProfileFromCache = function (uid) {\r\n return elevationProfileCache.filter(function (elm) {\r\n return elm.uid.toString() === uid.toString();\r\n })[0];\r\n };\r\n\r\n const cacheElevationProfile = function (feature, data, trackUID) {\r\n const self = this;\r\n var result = getElevationProfileFromCache(trackUID);\r\n if (!result) {\r\n result = {\r\n uid: parseFloat(trackUID)\r\n };\r\n elevationProfileCache.push(result);\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n let index = tracks.findIndex(t => t.uid.toString() === trackUID);\r\n if (index > -1) {\r\n tracks[index].profile = JSON.stringify(data);\r\n self.setStoredTracks(tracks);\r\n }\r\n }\r\n });\r\n }\r\n result.data = data;\r\n return result;\r\n };\r\n\r\n const elevationFromServiceCache = [];\r\n\r\n var arr_diff = function (a1, a2) {\r\n\r\n var a = [], diff = [];\r\n\r\n for (var i = 0; i < a1.length; i++) {\r\n a[a1[i]] = true;\r\n }\r\n\r\n for (i = 0; i < a2.length; i++) {\r\n if (a[a2[i]]) {\r\n delete a[a2[i]];\r\n } else {\r\n a[a2[i]] = true;\r\n }\r\n }\r\n\r\n for (var k in a) {\r\n diff.push(k);\r\n }\r\n\r\n return diff;\r\n };\r\n\r\n const getElevationFromServiceOnCache = function (feature) {\r\n let isOnCache = elevationFromServiceCache.filter(function (elm) {\r\n return elm.feature === feature;\r\n })[0];\r\n if (!isOnCache) {\r\n return elevationFromServiceCache.filter(function (elm) {\r\n return arr_diff(elm.feature.geometry, feature.geometry).length === 0;\r\n //return elm.feature.geometry === feature.geometry; aunque sean iguales da falso ¿?¿?¿?\r\n })[0];\r\n } else {\r\n return isOnCache;\r\n }\r\n };\r\n\r\n const cacheElevationFromService = function (feature, data) {\r\n var result = getElevationFromServiceOnCache(feature);\r\n if (!result) {\r\n result = {\r\n feature: feature\r\n };\r\n elevationFromServiceCache.push(result);\r\n }\r\n result.data = data;\r\n return result;\r\n };\r\n const isLine = function (feat) {\r\n return TC.feature.Polyline && feat instanceof TC.feature.Polyline;\r\n };\r\n const getCurrentPolyline = function () {\r\n return this.layerTrack.features\r\n .filter(function (feat) {\r\n return isLine(feat);\r\n })[0];\r\n };\r\n const getCurrentPoints = function () {\r\n return this.layerTrack.features\r\n .filter(function (feat) { // filtrando por Point se cuelan los Marker\r\n return TC.feature.Marker && !(feat instanceof TC.feature.Marker) &&\r\n !isLine(feat);\r\n });\r\n };\r\n\r\n ctlProto.elevationTrack = function (li, resized) {\r\n var self = this;\r\n\r\n return new Promise((resolve, reject) => {\r\n if (resized) {\r\n self.wrap.simulateTrackEnd(resized);\r\n //self.uiSimulate(false, li);\r\n return;\r\n }\r\n if (!self.onResize) {\r\n self.onResize = self.elevationTrack.bind(self, li, true);\r\n window.addEventListener(\"resize\", self.onResize, false);\r\n }\r\n self.getElevationControl().then(async function (elevCtl) {\r\n if (elevCtl) {\r\n let cachedProfile = getElevationProfileFromCache(li.dataset.uid);\r\n if (!cachedProfile) {\r\n const track = await self.getTrackingData(li);\r\n if (self.layerTrack && self.layerTrack.features) {\r\n let features = self.layerTrack.features.filter((f) => {\r\n return isLine(f) &&\r\n (track.layout === ol.geom.GeometryLayout.XYZM ||\r\n track.layout === ol.geom.GeometryLayout.XYZ ||\r\n self.options.displayElevation);\r\n });\r\n\r\n if (features.length > 0) {\r\n let line = features[0];\r\n let time = {};\r\n // track con tiempo\r\n if (track.layout === ol.geom.GeometryLayout.XYZM ||\r\n track.layout === ol.geom.GeometryLayout.XYM) {\r\n let diff = 0;\r\n if (track.layout === ol.geom.GeometryLayout.XYZM) {\r\n diff = line.geometry[line.geometry.length - 1][3] - line.geometry[0][3];\r\n } else {\r\n diff = line.geometry[line.geometry.length - 1][2] - line.geometry[0][2];\r\n }\r\n time = {\r\n s: Math.floor(diff / 1000 % 60),\r\n m: Math.floor(diff / (1000 * 60) % 60),\r\n h: Math.floor(diff / (1000 * 60 * 60) % 24)\r\n };\r\n }\r\n\r\n let options = {\r\n originalElevation: true,\r\n onlyOriginalElevation: !self.options.displayElevation ? true : false,\r\n ignoreCaching: true,\r\n time: time,\r\n callback: function () {\r\n self.elevationChartData = elevCtl.elevationProfileChartData;\r\n self.hasElevation = elevCtl.elevationProfileChartData.min === 0 && elevCtl.elevationProfileChartData.max === 0 ? false : true;\r\n cacheElevationProfile.call(self, getCurrentPolyline.call(self), elevCtl.elevationProfileChartData, li.dataset.uid);\r\n\r\n // 10/02/2020 gestionamos el borrado desde featureTools\r\n onFeatureRemove = onFeatureRemove.bind(self);\r\n self.map.on(TC.Consts.event.FEATUREREMOVE, onFeatureRemove);\r\n\r\n self.resultsPanelChart.div.addEventListener('mouseover', function (_e) {\r\n if (self.layerTrack && self.layerTrack.getVisibility() && self.layerTrack.getOpacity() > 0)\r\n self.wrap.activateSnapping.call(self.wrap);\r\n });\r\n self.resultsPanelChart.div.addEventListener('mouseout', function (_e) {\r\n if (self.layerTrack && (!self.layerTrack.getVisibility() && self.layerTrack.getOpacity() == 0))\r\n self.wrap.deactivateSnapping.call(self.wrap);\r\n });\r\n\r\n self.map\r\n .on(TC.Consts.event.RESULTSPANELMIN, function () { self.chartProgressClear(); })\r\n .on(TC.Consts.event.RESULTSPANELCLOSE, function () { self.chartProgressClear(); });\r\n\r\n // mantenemos el mismo nombre de archivo al descargar desde panel y desde la lista.\r\n elevCtl.getProfilePanel().then(function (resultsPanel) {\r\n let selectedTrack = self.getSelectedTrack();\r\n if (selectedTrack) {\r\n resultsPanel.currentFeature.fileName = getDownloadFileName.call(self, self.getSelectedTrack());\r\n }\r\n });\r\n }\r\n };\r\n elevCtl.displayElevationProfile(line, options);\r\n } else {\r\n reject();\r\n }\r\n } else {\r\n reject();\r\n }\r\n } else {\r\n if (!self.options.displayElevation) {\r\n delete cachedProfile.data.secondaryElevationProfileChartData[0];\r\n }\r\n self.elevationChartData = cachedProfile.data;\r\n elevCtl.getProfilePanel().then(function (resultsPanel) {\r\n resultsPanel.renderPromise().then(function () {\r\n resultsPanel.doVisible();\r\n elevCtl.renderElevationProfile(self.elevationChartData);\r\n });\r\n resultsPanel.setCurrentFeature();\r\n });\r\n }\r\n resolve();\r\n } else {\r\n reject();\r\n }\r\n }).catch(reject);\r\n });\r\n };\r\n\r\n ctlProto.clear = function (layerType) {\r\n var self = this;\r\n\r\n if (self.onResize) {\r\n window.removeEventListener(\"resize\", self.onResize, false);\r\n self.onResize = undefined;\r\n }\r\n\r\n if (layerType === self.Const.Layers.TRACK) {\r\n\r\n self.layerTrack.clearFeatures();\r\n\r\n // gráfico perfil de elevación\r\n self.getElevationControl().then(elevCtl => elevCtl && elevCtl.closeElevationProfile());\r\n delete self.elevationChartData;\r\n\r\n // overlay de la simulación\r\n self.wrap.simulateTrackEnd();\r\n\r\n self.wrap.clear();\r\n\r\n // eliminamos la selección en la lista de tracks\r\n self.track.trackList.querySelectorAll('li').forEach(function (li) {\r\n li.classList.remove(self.Const.Classes.SELECTEDTRACK);\r\n });\r\n\r\n self.map.trigger(self.Const.Event.CLEARTRACK);\r\n\r\n self.featuresToShare = [];\r\n\r\n if (!self.loadingState) {\r\n delete self.toShare;\r\n }\r\n\r\n //TC.Control.prototype.deactivate.call(self);\r\n\r\n } else {\r\n self.layerTracking.clearFeatures();\r\n self.layerGPS.clearFeatures();\r\n }\r\n };\r\n\r\n ctlProto.saveTrack = function (options) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n let message = options.message || self.getLocaleString(\"geo.trk.save.alert\");\r\n\r\n var _save = async function (layer) {\r\n let wait;\r\n wait = self.getLoadingIndicator().addWait();\r\n\r\n let trackName = options.importedFileName || self.track.trackName.value.trim();\r\n\r\n let tracks = await self.getAvailableTracks();\r\n //if (!tracks) {\r\n // tracks = [];\r\n //}\r\n\r\n let formatted = self.wrap.formattedToStorage(layer, true, options.notReproject);\r\n\r\n let clean = function (wait) {\r\n self.track.trackName.value = '';\r\n self.track.trackName.disabled = true;\r\n self.track.trackSave.disabled = true;\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n self.getLoadingIndicator().removeWait(wait);\r\n\r\n duringTrackingToolsPanel.call(self);\r\n };\r\n\r\n let newTrack = {\r\n name: trackName,\r\n data: formatted.features,\r\n layout: formatted.layout,\r\n crs: self.storageCRS\r\n };\r\n\r\n const getHashToCompare = function (trackObject) {\r\n // reemplazamos los ids contenidos en la geomtría que provocan falsos negativos.\r\n let toGetHash = JSON.parse(JSON.stringify(trackObject));\r\n const regex = /(\\\"id\\\"\\s?\\:\\s?\\\"[a-z0-9]+\\\")/gi;\r\n toGetHash.data = toGetHash.data.replace(regex, '\"\"');\r\n\r\n return hex_md5(JSON.stringify(toGetHash));\r\n };\r\n\r\n TC.loadJS(\r\n !window.hex_md5,\r\n [TC.apiLocation + TC.Consts.url.HASH],\r\n function () {\r\n let hash = getHashToCompare(newTrack);\r\n\r\n let sameTrackUID = tracks.map(function (savedTrack) {\r\n let clonedTrack = JSON.parse(JSON.stringify(savedTrack));\r\n delete clonedTrack.uid;\r\n delete clonedTrack.profile;\r\n\r\n if (hash === getHashToCompare(clonedTrack)) {\r\n return savedTrack.uid;\r\n } else {\r\n const jsonFormat = new ol.format.GeoJSON();\r\n // validamos si se trata de un track exportado/importado ya que se compacta la geometría\r\n let features = jsonFormat.readFeatures(clonedTrack.data);\r\n // Aplicamos una precisión un dígito mayor que la del mapa, si no, al compartir algunas parcelas se deforman demasiado\r\n let precision = Math.pow(10, TC.Consts.DEGREE_PRECISION + 1);\r\n\r\n features.forEach(function (feature) {\r\n let geom = TC.Util.explodeGeometry(TC.Util.compactGeometry(feature.getGeometry().getCoordinates(), precision));\r\n feature.getGeometry().setCoordinates(geom);\r\n });\r\n\r\n clonedTrack.data = jsonFormat.writeFeatures(features);\r\n\r\n if (hash === hex_md5(JSON.stringify(clonedTrack))) {\r\n return savedTrack.uid;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n }).filter(function (uid) {\r\n return uid !== null;\r\n });\r\n\r\n const getTrackIndex = function (uid) {\r\n return self.getStoredTracks().then(function () {\r\n self.bindTracks();\r\n\r\n let index;\r\n for (var i = 0; i < self.availableTracks.length; i++) {\r\n if (self.availableTracks[i].uid === uid) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n return index;\r\n });\r\n };\r\n\r\n if (sameTrackUID.length === 0) {\r\n newTrack.uid = Date.now() + Math.random();\r\n tracks.push(newTrack);\r\n tracks = _orderTracks(tracks);\r\n\r\n try {\r\n self.setStoredTracks(tracks).then(function () {\r\n self.map.toast(message, { duration: 3000 });\r\n\r\n clean(wait);\r\n\r\n getTrackIndex(newTrack.uid).then(function (index) {\r\n resolve(index);\r\n });\r\n });\r\n\r\n } catch (error) {\r\n TC.alert(self.getLocaleString(\"geo.error.savelocalstorage\") + ': ' + error.message);\r\n clean(wait);\r\n reject(error);\r\n }\r\n } else {\r\n console.log('Ya existe un track con ese mismo hash');\r\n\r\n clean(wait);\r\n\r\n getTrackIndex(sameTrackUID[0]).then(function (index) {\r\n resolve(index);\r\n });\r\n }\r\n });\r\n\r\n };\r\n\r\n if (self.importedFileName) {\r\n _save(self.layerTrack);\r\n }\r\n else if (self.track.trackName.value.trim().length === 0) {\r\n self.track.trackName.value = new Date().toLocaleString();\r\n _save(self.layerTracking);\r\n }\r\n else {\r\n _save(self.layerTracking);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.addWaypoint = function () {\r\n var self = this;\r\n\r\n var waypointName = self.track.trackWPT.value.trim();\r\n if (!waypointName) {\r\n waypointName = new Date().toLocaleString();\r\n }\r\n\r\n var wait = self.getLoadingIndicator().addWait();\r\n\r\n duringTrackingToolsPanel.call(self);\r\n\r\n self.wrap.addWaypoint(self.currentPoint.position, {\r\n name: waypointName,\r\n ele: self.currentPoint.heading,\r\n time: new Date().getTime() // GLS: lo quito ya que hemos actualizado la función que gestiona la fechas para la exportación a GPX - espera la fecha en segundos -> / 1000 // para la exportación a GPX - espera la fecha en segundos\r\n });\r\n\r\n self.track.trackWPT.value = '';\r\n self.track.trackWPT.disabled = true;\r\n self.track.trackAdd.disabled = true;\r\n\r\n // cada vez que se añade un waypoint almacenamos en sessionStorage\r\n TC.Util.storage.setSessionLocalValue(self.Const.LocalStorageKey.TRACKINGTEMP, self.wrap.formattedToStorage(self.layerTracking).features);\r\n\r\n self.getLoadingIndicator().removeWait(wait);\r\n };\r\n\r\n ctlProto.editTrackName = function (trackId, newName) {\r\n var self = this;\r\n\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n if (tracks[trackId]) {\r\n tracks[trackId].name = newName;\r\n\r\n self.setStoredTracks(tracks);\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.removeTrack = function (li) {\r\n var self = this;\r\n\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n var dataId = li.dataset.id;\r\n if (tracks[dataId]) {\r\n var uid = tracks[dataId].uid;\r\n\r\n TC.confirm(self.getLocaleString(\"geo.trk.delete.alert\"), function () {\r\n\r\n const selectedTrack = self.getSelectedTrack();\r\n if (selectedTrack && selectedTrack.dataset.id === dataId) {\r\n self.clear(self.Const.Layers.TRACK);\r\n }\r\n\r\n localforage.removeItem(self.Const.LocalStorageKey.TRACKING + '#' + uid).then(function () {\r\n self.getStoredTracks().then(function () {\r\n self.bindTracks();\r\n });\r\n }).catch(function (err) {\r\n console.log(err);\r\n });\r\n\r\n }, function () { });\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.setSelectedTrack = function (li) {\r\n var self = this;\r\n\r\n if (!self.isActive) {\r\n self.activate();\r\n }\r\n\r\n self.track.trackList.querySelectorAll('li[data-id] > span').forEach(function (span) {\r\n span.setAttribute('title', span.textContent);\r\n });\r\n self.track.trackList.querySelectorAll('li').forEach(function (li) {\r\n li.classList.remove(self.Const.Classes.SELECTEDTRACK);\r\n });\r\n\r\n li.classList.add(self.Const.Classes.SELECTEDTRACK);\r\n \r\n const transitionEvent = function (event) {\r\n if (!HTMLElement.prototype.scrollIntoView) {\r\n self.track.trackList.scrollTop = e.index * listElement.offsetHeight;\r\n }\r\n else {\r\n li.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n }\r\n li.removeEventListener(\"transitionend\", transitionEvent, false);\r\n };\r\n li.addEventListener(\"transitionend\", transitionEvent, false);\r\n\r\n li.setAttribute('title', self.getLocaleString(\"tr.lst.clear\") + \" \" + li.querySelector('span').textContent);\r\n li.querySelector(self.Const.Selector.DRAW).setAttribute('title', li.getAttribute('title'));\r\n\r\n if (!self.loadingState) {\r\n delete self.toShare;\r\n }\r\n };\r\n\r\n ctlProto.getSelectedTrack = function () {\r\n var self = this;\r\n\r\n return self.track.trackList.querySelector('li.' + self.Const.Classes.SELECTEDTRACK);\r\n };\r\n\r\n ctlProto.clearSelectedTrack = function () {\r\n const self = this;\r\n\r\n const selected = self.getSelectedTrack();\r\n if (selected) {\r\n\r\n if (self.onResize) {\r\n window.removeEventListener('resize', self.onResize, false);\r\n self.onResize = undefined;\r\n }\r\n\r\n selected.classList.remove(self.Const.Classes.SELECTEDTRACK);\r\n selected.setAttribute('title', selected.textContent);\r\n selected.querySelector(self.Const.Selector.DRAW).setAttribute('title', selected.getAttribute('title'));\r\n\r\n delete self.toShare;\r\n }\r\n };\r\n\r\n ctlProto.clearSelection = function () {\r\n var self = this;\r\n self.wrap.deactivateSnapping();\r\n var selected = self.getSelectedTrack();\r\n if (selected) {\r\n self.clearSelectedTrack();\r\n }\r\n if (self.resultsPanelChart) {\r\n\r\n self.resultsPanelChart.div.removeEventListener('mouseover', self.resultsPanelChart.deactivateSnapping);\r\n self.resultsPanelChart.div.removeEventListener('mouseout', self.resultsPanelChart.activateSnapping);\r\n\r\n self.resultsPanelChart.close();\r\n }\r\n\r\n self.clear(self.Const.Layers.TRACK);\r\n };\r\n\r\n ctlProto.drawTrackingData = function (li) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n self.wrap.clear();\r\n\r\n self.getTrackingData(li).then(function (track) {\r\n if (track.data)\r\n self.wrap.drawTrackingData(track).then(function () {\r\n var showFeatures = self.layerTrack.features;\r\n if (showFeatures && showFeatures.length > 0) {\r\n\r\n var coordinates = showFeatures.filter(function (feature) {\r\n feature.showsPopup = false;\r\n if (TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline) {\r\n return true;\r\n } else if (feature instanceof TC.feature.Polyline) {\r\n return true;\r\n }\r\n return false;\r\n }).map(function (feature) {\r\n if (TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline) {\r\n return feature.geometry[0];\r\n } else if (feature instanceof TC.feature.Polyline) {\r\n return feature.geometry;\r\n }\r\n })[0];\r\n\r\n if (coordinates) {\r\n var first = coordinates[0];\r\n var last = coordinates[coordinates.length - 1];\r\n\r\n if (first && first !== last) {\r\n self.layerTrack.addMarker(first.slice().splice(0, 2), {\r\n showsPopup: false, cssClass: self.CLASS + '-track-marker-icon-end', anchor: [0.5, 1], notExport: true\r\n });\r\n }\r\n\r\n if (last) {\r\n self.layerTrack.addMarker(last.slice().splice(0, 2), {\r\n showsPopup: false, cssClass: self.CLASS + '-track-marker-icon', anchor: [0.5, 1], notExport: true\r\n });\r\n }\r\n }\r\n }\r\n self.layerTrack.setVisibility(true);\r\n resolve();\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getTrackingData = function (li) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.getAvailableTracks().then(function (tracks) {\r\n if (tracks) {\r\n const dataId = li.dataset.id;\r\n if (tracks[dataId]) {\r\n var track = tracks[dataId].data;\r\n\r\n // GLS: tengo que transformar de 4326 al crs del mapa en el momento de pintar, porque si lo hacemos al cargar la lista\r\n // y después hay cambio de crs, en el momento de pintar no sé desde qué crs debo tranformar\r\n track = self.wrap.formattedFromStorage(track);\r\n\r\n resolve({ data: track, layout: tracks[dataId].layout });\r\n }\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.export = function (li) {\r\n var self = this;\r\n return self.wrap.export(li);\r\n };\r\n\r\n\r\n ctlProto.clearFileInput = function (fileInput) {\r\n const form = document.createElement('form');\r\n const parent = fileInput.parentElement;\r\n parent.insertBefore(form, fileInput);\r\n form.appendChild(fileInput);\r\n form.reset();\r\n // Desenvolvemos el input del form\r\n form.insertAdjacentElement('afterend', fileInput);\r\n parent.removeChild(form);\r\n };\r\n\r\n ctlProto.getLoadingIndicator = function () {\r\n var self = this;\r\n\r\n if (!self.loading) {\r\n self.loading = self.map.getControlsByClass(TC.control.LoadingIndicator);\r\n if (self.loading && self.loading.length > 0)\r\n self.loading = self.loading[0];\r\n }\r\n\r\n return self.loading;\r\n };\r\n\r\n ctlProto.onGeolocateError = function (error) {\r\n var self = this;\r\n\r\n if (navigator.geolocation) {\r\n if (self.currentPosition)\r\n navigator.geolocation.clearWatch(self.currentPosition);\r\n if (self.currentPositionTrk) {\r\n self.currentPositionTrk = self.currentPositionTrk instanceof Array ? self.currentPositionTrk : [self.currentPositionTrk];\r\n\r\n self.currentPositionTrk.forEach(function (watch) {\r\n navigator.geolocation.clearWatch(watch);\r\n });\r\n\r\n self.currentPositionTrk = [];\r\n }\r\n }\r\n\r\n if (self.currentPositionWaiting)\r\n self.getLoadingIndicator().removeWait(self.currentPositionWaiting);\r\n\r\n var errorMsg;\r\n switch (error.code) {\r\n case error.PERMISSION_DENIED:\r\n errorMsg = self.getLocaleString(\"geo.error.permission_denied\");\r\n break;\r\n case error.POSITION_UNAVAILABLE:\r\n errorMsg = self.getLocaleString(\"geo.error.position_unavailable\");\r\n break;\r\n case error.TIMEOUT:\r\n errorMsg = self.getLocaleString(\"geo.error.timeout\");\r\n break;\r\n default:\r\n errorMsg = self.getLocaleString(\"geo.error.default\");\r\n break;\r\n }\r\n\r\n self.map.toast(errorMsg, { type: TC.Consts.msgType.WARNING });\r\n\r\n if (!self.geopositionTracking && self.track) {\r\n self.track.activateButton.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.track.deactivateButton.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n var _isEmpty = function (obj) {\r\n return !obj || obj.length === 0;\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n\r\n if (self.layerTrack && self.track || self.toShare) {\r\n let state = {\r\n id: self.id\r\n };\r\n if (!self.toShare || self.toShare && !self.toShare.doZoom) { // caso compartir general \r\n self.toShare = { doZoom: false };\r\n let clonedToShare = Object.assign({}, self.toShare);\r\n let features = self.layerTrack.features;\r\n\r\n if (features.length > 0 && self.featuresToShare && self.featuresToShare.length > 0) {\r\n clonedToShare.features = self.featuresToShare;\r\n } else {\r\n const layerState = self.layerTrack.exportState({\r\n features: features\r\n });\r\n\r\n clonedToShare.features = layerState.features;\r\n }\r\n\r\n const selectedTrack = self.getSelectedTrack();\r\n if (selectedTrack) {\r\n clonedToShare.trackName = selectedTrack.querySelector('span').innerHTML;\r\n }\r\n state.trackResult = JSON.stringify(clonedToShare);\r\n } else { // compartir desde lista de rutas \r\n state.trackResult = JSON.stringify(self.toShare);\r\n }\r\n\r\n return state;\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n if (self.map) {\r\n if (state.trackResult && state.trackResult.length) {\r\n self.enable();\r\n let sharedTrackResult = JSON.parse(state.trackResult);\r\n\r\n if (sharedTrackResult.features && sharedTrackResult.features.length > 0) {\r\n const promises = new Array(sharedTrackResult.features.length);\r\n sharedTrackResult.features.forEach(function (f, idx) {\r\n const featureOptions = { data: f.data, id: f.id, showsPopup: f.showsPopup };\r\n var geom = f.geom; // El redondeo hace que ya no podamos validar con los tracks existentes.\r\n switch (f.type) {\r\n case TC.Consts.geom.POLYLINE:\r\n promises[idx] = new TC.feature.Polyline(geom, featureOptions);\r\n break;\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n promises[idx] = new TC.feature.MultiPolyline(geom, featureOptions);\r\n break;\r\n case TC.Consts.geom.MARKER:\r\n promises[idx] = new TC.feature.Marker(geom, featureOptions);\r\n break;\r\n case TC.Consts.geom.POINT:\r\n promises[idx] = new TC.feature.Point(geom, featureOptions);\r\n break;\r\n }\r\n });\r\n\r\n if (Object.prototype.hasOwnProperty.call(sharedTrackResult, \"doZoom\")) {\r\n self.loadingState = true;\r\n self.toShare = { doZoom: sharedTrackResult.doZoom };\r\n }\r\n\r\n Promise.all(promises).then(function (tcFeatures) {\r\n var options = { features: tcFeatures, fileName: sharedTrackResult.trackName, notReproject: true, isShared: true };\r\n if (!self.availableTracks) {\r\n self.getStoredTracks().then(function () {\r\n self.importTrack(options);\r\n });\r\n } else {\r\n self.importTrack(options);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n})();\r\n\r\nconst Geolocation = TC.control.Geolocation;\r\nexport default Geolocation;","\r\n/**\r\n * Opciones de control de obtención de información de entidades de mapa por línea o por recinto.\r\n * @typedef GeometryFeatureInfoOptions\r\n * @extends FeatureInfoOptions\r\n * @see MultiFeatureInfoModeOptions\r\n * @property {LineStyleOptions|PolygonStyleOptions} [filterStyle] - Estilo de la entidad cuya geometría servirá de filtro espacial para la consulta.\r\n * @property {boolean} [persistentHighlights] - Cuando el control muestra los resultados de la consulta muestra también resaltadas sobre el mapa las geometrías\r\n * de las entidades geográficas de la respuesta. Si este valor es verdadero, dichas geometrías se quedan resaltadas en el mapa indefinidamente. \r\n * En caso contrario, las geometrías resaltadas se borran en el momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n */\r\n\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\nimport filter from '../filter';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.FeatureInfoCommons = FeatureInfoCommons;\r\nTC.filter = filter;\r\n\r\n(function () {\r\n TC.control.GeometryFeatureInfo = function () {\r\n var self = this;\r\n TC.control.FeatureInfoCommons.apply(this, arguments);\r\n self.wrap = new TC.wrap.control.GeometryFeatureInfo(self);\r\n self._isDrawing = false;\r\n self._isSearching = false;\r\n self._drawToken = false;\r\n };\r\n\r\n TC.inherit(TC.control.GeometryFeatureInfo, TC.control.FeatureInfoCommons);\r\n\r\n var ctlProto = TC.control.GeometryFeatureInfo.prototype;\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.control.FeatureInfoCommons.prototype.register.call(self, map);\r\n\r\n self.on(TC.Consts.event.CONTROLDEACTIVATE, function (_e) {\r\n self.wrap.cancelDraw();\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.callback = function (coords, _xy) {\r\n var self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self._drawToken) {\r\n resolve();\r\n return;\r\n }\r\n self.closeResults();\r\n if (self.filterFeature) {\r\n self.filterLayer.removeFeature(self.filterFeature);\r\n self.filterFeature = null;\r\n }\r\n self.highlightedFeature = null;\r\n var visibleLayers = false;\r\n for (var i = 0; i < self.map.workLayers.length; i++) {\r\n var layer = self.map.workLayers[i];\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n if (layer.getVisibility() && layer.names.length > 0) {\r\n visibleLayers = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (visibleLayers) {\r\n self.closeResults();\r\n self.wrap.beginDraw({\r\n geometryType: self.geometryType,\r\n xy: coords,\r\n layer: self.filterLayer,\r\n callback: function (feature) {\r\n self.wrap.getFeaturesByGeometry(feature).then(() => resolve());\r\n }\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.sendRequest = function (filter) {\r\n return this.wrap.getFeaturesByGeometry(filter);\r\n };\r\n\r\n ctlProto.responseCallback = function (options) {\r\n var self = this;\r\n\r\n TC.control.FeatureInfoCommons.prototype.responseCallback.call(self, options);\r\n\r\n if (self.filterFeature) {\r\n var services = options.services;\r\n\r\n // Eliminamos capas sin resultados a no ser que tenga un error\r\n for (var i = 0; i < services.length; i++) {\r\n var service = services[i];\r\n if (service.hasLimits) {\r\n delete service.layers;\r\n service.hasLimits = service.hasLimits;\r\n }\r\n else {\r\n for (var j = 0; j < service.layers.length; j++) {\r\n if (!service.layers[j].features.length) {\r\n service.layers.splice(j, 1);\r\n j = j - 1;\r\n }\r\n }\r\n if (!service.layers.length) {\r\n services.splice(i, 1);\r\n i = i - 1;\r\n }\r\n }\r\n\r\n }\r\n self.renderData(options, function () {\r\n if (services.length) {\r\n self.insertLinks();\r\n }\r\n self.div.querySelector(`.${self.CLASS}-coords`).classList.add(TC.Consts.classes.HIDDEN);\r\n if (!self.info || !self.info.services.length) {\r\n self.map.toast(self.getLocaleString('query.msgNoResults'), { type: TC.Consts.msgType.INFO });\r\n return;\r\n }\r\n self.displayResults();\r\n });\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst GeometryFeatureInfo = TC.control.GeometryFeatureInfo;\r\nexport default GeometryFeatureInfo;","import WebComponentControl from './WebComponentControl';\r\nimport Consts from '../Consts';\r\nimport Util from '../Util';\r\nimport TC from '../../TC';\r\n\r\nclass LanguageOption extends HTMLElement {\r\n #link;\r\n\r\n constructor(options) {\r\n super();\r\n\r\n const self = this;\r\n self.CLASS = 'tc-ctl-lang-link';\r\n self.#link = document.createElement('a');\r\n self.#link.classList.add(self.CLASS);\r\n self.appendChild(self.#link);\r\n\r\n if (options) {\r\n self.fullCode = options.fullCode;\r\n self.shortCode = options.shortCode;\r\n self.description = options.description;\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.fullCode = self.fullCode;\r\n self.shortCode = self.shortCode;\r\n self.description = self.description;\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['full-code', 'short-code', 'description', 'href'];\r\n }\r\n\r\n get fullCode() {\r\n return this.getAttribute('full-code');\r\n }\r\n\r\n set fullCode(value) {\r\n const self = this;\r\n self.setAttribute('full-code', value);\r\n }\r\n\r\n get shortCode() {\r\n return this.getAttribute('short-code');\r\n }\r\n\r\n set shortCode(value) {\r\n const self = this;\r\n self.setAttribute('short-code', value);\r\n self.#link.dataset.langCode = value;\r\n let parent = self;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n while (parent && !(parent instanceof LanguageSelector));\r\n self.#link.href = parent?.getUrl(value);\r\n self.#link.innerHTML = value;\r\n }\r\n\r\n get description() {\r\n return this.getAttribute('description');\r\n }\r\n\r\n set description(value) {\r\n const self = this;\r\n self.setAttribute('description', value);\r\n self.#link.setAttribute('title', value);\r\n }\r\n\r\n get href() {\r\n return this.#link.getAttribute('href');\r\n }\r\n\r\n set href(value) {\r\n this.#link.setAttribute('href', value);\r\n }\r\n}\r\n\r\ncustomElements.define('sitna-language-option', LanguageOption);\r\n\r\nclass LanguageSelector extends WebComponentControl {\r\n static PARAMETER_NAME = \"lang\";\r\n static COOKIE_NAME = 'SITNA.language';\r\n static #currentLocale;\r\n\r\n constructor() {\r\n super(...arguments);\r\n\r\n const self = this;\r\n self.CLASS = 'tc-ctl-lang-select';\r\n self.template = {};\r\n self.template[self.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\n
            \";},\"useData\":true}\r\n \r\n if (self.options.static) {\r\n self.static = true;\r\n }\r\n self.tagAttributeName = self.options.tagAttributeName || 'data-sitna-i18n';\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n super.connectedCallback();\r\n self.languages = Array.from(self.querySelectorAll('sitna-language-option'));\r\n\r\n if (!self.languages.length) {\r\n const languageOptions = self.options.languages || [\r\n {\r\n fullCode: 'es-ES',\r\n shortCode: 'es',\r\n description: 'Ver en castellano'\r\n },\r\n {\r\n fullCode: 'eu-ES',\r\n shortCode: 'eu',\r\n description: 'Euskaraz ikusi'\r\n },\r\n {\r\n fullCode: 'en-US',\r\n shortCode: 'en',\r\n description: 'View in English'\r\n }\r\n ];\r\n self.languages = languageOptions.map(languageOptions => new LanguageOption(languageOptions));\r\n self.render();\r\n }\r\n self.static = self.static;\r\n if (!self.static) {\r\n self.collapsed = self.collapsed || true;\r\n }\r\n const languages = Array.from(self.querySelectorAll('sitna-language-option'));\r\n if (languages.length) {\r\n self.languages = languages;\r\n }\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['static', 'collapsed'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n if (oldValue === newValue) {\r\n return;\r\n }\r\n const self = this;\r\n if (name === 'static') {\r\n self.static = self.hasAttribute(name);\r\n }\r\n if (name === 'collapsed') {\r\n self.collapsed = self.hasAttribute(name);\r\n }\r\n }\r\n\r\n get static() {\r\n return this.hasAttribute('static');\r\n }\r\n\r\n set static(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('static', '');\r\n }\r\n else {\r\n self.removeAttribute('static');\r\n }\r\n }\r\n\r\n get collapsed() {\r\n return this.hasAttribute('collapsed');\r\n }\r\n\r\n set collapsed(value) {\r\n const self = this;\r\n if (value) {\r\n self.setAttribute('collapsed', '');\r\n }\r\n else {\r\n self.removeAttribute('collapsed');\r\n }\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n const result = super.register.call(self, map);\r\n map.ready(() => LanguageSelector.setDocumentTexts());\r\n return result;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData({ languages: self.languages }, function () {\r\n const linkContainer = self.querySelector(`.${self.CLASS}-links`);\r\n let activeLink;\r\n self.languages.forEach(language => {\r\n linkContainer.appendChild(language);\r\n const link = language.querySelector(`a.${language.CLASS}`);\r\n link.addEventListener(Consts.event.CLICK, function (e) {\r\n e.preventDefault();\r\n self.setLanguage(e.target.dataset.langCode);\r\n });\r\n if (LanguageSelector.currentLocale === language.fullCode) {\r\n activeLink = link;\r\n }\r\n });\r\n activeLink ??= self.languages[0].querySelector(`a.${language.CLASS}`);\r\n activeLink.classList.add(Consts.classes.ACTIVE);\r\n self.toggle = self.querySelector(`.${self.CLASS}-toggle`);\r\n\r\n self.toggle.addEventListener(Consts.event.CLICK, function (_e) {\r\n self.collapsed = !self.collapsed;\r\n });\r\n\r\n resolve(self);\r\n });\r\n }));\r\n }\r\n\r\n getUrl(code) {\r\n return Util.addURLParameters(window.location.href, {\r\n [LanguageSelector.PARAMETER_NAME]: code\r\n });\r\n }\r\n\r\n setLanguage(code) {\r\n const self = this;\r\n const links = self.languages.map(language => language.querySelector(`a.${language.CLASS}`));\r\n links.forEach(link => link.classList.remove(Consts.classes.ACTIVE));\r\n links.find(link => link.dataset.langCode === code)?.classList.add(Consts.classes.ACTIVE);\r\n window.location.href = self.getUrl(code);\r\n }\r\n\r\n static setDocumentTexts() {\r\n document.querySelectorAll(`[${self.tagAttributeName}]`).forEach(function (elm) {\r\n let html = elm.innerHTML;\r\n const braces = html.match(/\\{\\{([^\\{\\}]+)\\}\\}/g);\r\n if (braces) {\r\n for (var i = 0, len = braces.length; i < len; i++) {\r\n const b = braces[i];\r\n const key = b.match(/[^\\{\\}]+/)[0];\r\n html = html.replace(b, Util.getLocaleString(LanguageSelector.currentLocale, key));\r\n }\r\n }\r\n if (elm.innerHTML !== html) {\r\n elm.innerHTML = html;\r\n }\r\n });\r\n }\r\n\r\n static get currentLocale() {\r\n if (!LanguageSelector.#currentLocale) {\r\n LanguageSelector.#currentLocale = Util.getLocaleUserChoice({\r\n cookieName: LanguageSelector.COOKIE_NAME,\r\n paramName: LanguageSelector.PARAMETER_NAME\r\n });\r\n }\r\n return LanguageSelector.#currentLocale;\r\n }\r\n}\r\n\r\nLanguageSelector.currentLocale;\r\n\r\nTC.control = TC.control || {};\r\nTC.control.LanguageSelector = LanguageSelector;\r\ncustomElements.define('sitna-language-select', LanguageSelector);\r\nexport default LanguageSelector;\r\n","\r\n/**\r\n * Opciones de control de catálogo de capas disponibles. \r\n * \r\n * Con este control se dispone de las siguientes funcionalidades:\r\n *\r\n * - Consultar las capas disponibles en uno o varios WMS.\r\n * - Buscar capas mediante texto libre. Se busca el texto en los títulos y los resúmenes descriptivos de cada capa, que se publican en el [documento de capacidades](https://github.com/7o9/implementer-friendly-standards/blob/master/introduction.rst#getcapabilities) del servicio.\r\n * - Añadir capas al mapa como capas de trabajo.\r\n * @typedef LayerCatalogOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [enableSearch] - Propiedad que establece si se puede buscar capas por texto. La búsqueda del texto se realiza en los títulos \r\n * y los resúmenes descriptivos de cada capa, que se publican en el [documento de capacidades](https://github.com/7o9/implementer-friendly-standards/blob/master/introduction.rst#getcapabilities) del servicio.\r\n * @property {LayerOptions[]} layers - Lista de objetos de definición de las con capas de servicios WMS que queremos añadir al catálogo.\r\n * \r\n * En estos objetos, si se asigna un valor a la propiedad `layerNames`, solo las capas especificadas y sus hijas estarán disponibles para ser añadidas al mapa. \r\n * Sin embargo, si esta propiedad se deja sin asignar, todas las capas publicadas en el servicio WMS estarán disponibles para ser añadidas.\r\n * @example [Ver en vivo](../examples/cfg.MapControlOptions.layerCatalog_workLayerManager.html) {@lang html}\r\n *
            \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport ProjectionSelector from './ProjectionSelector';\r\nimport autocomplete from '../ui/autocomplete';\r\n\r\nTC.control = TC.control || {};\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\nTC.Consts = Consts;\r\nTC.control.ProjectionSelector = ProjectionSelector;\r\n\r\n(function () {\r\n\r\n TC.control.LayerCatalog = function () {\r\n var self = this;\r\n\r\n self.layers = [];\r\n self.searchInit = false;\r\n\r\n TC.control.ProjectionSelector.apply(self, arguments);\r\n\r\n self._selectors = {\r\n LAYER_ROOT: 'div.' + self.CLASS + '-tree > ul.' + self.CLASS + '-branch > li.' + self.CLASS + '-node'\r\n };\r\n\r\n if (!TC.Consts.classes.SELECTABLE) {\r\n TC.Consts.classes.SELECTABLE = 'tc-selectable';\r\n }\r\n if (!TC.Consts.classes.INCOMPATIBLE) {\r\n TC.Consts.classes.INCOMPATIBLE = 'tc-incompatible';\r\n }\r\n if (!TC.Consts.classes.ACTIVE) {\r\n TC.Consts.classes.ACTIVE = 'tc-active';\r\n }\r\n };\r\n\r\n TC.inherit(TC.control.LayerCatalog, TC.control.ProjectionSelector);\r\n\r\n var ctlProto = TC.control.LayerCatalog.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-lcat';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"layerTrees\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":6,\"column\":15}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"layers\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":8},\"end\":{\"line\":9,\"column\":15}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"layerTrees\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":8},\"end\":{\"line\":27,\"column\":17}}})) != null ? stack1 : \"\") + \"
            \\r\\n\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-lcat-branch\"),depth0,{\"name\":\"tc-ctl-lcat-branch\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"7\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"layers\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":8},\"end\":{\"line\":40,\"column\":15}}})) != null ? stack1 : \"\");},\"8\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"layers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":16},\"end\":{\"line\":34,\"column\":25}}})) != null ? stack1 : \"\") + \"
            \\r\\n\";},\"9\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"
          • \\r\\n\";},\"11\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"loadingLayerTree\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":38,\"column\":22},\"end\":{\"line\":38,\"column\":49}}})) + \"...\\r\\n
            \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

            \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"availableLayers\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":2,\"column\":30}}})) + \"\\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"enableSearch\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":10,\"column\":11}}})) != null ? stack1 : \"\") + \"

            \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
            \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"layerTrees\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":4},\"end\":{\"line\":41,\"column\":11}}})) != null ? stack1 : \"\") + \"
            \\r\\n
            \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-lcat-info\"),depth0,{\"name\":\"tc-ctl-lcat-info\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"
            \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-branch'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"class=\\\"tc-ctl-lcat-node\" + ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"expanded\") : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":43},\"end\":{\"line\":1,\"column\":87}}})) != null ? stack1 : \"\") + \"\\\"\";},\"2\":function(container,depth0,helpers,partials,data) { return \" tc-collapsed\";},\"4\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-lcat-node tc-ctl-lcat-leaf\\\"\";},\"6\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-lcat-node\"),depth0,{\"name\":\"tc-ctl-lcat-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \\r\\n \\r\\n \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"\\r\\n
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":7,\"column\":17}}})) != null ? stack1 : \"\") + \"
            \\r\\n
          • \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-node'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":216},\"end\":{\"line\":1,\"column\":303}}})) != null ? stack1 : \"\") + \"\" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.program(13, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":386},\"end\":{\"line\":1,\"column\":789}}})) != null ? stack1 : \"\") + \"
              \" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":864},\"end\":{\"line\":1,\"column\":913}}})) != null ? stack1 : \"\") + \"
          • \";},\"2\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" class=\\\"tc-ctl-lcat-node\" + ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"expanded\") : depth0),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":61},\"end\":{\"line\":1,\"column\":105}}})) != null ? stack1 : \"\") + \"\\\" \";},\"3\":function(container,depth0,helpers,partials,data) { return \" tc-collapsed\";},\"5\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-lcat-node tc-ctl-lcat-leaf\\\" \";},\"7\":function(container,depth0,helpers,partials,data) { return \"\";},\"9\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"clickToAddToMap\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":335},\"end\":{\"line\":1,\"column\":361}}}));},\"11\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"abstract\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":514},\"end\":{\"line\":1,\"column\":782}}})) != null ? stack1 : \"\");},\"14\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"16\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"metadata\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":645},\"end\":{\"line\":1,\"column\":775}}})) != null ? stack1 : \"\");},\"18\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-lcat-node\"),depth0,{\"name\":\"tc-ctl-lcat-node\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"isVisible\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":1,\"column\":930}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-info'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n

            \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"abstract\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":8},\"end\":{\"line\":6,\"column\":27}}})) + \"

            \\r\\n
            \"    + ((stack1 = container.lambda((depth0 != null ? lookupProperty(depth0,\"abstract\") : depth0), depth0)) != null ? stack1 : \"\")    + \"
            \\r\\n
            \\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n

            \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"metadata\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":8},\"end\":{\"line\":12,\"column\":27}}})) + \"

            \\r\\n
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"metadata\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":8},\"end\":{\"line\":16,\"column\":17}}})) != null ? stack1 : \"\") + \"
            \\r\\n
            \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,\"formatDescription\") : depth0), depth0)) != null ? stack1 : \"\") + \"
          • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"layerInfo\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":2,\"column\":24}}})) + \"

            \\r\\n

            \" + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

            \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"abstract\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":0},\"end\":{\"line\":9,\"column\":7}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"metadata\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":19,\"column\":7}}})) != null ? stack1 : \"\");},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-results'] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"gt\").call(alias1,(depths[1] != null ? lookupProperty(depths[1],\"servicesLooked\") : depths[1]),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":34}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":5,\"column\":11}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"founds\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":8},\"end\":{\"line\":11,\"column\":14}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"gt\").call(alias1,(depths[1] != null ? lookupProperty(depths[1],\"servicesLooked\") : depths[1]),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":10},\"end\":{\"line\":12,\"column\":34}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(12, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":4},\"end\":{\"line\":14,\"column\":11}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \\r\\n
            \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"service\") : depth0)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0)) + \"
              \\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { return \"tc-collapsed\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            • \\r\\n
              \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"Title\") : depth0), depth0)) + \"
              \\r\\n \\r\\n
            • \\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { return \" class=\\\"tc-checked\\\"\";},\"8\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" data-tooltip=\\\"\" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"layerAlreadyAdded\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":68},\"end\":{\"line\":8,\"column\":96}}})) + \"\\\"\";},\"10\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" data-tooltip=\\\"\" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"clickToAddToMap\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":120},\"end\":{\"line\":8,\"column\":146}}})) + \"\\\"\";},\"12\":function(container,depth0,helpers,partials,data) { return \"
          • \\r\\n\";},\"14\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
          • \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"noMatches\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":39},\"end\":{\"line\":16,\"column\":59}}})) + \"
          • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"servicesFound\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.program(14, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");},\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"changeCRS\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":36}}})) + \"

            \\r\\n
            \\r\\n
            \\r\\n
            \\r\\n

            \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"wmsLayerNotCompatible.instructions\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":15},\"end\":{\"line\":9,\"column\":60}}})) + \"

            \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n\";},\"useData\":true}\r\n\r\n const showProjectionChangeDialog = function (ctl, layer) {\r\n ctl.showProjectionChangeDialog({\r\n layer: layer,\r\n closeCallback: function () {\r\n ctl.getLayerNodes(ctl._layerToAdd).forEach(function (node) {\r\n node.classList.remove(TC.Consts.classes.LOADING);\r\n node.querySelector('span').dataset.tooltip = ctl.getLocaleString('clickToAddToMap');\r\n });\r\n }\r\n });\r\n };\r\n\r\n var SEARCH_MIN_LENGTH = 3;\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.control.ProjectionSelector.prototype.register.call(self, map);\r\n\r\n const load = function (resolve, _reject) {\r\n if (Array.isArray(self.options.layers)) {\r\n for (var i = 0; i < self.options.layers.length; i++) {\r\n var layer = self.options.layers[i];\r\n if (!layer.type || layer.type === TC.Consts.layerType.WMS) {\r\n if (!layer.id) {\r\n layer.id = TC.getUID();\r\n } \r\n if (TC.Util.isPlainObject(layer)) {\r\n layer = new TC.layer.Raster(layer);\r\n } \r\n self.layers.push(layer);\r\n }\r\n }\r\n self.render(function () {\r\n resolve();\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n };\r\n\r\n self._readyPromise = new Promise(function (resolve, reject) {\r\n const waitLoad = function (e) {\r\n if (e.layer === map.baseLayer) {\r\n load(resolve, reject);\r\n map.off(TC.Consts.event.LAYERUPDATE, waitLoad);\r\n }\r\n };\r\n\r\n map.loaded(function () {\r\n if (!map.baseLayer.state || map.baseLayer.state === TC.Layer.state.IDLE) {\r\n load(resolve, reject);\r\n }\r\n else {\r\n map.on(TC.Consts.event.LAYERUPDATE, waitLoad);\r\n }\r\n });\r\n });\r\n\r\n const findResultNodes = function (layer) {\r\n const result = [];\r\n if (!layer.isBase) {\r\n var url = layer.options.url;\r\n if (self.list) {\r\n self.list.querySelectorAll('li').forEach(function (li) {\r\n const lyr = self.getLayer(li.dataset.layerId);\r\n if (lyr && lyr.type === layer.type && lyr.options.url === url) {\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (li.dataset.layerName === layer.names[i]) {\r\n result.push(li);\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * Marca todas las capas del TOC como añadidas excepto la que se está borrando que se recibe como parámetro.\r\n */\r\n const _markWorkLayersAsAdded = function (layerRemoved) {\r\n var wlCtrl = self.map.getControlsByClass(TC.control.WorkLayerManager)[0];\r\n if (wlCtrl) {\r\n var layers = wlCtrl.layers;\r\n\r\n for (var i = 0; i < layers.length; i++) {\r\n var layer = layers[i];\r\n\r\n if (layer !== layerRemoved) {\r\n self.getLayerNodes(layer).forEach(function (node) {\r\n node.classList.add(TC.Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n var clickToAddText = self.getLocaleString('clickToAddToMap');\r\n\r\n map\r\n .on(TC.Consts.event.BEFORELAYERADD + ' ' + TC.Consts.event.BEFOREUPDATEPARAMS, function (e) {\r\n self.getLayerNodes(e.layer).forEach(function (node) {\r\n node.classList.add(TC.Consts.classes.LOADING);\r\n delete node.querySelector('span').dataset.tooltip;\r\n });\r\n })\r\n .on(TC.Consts.event.LAYERADD + ' ' + TC.Consts.event.UPDATEPARAMS, function (e) {\r\n const layer = e.layer;\r\n if (!layer.isBase && layer.type === TC.Consts.layerType.WMS) {\r\n self.loaded().then(function () { // Esperamos a que cargue primero las capas de la configuración\r\n\r\n if (self.getLayerRootNode(layer)) {\r\n updateControl.call(self, layer);\r\n }\r\n else {\r\n // la capa no está renderizada, pero podría estar en proceso, comprobamos que no está en la lista de capas del control\r\n var layerAlreadyAdded = false;\r\n for (var i = 0, len = self.layers.length; i < len; i++) {\r\n var lyr = self.layers[i];\r\n if (lyr.type === layer.type && lyr.options.url === layer.options.url) {\r\n layerAlreadyAdded = true;\r\n break;\r\n }\r\n }\r\n\r\n // 12/03/2019 GLS la capa forma parte de los servicios configurados pero el nodo aún no se ha cargado, la guardamos\r\n if (layerAlreadyAdded) {\r\n if (!self.layersToSetChecked) {\r\n self.layersToSetChecked = [];\r\n }\r\n\r\n self.layersToSetChecked.push(layer);\r\n } else {\r\n self.addLayer(new TC.layer.Raster({\r\n url: layer.options.url,\r\n type: layer.type,\r\n layerNames: [],\r\n title: layer.title || layer.wrap.getServiceTitle(),\r\n hideTitle: true,\r\n hideTree: false\r\n })).then(function () {\r\n updateControl.call(self, layer);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERERROR, function (e) {\r\n const reason = e.reason;\r\n if (self.layers.some(f => f === e.layer)) {\r\n if (reason) {\r\n TC.alert(self.getLocaleString(reason, { url: e.layer.url }));\r\n }\r\n self.getLayerNodes(e.layer).forEach(function (node) {\r\n node.classList.remove(TC.Consts.classes.LOADING);\r\n });\r\n } \r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n self.getLayerNodes(layer).forEach(function (node) {\r\n node.classList.remove(TC.Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip = clickToAddText;\r\n });\r\n findResultNodes(layer).forEach(function (node) {\r\n node.classList.remove(TC.Consts.classes.CHECKED);\r\n node.querySelector('h5').dataset.tooltip = clickToAddText;\r\n });\r\n\r\n //Marcamos como añadidas aquellas capas que estén en el control de capas cargadas. Esto previene que si borramos una capa padre, todas\r\n //sus hijas aparezcan como no añadidas, a pesar que que alguna de ellas haya sido añadida previamente de manera individual\r\n _markWorkLayersAsAdded(layer);\r\n\r\n //refresh del searchList \r\n _refreshResultList.call(self);\r\n })\r\n .on(TC.Consts.event.EXTERNALSERVICEADDED, function (e) {\r\n if (e && e.layer) {\r\n self.addLayer(e.layer);\r\n self.div.classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n })\r\n .on(TC.Consts.event.PROJECTIONCHANGE, function (_e) {\r\n self.update();\r\n });\r\n\r\n return result;\r\n };\r\n\r\n const onCollapseButtonClick = function (e) {\r\n e.target.blur();\r\n e.stopPropagation();\r\n const li = e.target.parentElement;\r\n if (li.tagName === 'LI' && !li.classList.contains(ctlProto.CLASS + '-leaf')) {\r\n li.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n const ul = li.querySelector('ul');\r\n ul.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n }\r\n };\r\n\r\n const onSpanClick = function (e, ctl, getLayerObject) {\r\n const li = e.target.parentNode;\r\n if (!li.classList.contains(TC.Consts.classes.LOADING) && !li.classList.contains(TC.Consts.classes.CHECKED)) {\r\n e.preventDefault;\r\n\r\n var layerName = li.dataset.layerName;\r\n layerName = layerName !== undefined ? layerName.toString() : '';\r\n var layer = getLayerObject.call(ctl,li); \r\n if (layer && layerName) {\r\n var redrawTime = 1;\r\n\r\n if (/iPad/i.test(navigator.userAgent))\r\n redrawTime = 10;\r\n else if (TC.Util.detectFirefox())\r\n redrawTime = 250;\r\n\r\n if (!layer.title) {\r\n layer.title = layer.getTree().title;\r\n }\r\n\r\n li.classList.add(TC.Consts.classes.LOADING);\r\n li.querySelector('span,h5').dataset.tooltip = '';\r\n\r\n const reDraw = function (element) {\r\n return new Promise(function (resolve, _reject) {\r\n setTimeout(function () {\r\n element.setAttribute('offsetHeight', element.offsetHeight);\r\n element.setAttribute('offsetWidth', element.offsetWidth);\r\n\r\n resolve();\r\n }, redrawTime);\r\n });\r\n };\r\n\r\n reDraw(li).then(function () {\r\n ctl.addLayerToMap(layer, layerName);\r\n });\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n\r\n const createSearchAutocomplete = function () {\r\n const self = this;\r\n\r\n self.textInput = self.div.querySelector(\".\" + self.CLASS + \"-input\");\r\n self.list = self.div.querySelector(\".\" + self.CLASS + \"-search ul\");\r\n // Clear results list when x button is pressed in the search input\r\n self.textInput.addEventListener('mouseup', function (_e) {\r\n var oldValue = self.textInput.value;\r\n\r\n if (oldValue === '') {\r\n return;\r\n }\r\n\r\n // When this event is fired after clicking on the clear button\r\n // the value is not cleared yet. We have to wait for it.\r\n setTimeout(function () {\r\n var newValue = self.textInput.value;\r\n\r\n if (newValue === '') {\r\n self.list.innerHTML = '';\r\n }\r\n }, 1);\r\n });\r\n\r\n var layerCheckedList = [];\r\n //Definir el autocomplete del buscador de capas por texto\r\n TC._search = TC._search || {};\r\n TC._search.retryTimeout = null;\r\n\r\n TC.UI.autocomplete.call(self.textInput, {\r\n link: '#',\r\n target: self.list,\r\n minLength: 0,\r\n source: function (text, callback) {\r\n //lista de capas marcadas\r\n layerCheckedList = [];\r\n self._roots.forEach(function (root) {\r\n root.querySelectorAll(\"li.\" + TC.Consts.classes.CHECKED).forEach(function (item) {\r\n layerCheckedList.push(item.dataset.layerName);\r\n });\r\n });\r\n\r\n //con texto vacío, limpiar y ocultar la lista de resultados\r\n text = text.trim();\r\n if (text.length < SEARCH_MIN_LENGTH) {\r\n self.list.innerHTML = '';\r\n }\r\n else if (text.length >= SEARCH_MIN_LENGTH) {\r\n if (TC._search.retryTimeout)\r\n clearTimeout(TC._search.retryTimeout);\r\n TC._search.retryTimeout = setTimeout(function () {\r\n var results = [];\r\n for (var i = 0, ii = self.sourceLayers.length; i < ii; i++) {\r\n const sourceLayer = self.sourceLayers[i];\r\n var _founds = sourceLayer.searchSubLayers(text);\r\n if (_founds.length) {\r\n results.push({\r\n service: {\r\n id: sourceLayer.id,\r\n title: sourceLayer.title || sourceLayer.id\r\n },\r\n founds: _founds\r\n });\r\n }\r\n }\r\n callback({ servicesFound: results, servicesLooked: self.sourceLayers.length });\r\n }, TC._search.interval);\r\n }\r\n },\r\n callback: function (e) {\r\n self.textInput.value = e.target.text || e.target.innerText;\r\n TC._search.lastPattern = self.textInput.value;\r\n self.goToResult(unescape(e.target.hash).substring(1));\r\n TC.UI.autocomplete.call(self.textInput, 'clear');\r\n },\r\n buildHTML: function (data) {\r\n var container = this.target;\r\n //si hay resultados, mostramos la lista\r\n if (data.results && data.results.servicesFound.length > 0) {\r\n var workLayers = self.map.getLayerTree().workLayers;\r\n for (var k = 0; k < data.results.servicesFound.length; k++) {\r\n var founds = data.results.servicesFound[k].founds;\r\n for (var j = 0; j < founds.length; j++) {\r\n delete founds[j].alreadyAdded;\r\n for (var i = 0; i < workLayers.length; i++) {\r\n //if (workLayers[i].title == data.results[j].Title ) {\r\n if (layerCheckedList.indexOf(founds[j].Name) >= 0) {\r\n founds[j].alreadyAdded = true;\r\n break;\r\n }\r\n }\r\n //Si la capa no tiene Name, no se puede añadir al TOC\r\n if (!founds[j].Name) {\r\n founds.splice(j, 1);\r\n j--;\r\n }\r\n }\r\n if (!data.results.servicesFound[k].founds.length) {\r\n data.results.servicesFound.splice(k, 1);\r\n continue;\r\n }\r\n //si estaba collapsado mantenemos el estado\r\n if (self.div.querySelectorAll(\".tc-ctl-lcat-search-group\")[k]) {\r\n data.results.servicesFound[k].service.isCollapsed = self.div.querySelectorAll(\".tc-ctl-lcat-search-group\")[k].classList.contains(TC.Consts.classes.COLLAPSED);\r\n }\r\n }\r\n }\r\n var ret = '';\r\n self.getRenderedHtml(self.CLASS + '-results', data.results).then(function (out) {\r\n container.innerHTML = ret = out;\r\n // Marcamos el botón \"i\" correspondiente si el panel de info está abierto\r\n const visibleInfoPane = self.div.querySelector(`.${self.CLASS}-info`);\r\n if (visibleInfoPane) {\r\n const serviceId = visibleInfoPane.dataset.serviceId;\r\n const layerName = visibleInfoPane.dataset.layerName;\r\n let selector = `li[data-layer-name=\"${layerName}\"] input[type=\"checkbox\"].${self.CLASS}-search-btn-info`;\r\n if (self.sourceLayers.length > 1) {\r\n selector = `li[data-service-id=\"${serviceId}\"] ${selector}`;\r\n }\r\n const infoCheckbox = container.querySelector(selector);\r\n if (infoCheckbox) {\r\n infoCheckbox.checked = true;\r\n }\r\n }\r\n });\r\n return ret;\r\n }\r\n });\r\n\r\n\r\n if (!self.searchInit) {\r\n //botón de la lupa para alternar entre búsqueda y árbol\r\n self.div.querySelector('h2 button').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.target.blur();\r\n \r\n const searchPane = self.div.querySelector('.' + self.CLASS + '-search');\r\n const treePane = self.div.querySelector('.' + self.CLASS + '-tree');\r\n const infoPane = self.div.querySelector('.' + self.CLASS + '-info');\r\n\r\n const searchPaneMustShow = searchPane.classList.contains(TC.Consts.classes.HIDDEN);\r\n searchPane.classList.toggle(TC.Consts.classes.HIDDEN, !searchPaneMustShow);\r\n treePane.classList.toggle(TC.Consts.classes.HIDDEN, searchPaneMustShow);\r\n e.target.classList.toggle(self.CLASS + '-btn-tree', searchPaneMustShow);\r\n e.target.classList.toggle(self.CLASS + '-btn-search', !searchPaneMustShow);\r\n if (searchPaneMustShow) {\r\n self.textInput.focus();\r\n e.target.setAttribute('title', self.getLocaleString('viewAvailableLayersTree'));\r\n }\r\n else {\r\n e.target.setAttribute('title', self.getLocaleString('searchLayersByText'));\r\n\r\n //Si hay resaltados en el árbol, mostramos el panel de info\r\n const selectedCount = self.div.querySelectorAll('.tc-ctl-lcat-tree li input[type=checkbox]:checked').length;\r\n if (selectedCount > 0) {\r\n infoPane.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n }\r\n }, { passive: true });\r\n\r\n\r\n //evento de expandir nodo de info\r\n //self._$div.off(\"click\", \".tc-ctl-lcat-search button\"); \r\n self.div.addEventListener(\"change\", TC.EventTarget.listenerBySelector(\".\" + self.CLASS + \"-search input[type=checkbox].\" + self.CLASS + \"-search-btn-info\", function (evt) {\r\n evt.stopPropagation();\r\n const target = evt.target;\r\n if (target.checked) {\r\n const li = target.parentElement;\r\n var parent = li;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n while (parent && parent.tagName !== 'LI');\r\n self.showLayerInfo(self.layers.length > 1 ? self.layers.filter(l => l.id === parent.dataset.serviceId)[0] : self.layers[0], li.dataset.layerName);\r\n\r\n } else {\r\n self.hideLayerInfo();\r\n }\r\n }));\r\n\r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\".\" + self.CLASS + \"-search input[type=checkbox].\" + self.CLASS + \"-search-btn-info\", function (evt) {\r\n evt.stopPropagation();\r\n }));\r\n\r\n //click en un resultado - añadir capa\r\n const searchListElementSelector = '.' + self.CLASS + '-search li';\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector(searchListElementSelector, function (evt) {\r\n evt.stopPropagation();\r\n var li = evt.target;\r\n while (li && !li.matches(searchListElementSelector)) {\r\n li = li.parentElement;\r\n }\r\n if (li.classList.contains(self.CLASS + '-no-results')) {\r\n return; //si clicko en el li de \"no hay resultados\" rompo el ciclo de ejecución\r\n }\r\n if (li.classList.contains(self.CLASS + '-search-group')) {\r\n li.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n return;\r\n }\r\n onSpanClick(evt, self, function () {\r\n if (this.layers.length === 1) {\r\n return this.layers[0];\r\n }\r\n return this.getLayer(li.closest(\".tc-ctl-lcat-search-group\") && li.closest(\".tc-ctl-lcat-search-group\").dataset.serviceId);\r\n }); \r\n \r\n }));\r\n\r\n self.searchInit = true;\r\n }\r\n };\r\n\r\n const getLayerTree = function (layer) {\r\n var result = layer.getTree();\r\n const makeNodeVisible = function makeNodeVisible(node) {\r\n var childrenVisible = false;\r\n for (var i = 0; i < node.children.length; i++) {\r\n if (makeNodeVisible(node.children[i])) {\r\n childrenVisible = true;\r\n }\r\n }\r\n if (Object.prototype.hasOwnProperty.call(node, 'isVisible')) {\r\n node.isVisible = !layer.names || !layer.names.length || childrenVisible || node.isVisible;\r\n }\r\n return node.isVisible;\r\n };\r\n const expandNode = function (node, level) {\r\n if (layer.options.expandedNodeLevel > level) {\r\n node.expanded = true;\r\n for (var i = 0; i < node.children.length; i++) {\r\n expandNode(node.children[i], level + 1);\r\n }\r\n }\r\n };\r\n makeNodeVisible(result);\r\n expandNode(result, 0);\r\n return result;\r\n };\r\n\r\n const _refreshResultList = function () {\r\n const self = this;\r\n\r\n if (\"createEvent\" in document) {\r\n var evt = document.createEvent(\"HTMLEvents\");\r\n evt.initEvent(\"keyup\", false, true);\r\n if (self.textInput) {\r\n self.textInput.dispatchEvent(evt);\r\n }\r\n }\r\n else {\r\n if (self.textInput) {\r\n self.textInput.fireEvent(\"keyup\");\r\n }\r\n }\r\n };\r\n\r\n const updateControl = function (layer) {\r\n const self = this;\r\n\r\n const lisToCheck = self.map.workLayers\r\n .filter(l => l.type === layer.type && l.url === layer.url) // Capas del mismo servicio\r\n .map(l => self.getLayerNodes(l)) // Elementos li de esas capas\r\n .flat();\r\n lisToCheck.forEach(function (node) {\r\n node.classList.remove(TC.Consts.classes.LOADING);\r\n node.classList.add(TC.Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n });\r\n self.getLayerRootNode(layer).querySelectorAll(\"li.tc-ctl-lcat-node.tc-ctl-lcat-leaf.tc-checked\").forEach(function (node) {\r\n if (!lisToCheck.find(n => n === node)) {\r\n node.classList.remove(TC.Consts.classes.CHECKED);\r\n node.querySelector('span').dataset.tooltip=self.getLocaleString('clickToAddToMap');\r\n }\r\n });\r\n _refreshResultList.call(self);\r\n };\r\n\r\n const setCheckedLayersOnNode = function () {\r\n const self = this;\r\n\r\n if (self.layersToSetChecked && self.layersToSetChecked.length > 0) {\r\n self.layersToSetChecked.forEach(function (layer, index, array) {\r\n if (self.getLayerRootNode(layer)) {\r\n updateControl.call(self, layer);\r\n\r\n array.splice(index, 1);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const addLogicToNode = function (node, layer) {\r\n const self = this;\r\n\r\n node.querySelectorAll('li > button.' + self.CLASS + '-collapse-btn').forEach(function (btn) {\r\n btn.addEventListener('click', onCollapseButtonClick);\r\n });\r\n\r\n node.querySelectorAll('span').forEach(function (span) {\r\n span.addEventListener('click', function (e) {\r\n onSpanClick(e, self, function (li) {\r\n for (var i = 0, len = this._roots.length; i < len; i++) {\r\n const root = this._roots[i];\r\n if (root.contains(li)) {\r\n return this.getLayer(root.dataset.layerId);\r\n }\r\n }\r\n return self.getLayer(li.dataset.layerId);\r\n });\r\n });\r\n });\r\n\r\n self._roots = self.div.querySelectorAll(self._selectors.LAYER_ROOT); \r\n \r\n node.dataset.layerId = layer.id;\r\n\r\n node.querySelectorAll('.' + self.CLASS + '-btn-info').forEach(function (a) {\r\n const span = a.parentElement.querySelector('span');\r\n const name = a.parentElement.dataset.layerName;\r\n if (name) {\r\n span.classList.add(TC.Consts.classes.SELECTABLE);\r\n var info = layer.getInfo(name);\r\n if (!Object.prototype.hasOwnProperty.call(info, 'abstract') &&\r\n !Object.prototype.hasOwnProperty.call(info, 'legend') &&\r\n !Object.prototype.hasOwnProperty.call(info, 'metadata')) {\r\n a.parentElement.removeChild(a);\r\n }\r\n else { \r\n a.addEventListener('change', function (e) {\r\n e.stopPropagation();\r\n const elm = this;\r\n if (elm.checked) {\r\n self.showLayerInfo(layer, name);\r\n } else {\r\n self.hideLayerInfo();\r\n }\r\n }, { passive: true });\r\n a.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n }\r\n if (layer.compatibleLayers && layer.compatibleLayers.indexOf(name) < 0) {\r\n span.classList.add(TC.Consts.classes.INCOMPATIBLE);\r\n span.setAttribute('title', self.getLocaleString('reprojectionNeeded'));\r\n //console.log(\"capa \" + name + \" incompatible\");\r\n }\r\n if (self.map) {\r\n for (var j = 0, len = self.map.workLayers.length; j < len; j++) {\r\n var wl = self.map.workLayers[j];\r\n if (wl.type === TC.Consts.layerType.WMS && wl.url === layer.url && wl.names.length === 1 && wl.names[0] === name) {\r\n span.parentElement.classList.add(TC.Consts.classes.CHECKED);\r\n span.dataset.tooltip = self.getLocaleString('layerAlreadyAdded');\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n a.addEventListener('change', function (e) {\r\n e.stopPropagation();\r\n const elm = this;\r\n if (elm.checked) {\r\n self.showLayerInfo(layer, name, span.innerText);\r\n } else {\r\n self.hideLayerInfo();\r\n }\r\n }, { passive: true });\r\n\r\n a.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n }, { passive: true });\r\n }\r\n }); \r\n\r\n setCheckedLayersOnNode.call(self);\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n });\r\n };\r\n\r\n ctlProto.renderBranch = function (layer, callback, promiseRenderResolve) {\r\n const self = this;\r\n\r\n self.sourceLayers.unshift(layer);\r\n layer.getCapabilitiesPromise()\r\n .then(function (_result) {\r\n\r\n self.getRenderedHtml(self.CLASS + '-branch', getLayerTree(this), function (html) {\r\n var template = document.createElement('template');\r\n template.innerHTML = html;\r\n\r\n const branch = self.div.querySelector('.' + self.CLASS + '-branch');\r\n var newChild = template.content ? template.content.firstChild : template.firstChild;\r\n var oldChild = branch.querySelector('li.' + self.CLASS + '-loading-node[data-layer-id=\"' + this.id + '\"]');\r\n\r\n if (oldChild) {\r\n branch.replaceChild(newChild, oldChild);\r\n } else {\r\n branch.insertAdjacentElement('afterbegin', newChild);\r\n }\r\n\r\n addLogicToNode.call(self, newChild, this);\r\n\r\n if (branch.childElementCount === 1) {\r\n promiseRenderResolve();\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n // pasamos el callback el item \r\n callback(self.sourceLayers[self.sourceLayers.map(l => l && l.id).indexOf(this.id)]);\r\n }\r\n\r\n }.bind(this));\r\n\r\n }.bind(layer))\r\n .catch(function (_error) {\r\n var index = self.layers.map(l => l.id).indexOf(this.id);\r\n self.layers.splice(index, 1);\r\n\r\n var errorMessage = self.getLocaleString(\"lyrCtlg.errorLoadingNode\", { serviceName: this.title });\r\n var liError = self.div.querySelector('.' + self.CLASS + '-branch').querySelector('li.' + self.CLASS + '-loading-node[data-layer-id=\"' + this.id + '\"]');\r\n liError.classList.add('error');\r\n liError.setAttribute('title', errorMessage);\r\n\r\n self.map.toast(errorMessage, { type: TC.Consts.msgType.ERROR });\r\n\r\n }.bind(layer));\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n self.sourceLayers = [];\r\n\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n if (self.layers.length === 0) {\r\n self.renderData({ layerTrees: [], enableSearch: false }, function () {\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n\r\n resolve();\r\n });\r\n } else {\r\n self.renderData({ layers: self.layers, enableSearch: true }, function () {\r\n\r\n createSearchAutocomplete.call(self);\r\n\r\n self.layers.forEach(function (layer) {\r\n self.renderBranch(layer, callback, resolve);\r\n });\r\n });\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.getLayerRootNode = function (layer) {\r\n const self = this;\r\n var result = null;\r\n if (!layer.isBase) {\r\n var url = layer.options.url;\r\n if (self._roots) {\r\n self._roots.forEach(function (li) {\r\n const lyr = self.getLayer(li.dataset.layerId);\r\n if (lyr && lyr.type === layer.type && lyr.options.url.toLowerCase() === url.toLowerCase()) {\r\n result = li;\r\n }\r\n });\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getLayerNodes = function (layer) {\r\n const self = this;\r\n const result = [];\r\n const rootNode = self.getLayerRootNode(layer);\r\n if (rootNode) {\r\n for (var i = 0; i < layer.names.length; i++) {\r\n const liLayer = rootNode.querySelector('li[data-layer-name=\"' + layer.names[i] + '\"]');\r\n if (!liLayer) {\r\n continue;\r\n }\r\n result.push(liLayer);\r\n liLayer.querySelectorAll('li').forEach(function (li) {\r\n result.push(li);\r\n });\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.showLayerInfo = function (layer, name, title) {\r\n const self = this;\r\n var result = null;\r\n\r\n var info = self.div.querySelector('.' + self.CLASS + '-info');\r\n\r\n const toggleInfo = function (layerName, infoObj) {\r\n var result = false;\r\n //if (lName !== undefined && lName.toString() === layerName) {\r\n // info.dataset.layerName = '';\r\n // $info.removeClass(TC.Consts.classes.HIDDEN);\r\n //}\r\n //else {\r\n if (infoObj) {\r\n result = true;\r\n info.dataset.serviceId = layer.id;\r\n info.dataset.layerName = layerName;\r\n info.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.getRenderedHtml(self.CLASS + '-info', infoObj)\r\n .then(function (out) {\r\n info.innerHTML = out;\r\n info.querySelector('.' + self.CLASS + '-info-close').addEventListener(TC.Consts.event.CLICK, function () {\r\n self.hideLayerInfo();\r\n }, { passive: true });\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n //}\r\n return result;\r\n };\r\n\r\n self.div.querySelectorAll('.' + self.CLASS + '-btn-info, .' + self.CLASS + '-search-btn-info').forEach(function (btn) {\r\n btn.checked = false;\r\n }); \r\n\r\n const getInfoByTitle = function (layer, title) {\r\n if (layer.Title === title) {\r\n return {\r\n title: title,\r\n abstract: layer.Abstract,\r\n metadata: !layer.MetadataURL ? null : layer.MetadataURL.reduce(function (vi, va) {\r\n vi.push({\r\n format: va.Format,\r\n formatDescription: TC.Util.getLocaleString(self.map.options.locale, TC.Util.getSimpleMimeType(va.Format)) ||\r\n TC.Util.getLocaleString(self.map.options.locale, 'viewMetadata'),\r\n type: va.type,\r\n url: va.OnlineResource\r\n });\r\n return vi;\r\n }, [])\r\n };\r\n }\r\n if (layer.Layer) {\r\n for (var i = 0; i < layer.Layer.length; i++) {\r\n const res = getInfoByTitle(layer.Layer[i], title);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n }\r\n };\r\n\r\n for (var i = 0, ii = self._roots.length; i < ii; i++) {\r\n const root = self._roots[i];\r\n if (root.dataset.layerId === layer.id) {\r\n const infoToggles = root.querySelectorAll('.' + self.CLASS + '-btn-info');\r\n for (var j = 0, jj = infoToggles.length; j < jj; j++) {\r\n const infoToggle = infoToggles[j];\r\n var n = infoToggle.parentElement.dataset.layerName;\r\n if (name && n === name) {\r\n const info = layer.getInfo(name);\r\n const infoBtn = self.div.querySelector('li[data-layer-name=\"' + n + '\"] > input[type=\"checkbox\"].' + self.CLASS + '-btn-info');\r\n infoBtn.checked = toggleInfo(n, info);\r\n const infoSearchBtn = self.div.querySelector('li[data-layer-name=\"' + n + '\"] > input[type=\"checkbox\"].' + self.CLASS + '-search-btn-info');\r\n if (infoSearchBtn) {\r\n infoSearchBtn.checked = infoBtn.checked;\r\n }\r\n result = info;\r\n break;\r\n }\r\n const t = infoToggle.parentElement.querySelector('span').innerText;\r\n if (!name && title && t === title){\r\n //buscar en el capapabilities por nombre de capa;\r\n const info = getInfoByTitle(layer.capabilities.Capability.Layer, title);\r\n //const infoBtn = self.div.querySelector('li [data-layer-name=\"' + n + '\"] > button.' + self.CLASS + '-btn-info');\r\n infoToggle.checked = toggleInfo(t, info);\r\n result = info;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.update = function () {\r\n const self = this;\r\n self.sourceLayers.forEach(function (layer) {\r\n layer.getCapabilitiesPromise().then(function () {\r\n layer.compatibleLayers = layer.wrap.getCompatibleLayers(self.map.crs);\r\n\r\n const rootNode = self.getLayerRootNode(layer);\r\n if (rootNode) {\r\n rootNode\r\n .querySelectorAll('li[data-layer-name]')\r\n .forEach(function (li) {\r\n const name = li.dataset.layerName;\r\n const span = li.querySelector('span.' + TC.Consts.classes.SELECTABLE);\r\n if (layer.compatibleLayers.indexOf(name) < 0) {\r\n span.classList.add(TC.Consts.classes.INCOMPATIBLE);\r\n span.setAttribute('title', self.getLocaleString('reprojectionNeeded'));\r\n }\r\n else {\r\n span.classList.remove(TC.Consts.classes.INCOMPATIBLE);\r\n span.removeAttribute('title');\r\n }\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.hideLayerInfo = function () {\r\n var self = this;\r\n self.div.querySelectorAll('.' + self.CLASS + '-btn-info, .' + self.CLASS + '-search-btn-info').forEach(function (btn) {\r\n btn.checked = false;\r\n });\r\n const infoPanel = self.div.querySelector('.' + self.CLASS + '-info');\r\n delete infoPanel.dataset.serviceId;\r\n delete infoPanel.dataset.layerName;\r\n infoPanel.classList.add(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n ctlProto.addLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n var fromLayerCatalog = [];\r\n\r\n if (self.options.layers && self.options.layers.length) {\r\n fromLayerCatalog = self.options.layers.filter(function (l) {\r\n var getMap = TC.Util.reqGetMapOnCapabilities(l.url);\r\n return getMap && getMap.replace(TC.Util.regex.PROTOCOL) === layer.url.replace(TC.Util.regex.PROTOCOL);\r\n });\r\n }\r\n\r\n if (fromLayerCatalog.length === 0)\r\n fromLayerCatalog = self.layers.filter(function (l) {\r\n return l.url.replace(TC.Util.regex.PROTOCOL) === layer.url.replace(TC.Util.regex.PROTOCOL);\r\n });\r\n\r\n if (fromLayerCatalog.length === 0) {\r\n self.layers.unshift(layer);\r\n layer.getCapabilitiesPromise().then(function () {\r\n layer.compatibleLayers = layer.wrap.getCompatibleLayers(self.map.crs);\r\n layer.title = layer.title || layer.wrap.getServiceTitle();\r\n self.renderBranch(layer, function () {\r\n resolve(); //ver linea 55 y por ahí\r\n });\r\n });\r\n } else { resolve(); }\r\n });\r\n };\r\n\r\n ctlProto.getLayer = function (id) {\r\n const self = this;\r\n for (var i = 0, len = self.layers.length; i < len; i++) {\r\n const layer = self.layers[i];\r\n if (layer.id === id) {\r\n // 10/04/2019 GLS: validamos si es una capa que viene de configuración o es un WMS externo o por estado \r\n // para decidir si mostramos el título del servicio o no\r\n var configLayer = self.options.layers.filter(l => l.id === id);\r\n\r\n if (configLayer.length > 0) {\r\n layer.hideTitle = layer.options.hideTitle = configLayer[0].hideTitle;\r\n } else {\r\n layer.hideTitle = layer.options.hideTitle = false;\r\n } \r\n \r\n return layer;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.addLayerToMap = function (layer, layerName) {\r\n const self = this;\r\n const layerOptions = TC.Util.extend({}, layer.options);\r\n layerOptions.id = self.getUID();\r\n layerOptions.layerNames = [layerName];\r\n layerOptions.title = layer.title;\r\n layerOptions.hideTree = true;\r\n const newLayer = new TC.layer.Raster(layerOptions);\r\n if (newLayer.isCompatible(self.map.crs)) {\r\n self.map.addLayer(layerOptions);\r\n }\r\n else {\r\n showProjectionChangeDialog(self, newLayer);\r\n }\r\n };\r\n\r\n ctlProto.loaded = function () {\r\n return this._readyPromise;\r\n };\r\n\r\n ctlProto.getAvailableCRS = function (options) {\r\n const self = this;\r\n options = options || {};\r\n return self.map.getCompatibleCRS({\r\n layers: self.map.workLayers.concat(self.map.baseLayer, options.layer),\r\n includeFallbacks: true\r\n });\r\n };\r\n\r\n ctlProto.setProjection = function (options) {\r\n const self = this;\r\n options = options || {};\r\n\r\n TC.loadProjDef({\r\n crs: options.crs,\r\n callback: function () {\r\n self.map.setProjection(options).then(function () {\r\n if (self._layerToAdd) {\r\n self.map.addLayer(self._layerToAdd);\r\n }\r\n TC.Util.closeModal();\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctlProto.showProjectionChangeDialog = function (options) {\r\n const self = this;\r\n self._layerToAdd = options.layer;\r\n TC.control.ProjectionSelector.prototype.showProjectionChangeDialog.call(self, options);\r\n };\r\n\r\n})();\r\n\r\nconst LayerCatalog = TC.control.LayerCatalog;\r\nexport default LayerCatalog;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from './MapContents';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.MapContents = MapContents;\r\n\r\nTC.control.Legend = function () {\r\n TC.control.MapContents.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.Legend, TC.control.MapContents);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Legend.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-legend';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-legend-node\"),depth0,{\"name\":\"tc-ctl-legend-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            • \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"noData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":40},\"end\":{\"line\":7,\"column\":57}}})) + \"
            • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

              \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"legend\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":21}}})) + \"

              \\r\\n
              \\r\\n
                \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"workLayers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":8,\"column\":17}}})) != null ? stack1 : \"\") + \"
              \\r\\n
              \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-node'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = container.lambda((depth0 != null ? lookupProperty(depth0,\"customLegend\") : depth0), depth0)) != null ? stack1 : \"\") + \"\\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            • \\r\\n
              \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"legend\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":8},\"end\":{\"line\":17,\"column\":15}}})) != null ? stack1 : \"\") + \"
                \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":12},\"end\":{\"line\":21,\"column\":21}}})) != null ? stack1 : \"\") + \"
              \\r\\n
            • \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-legend-node\\\" \";},\"6\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-legend-node tc-ctl-legend-leaf\\\" \";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"src\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.program(14, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":12},\"end\":{\"line\":14,\"column\":19}}})) != null ? stack1 : \"\") + \"
              \\r\\n
              \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"notVisibleAtCurrentResolution\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":39},\"end\":{\"line\":16,\"column\":79}}})) + \"
              \\r\\n\";},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"width:\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"width\") : stack1), depth0)) + \"px;height:\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"height\") : stack1), depth0)) + \"px;\";},\"12\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"transform:scale(\" + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"scale\") : stack1), depth0)) + \");transform-origin:0 50% 0;\";},\"14\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"strokeColor\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":16},\"end\":{\"line\":13,\"column\":23}}})) != null ? stack1 : \"\");},\"15\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n\";},\"16\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \";width:\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"width\") : stack1), depth0)) + \"px;height:\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"height\") : stack1), depth0)) + \"px;border-radius:50%\";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-legend-node\"),depth0,{\"name\":\"tc-ctl-legend-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"customLegend\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":24,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n map.on(TC.Consts.event.VIEWCHANGE, function (e) {\r\n const view = e.view;\r\n const onLayerAdd = self.loadGraphics.bind(self);\r\n\r\n if (view === TC.Consts.view.THREED) { \r\n map.on(TC.Consts.event.LAYERADD, onLayerAdd);\r\n } else if (view === TC.Consts.view.DEFAULT) {\r\n map.off(TC.Consts.event.LAYERADD, onLayerAdd);\r\n }\r\n });\r\n\r\n return TC.control.MapContents.prototype.register.call(self, map);\r\n };\r\n\r\n ctlProto.loadGraphics = function () {\r\n const self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer) {\r\n li.querySelectorAll('li.' + self.CLASS + '-node-visible').forEach(function (l) {\r\n const img = l.querySelector('img');\r\n if (img && img.getAttribute('src') !== undefined && img.getAttribute('src').length === 0) {\r\n self.styleLegendImage(img, layer);\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctlProto.updateScale = function () {\r\n const self = this;\r\n const inScale = self.CLASS + '-node-inscale';\r\n const outOfScale = self.CLASS + '-node-outofscale';\r\n\r\n self.getLayerUIElements().forEach(function (li) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n\r\n if (layer && !layer.customLegend ) {\r\n let layersInScale = false;\r\n const lis = li.querySelectorAll('li');\r\n lis.forEach(function (l) {\r\n if (l.classList.contains(self.CLASS + '-node-visible')) {\r\n const uid = l.dataset.layerUid;\r\n if (layer.isVisibleByScale(uid)) {\r\n layersInScale = true;\r\n l.classList.remove(outOfScale);\r\n l.classList.add(inScale);\r\n const img = l.querySelector('img');\r\n if (img) {\r\n self.styleLegendImage(img, layer);\r\n }\r\n }\r\n else {\r\n l.classList.add(outOfScale);\r\n l.classList.remove(inScale);\r\n }\r\n }\r\n });\r\n layersInScale = layersInScale || !lis.length;\r\n if (!lis.length) {\r\n const img = li.querySelector('img');\r\n if (img) {\r\n self.styleLegendImage(img);\r\n }\r\n }\r\n li.classList.toggle(inScale, layersInScale);\r\n li.classList.toggle(outOfScale, !layersInScale);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.update = function () {\r\n const self = this;\r\n\r\n self.getLayerUIElements().forEach(function (li) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer && (!layer.customLegend || !layer.getVisibility())) {\r\n const tree = layer.getTree(false, true);\r\n\r\n li.querySelectorAll('li').forEach(function (l) {\r\n const visible = self.CLASS + '-node-visible';\r\n const notVisible = self.CLASS + '-node-notvisible';\r\n const hasVisible = self.CLASS + '-node-hasvisible';\r\n\r\n switch (layer.getNodeVisibility(l.dataset.layerUid, tree)) {\r\n case TC.Consts.visibility.VISIBLE:\r\n l.classList.remove(notVisible, hasVisible);\r\n l.classList.add(visible);\r\n break;\r\n case TC.Consts.visibility.NOT_VISIBLE:\r\n l.classList.remove(visible, hasVisible);\r\n l.classList.add(notVisible);\r\n break;\r\n case TC.Consts.visibility.HAS_VISIBLE:\r\n l.classList.remove(visible, notVisible);\r\n l.classList.add(hasVisible); \r\n break;\r\n case null:\r\n // No encuentro nodo: no visible\r\n l.classList.remove(visible, hasVisible);\r\n l.classList.add(notVisible);\r\n break;\r\n default:\r\n // Estado no definido: por defecto visible\r\n l.classList.remove(notVisible, hasVisible);\r\n l.classList.add(visible); \r\n break;\r\n }\r\n });\r\n\r\n self.updateLayerVisibility(layer);\r\n }\r\n });\r\n self.updateScale();\r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n var self = this; \r\n\r\n if (!layer.isBase && !layer.options.stealth) {\r\n \r\n //// 09/04/2019 GLS: ignoramos el atributo que venga en la capa porque en la leyenda queremos que el árbol se muestre siempre y \r\n //// nos ahorramos el tener que pasarlo en el estado del mapa\r\n if (layer.hideTree || layer.options.hideTree) {\r\n // 21/10/2021 URI: El Parche anterior estropeaba el funcionamiento del TOC ya que modificaba la propiedad de configuracion de la capa \"hideTree\"\r\n //He implementado una funcion llamada getFullTree que obtiene el arbol completo sin importar la configracion y sin modificar la propiedad \"tree\" de la capa\r\n //que es donde se guarda cacheada la estructura del albol de capas hijas.\r\n /*layer.tree = null;\r\n layer.hideTree = layer.options.hideTree = false;*/\r\n } \r\n\r\n self.div.querySelector('.' + self.CLASS + '-empty').classList.add(TC.Consts.classes.HIDDEN); \r\n var params = layer.getNestedTree ? layer.getNestedTree() : layer.getTree();//self.layerTrees[layer.id];\r\n if (layer._title && layer._title !== layer.title)\r\n params = Object.assign(params,{ \"title\": layer._title });\r\n self.getRenderedHtml(self.CLASS + '-node', params)\r\n .then(function (out) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n const uid = newLi.dataset.layerUid;\r\n const ul = self.div.querySelector('ul.' + self.CLASS + '-branch');\r\n const lis = ul.querySelectorAll('li[data-layer-uid=\"' + uid + '\"]');\r\n if (lis.length === 1) {\r\n const li = lis[0];\r\n if (li.innerHTML !== newLi.innerHTML) {//URI: Si el html nuevo y el viejo son iguales no copio para no hacer un parpadeo en el navegador.\r\n li.innerHTML = newLi.innerHTML;\r\n li.setAttribute('class', newLi.getAttribute('class')); // Esto actualiza si un nodo deja de ser hoja o pasa a ser hoja\r\n }\r\n \r\n }\r\n else {\r\n newLi.dataset.layerId = layer.id;\r\n ul.insertBefore(newLi, ul.firstChild);\r\n }\r\n\r\n self.update();\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.removeLayer = function (layer) {\r\n if (!layer.isBase) {\r\n TC.control.MapContents.prototype.removeLayer.call(this, layer);\r\n }\r\n };\r\n\r\n ctlProto.updateLayerVisibility = function (layer) {\r\n var self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n if (li.dataset.layerId === layer.id) {\r\n li.classList.toggle(self.CLASS + '-node-notvisible', !layer.getVisibility());\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getLayerUIElements = function () {\r\n const self = this;\r\n return self.div.querySelector('ul.' + self.CLASS + '-branch').querySelectorAll('li.' + self.CLASS + '-node');\r\n };\r\n})();\r\n\r\nconst Legend = TC.control.Legend;\r\nexport default Legend;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport GeometryFeatureInfo from './GeometryFeatureInfo';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.GeometryFeatureInfo = GeometryFeatureInfo;\r\n\r\n\r\n(function () {\r\n TC.control.LineFeatureInfo = function () {\r\n var self = this;\r\n TC.control.GeometryFeatureInfo.apply(this, arguments);\r\n self.geometryType = TC.Consts.geom.POLYLINE;\r\n self.style = TC.Util.extend(true, { strokeColor: self.DEFAULT_STROKE_COLOR, strokeWidth: 2 }, self.options.style); \r\n };\r\n\r\n TC.inherit(TC.control.LineFeatureInfo, TC.control.GeometryFeatureInfo);\r\n\r\n var ctlProto = TC.control.LineFeatureInfo.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-finfo';\r\n\r\n})();\r\n\r\nconst LineFeatureInfo = TC.control.LineFeatureInfo;\r\nexport default LineFeatureInfo;","import TC from '../../TC';\r\nimport WorkLayerManager from './WorkLayerManager';\r\nTC.control = TC.control || {};\r\nTC.control.ListTOC = WorkLayerManager;\r\nconst ListTOC = TC.control.ListTOC;\r\nexport default ListTOC;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.LoadingIndicator = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self._waits = {};\r\n\r\n window.addEventListener('error', function () {\r\n self.reset();\r\n // Tell browser to run its own error handler as well\r\n return false;\r\n }, false);\r\n};\r\n\r\nTC.inherit(TC.control.LoadingIndicator, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.LoadingIndicator.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-load';\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { return \"
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \";},\"useData\":true}\r\n\r\n //var ctlProto.waits = {};\r\n \r\n ctlProto.startWait = function (e) {\r\n const self = this;\r\n const layerId = e.layer.id;\r\n if (self._waits[layerId] === undefined) {\r\n self._waits[layerId] = 0;\r\n }\r\n self._waits[layerId] = self._waits[layerId] + 1;\r\n self.show();\r\n\r\n self.map.trigger(TC.Consts.event.STARTLOADING);\r\n };\r\n\r\n ctlProto.stopWait = function (e) {\r\n const self = this;\r\n const layerId = e.layer.id;\r\n var wait = self._waits[layerId];\r\n if (wait > 0) {\r\n wait = self._waits[layerId] = wait - 1;\r\n }\r\n if (!wait) {\r\n delete self._waits[layerId];\r\n }\r\n var count = 0;\r\n for (var key in self._waits) {\r\n count++;\r\n }\r\n if (!count) {\r\n self.hide();\r\n self.map.trigger(TC.Consts.event.STOPLOADING);\r\n }\r\n };\r\n\r\n ctlProto.endWait = function (e) {\r\n const self = this;\r\n const layerId = e.layer.id;\r\n var wait = self._waits[layerId];\r\n if (wait > 0) {\r\n delete self._waits[layerId];\r\n }\r\n var count = 0;\r\n for (var key in self._waits) {\r\n count++;\r\n }\r\n if (!count) {\r\n self.hide();\r\n self.map.trigger(TC.Consts.event.STOPLOADING);\r\n }\r\n };\r\n\r\n ctlProto.reset = function (_e) {\r\n var self = this;\r\n self._waits = {};\r\n self.hide();\r\n self.map && self.map.trigger(TC.Consts.event.STOPLOADING);\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n map\r\n .on(TC.Consts.event.BEFORELAYERADD + ' ' +\r\n TC.Consts.event.BEFORELAYERUPDATE + ' ' +\r\n TC.Consts.event.BEFOREFEATURESADD, function (e) {\r\n self.startWait(e);\r\n })\r\n .on(TC.Consts.event.LAYERADD + ' ' +\r\n TC.Consts.event.LAYERERROR + ' ' +\r\n TC.Consts.event.LAYERUPDATE + ' ' +\r\n TC.Consts.event.FEATURESADD, function (e) {\r\n self.stopWait(e);\r\n })\r\n .on(TC.Consts.event.BEFOREFEATUREINFO, function () {\r\n self.addWait(TC.Consts.event.FEATUREINFO);\r\n })\r\n .on(TC.Consts.event.FEATUREINFO + ' ' +\r\n TC.Consts.event.NOFEATUREINFO + ' ' +\r\n TC.Consts.event.FEATUREINFOERROR, function () {\r\n self.removeWait(TC.Consts.event.FEATUREINFO);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n self.endWait(e);\r\n });\r\n if (!TC.isDebug) {\r\n //Para evitar que se quede el indicador indefinidamente activo cuando hay un error en la página\r\n window.addEventListener('error', function (_msg, _url, _line, _col, _error) {\r\n self.reset();\r\n return false;\r\n });\r\n\r\n //$(document).ajaxError(function (event, request, settings) {\r\n // self.reset();\r\n //});\r\n }\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.addWait = function (uid) {\r\n const self = this;\r\n const result = uid || TC.getUID();\r\n self.startWait({ layer: { id: result } });\r\n return result;\r\n };\r\n\r\n ctlProto.removeWait = function (uid) {\r\n this.stopWait({ layer: { id: uid } });\r\n };\r\n\r\n})();\r\n\r\nconst LoadingIndicator = TC.control.LoadingIndicator;\r\nexport default LoadingIndicator;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.MapContents = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.layerTrees = {};\r\n};\r\n\r\nTC.inherit(TC.control.MapContents, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.MapContents.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-mc';\r\n\r\n ctlProto.render = function (callback, options) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.map ? self.renderData(options ? TC.Util.extend(self.map.getLayerTree(), options) : self.map.getLayerTree(), function () {\r\n self.addUIEventListeners();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }) : Promise.reject(Error('Cannot render: control has no map')));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n Promise.all([TC.Control.prototype.register.call(self, map), self.renderPromise()]).then(function () {\r\n for (var i = 0, len = map.layers.length; i < len; i++) {\r\n self.updateLayerTree(map.layers[i]);\r\n }\r\n\r\n map\r\n .on(TC.Consts.event.ZOOM + ' ' + TC.Consts.event.PROJECTIONCHANGE, function () {\r\n self.updateScale();\r\n })\r\n .on(TC.Consts.event.UPDATEPARAMS, function (e) {\r\n const layer = e.layer;\r\n var names = layer.names;\r\n var containsName = function containsName(node) {\r\n var result = false;\r\n if (node) {\r\n if (names.indexOf(node.name) >= 0) {\r\n result = true;\r\n }\r\n else {\r\n for (var i = 0; i < node.children.length; i++) {\r\n if (containsName(node.children[i])) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n if (containsName(self.layerTrees[layer.id]) || names.length === 0) {\r\n self.update(self instanceof TC.control.BasemapSelector ? undefined:layer);\r\n }\r\n else {\r\n self.updateLayerTree(layer);\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERVISIBILITY, function (e) {\r\n self.updateLayerVisibility(e.layer);\r\n })\r\n .on(TC.Consts.event.LAYERADD, function (e) {\r\n self.updateLayerTree(e.layer);\r\n })\r\n .on(TC.Consts.event.VECTORUPDATE + ' ' + TC.Consts.event.FEATUREADD + ' ' + TC.Consts.event.FEATURESADD, function (e) {\r\n const layer = e.layer;\r\n // Se introduce un timeout porque pueden venir muchos eventos de este tipo seguidos y no tiene sentido actualizar con cada uno\r\n self._updateLayerTreeTimeouts = self._updateLayerTreeTimeouts || {};\r\n if (self._updateLayerTreeTimeouts[layer.id]) {\r\n clearTimeout(self._updateLayerTreeTimeouts[layer.id]);\r\n }\r\n self._updateLayerTreeTimeouts[layer.id] = setTimeout(function () {\r\n if (self.map.workLayers.indexOf(layer) > -1) {\r\n // GLS: Validamos si la capa que ha provocado el evento sigue en worklayers, si es borrada debido a la espera del timeout el TOC puede reflejar capas que ya no están\r\n self.updateLayerTree(layer);\r\n delete self._updateLayerTreeTimeouts[layer.id];\r\n }\r\n }, 100);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n self.removeLayer(e.layer);\r\n })\r\n .on(TC.Consts.event.LAYERORDER, function (e) {\r\n self.updateLayerOrder(e.layer, e.oldIndex, e.newIndex);\r\n })\r\n .on(TC.Consts.event.LAYERERROR, function (e) {\r\n self.onErrorLayer(e.layer); \r\n });\r\n\r\n resolve(self);\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n };\r\n\r\n ctlProto.updateScale = function () {\r\n };\r\n\r\n ctlProto.updateLayerVisibility = function (_layer) {\r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n this.layerTrees[layer.id] = layer.getTree();\r\n };\r\n\r\n ctlProto.updateLayerOrder = function (layer, oldIdx, newIdx, collection) {\r\n const self = this;\r\n if (oldIdx >= 0 && oldIdx !== newIdx) {\r\n var currentElm, previousElm;\r\n const elms = self.getLayerUIElements();\r\n\r\n collection = collection || self.map.workLayers;\r\n\r\n for (var i = collection.length - 1; i >= 0; i--) {\r\n const l = collection[i];\r\n previousElm = currentElm;\r\n for (var j = 0, jj = elms.length; j < jj; j++) {\r\n const elm = elms[j];\r\n if (elm.dataset.layerId === l.id) {\r\n currentElm = elm;\r\n break;\r\n }\r\n }\r\n if (l === layer) {\r\n if (currentElm) {\r\n if (previousElm) {\r\n previousElm.insertAdjacentElement('afterend', currentElm);\r\n }\r\n else {\r\n currentElm.parentElement.firstChild.insertAdjacentElement('beforebegin', currentElm);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.removeLayer = function (layer) {\r\n const self = this;\r\n const liCollection = self.getLayerUIElements();\r\n for (var i = 0, len = liCollection.length; i < len; i++) {\r\n const li = liCollection[i];\r\n if (li.dataset.layerId === layer.id) {\r\n li.parentElement.removeChild(li);\r\n break;\r\n }\r\n }\r\n if (self.getLayerUIElements().length === 0) {\r\n self.div.querySelector('.' + self.CLASS + '-empty').classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.onErrorLayer = function (_layer) { };\r\n\r\n ctlProto.getLayerUIElements = function () {\r\n return this.div.querySelector('ul').children;\r\n };\r\n\r\n var isGetLegendGraphic = function (url) {\r\n return /[&?]REQUEST=getLegendGraphic/i.test(url);\r\n };\r\n\r\n /*\r\n * Carga y le da estilo a la imagen de la leyenda.\r\n * @param {string} requestMethod Si queremos pedir la imagen de la leyenda por POST, podemos especificarlo utilizando el parámetro requestMethod.\r\n */\r\n ctlProto.styleLegendImage = function (img, layer) {\r\n if (!img.getAttribute('src')) {\r\n var imgSrc = img.dataset.img;\r\n\r\n const toolProxification = new TC.tool.Proxification(TC.proxify);\r\n\r\n if (layer && layer.options.method && layer.options.method === \"POST\") {\r\n layer.getLegendGraphicImage()\r\n .then(function (src) {\r\n img.src = src; // ya se ha validado en getLegendGraphicImage\r\n }).catch(function (err) {\r\n TC.error(err);\r\n });\r\n } else {\r\n if (isGetLegendGraphic(imgSrc)) {\r\n const watch = img.parentElement;\r\n // A\\u00f1adimos el par\\u00e1metro que define el estilo de los textos en la imagen\r\n var colorStr = watch.style.color;\r\n // Convertimos el color de formato rgb(r,g,b) a 0xRRGGBB\r\n var openIdx = colorStr.indexOf('(');\r\n var closeIdx = colorStr.indexOf(')');\r\n if (openIdx >= 0 && closeIdx > openIdx) {\r\n let color = colorStr\r\n .substr(0, closeIdx)\r\n .substr(openIdx + 1)\r\n .split(',');\r\n colorStr = '0x';\r\n for (var i = 0; i < 3; i++) {\r\n var component = parseInt(color[i]).toString(16);\r\n colorStr += component.length === 1 ? '0' + component : component;\r\n }\r\n }\r\n else {\r\n colorStr.replace('#', '0x');\r\n }\r\n imgSrc += '&LEGEND_OPTIONS=fontName:' + watch.style.fontFamily +\r\n ';fontSize:' + parseInt(watch.style.fontSize) +\r\n ';fontColor:' + colorStr +\r\n ';fontAntiAliasing:true';\r\n if (layer.params && layer.params.sld_body) {\r\n imgSrc = TC.Util.addURLParameters(imgSrc, { sld_body: layer.params.sld_body });\r\n }\r\n\r\n toolProxification.fetchImage(imgSrc).then(function (img) {\r\n img.dataset.img = img.src;\r\n }).catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n\r\n toolProxification.fetchImage(imgSrc).then(function (i) {\r\n img.src = i.src;\r\n }).catch(function (err) {\r\n if (err.status && (err.status === 404 || err.status === 401))\r\n TC.error(TC.Util.getLocaleString(layer.map.options.locale, 'simbologyImgNotFound',\r\n { url: imgSrc }));\r\n else\r\n TC.error(err);\r\n }); \r\n }\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst MapContents = TC.control.MapContents;\r\nexport default MapContents;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Proxification from '../tool/Proxification';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\nTC.tool = TC.tool || {};\r\nTC.tool.Proxification = Proxification;\r\n\r\nTC.control.MapInfo = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.MapInfo, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.MapInfo.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-mi';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.QR_MAX_URL_LENGTH = 150;\r\n self.SHORTEN_URL_LENGTH = 16000;\r\n\r\n self.exportsState = false;\r\n\r\n self.includeControls = self.options.includeControls === undefined || self.options.includeControls;\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.exportControlStates = function () {\r\n const self = this;\r\n if (self.map) {\r\n return self.map.exportControlStates();\r\n }\r\n return [];\r\n };\r\n\r\n ctlProto.importControlStates = function (stateArray) {\r\n const self = this;\r\n if (self.map) {\r\n self.map.importControlStates(stateArray);\r\n }\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState) {\r\n const state = {};\r\n if (self.featureToShare || self.sharedFeaturesLayer) {\r\n var layerState;\r\n state.id = self.id;\r\n if (self.featureToShare) {\r\n const featureToShare = self.featureToShare.clone();\r\n featureToShare.showsPopup = true;\r\n layerState = self.featureToShare.layer.exportState({\r\n features: [featureToShare]\r\n });\r\n } else {\r\n layerState = self.sharedFeaturesLayer.exportState();\r\n }\r\n state.features = layerState.features;\r\n if (layerState.crs) {\r\n state.crs = layerState.crs;\r\n }\r\n }\r\n return state;\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n if (self.map && state.features.length) {\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n owner: self,\r\n type: TC.Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n stealth: true\r\n }).then(function (layer) {\r\n self.sharedFeaturesLayer = layer;\r\n layer.importState({ features: state.features, crs: state.crs }).then(function () {\r\n self.map.zoomToFeatures(layer.features);\r\n });\r\n });\r\n }\r\n };\r\n\r\n ctlProto.manageMaxLengthExceed = function () {\r\n throw \"Falta implementación del método manageMaxLengthExceed\";\r\n };\r\n\r\n ctlProto.generateLink = async function () {\r\n var self = this;\r\n\r\n var currentUrl = window.location.href;\r\n var hashPosition = currentUrl.indexOf('#');\r\n if (hashPosition > 0) {\r\n currentUrl = currentUrl.substring(0, hashPosition);\r\n }\r\n\r\n if (self.extraParams) {\r\n // Hacemos merge de parámetros de URL\r\n var params = TC.Util.getQueryStringParams(currentUrl);\r\n TC.Util.extend(params, self.extraParams);\r\n var qsPosition = currentUrl.indexOf('?');\r\n if (qsPosition >= 0) {\r\n currentUrl = currentUrl.substring(0, qsPosition);\r\n }\r\n currentUrl = currentUrl.concat('?', TC.Util.getParamString(params));\r\n }\r\n else {\r\n //eliminamos todos los paramaertos por querystring\r\n var start = currentUrl.indexOf('?');\r\n\r\n //Borramos los parámetros de la URL y dejamos sólo el hash\r\n if (start > 0) {\r\n currentUrl = currentUrl.replace(currentUrl.substring(start), '');\r\n }\r\n } \r\n\r\n const controlStates = self.includeControls ? self.exportControlStates() : [];\r\n if (!self.includeControls && self.exportsState && (self.featureToShare || self.sharedFeaturesLayer || self.caller && self.caller.toShare)) {\r\n if (self.caller && self.caller.toShare) {\r\n controlStates.push(self.caller.exportState());\r\n } else {\r\n controlStates.push(self.exportState());\r\n }\r\n }\r\n const extraStates = controlStates.length ? { ctl: controlStates } : undefined;\r\n\r\n var hashState = await self.map.getMapState({ extraStates: extraStates, cacheResult: self.includeControls });\r\n\r\n var url = currentUrl.concat(\"#\", hashState);\r\n self.manageMaxLengthExceed({ browser: url.length > TC.Consts.URL_MAX_LENGTH, qr: url.length > self.SHORTEN_URL_LENGTH });\r\n return url;\r\n };\r\n\r\n ctlProto.shortenedLink = function () {\r\n const self = this;\r\n var wait;\r\n\r\n //const generateLinkWithoutParams = async function () {\r\n // var url = await self.generateLink();\r\n // var start = url.indexOf('?');\r\n // var end = url.indexOf('#');\r\n\r\n // //Borramos los parámetros de la URL y dejamos sólo el hash\r\n // if (start > 0) {\r\n // if (start < end) {\r\n // url = url.replace(url.substring(start, end), '');\r\n // } else {\r\n // url = url.replace(url.substring(start, url.length - 1), '');\r\n // }\r\n // }\r\n\r\n // return url;\r\n //};\r\n const shortenUrl = function (url) {\r\n var shortenServiceUrl = \"https://tinyurl.com/api-create.php\";\r\n\r\n if (!TC.tool || !TC.tool.Proxification) {\r\n TC.syncLoadJS(TC.apiLocation + 'TC/tool/Proxification');\r\n }\r\n\r\n var data = new FormData();\r\n data.append(\"url\", url);\r\n\r\n var toolProxification = new TC.tool.Proxification(TC.proxify, { allowedMixedContent: false });\r\n return toolProxification.fetch(shortenServiceUrl, {\r\n type: 'POST',\r\n data: data\r\n }).then(function (data) {\r\n return data;\r\n }).catch(function (error) {\r\n return null;\r\n });\r\n };\r\n\r\n return new Promise(function (resolve, reject) {\r\n const onError = function () {\r\n self.map.toast(self.getLocaleString(\"urlTooLongForShortener\"), { type: TC.Consts.msgType.ERROR });\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n resolve(\"\");\r\n };\r\n self.generateLink().then(url => {\r\n if (url.length > self.QR_MAX_URL_LENGTH && url.length < self.SHORTEN_URL_LENGTH) {\r\n\r\n wait = self.map.getLoadingIndicator().addWait();\r\n\r\n shortenUrl(url).then(function (response) {\r\n if (response && response.responseText) {\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n resolve(response.responseText.replace('http://', 'https://'));\r\n } else {\r\n onError();\r\n }\r\n }, onError);\r\n } else {\r\n if (url.length >= self.SHORTEN_URL_LENGTH) {\r\n onError();\r\n }\r\n\r\n resolve(\"\");\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.makeQRCode = function (codeContainer, width, height) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n TC.loadJS(\r\n typeof window.QRCode === 'undefined',\r\n [TC.apiLocation + 'lib/qrcode/qrcode.min.js'],\r\n function () {\r\n self.shortenedLink().then(function (url) {\r\n url = url || \"\";\r\n if (url.length > 0) {\r\n var options = {\r\n text: url\r\n };\r\n\r\n if (width && height) {\r\n options.width = width;\r\n options.height = height;\r\n }\r\n\r\n var config = { attributes: true, childList: true, subtree: true };\r\n var observer = new MutationObserver(function (mutationsList, observer) {\r\n var srcMutation = mutationsList.filter(function (mutation) {\r\n return mutation.type === \"attributes\";\r\n }).filter(function (mutation) {\r\n return mutation.attributeName.indexOf('src') > -1;\r\n });\r\n\r\n if (srcMutation.length > 0) {\r\n observer.disconnect();\r\n resolve(srcMutation[0].target.src);\r\n }\r\n });\r\n codeContainer.innerHTML = '';\r\n observer.observe(codeContainer, config);\r\n new QRCode(codeContainer, options);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.drawScaleBarIntoCanvas = function (options) {\r\n const self = this;\r\n var canvas;\r\n var sb = self.map.getControlsByClass(TC.control.ScaleBar);\r\n if (sb.length === 0) {\r\n return null;\r\n }\r\n\r\n options = options || {};\r\n\r\n const drawFill = function (ctx, width, height) {\r\n var elem = document.getElementsByClassName(sb[0].CLASS);\r\n var fillnode = elem.item(0);\r\n var fillBoundingCR = TC.Util.extend({}, fillnode.getBoundingClientRect());\r\n\r\n fillBoundingCR.left = (options.left || 15) - 2;\r\n\r\n fillBoundingCR.top = options.top || 15;\r\n fillBoundingCR.top--;\r\n\r\n ctx.globalAlpha = 0.5;\r\n ctx.fillStyle = window.getComputedStyle(fillnode).backgroundColor;\r\n width += 4;\r\n height += 4;\r\n ctx.fillRect(fillBoundingCR.left, fillBoundingCR.top, width, height);\r\n };\r\n\r\n if (!options.canvas) {\r\n canvas = document.createElement('CANVAS');\r\n } else {\r\n canvas = options.canvas;\r\n }\r\n\r\n var ctx = canvas.getContext(\"2d\");\r\n ctx.save();\r\n\r\n var elem = document.getElementsByClassName(\"ol-scale-line-inner\");\r\n var node = elem.item(0);\r\n var boundingCR = TC.Util.extend({}, node.getBoundingClientRect());\r\n\r\n var text = node.textContent;\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = window.getComputedStyle(node).borderColor;\r\n\r\n var width, height;\r\n\r\n if (boundingCR.width > boundingCR.height) {\r\n\r\n width = boundingCR.width;\r\n height = boundingCR.height;\r\n }\r\n else {\r\n\r\n width = boundingCR.height;\r\n height = boundingCR.width;\r\n }\r\n\r\n if (options.setSize) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n\r\n boundingCR.left = options.left !== undefined ? options.left : 15;\r\n boundingCR.top = options.top !== undefined ? options.top : 15;\r\n\r\n ctx.moveTo(boundingCR.left, boundingCR.top);\r\n ctx.lineTo(boundingCR.left, boundingCR.top + height);\r\n ctx.lineTo(boundingCR.left + width, boundingCR.top + height);\r\n ctx.lineTo(boundingCR.left + width, boundingCR.top);\r\n\r\n ctx.stroke();\r\n\r\n var textPosition = {\r\n x: boundingCR.left + width / 2,\r\n y: boundingCR.top + height / 2\r\n };\r\n\r\n if (options.fill) {\r\n drawFill(ctx, width, height);\r\n }\r\n\r\n ctx.globalAlpha = 1.0;\r\n ctx.fillStyle = options.textColor !== undefined ? options.textColor : window.getComputedStyle(node).color;\r\n\r\n ctx.font = options.font !== undefined ? options.font : window.getComputedStyle(node).fontSize + \" \" + window.getComputedStyle(node).fontFamily;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, textPosition.x, textPosition.y);\r\n\r\n return canvas;\r\n };\r\n\r\n ctlProto.registerListeners = function () {\r\n const self = this;\r\n if (!self.registeredListeners) {\r\n let handlerTimeout;\r\n const handler = function (e) {\r\n clearTimeout(handlerTimeout);\r\n // generateLink puede ser tardar mucho, así que no lo llamamos innecesariamente cuando se están cargando varias features\r\n handlerTimeout = setTimeout(function () {\r\n delete self.map._controlStatesCache;\r\n self.renderPromise().then(function () {\r\n self.generateLink();\r\n });\r\n }, 100);\r\n };\r\n self.map.on(TC.Consts.event.LAYERADD, handler)\r\n .on(TC.Consts.event.LAYERREMOVE, handler)\r\n .on(TC.Consts.event.FEATUREADD, handler)\r\n .on(TC.Consts.event.FEATUREREMOVE + ' ' + TC.Consts.event.FEATURESCLEAR, handler);\r\n\r\n self.registeredListeners = true;\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst MapInfo = TC.control.MapInfo;\r\nexport default MapInfo;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Draw from './Draw';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.Draw = Draw;\r\nTC.Control = Control;\r\n\r\nTC.control.Measure = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.drawControls = [];\r\n self.persistentDrawControls = false;\r\n self.NOMEASURE = '-';\r\n\r\n self.exportsState = true;\r\n\r\n this.renderPromise().then(function () {\r\n self.measureMode = self.options.mode;\r\n\r\n self.history = [];\r\n self.historyIndex = 0;\r\n self.reset = true;\r\n\r\n self.wrap = new TC.wrap.control.Measure(self);\r\n\r\n self._len = self.div.querySelector('.tc-ctl-meas-val-len');\r\n self._area = self.div.querySelector('.tc-ctl-meas-val-area');\r\n self._peri = self.div.querySelector('.tc-ctl-meas-val-peri');\r\n });\r\n};\r\nTC.control.Measure.units = {\r\n \"m\": { peso: 0, abbr: \"m²\" },\r\n \"dam\": { peso: 1, abbr: \"dam²\", precision: 2 },\r\n \"hm\": { peso: 2, abbr: \"hm²\", precision: 2 },\r\n \"ha\": { peso: 2, abbr: \"ha\", precision: 3 },\r\n \"km\": { peso: 3, abbr: \"km²\", precision: 3 }\r\n};\r\n\r\nTC.inherit(TC.control.Measure, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Measure.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-meas';\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"measure\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":22}}})) + \"

              \\r\\n
              \\r\\n \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"length\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":33},\"end\":{\"line\":7,\"column\":50}}})) + \":
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n
              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"area\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":33},\"end\":{\"line\":11,\"column\":48}}})) + \": , \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"perimeter\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":94},\"end\":{\"line\":11,\"column\":114}}})) + \":
              \\r\\n
              \";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(TC.Control.prototype.renderData.call(self, { controlId: self.id }, function () {\r\n if (self.options.mode) {\r\n self.div.querySelector('.tc-ctl-meas-select').classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n\r\n self.div.querySelectorAll(`.${TC.control.Measure.prototype.CLASS}-select span`).forEach(function (span) {\r\n span.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n var label = this;\r\n while (label && label.tagName !== 'LABEL') {\r\n label = label.parentElement;\r\n }\r\n var checkbox = label.querySelector(`input[type=radio][name=\"${self.id}-mode\"]`);\r\n var newMode = checkbox.value;\r\n\r\n checkbox.checked = true;\r\n self.setMode(newMode, true);\r\n }, { passive: true });\r\n });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n TC.Control.prototype.register.call(self, map).then(function () {\r\n self.map.on(TC.Consts.event.VIEWCHANGE, function () {\r\n if (self.map.view === TC.Consts.view.PRINTING) {\r\n self.trigger(TC.Consts.event.DRAWEND);\r\n }\r\n });\r\n\r\n const layerId = self.getUID();\r\n const drawLinesId = self.getUID();\r\n const drawPolygonsId = self.getUID();\r\n\r\n self.units = self.options.units ? self.options.units : [\"m\", \"km\"];\r\n\r\n self.layerPromise = map.addLayer({\r\n id: layerId,\r\n title: self.getLocaleString('measure'),\r\n owner: self,\r\n stealth: true,\r\n type: TC.Consts.layerType.VECTOR,\r\n styles: {\r\n point: map.options.styles.point,\r\n line: map.options.styles.line,\r\n polygon: map.options.styles.polygon\r\n }\r\n });\r\n\r\n Promise.all([self.layerPromise, self.renderPromise()]).then(function (objects) {\r\n const layer = objects[0];\r\n self.layer = layer;\r\n self.layer.map.putLayerOnTop(self.layer);\r\n\r\n self._lineDrawControlPromise = map.addControl('draw', {\r\n id: drawLinesId,\r\n div: self.div.querySelector('.tc-ctl-meas-line'),\r\n mode: TC.Consts.geom.POLYLINE,\r\n measure: true,\r\n extensible: true,\r\n persistent: self.persistentDrawControls,\r\n styling: self.persistentDrawControls,\r\n layer: self.layer\r\n });\r\n self._polygonDrawControlPromise = map.addControl('draw', {\r\n id: drawPolygonsId,\r\n div: self.div.querySelector('.tc-ctl-meas-polygon'),\r\n mode: TC.Consts.geom.POLYGON,\r\n measure: true,\r\n persistent: self.persistentDrawControls,\r\n styling: self.persistentDrawControls,\r\n layer: self.layer\r\n });\r\n\r\n Promise.all([self._lineDrawControlPromise, self._polygonDrawControlPromise]).then(function (controls) {\r\n self.lineDrawControl = controls[0];\r\n self.polygonDrawControl = controls[1];\r\n controls.forEach(function (ctl) {\r\n ctl.containerControl = self;\r\n self.drawControls.push(ctl);\r\n ctl\r\n .on(TC.Consts.event.MEASURE + ' ' + TC.Consts.event.MEASUREPARTIAL, function (e) {\r\n self.showMeasurements(e);\r\n })\r\n .on(TC.Consts.event.DRAWCANCEL, function (_e) {\r\n // Alerta de condición de carrera si no ponemos un timeout:\r\n // 1- Se llama a cancel de un control Draw.\r\n // 2- Se llama a deactivate (como es mediante cancel, no se se corta la cadena de activación controles).\r\n // 3- Si el control activo anterior era otro de los modos de dibujo de Measure, se activa.\r\n // 4- Se llama a cancel desde aquí.\r\n // 5- Se llama a deactivate del control que acabamos de activar en 3.\r\n // El activate de 3 y el deactivate de 5 sobre el mismo control entran en condición de carrera al crear/destruir la interaction\r\n // por tanto se puede quedar en un estado inconsistente. Para evitar eso, separamos 3 de 5 por el siguiente timeout.\r\n setTimeout(function () {\r\n self.cancel();\r\n }, 100);\r\n });\r\n // Desactivamos el método exportState que ya se encarga el control padre de ello\r\n ctl.exportsState = false;\r\n });\r\n\r\n resolve(self);\r\n self.setMode(self.options.mode);\r\n }).catch(reject);\r\n }).catch(reject);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.displayMode = function (mode) {\r\n const self = this;\r\n\r\n const modes = [];\r\n self.div.querySelectorAll('.tc-ctl-meas-mode').forEach(function (elm) {\r\n modes.push(elm);\r\n });\r\n switch (mode) {\r\n case TC.Consts.geom.POLYLINE:\r\n self._activeMode = modes.filter(function (elm) {\r\n return elm.matches('.tc-ctl-meas-len');\r\n })[0];\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n self._activeMode = modes.filter(function (elm) {\r\n return elm.matches('.tc-ctl-meas-area');\r\n })[0];\r\n break;\r\n case null:\r\n case undefined:\r\n self._activeMode = null;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const hiddenModes = modes.filter(function (elm) {\r\n return elm !== self._activeMode;\r\n });\r\n\r\n if (mode) {\r\n const radio = self.div.querySelector(`input[type=radio][name=\"${self.id}-mode\"][value=\"${mode}\"]`);\r\n radio.checked = true;\r\n }\r\n else {\r\n self.div.querySelectorAll(`input[type=radio][name=\"${self.id}-mode\"]`).forEach(function (radio) {\r\n radio.checked = false;\r\n });\r\n }\r\n if (self._activeMode) {\r\n self._activeMode.classList.remove(TC.Consts.classes.HIDDEN);\r\n self._activeMode.querySelector('.tc-ctl').classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n hiddenModes.forEach(function (elm) {\r\n elm.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n return self;\r\n };\r\n\r\n ctlProto.setMode = function (mode) {\r\n const self = this;\r\n\r\n self.mode = mode;\r\n self.displayMode(mode);\r\n\r\n var event;\r\n switch (mode) {\r\n case TC.Consts.geom.POLYLINE:\r\n self.lineDrawControl.activate();\r\n event = TC.Consts.event.CONTROLACTIVATE;\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n self.polygonDrawControl.activate();\r\n event = TC.Consts.event.CONTROLACTIVATE;\r\n break;\r\n case null:\r\n case undefined:\r\n self.drawControls.forEach(function (ctl) {\r\n if (ctl.isActive) {\r\n ctl.cancel();\r\n }\r\n });\r\n event = TC.Consts.event.CONTROLDEACTIVATE;\r\n break;\r\n default:\r\n event = TC.Consts.event.CONTROLACTIVATE;\r\n break;\r\n }\r\n\r\n self.resetValues();\r\n\r\n if (event && self.map) {\r\n self.map.trigger(event, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.cancel = function () {\r\n this.setMode(null, false);\r\n return this;\r\n };\r\n\r\n ctlProto.showMeasurements = function (options) {\r\n const self = this;\r\n options = options || {};\r\n var units = options.units;\r\n var precision;\r\n const locale = self.map.options.locale || TC.Cfg.locale;\r\n if (options.area) {\r\n var area = options.area;\r\n (self.units instanceof Array ? self.units : self.units.split(\",\")).forEach(function (unit, _index, array) {\r\n const difPeso = TC.control.Measure.units[unit.trim()].peso - TC.control.Measure.units.m.peso;\r\n let precision = TC.control.Measure.units[unit.trim()].precision ? TC.control.Measure.units[unit.trim()].precision : 0;\r\n if (array.length === 1 || area >= Math.pow(100, difPeso) / Math.pow(10, precision ? precision - 1 : precision)) {\r\n self._area.innerHTML = TC.Util.formatNumber((area / Math.pow(100, difPeso)).toFixed(precision), locale) + ' ' + TC.control.Measure.units[unit].abbr;\r\n }\r\n });\r\n }\r\n if (options.perimeter) {\r\n var perimeter = options.perimeter;\r\n if (perimeter > 1000) {\r\n perimeter = perimeter / 1000;\r\n units = 'km';\r\n }\r\n precision = units === 'm' ? 0 : 3;\r\n self._peri.innerHTML = TC.Util.formatNumber(perimeter.toFixed(precision), locale) + ' ' + units;\r\n }\r\n if (options.length) {\r\n var length = options.length;\r\n if (length > 1000) {\r\n length = length / 1000;\r\n units = 'km';\r\n }\r\n precision = units === 'm' ? 0 : 3;\r\n self._len.innerHTML = TC.Util.formatNumber(length.toFixed(precision), locale) + ' ' + units;\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.resetValues = function () {\r\n const self = this;\r\n if (self._len) {\r\n self._len.textContent = self.NOMEASURE;\r\n self._area.textContent = self.NOMEASURE;\r\n self._peri.textContent = self.NOMEASURE;\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getDrawLines = function () {\r\n\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.exportsState && self.layer) {\r\n return {\r\n id: self.id,\r\n layer: self.layer.exportState()\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n self.layerPromise.then(function (layer) {\r\n layer.importState(state.layer);\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst Measure = TC.control.Measure;\r\nexport default Measure;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.Consts.event.BEFOREFEATUREMODIFY = \"beforefeaturemodify.tc\";\r\nTC.Consts.event.FEATUREMODIFY = \"featuremodify.tc\";\r\nTC.Consts.event.FEATURESSELECT = \"featuresselect.tc\";\r\nTC.Consts.event.FEATURESUNSELECT = \"featuresunselect.tc\";\r\nTC.Consts.event.CHANGE = 'change';\r\n\r\nTC.control.Modify = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n if (!TC.browserFeatures.inputTypeColor() && !window.CP) {\r\n TC.loadCSS(TC.apiLocation + 'lib/color-picker/color-picker.min.css');\r\n TC.syncLoadJS(TC.apiLocation + 'lib/color-picker/color-picker.min.js');\r\n }\r\n\r\n self.styles = TC.Util.extend(true, TC.Cfg.styles.selection, self.options.styles);\r\n self.styles.text = self.styles.text || {\r\n fontSize: self.styles.line.fontSize,\r\n fontColor: self.styles.line.fontColor,\r\n labelOutlineColor: self.styles.line.labelOutlineColor,\r\n labelOutlineWidth: self.styles.line.labelOutlineWidth\r\n };\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self.wrap = new TC.wrap.control.Modify(self);\r\n self.snapping = (typeof self.options.snapping === 'boolean') ? self.options.snapping : true;\r\n};\r\n\r\nTC.inherit(TC.control.Modify, TC.Control);\r\n\r\n(function () {\r\n\r\n var ctlProto = TC.control.Modify.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-mod';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n
              \\r\\n \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"textColor\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":4},\"end\":{\"line\":9,\"column\":24}}})) + \"\\r\\n \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"fontSize\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":4},\"end\":{\"line\":11,\"column\":23}}})) + \"\\r\\n \\r\\n
              \\r\\n
              \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-attr'] = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"attributeEdit\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":8},\"end\":{\"line\":2,\"column\":32}}})) + \"

              \\r\\n
              \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"data\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":16},\"end\":{\"line\":13,\"column\":25}}})) != null ? stack1 : \"\") + \" \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n \\r\\n \\r\\n
              \\r\\n
              \\r\\n\";},\"useData\":true}\r\n\r\n const setFeatureSelectedState = function (ctl, features) {\r\n ctl._deleteBtn.disabled = features.length === 0;\r\n ctl._editAttrBtn.disabled = features.length !== 1;\r\n ctl._joinBtn.disabled = features.length < 2;\r\n ctl._splitBtn.disabled = features.filter(complexGeometryFilter).length === 0;\r\n ctl.displayLabelText();\r\n };\r\n\r\n //const styleFunction = function (feature, mapStyles) {\r\n // var result;\r\n // switch (true) {\r\n // case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n // case TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon:\r\n // result = TC.Util.extend({}, mapStyles.polygon);\r\n // break;\r\n // case TC.feature.Point && feature instanceof TC.feature.Point:\r\n // case TC.feature.MultiPoint && feature instanceof TC.feature.MultiPoint:\r\n // result = TC.Util.extend({}, mapStyles.point);\r\n // break;\r\n // default:\r\n // result = TC.Util.extend({}, mapStyles.line);\r\n // break;\r\n // }\r\n // const style = feature.getStyle();\r\n // if (style.label) {\r\n // result.label = style.label;\r\n // result.fontSize = style.fontSize;\r\n // result.fontColor = style.fontColor;\r\n // result.labelOutlineColor = style.labelOutlineColor;\r\n // result.labelOutlineWidth = style.labelOutlineWidth;\r\n // }\r\n // return result;\r\n //};\r\n\r\n //const setFeatureSelectedStyle = function (ctl, features) {\r\n // const mapStyles = ctl.map.options.styles.selection;\r\n // features.forEach(function (feature) {\r\n // feature._originalStyle = TC.Util.extend({}, feature.getStyle());\r\n // feature.setStyle(ctl.styleFunction(feature));\r\n // });\r\n //};\r\n\r\n //const setFeatureUnselectedStyle = function (ctl, features) {\r\n // features.forEach(function (feature) {\r\n // if (feature._originalStyle) {\r\n // const style = feature.getStyle();\r\n // if (style.label) {\r\n // const originalStyle = feature._originalStyle;\r\n // originalStyle.label = style.label;\r\n // originalStyle.fontSize = style.fontSize;\r\n // originalStyle.fontColor = style.fontColor;\r\n // originalStyle.labelOutlineColor = style.labelOutlineColor;\r\n // originalStyle.labelOutlineWidth = style.labelOutlineWidth;\r\n // }\r\n // feature.setStyle(feature._originalStyle);\r\n // feature._originalStyle = undefined;\r\n // }\r\n // })\r\n //};\r\n\r\n const complexGeometryFilter = function (elm) {\r\n var result = false;\r\n if ((TC.feature.MultiPolygon && elm instanceof TC.feature.MultiPolygon) ||\r\n (TC.feature.MultiPolyline && elm instanceof TC.feature.MultiPolyline)) {\r\n if (elm.geometry.length > 1) {\r\n result = true;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n if (self.options.layer) {\r\n self.setLayer(self.options.layer);\r\n }\r\n\r\n map\r\n .on(TC.Consts.event.FEATUREADD + ' ' + TC.Consts.event.FEATURESADD, function (e) {\r\n Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n const layer = objects[0];\r\n if (e.layer === layer) {\r\n self.setSelectableState(true);\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE + ' ' + TC.Consts.event.FEATURESCLEAR, function (e) {\r\n const layer = e.layer;\r\n const feature = e.feature;\r\n Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n if (layer === objects[0]) {\r\n if (feature) {\r\n self.unselectFeatures([feature]);\r\n }\r\n else {\r\n self.unselectFeatures();\r\n }\r\n setFeatureSelectedState(self, self.getSelectedFeatures());\r\n if (layer.features.length === 0) {\r\n self.setSelectableState(false);\r\n self.setTextMode(false);\r\n }\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.LAYERUPDATE, function (e) {\r\n const layer = e.layer;\r\n Promise.all([self.getLayer(), self.renderPromise()]).then(function (objects) {\r\n if (layer === objects[0]) {\r\n setFeatureSelectedState(self, self.getSelectedFeatures());\r\n }\r\n });\r\n });\r\n\r\n self.on(TC.Consts.event.FEATURESSELECT + ' ' + TC.Consts.event.FEATURESUNSELECT, function () {\r\n const selectedFeatures = self.getSelectedFeatures();\r\n setFeatureSelectedState(self, selectedFeatures);\r\n const unselectedFeatures = self.layer.features.filter(function (feature) {\r\n return selectedFeatures.indexOf(feature) < 0;\r\n });\r\n unselectedFeatures.forEach(function (feature) {\r\n feature.toggleSelectedStyle(false);\r\n });\r\n selectedFeatures.forEach(function (feature) {\r\n feature.toggleSelectedStyle(true);\r\n });\r\n\r\n if (!self.getAttributeDisplayTarget().classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.displayAttributes();\r\n }\r\n if (!selectedFeatures.length) {\r\n self.closeAttributes();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n const renderCallback = function () {\r\n self._selectBtn = self.div.querySelector('.' + self.CLASS + '-btn-select');\r\n self._selectBtn.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n if (!e.target.disabled) {\r\n if (self.isActive) {\r\n self.deactivate();\r\n }\r\n else {\r\n self.activate();\r\n }\r\n }\r\n }, { passive: true });\r\n self._deleteBtn = self.div.querySelector('.' + self.CLASS + '-btn-delete');\r\n self._deleteBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.deleteSelectedFeatures();\r\n }, { passive: true });\r\n self._textBtn = self.div.querySelector('.' + self.CLASS + '-btn-text');\r\n self._textBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.setTextMode(!self.textActive);\r\n }, { passive: true });\r\n self._joinBtn = self.div.querySelector('.' + self.CLASS + '-btn-join');\r\n self._splitBtn = self.div.querySelector('.' + self.CLASS + '-btn-split');\r\n self._editAttrBtn = self.div.querySelector('.' + self.CLASS + '-btn-attr');\r\n self._editAttrBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.toggleAttributes();\r\n }, { passive: true });\r\n self._textInput = self.div.querySelector('input.' + self.CLASS + '-txt');\r\n self._textInput.addEventListener('input', function (e) {\r\n self.labelFeatures(e.target.value);\r\n });\r\n self._styleSection = self.div.querySelector('.' + self.CLASS + '-style');\r\n\r\n self._fontColorPicker = self.div.querySelector(self._classSelector + '-fnt-c');\r\n self._fontColorPicker.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setFontColor(e.target.value);\r\n });\r\n\r\n self._fontSizeSelector = self.div.querySelector('.' + self.CLASS + '-fnt-s');\r\n self._fontSizeSelector.addEventListener(TC.Consts.event.CHANGE, function (e) {\r\n self.setFontSize(e.target.value);\r\n });\r\n\r\n self._attributesSection = self.div.querySelector('.' + self.CLASS + '-attr');\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n };\r\n\r\n const renderObject = {\r\n fontSize: self.styles.text.fontSize,\r\n fontColor: self.styles.text.fontColor,\r\n labelOutlineColor: self.styles.text.labelOutlineColor,\r\n labelOutlineWidth: self.styles.text.labelOutlineWidth\r\n };\r\n\r\n var promise;\r\n if (TC.browserFeatures.inputTypeColor()) {\r\n promise = self._set1stRenderPromise(self.renderData(renderObject, renderCallback));\r\n }\r\n else {\r\n // El navegador no soporta input[type=color], usamos polyfill\r\n promise = self._set1stRenderPromise(self.renderData(renderObject, function () {\r\n const input = self.div.querySelector('input[type=color]');\r\n input.style.backgroundColor = input.value;\r\n input.style.color = 'transparent';\r\n const picker = new CP(input, 'click', document.body);\r\n\r\n input.onclick = function (e) {\r\n e.preventDefault();\r\n };\r\n\r\n // Evitamos que salga el teclado virtual en iOS\r\n input.onfocus = function (_e) {\r\n this.blur();\r\n };\r\n\r\n input.onchange = function (_e) {\r\n this.style.backgroundColor = this.value;\r\n };\r\n self.map.loaded(function () {\r\n picker.on(\"change\", function (color) {\r\n self.setFontColor('#' + color);\r\n });\r\n });\r\n\r\n renderCallback();\r\n }));\r\n }\r\n return promise;\r\n };\r\n\r\n ctlProto.activate = function () {\r\n const self = this;\r\n self._selectBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n TC.Control.prototype.activate.call(self);\r\n self.wrap.activate(self.mode);\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n const self = this;\r\n TC.Control.prototype.deactivate.call(self);\r\n if (self._selectBtn) {\r\n setFeatureSelectedState(self, []);\r\n }\r\n if (self.wrap) {\r\n self.wrap.deactivate();\r\n }\r\n if (self._selectBtn) {\r\n self._selectBtn.classList.remove(TC.Consts.classes.ACTIVE);\r\n if (self.layer) {\r\n self.unselectFeatures(self.getSelectedFeatures());\r\n }\r\n }\r\n };\r\n\r\n ctlProto.clear = function () {\r\n const self = this;\r\n if (self.layer) {\r\n self.layer.clearFatures();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.isExclusive = function () {\r\n return true;\r\n };\r\n\r\n ctlProto.end = function () {\r\n const self = this;\r\n self.wrap.end();\r\n return self;\r\n };\r\n\r\n ctlProto.setMode = function (mode, activate) {\r\n const self = this;\r\n\r\n if (mode)\r\n self.mode = mode;\r\n\r\n if (activate && mode) {\r\n if (self.layer) {\r\n self.layer.map.putLayerOnTop(self.layer);\r\n }\r\n self.activate();\r\n }\r\n else {\r\n self.deactivate();\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n var self = this;\r\n // Se ha instanciado un control sin capa asociada\r\n if (self.options && typeof self.options.layer === 'boolean' && !self.options.layer) {\r\n return Promise.resolve(null);\r\n }\r\n if (self.layer) {\r\n return Promise.resolve(self.layer);\r\n }\r\n return self._layerPromise;\r\n };\r\n\r\n ctlProto.setLayer = function (layer) {\r\n const self = this;\r\n if (self.map) {\r\n self.setSelectedFeatures([]);\r\n self._layerPromise = new Promise(function (resolve, _reject) {\r\n if (typeof (layer) === \"string\") {\r\n self.map.loaded(function () {\r\n self.layer = self.map.getLayer(layer);\r\n resolve(self.layer);\r\n });\r\n }\r\n else {\r\n self.layer = layer;\r\n resolve(self.layer);\r\n }\r\n });\r\n Promise.all([self._layerPromise, self.renderPromise()]).then(function (objs) {\r\n const layer = objs[0];\r\n self.setSelectableState(layer && layer.features.length > 0);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.setSelectableState = function (active) {\r\n const self = this;\r\n self._selectBtn.disabled = !active;\r\n self._textBtn.disabled = !active;\r\n };\r\n\r\n ctlProto.getSelectedFeatures = function () {\r\n return this.wrap.getSelectedFeatures();\r\n };\r\n\r\n ctlProto.setSelectedFeatures = function (features) {\r\n const self = this;\r\n const result = self.wrap.setSelectedFeatures(features);\r\n self.displayLabelText();\r\n return result;\r\n };\r\n\r\n ctlProto.getActiveFeatures = function () {\r\n const self = this;\r\n const result = self.getSelectedFeatures();\r\n if (!result.length && self.layer.features.length) {\r\n result.push(self.layer.features[self.layer.features.length - 1]);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.unselectFeatures = function (features) {\r\n features = features || [];\r\n this.wrap.unselectFeatures(features.map(function (feat) {\r\n return feat.wrap.feature;\r\n }));\r\n return this;\r\n };\r\n\r\n ctlProto.deleteSelectedFeatures = function () {\r\n const self = this;\r\n const features = self.getSelectedFeatures();\r\n self.wrap.unselectFeatures(features);\r\n features.forEach(function (feature) {\r\n self.layer.removeFeature(feature);\r\n self.trigger(TC.Consts.event.FEATUREREMOVE, { feature: feature });\r\n });\r\n return self;\r\n };\r\n\r\n ctlProto.styleFunction = function (feature, _resolution) {\r\n const self = this;\r\n var result;\r\n const mapStyles = self.map.options.styles.selection;\r\n switch (true) {\r\n case TC.feature.Polygon && feature instanceof TC.feature.Polygon:\r\n case TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon:\r\n result = TC.Util.extend({}, mapStyles.polygon);\r\n break;\r\n case TC.feature.Point && feature instanceof TC.feature.Point:\r\n case TC.feature.MultiPoint && feature instanceof TC.feature.MultiPoint:\r\n result = TC.Util.extend({}, mapStyles.point);\r\n break;\r\n default:\r\n result = TC.Util.extend({}, mapStyles.line);\r\n break;\r\n }\r\n const style = feature.getStyle();\r\n if (style.label) {\r\n result.label = style.label;\r\n result.fontSize = style.fontSize;\r\n result.fontColor = style.fontColor;\r\n result.labelOutlineColor = style.labelOutlineColor;\r\n result.labelOutlineWidth = style.labelOutlineWidth;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.setTextMode = function (active) {\r\n const self = this;\r\n self.textActive = active;\r\n if (active) {\r\n self._textBtn.classList.add(TC.Consts.classes.ACTIVE, active);\r\n self._styleSection.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n else {\r\n self._textBtn.classList.remove(TC.Consts.classes.ACTIVE, active);\r\n self._styleSection.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n self.displayLabelText();\r\n return self;\r\n };\r\n\r\n ctlProto.setFontColorWatch = function (color, outlineColor) {\r\n const self = this;\r\n if (color === undefined) {\r\n color = self.styles.text.fontColor;\r\n }\r\n color = TC.Util.colorArrayToString(color);\r\n outlineColor = outlineColor || self.getLabelOutlineColor(color);\r\n self.renderPromise().then(function () {\r\n self._fontColorPicker.value = color;\r\n self._textInput.style.color = color;\r\n self._textInput.style.textShadow = '0 0 ' + self.styles.text.labelOutlineWidth + 'px ' + outlineColor;\r\n if (!TC.browserFeatures.inputTypeColor()) {\r\n self._fontColorPicker.style.backgroundColor = color;\r\n self._fontColorPicker.blur();\r\n }\r\n });\r\n return self;\r\n };\r\n\r\n ctlProto.setFontColor = function (color) {\r\n const self = this;\r\n self.styles.text.fontColor = color;\r\n self.styles.text.labelOutlineColor = self.getLabelOutlineColor(color);\r\n self.setFontColorWatch(color, self.styles.text.labelOutlineColor);\r\n const features = self.getActiveFeatures();\r\n features.forEach(function (feature) {\r\n const style = feature.getStyle();\r\n style.fontColor = color;\r\n style.labelOutlineColor = self.styles.text.labelOutlineColor;\r\n feature.setStyle(style);\r\n });\r\n return self;\r\n };\r\n\r\n ctlProto.setFontSizeWatch = function (size) {\r\n const self = this;\r\n if (size === undefined) {\r\n size = self.styles.text.fontSize;\r\n }\r\n const sizeValue = parseInt(size);\r\n if (sizeValue !== Number.NaN) {\r\n self.renderPromise().then(function () {\r\n self._fontSizeSelector.value = sizeValue;\r\n self._textInput.style.fontSize = sizeValue + 'pt';\r\n });\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.setFontSize = function (size) {\r\n const self = this;\r\n const sizeValue = parseInt(size);\r\n if (sizeValue !== Number.NaN) {\r\n self.styles.text.fontSize = sizeValue;\r\n self.setFontSizeWatch(sizeValue);\r\n const features = self.getActiveFeatures();\r\n features.forEach(function (feature) {\r\n const style = feature.getStyle();\r\n style.fontSize = sizeValue;\r\n feature.setStyle(style);\r\n });\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getLabelOutlineColor = function (fontColor) {\r\n if (fontColor) {\r\n fontColor = TC.Util.colorArrayToString(fontColor);\r\n const matchForShort = fontColor.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);\r\n if (matchForShort && matchForShort.length) {\r\n fontColor = '#' + matchForShort[1] + matchForShort[1] + matchForShort[2] + matchForShort[2] + matchForShort[3] + matchForShort[3];\r\n }\r\n const matchForLong = fontColor.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\r\n if (matchForLong && matchForLong.length) {\r\n const r = parseInt(matchForLong[1], 16);\r\n const g = parseInt(matchForLong[2], 16);\r\n const b = parseInt(matchForLong[3], 16);\r\n return (r + g + b) / 3 < 128 ? '#ffffff' : '#000000';\r\n }\r\n }\r\n return '#ffffff';\r\n };\r\n\r\n ctlProto.displayLabelText = function () {\r\n const self = this;\r\n const features = self.getSelectedFeatures();\r\n var text;\r\n var size;\r\n var color;\r\n if (self.isActive && features.length) {\r\n const feature = features[features.length - 1];\r\n const style = feature.getStyle();\r\n text = style.label;\r\n color = style.fontColor;\r\n size = style.fontSize;\r\n }\r\n else {\r\n text = '';\r\n color = self.styles.text.fontColor;\r\n size = self.styles.text.fontSize;\r\n }\r\n self.renderPromise().then(function () {\r\n self\r\n .setFontSizeWatch(size)\r\n .setFontColorWatch(color)\r\n ._textInput.value = text || '';\r\n });\r\n return self;\r\n };\r\n\r\n ctlProto.labelFeatures = function (text) {\r\n const self = this;\r\n const features = self.getActiveFeatures();\r\n if (features.length) {\r\n const style = features[0].getStyle();\r\n features.forEach(function (feature) {\r\n const textStyle = TC.Util.extend({}, self.styles.text, style);\r\n style.label = text;\r\n style.labelOffset = textStyle.labelOffset;\r\n style.fontColor = textStyle.fontColor;\r\n style.fontSize = textStyle.fontSize;\r\n style.labelOutlineColor = textStyle.labelOutlineColor;\r\n style.labelOutlineWidth = textStyle.labelOutlineWidth;\r\n feature.setStyle(style);\r\n });\r\n }\r\n return self;\r\n };\r\n\r\n ctlProto.getAttributeDisplayTarget = function () {\r\n return this._attributesSection;\r\n };\r\n\r\n ctlProto.displayAttributes = function () {\r\n const self = this;\r\n const selectedFeatures = self.getSelectedFeatures();\r\n const feature = selectedFeatures[selectedFeatures.length - 1];\r\n if (feature) {\r\n self.getRenderedHtml(self.CLASS + '-attr', { data: feature.getData() }, function (html) {\r\n const attributesSection = self.getAttributeDisplayTarget();\r\n attributesSection.innerHTML = html;\r\n attributesSection.classList.remove(TC.Consts.classes.HIDDEN);\r\n self._editAttrBtn.classList.add(TC.Consts.classes.ACTIVE);\r\n\r\n attributesSection.querySelector(`${self.CLASS}-btn-attr-ok`).addEventListener(TC.Consts.event.CLICK, function (e) {\r\n self._onAttrOK();\r\n }, { passive: true });\r\n\r\n attributesSection.querySelector(`.${self.modifyControl.CLASS}-btn-attr-cancel`).addEventListener(TC.Consts.event.CLICK, function () {\r\n self.closeAttributes();\r\n }, { passive: true });\r\n });\r\n }\r\n };\r\n\r\n ctlProto.closeAttributes = function () {\r\n const self = this;\r\n self._attributesSection.classList.add(TC.Consts.classes.HIDDEN);\r\n self._editAttrBtn.classList.remove(TC.Consts.classes.ACTIVE);\r\n };\r\n\r\n ctlProto.toggleAttributes = function () {\r\n const self = this;\r\n if (self._editAttrBtn.classList.toggle(TC.Consts.classes.ACTIVE)) {\r\n self.displayAttributes();\r\n }\r\n else {\r\n self.closeAttributes();\r\n }\r\n };\r\n\r\n ctlProto._onAttrOK = function () {\r\n const self = this;\r\n const feature = self.getSelectedFeatures()[0];\r\n if (feature) {\r\n const data = {};\r\n self.getAttributeDisplayTarget().querySelectorAll('input').forEach(function (input) {\r\n data[input.getAttribute('name')] = input.value;\r\n });\r\n feature.setData(data);\r\n self.trigger(TC.Consts.event.FEATUREMODIFY, { feature: feature, layer: self.layer });\r\n self.closeAttributes();\r\n }\r\n };\r\n\r\n ctlProto.joinFeatures = function (features) {\r\n const self = this;\r\n if (self.geometryType === TC.Consts.geom.MULTIPOLYLINE ||\r\n self.geometryType === TC.Consts.geom.MULTIPOLYGON ||\r\n self.geometryType === TC.Consts.geom.MULTIPOINT) {\r\n self._joinedFeatureAttributes = [];\r\n let newFeature;\r\n if (features.length > 1) {\r\n var geometries = features.map(function (elm) {\r\n self._joinedFeatureAttributes.push(elm.getData());\r\n return elm.geometry;\r\n });\r\n var newGeometry = geometries.reduce(function (a, b) {\r\n return a.concat(b);\r\n });\r\n newFeature = new features[0].constructor(newGeometry);\r\n for (var i = 0, len = features.length; i < len; i++) {\r\n var feature = features[i];\r\n self.layer.removeFeature(feature);\r\n self.trigger(TC.Consts.event.FEATUREREMOVE, { feature: feature });\r\n }\r\n self.layer.addFeature(newFeature).then(function (feat) {\r\n self.setSelectedFeatures([newFeature]);\r\n self.trigger(TC.Consts.event.FEATUREADD, { feature: feat });\r\n feat.showPopup(self.attributeEditor);\r\n });\r\n }\r\n setFeatureSelectedState(self, [newFeature]);\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst Modify = TC.control.Modify;\r\nexport default Modify;","\r\n/**\r\n * Opciones de control de obtención de información de entidades de mapa en el que el método de selección es dibujar una \r\n * geometría en el mapa. El control ofrece como resultados todas las entidades que se intersecan con esa geometría.\r\n * Las geometrías de selección pueden ser puntos, líneas o polígonos.\r\n * \r\n * Este control utiliza las funcionalidades de los servicios OGC para realizar su cometido. En concreto, la selección por punto \r\n * hace uso de la petición `GetFeatureInfo` de los servicios WMS. Por otro lado, las selecciones por línea y polígono emplean la petición\r\n * `GetFeature` de los servicios WFS. Esto implica que en este caso debe existir un servicio WFS asociado al servicio WMS que ofrezca \r\n * los mismos datos que este. Servidores de mapas como GeoServer tienen este comportamiento por defecto. \r\n * El control infiere la URL del servicio WFS a partir de la [operación DescribeLayer del estándar WMS-SLD](https://docs.geoserver.org/latest/en/user/services/wms/reference.html#describelayer).\r\n * @typedef MultiFeatureInfoOptions\r\n * @extends FeatureInfoOptions\r\n * @see MapControlOptions\r\n * @property {boolean} [active] - Si se establece a `true`, el control asociado está activo, es decir, responde a las pulsaciones hechas en el mapa desde el que se carga.\r\n * Como máximo puede haber solamente un control activo en el mapa en cada momento.\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {MultiFeatureInfoModeOptions} [modes] - Opciones de configuración de los modos disponibles de selección.\r\n * @property {boolean} [persistentHighlights] - Cuando el control muestra los resultados de la consulta, si el servicio lo soporta, mostrará resaltadas sobre el mapa las geometrías\r\n * de las entidades geográficas de la respuesta. Si el valor de esta propiedad es `true`, dichas geometrías se quedan resaltadas en el mapa indefinidamente. \r\n * En caso contrario, las geometrías resaltadas se borran en el momento en que se cierra el bocadillo de resultados o se hace una nueva consulta.\r\n * @example [Ver en vivo](../examples/cfg.MultiFeatureInfoOptions.html) {@lang html} \r\n *
              \r\n * \r\n */\r\n\r\n/**\r\n * Opciones de los distintos modos de consulta espacial (por click, por línea o por recinto)\r\n * del [control de obtención de información de entidades de mapa por geometría]{@linkplain MultiFeatureInfoOptions}.\r\n * @typedef MultiFeatureInfoModeOptions\r\n * @see MultiFeatureInfoOptions\r\n * @property {boolean|FeatureInfoOptions} [point=true] - Si se establece a un valor verdadero, el control permite la selección de entidades por punto.\r\n * @property {boolean|GeometryFeatureInfoOptions} [polyline] - Si se establece a un valor verdadero, el control permite la selección de entidades por línea.\r\n * @property {boolean|GeometryFeatureInfoOptions} [polygon=true] - Si se establece a un valor verdadero, el control permite la selección de entidades por polígono.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport FeatureInfoCommons from './FeatureInfoCommons';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.FeatureInfoCommons = FeatureInfoCommons;\r\n\r\n(function () {\r\n TC.control.MultiFeatureInfo = function () {\r\n var self = this;\r\n TC.Control.apply(self, arguments);\r\n self.modes = self.options.modes || {};\r\n if (typeof self.modes[TC.Consts.geom.POINT] === 'undefined') {\r\n self.modes[TC.Consts.geom.POINT] = true;\r\n }\r\n if (typeof self.modes[TC.Consts.geom.POLYGON] === 'undefined') {\r\n self.modes[TC.Consts.geom.POLYGON] = true;\r\n }\r\n self.featureInfoControl = null;\r\n self.lineFeatureInfoControl = null;\r\n self.polygonFeatureInfoControl = null;\r\n self.featureInfoControls = [];\r\n self.lastCtrlActive = null;\r\n self.popup = null;\r\n self.exportsState = false; // Los controles que exportan estado son los hijos\r\n };\r\n\r\n TC.inherit(TC.control.MultiFeatureInfo, TC.control.FeatureInfoCommons);\r\n\r\n var ctlProto = TC.control.MultiFeatureInfo.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-m-finfo';\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"3\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"5\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"selectionBy\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":32}}})) + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"pointSelectValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":3,\"column\":254}}})) != null ? stack1 : \"\") + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"lineSelectValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":4,\"column\":241}}})) != null ? stack1 : \"\") + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"polygonSelectValue\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":4},\"end\":{\"line\":5,\"column\":258}}})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n \\r\\n
              \\r\\n\";},\"useData\":true}\r\n\r\n const mergeOptions = function (opt1, opt2) {\r\n if (opt1) {\r\n if (opt1 === true) {\r\n opt1 = {};\r\n }\r\n return TC.Util.extend(true, opt1, opt2);\r\n }\r\n return opt1;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n self.div.querySelectorAll('input[type=radio]').forEach(function (input) {\r\n input.checked = false;\r\n });\r\n\r\n\r\n return new Promise(function (resolve, _reject) {\r\n const ctlPromises = [TC.Control.prototype.register.call(self, map)];\r\n const styles = self.options.styles || {};\r\n const pointMode = self.modes[TC.Consts.geom.POINT];\r\n const polylineMode = self.modes[TC.Consts.geom.POLYLINE];\r\n const polygonMode = self.modes[TC.Consts.geom.POLYGON];\r\n if (pointMode) {\r\n ctlPromises.push(map.addControl(\"featureInfo\", mergeOptions(self.modes[TC.Consts.geom.POINT],\r\n {\r\n id: self.getUID(),\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share\r\n })).then(function (control) {\r\n self.featureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n if (self.modes[TC.Consts.geom.POLYLINE]) {\r\n ctlPromises.push(map.addControl(\"lineFeatureInfo\", mergeOptions(self.modes[TC.Consts.geom.POLYLINE],\r\n {\r\n id: self.getUID(),\r\n active: polylineMode.active,\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share,\r\n style: polylineMode.filterStyle || styles.line\r\n })).then(function (control) {\r\n self.lineFeatureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n if (self.modes[TC.Consts.geom.POLYGON]) {\r\n ctlPromises.push(map.addControl(\"polygonFeatureInfo\", mergeOptions(self.modes[TC.Consts.geom.POLYGON],\r\n {\r\n id: self.getUID(),\r\n active: polygonMode.active,\r\n displayMode: self.options.displayMode,\r\n persistentHighlights: self.options.persistentHighlights,\r\n share: self.options.share,\r\n style: polygonMode.filterStyle || styles.polygon\r\n })).then(function (control) {\r\n self.polygonFeatureInfoControl = control;\r\n self.featureInfoControls.push(control);\r\n return control;\r\n }));\r\n }\r\n\r\n map.on(`${TC.Consts.event.LAYERADD} ${TC.Consts.event.LAYERREMOVE} ${TC.Consts.event.LAYERVISIBILITY}`, function (_e) {\r\n self.updateUI();\r\n });\r\n\r\n map.on(`${TC.Consts.event.CONTROLACTIVATE} ${TC.Consts.event.CONTROLDEACTIVATE}`, function (e) {\r\n if (e.control === self.featureInfoControl || e.control === self.lineFeatureInfoControl || e.control === self.polygonFeatureInfoControl) {\r\n self.updateUI();\r\n }\r\n });\r\n\r\n Promise.all(ctlPromises).then(function () {\r\n if (self.featureInfoControl) {\r\n self.featureInfoControl.activate();\r\n self.lastCtrlActive = self.featureInfoControl;\r\n }\r\n self.updateUI();\r\n resolve(self);\r\n });\r\n });\r\n\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n var renderData = { controlId: self.id };\r\n if (self.modes[TC.Consts.geom.POINT]) {\r\n renderData.pointSelectValue = TC.Consts.geom.POINT;\r\n }\r\n if (self.modes[TC.Consts.geom.POLYLINE]) {\r\n renderData.lineSelectValue = TC.Consts.geom.POLYLINE;\r\n }\r\n if (self.modes[TC.Consts.geom.POLYGON]) {\r\n renderData.polygonSelectValue = TC.Consts.geom.POLYGON;\r\n }\r\n return self._set1stRenderPromise(self.renderData(renderData,\r\n function () {\r\n var changeEvent = function () {\r\n switch (this.value) {\r\n case TC.Consts.geom.POLYLINE:\r\n //modo línea\r\n self.lineFeatureInfoControl.activate();\r\n self.lastCtrlActive = self.lineFeatureInfoControl;\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n //modo poligono\r\n self.polygonFeatureInfoControl.activate();\r\n self.lastCtrlActive = self.polygonFeatureInfoControl;\r\n break;\r\n default:\r\n //modo point\r\n self.featureInfoControl.activate();\r\n self.lastCtrlActive = self.featureInfoControl;\r\n break;\r\n }\r\n };\r\n self.div.querySelectorAll('input[type=radio]').forEach(function (input) {\r\n input.addEventListener('change', changeEvent);\r\n });\r\n\r\n //URI bind del click del boton de borrar seleccionadas\r\n const delFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-remove`);\r\n delFeaturesBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.featureInfoControls.forEach(ctl => {\r\n ctl.resultsLayer.features.slice().forEach(f => ctl.downplayFeature(f));\r\n ctl.filterLayer.features.slice().forEach(f => f.layer.removeFeature(f));\r\n });\r\n }, { passive: true });\r\n\r\n self.div.querySelector(`.${self.CLASS}-btn-dl`).addEventListener(TC.Consts.event.CLICK, async function (_e) {\r\n const downloadDialog = await self.getDownloadDialog();\r\n let options = {\r\n title: self.getLocaleString(\"featureInfo\") + \" - \" + self.getLocaleString(\"download\"),\r\n fileName: self._getFileName()\r\n };\r\n\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n downloadDialog.open(Array.prototype.concat.apply([], self.featureInfoControls.map(ctl => ctl.resultsLayer.features)), options);\r\n }, { passive: true });\r\n\r\n self.map\r\n //.on(TC.Consts.event.FEATUREINFO, function () {\r\n // delFeaturesBtn.disabled = false;\r\n //})\r\n //.on(TC.Consts.event.NOFEATUREINFO, function (e) {\r\n // if (e.control && e.control.filterFeature) {\r\n // delFeaturesBtn.disabled = false;\r\n // }\r\n //})\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.featureInfoControls.some(ctl => ctl.resultsLayer === e.layer || ctl.filterLayer === e.layer)) {\r\n self.updateUI();\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREADD + ' ' + TC.Consts.event.FEATURESADD, function (e) {\r\n if (self.featureInfoControls.some(ctl => ctl.resultsLayer === e.layer || ctl.filterLayer === e.layer)) {\r\n self.updateUI();\r\n }\r\n });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n if (self.lastCtrlActive)\r\n self.lastCtrlActive.activate();\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n self.lastCtrlActive.deactivate(false);\r\n };\r\n\r\n ctlProto.updateUI = function () {\r\n const self = this;\r\n self.renderPromise().then(function () {\r\n const enabled = self.map.workLayers.some(l => l.type === TC.Consts.layerType.WMS && l.getVisibility());\r\n self.div.querySelectorAll('input').forEach(function (input) {\r\n input.disabled = !enabled;\r\n });\r\n if (self.featureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${TC.Consts.geom.POINT}]`);\r\n if (input) {\r\n input.checked = self.featureInfoControl.isActive;\r\n }\r\n }\r\n if (self.lineFeatureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${TC.Consts.geom.POLYLINE}]`);\r\n if (input) {\r\n input.checked = self.lineFeatureInfoControl.isActive;\r\n }\r\n }\r\n if (self.polygonFeatureInfoControl) {\r\n const input = self.div.querySelector(`input[value=${TC.Consts.geom.POLYGON}]`);\r\n if (input) {\r\n input.checked = self.polygonFeatureInfoControl.isActive;\r\n }\r\n }\r\n\r\n const persistentHighlights = self.featureInfoControls.some(c => c.options.persistentHighlights);\r\n const featuresUnavailable = self.featureInfoControls.every(ctl => (!ctl.resultsLayer || ctl.resultsLayer.features.length === 0) &&\r\n (!ctl.filterLayer || ctl.filterLayer.features.length === 0));\r\n const delFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-remove`);\r\n delFeaturesBtn.classList.toggle(TC.Consts.classes.HIDDEN, !persistentHighlights);\r\n delFeaturesBtn.disabled = featuresUnavailable;\r\n const dlFeaturesBtn = self.div.querySelector(`.${self.CLASS}-btn-dl`);\r\n dlFeaturesBtn.classList.toggle(TC.Consts.classes.HIDDEN, !persistentHighlights);\r\n dlFeaturesBtn.disabled = featuresUnavailable;\r\n\r\n // Hack para compensar bug de Edge: no se actualiza el estilo al cambiar el estado del radio.\r\n const displayValue = self.div.style.display;\r\n self.div.style.display = 'none';\r\n if (displayValue) {\r\n self.div.style.display = displayValue;\r\n }\r\n else {\r\n self.div.style.removeProperty('display');\r\n }\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst MultiFeatureInfo = TC.control.MultiFeatureInfo;\r\nexport default MultiFeatureInfo;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.NavBar = function () {\r\n TC.Control.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.NavBar, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.NavBar.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-nav';\r\n\r\n ctlProto.render = function () {\r\n var self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.NavBar(self);\r\n }\r\n return self._set1stRenderPromise(Promise.resolve());\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n self.wrap.register(map);\r\n\r\n if (self.options.home === undefined || self.options.home) {\r\n map.addControl('navBarHome');\r\n } \r\n\r\n //esta chama es para que la primera vez se ajuste la barrita de escala (debido a otra chama con el maxResolution, que es culpa de OL)\r\n map.loaded(function () {\r\n self.wrap.refresh();\r\n }); \r\n\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst NavBar = TC.control.NavBar;\r\nexport default NavBar;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.NavBarHome = function () {\r\n TC.Control.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.NavBarHome, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.NavBarHome.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-nav-home';\r\n\r\n ctlProto.render = function () {\r\n var self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.NavBarHome(self);\r\n }\r\n return Promise.resolve();\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n self.wrap.register(map); \r\n\r\n map.on(TC.Consts.event.PROJECTIONCHANGE, function (e) {\r\n const crs = e.newCrs;\r\n var bottomLeft = TC.Util.reproject([map.options.initialExtent[0], map.options.initialExtent[1]], map.options.crs, crs);\r\n var topRight = TC.Util.reproject([map.options.initialExtent[2], map.options.initialExtent[3]], map.options.crs, crs);\r\n self.wrap.setInitialExtent([bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]);\r\n });\r\n\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst NavBarHome = TC.control.NavBarHome;\r\nexport default NavBarHome;","\r\n/**\r\n * Opciones del creador de mapas sin conexión.\r\n * \r\n * Para que ese control funcione correctamente, es necesario cumplir estos dos requisitos:\r\n * 1. Debe instalarse en el ámbito de la aplicación que contiene el visor el _[Service Worker](https://developer.mozilla.org/es/docs/Web/API/Service_Worker_API)_ creado para el funcionamiento de este control.\r\n * Para ello basta con copiar el archivo [tc-cb-service-worker.js](https://raw.githubusercontent.com/sitna/api-sitna/master/TC/workers/tc-cb-service-worker.js) a la carpeta raíz de dicha aplicación.\r\n * 2. Debe incluirse en la carpeta de la aplicación un archivo de texto con el nombre `manifest.appcache`. \r\n * Este archivo es un documento de manifiesto de [caché de aplicaciones](https://developer.mozilla.org/es/docs/Web/HTML/Using_the_application_cache#habilitando_cach%C3%A9_de_aplicaciones)[*] \r\n * que contiene una lista de las URL de todos los recursos que tienen que almacenarse en la cache del navegador y así asegurar la carga de la aplicación\r\n * en ausencia de conexión a Internet.\r\n * \r\n * [*]: El estándar de caché de aplicaciones está obsoleto hoy en día y este control no hace realmente uso de él para ejercer su función, pero para funcionar necesita\r\n * una lista de todos los recursos a cargar en la cache del navegador, y un manifiesto de caché de aplicaciones es precisamente una lista de ese tipo. \r\n * Se usa este formato por compatibilidad hacia atrás y por ser de un estándar bien documentado.\r\n * @typedef OfflineMapMakerOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {number} [averageTileSize=31000] - Tamaño medio estimado en bytes para cada una de las teselas del mapa. Este valor se utiliza para estimar el tamaño total que tendrá en disco el mapa sin conexión.\r\n * @property {HTMLElement|string} [offlineMapHintDiv] - Elemento del DOM en el que crear el indicador de que se está en un mapa offline. Si no se especifica dicho indicador se mostrará superpuesto al área del mapa.\r\n * @example [Ver en vivo](../examples/cfg.OfflineMapMakerOptions.html) {@lang html}\r\n *
              \r\n * \r\n * @example Documento de manifiesto [manifest.appcache](../examples/manifest.appcache) {@lang plain}\r\n * CACHE MANIFEST\r\n * # Documento de manifiesto para el ejemplo de uso del control offlineMapMaker\r\n *\r\n * CACHE:\r\n * cfg.MapControlOptions.offlineMapMaker.html\r\n * examples.css\r\n * examples.js\r\n * ../\r\n * ../TC/css/tcmap.css\r\n * ../TC/resources/es-ES.json\r\n * ../TC/config/browser-versions.js\r\n * ../TC/layout/responsive/style.css\r\n * ../TC/workers/tc-caps-web-worker.js\r\n * ../TC/css/fonts/sitna.woff\r\n * ../TC/css/fonts/mapskin.woff\r\n * ../TC/layout/responsive/fonts/fontawesome-webfont.woff?v=4.5.0\r\n * ../TC/css/img/thumb-orthophoto.jpg\r\n * ../TC/css/img/thumb-bta.png\r\n * ../TC/css/img/thumb-basemap.png\r\n * ../TC/css/img/thumb-cadaster.png\r\n * layout/ctl-container/config.json\r\n * layout/ctl-container/style.css\r\n * layout/ctl-container/script.js\r\n * layout/ctl-container/markup.html\r\n * layout/ctl-container/resources/es-ES.json\r\n * https://idena.navarra.es/ogc/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport SWCacheClient from './SWCacheClient';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.SWCacheClient = SWCacheClient;\r\n\r\n(function () {\r\n\r\n TC.Consts.classes.CONNECTION_OFFLINE = TC.Consts.classes.CONNECTION_OFFLINE || 'tc-conn-offline';\r\n TC.Consts.classes.CONNECTION_WIFI = TC.Consts.classes.CONNECTION_WIFI || 'tc-conn-wifi';\r\n TC.Consts.classes.CONNECTION_MOBILE = TC.Consts.classes.CONNECTION_MOBILE || 'tc-conn-mobile';\r\n TC.Consts.classes.OFFLINE = TC.Consts.classes.OFFLINE || 'tc-offline';\r\n\r\n var ALREADY_EXISTS = 'already_exists';\r\n\r\n var requestManifest = function () {\r\n return new Promise(function (resolve, reject) {\r\n const manifestFile = document.documentElement.getAttribute('manifest') || 'manifest.appcache';\r\n TC.ajax({\r\n url: TC.Util.addURLParameters(manifestFile, { ts: Date.now() }),\r\n method: 'GET',\r\n responseType: 'text'\r\n }).then(function (response) {\r\n let data = response.data.normalize();\r\n TC.loadJS(\r\n !window.hex_md5,\r\n [TC.apiLocation + TC.Consts.url.HASH],\r\n function () {\r\n var hash = hex_md5(data);\r\n var idxEnd = data.indexOf('NETWORK:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n idxEnd = data.indexOf('FALLBACK:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n idxEnd = data.indexOf('SETTINGS:');\r\n if (idxEnd >= 0) {\r\n data = data.substr(0, idxEnd);\r\n }\r\n var lines = data.split(/[\\n\\r]/).filter(function (elm) {\r\n return elm.length > 0 && elm.indexOf('#') !== 0 && elm !== 'CACHE:';\r\n });\r\n // Eliminamos la primera línea porque siempre es CACHE MANIFEST\r\n lines.shift();\r\n resolve({\r\n hash: hash,\r\n urls: lines\r\n });\r\n }\r\n );\r\n }).catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n };\r\n\r\n TC.control.OfflineMapMaker = function () {\r\n var self = this;\r\n\r\n TC.control.SWCacheClient.apply(this, arguments);\r\n\r\n var cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n DRAW: cs + '-draw',\r\n DRAWING: cs + '-drawing',\r\n PROGRESS: cs + '-progress',\r\n NEW: cs + '-new',\r\n LIST: cs + '-list',\r\n LISTITEM: cs + '-list > li',\r\n OKBTN: cs + '-btn-ok',\r\n NEWBTN: cs + '-btn-new',\r\n SAVEBTN: '.tc-btn-save',\r\n CANCELBTN: '.tc-btn-cancel',\r\n EDITBTN: '.tc-btn-edit',\r\n VIEWBTN: '.tc-btn-view',\r\n DELETEBTN: '.tc-btn-delete',\r\n TILECOUNT: cs + '-tile-count',\r\n NAMETB: cs + '-txt-name',\r\n TEXTBOX: 'input.tc-textbox',\r\n EXIT: cs + '-link-exit',\r\n OFFPANEL: cs + '-off-panel',\r\n RESOLUTIONPANEL: cs + '-res-panel',\r\n BLLIST: cs + '-bl-list',\r\n BLLISTITEM: cs + '-bl-list > li',\r\n BLLISTTEXT: cs + '-bl-panel-txt',\r\n RNGMAXRES: cs + '-rng-maxres',\r\n SEARCH: cs + '-map-available-srch',\r\n EMPTYLIST: cs + '-map-available-empty',\r\n OFFLINEHIDDEN: '[data-no-cb]'\r\n };\r\n\r\n self.storedMaps = [];\r\n\r\n const mapDefString = TC.Util.getParameterByName(self.MAP_DEFINITION_PARAM_NAME);\r\n const extentString = TC.Util.getParameterByName(self.MAP_EXTENT_PARAM_NAME);\r\n self.mapIsOffline = !!mapDefString;\r\n if (mapDefString) {\r\n self.currentMapDefinition = JSON.parse(window.atob(decodeURIComponent(mapDefString)));\r\n }\r\n if (extentString) {\r\n self.currentMapExtent = getExtentFromString(extentString);\r\n }\r\n\r\n // Comprobación de disponibilidad de localStorage\r\n try {\r\n self.localStorage = window.localStorage;\r\n const key = \"__delete_me__\";\r\n self.localStorage.setItem(key, key);\r\n self.localStorage.removeItem(key);\r\n }\r\n catch (e) {\r\n self.localStorage = null;\r\n TC.error(self.getLocaleString('couldNotAccessLocalStorage'));\r\n }\r\n\r\n // Carga de mapas guardados\r\n if (self.localStorage) {\r\n for (var i = 0, len = self.localStorage.length; i < len; i++) {\r\n var key = self.localStorage.key(i);\r\n if (key.indexOf(self.LOCAL_STORAGE_KEY_PREFIX) === 0 && key !== self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME + '.hash') {\r\n // Es un nombre de mapa y no es el hash de integridad de la cache root\r\n var values = self.localStorage.getItem(key).split(\" \");\r\n var extent = getExtentFromString(values.shift());\r\n var name = values.join(\" \");\r\n var map = {\r\n name: name,\r\n extent: extent,\r\n url: decodeURIComponent(key.substr(self.LOCAL_STORAGE_KEY_PREFIX.length))\r\n };\r\n self.storedMaps.push(map);\r\n }\r\n }\r\n self.storedMaps.sort(function (a, b) {\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n var options = TC.Util.extend({}, arguments.length > 1 ? arguments[1] : arguments[0]);\r\n self._dialogDiv = TC.Util.getDiv(options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n if (self.mapIsOffline) {\r\n document.querySelectorAll(self._selectors.OFFLINEHIDDEN).forEach(function (elm) {\r\n elm.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n }\r\n\r\n TC.Control.apply(self, arguments);\r\n self.wrap = new TC.wrap.control.OfflineMapMaker(self);\r\n\r\n self.isDownloading = false;\r\n self.baseLayers = [];\r\n\r\n self.options.averageTileSize = self.options.averageTileSize || TC.Cfg.averageTileSize;\r\n self.requestSchemas = [];\r\n self.minResolution = 0;\r\n self.currentMap = null;\r\n\r\n self._loadedCount = 0;\r\n\r\n // Actualización del enlace al modo online\r\n // Parche para detectar cambios en el hash. Lo usamos para actualizar los enlaces a los idiomas\r\n var pushState = history.pushState;\r\n history.pushState = function (_state) {\r\n var result;\r\n //if (typeof history.onpushstate == \"function\") {\r\n // history.onpushstate({ state: state });\r\n //}\r\n result = pushState.apply(history, arguments);\r\n if (self._offlineMapHintDiv) {\r\n self._offlineMapHintDiv.querySelector(self._selectors.EXIT).setAttribute('href', self.getOnlineMapUrl());\r\n }\r\n return result;\r\n };\r\n\r\n // Detección de estado de conexión\r\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {};\r\n var onlineHandler = function () {\r\n if (self._offlineMapHintDiv) {\r\n const panel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n panel.classList.remove(\r\n TC.Consts.classes.CONNECTION_OFFLINE,\r\n TC.Consts.classes.CONNECTION_MOBILE,\r\n TC.Consts.classes.CONNECTION_WIFI);\r\n\r\n var type = connection.type;\r\n switch (type) {\r\n case 1:\r\n case 2:\r\n case undefined:\r\n panel.classList.add(TC.Consts.classes.CONNECTION_WIFI);\r\n break;\r\n default:\r\n panel.classList.add(TC.Consts.classes.CONNECTION_MOBILE);\r\n break;\r\n }\r\n }\r\n };\r\n if (connection.addEventListener) {\r\n connection.addEventListener('typechange', onlineHandler);\r\n }\r\n window.addEventListener('online', onlineHandler);\r\n window.addEventListener('offline', function () {\r\n if (self._offlineMapHintDiv) {\r\n const panel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n panel.classList.add(TC.Consts.classes.CONNECTION_OFFLINE);\r\n panel.classList.remove(TC.Consts.classes.CONNECTION_MOBILE, TC.Consts.classes.CONNECTION_WIFI);\r\n }\r\n });\r\n };\r\n\r\n TC.inherit(TC.control.OfflineMapMaker, TC.control.SWCacheClient);\r\n\r\n var ctlProto = TC.control.OfflineMapMaker.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-omm';\r\n ctlProto.MAP_DEFINITION_PARAM_NAME = \"map-def\";\r\n ctlProto.MAP_EXTENT_PARAM_NAME = \"map-extent\";\r\n ctlProto.LOCAL_STORAGE_KEY_PREFIX = \"TC.offline.map.\";\r\n ctlProto.ROOT_CACHE_NAME = \"root\";\r\n ctlProto.SERVICE_WORKER_FLAG = 'sw';\r\n ctlProto._states = {\r\n READY: 'ready',\r\n EDIT: 'editing',\r\n DOWNLOADING: 'downloading',\r\n DELETING: 'deleting'\r\n };\r\n ctlProto._actions = {\r\n CREATE: 'create',\r\n DELETE: 'delete'\r\n };\r\n ctlProto.offlineControls = [\r\n 'attribution',\r\n 'basemapSelector',\r\n 'offlineMapMaker',\r\n 'click',\r\n 'coordinates',\r\n 'dataLoader',\r\n 'draw',\r\n 'edit',\r\n 'fileImport',\r\n 'fullScreen',\r\n 'geolocation',\r\n 'loadingIndicator',\r\n 'measure',\r\n 'modify',\r\n 'navBar',\r\n 'popup',\r\n 'print',\r\n 'scale',\r\n 'scaleBar',\r\n 'scaleSelector',\r\n 'state',\r\n 'workLayerManager'\r\n ];\r\n\r\n TC.Consts.event.MAPCACHEDOWNLOAD = TC.Consts.event.MAPCACHEDOWNLOAD || 'mapcachedownload.tc';\r\n TC.Consts.event.MAPCACHEDELETE = TC.Consts.event.MAPCACHEDELETE || 'mapcachedelete.tc';\r\n TC.Consts.event.MAPCACHEPROGRESS = TC.Consts.event.MAPCACHEPROGRESS || 'mapcacheprogress.tc';\r\n TC.Consts.event.MAPCACHEERROR = TC.Consts.event.MAPCACHEERROR || 'mapcacheerror.tc';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { return \" disabled\";},\"3\":function(container,depth0,helpers,partials,data) { return \" hidden\";},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-omm-map-node\"),depth0,{\"name\":\"tc-ctl-omm-map-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"offlineMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":26}}})) + \"

              \\r\\n
              \\r\\n
              \\r\\n \\r\\n \\r\\n
                \\r\\n
              • \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"cb.noMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":89},\"end\":{\"line\":7,\"column\":109}}})) + \"
              • \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"storedMaps\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":8},\"end\":{\"line\":11,\"column\":17}}})) != null ? stack1 : \"\") + \"
              \\r\\n
              \\r\\n \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"cb.DownloadingMap\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":11},\"end\":{\"line\":22,\"column\":44}}})) + \":

              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n \\r\\n
              \\r\\n
              \\r\\n\";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-map-node'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            • \\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"name\") : depth0), depth0)) + \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
            • \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-bl-node'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
            • \\r\\n \\r\\n
            • \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"newOfflineMap\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":40}}})) + \"

              \\r\\n
              \\r\\n
              \\r\\n
              \\r\\n \\r\\n
              \\r\\n

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"availableOfflineMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":20},\"end\":{\"line\":11,\"column\":51}}})) + \"

              \\r\\n

              \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"selectAtLeastOne\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":51},\"end\":{\"line\":12,\"column\":78}}})) + \"

              \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n

                \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"maxRes\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":20},\"end\":{\"line\":16,\"column\":37}}})) + \"

                \\r\\n
                \\r\\n \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n \\r\\n \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-off-panel'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"offlineMap\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":31}}})) + \" \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"returnToOnlineMaps\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":130},\"end\":{\"line\":2,\"column\":159}}})) + \"\\r\\n
                \";},\"useData\":true}\r\n\r\n const getExtentFromString = function (str) {\r\n return decodeURIComponent(str).split(',').map(function (elm) {\r\n return parseFloat(elm);\r\n });\r\n };\r\n\r\n const setDownloadingState = function (ctl) {\r\n ctl._state = ctl._states.DOWNLOADING;\r\n TC.Util.closeModal();\r\n ctl.showDownloadProgress(0, 1);\r\n ctl.div.querySelector(ctl._selectors.NEW).classList.add(TC.Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.DRAWING).classList.add(TC.Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.PROGRESS).classList.remove(TC.Consts.classes.HIDDEN);\r\n ctl._dialogDiv.querySelector(ctl._selectors.OKBTN).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.NEWBTN).disabled = true;\r\n ctl.layer.clearFeatures();\r\n ctl.boxDraw.cancel();\r\n };\r\n\r\n const setDeletingState = function (ctl) {\r\n ctl._state = ctl._states.DELETING;\r\n ctl.showDownloadProgress(0, 1);\r\n ctl.div.querySelector(ctl._selectors.DRAWING).classList.add(TC.Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.PROGRESS).classList.add(TC.Consts.classes.HIDDEN);\r\n ctl.div.querySelector(ctl._selectors.NEW).classList.remove(TC.Consts.classes.HIDDEN);\r\n ctl.div.querySelectorAll(ctl._selectors.LISTITEM).forEach(function (li) {\r\n li.classList.add(TC.Consts.classes.DISABLED);\r\n });\r\n ctl._dialogDiv.querySelector(ctl._selectors.OKBTN).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.NEWBTN).disabled = false;\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).innerHTML = '';\r\n ctl.boxDraw.cancel();\r\n };\r\n\r\n const setNameEditingState = function (ctl, li) {\r\n li.querySelector('span').classList.add(TC.Consts.classes.HIDDEN);\r\n const textbox = li.querySelector(ctl._selectors.TEXTBOX);\r\n textbox.classList.remove(TC.Consts.classes.HIDDEN);\r\n textbox.value = li.querySelector('span a').innerHTML;\r\n textbox.focus();\r\n li.querySelector(ctl._selectors.SAVEBTN).classList.remove(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.CANCELBTN).classList.remove(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.EDITBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.VIEWBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.DELETEBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n const setNameReadyState = function (ctl, li) {\r\n li.querySelector('span').classList.remove(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.TEXTBOX).classList.add(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.SAVEBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.CANCELBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.EDITBTN).classList.remove(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.VIEWBTN).classList.remove(TC.Consts.classes.HIDDEN);\r\n li.querySelector(ctl._selectors.DELETEBTN).classList.remove(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n var formatNumber = function (number) {\r\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \".\");\r\n };\r\n\r\n var updateResolutions = function (ctl, options) {\r\n var opts = options || {};\r\n const resDiv = ctl._dialogDiv.querySelector(ctl._classSelector + '-res');\r\n const range = ctl._dialogDiv.querySelector(ctl._selectors.RNGMAXRES);\r\n var resolutions = ctl.getResolutions();\r\n var resText, resLevel, resLeft;\r\n if (resolutions.length) {\r\n range.setAttribute('max', resolutions.length - 1);\r\n if (ctl.minResolution) {\r\n // Si ya había resolución previa y no se ha tocado el slider, se actualiza su valor\r\n if (opts.rangeValue === undefined) {\r\n for (var i = 0, len = resolutions.length; i < len; i++) {\r\n if (ctl.minResolution >= resolutions[i]) {\r\n range.value = i;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (opts.rangeValue === undefined) {\r\n // Si no había resolución previa se selecciona un valor inicial igual a la resolución actual\r\n const currentResolution = ctl.map.getResolution();\r\n range.value = resolutions.filter(r => r > currentResolution).length;\r\n }\r\n }\r\n resLevel = parseInt(range.value);\r\n var resValue = Math.floor(new Number(resolutions[resLevel]) * 1000) / 1000;\r\n resText = ctl.getLocaleString('metersPerPixel', {\r\n value: resValue.toLocaleString((ctl.map ? ctl.map.options.locale : TC.Cfg.locale).replace('_', '-'))\r\n });\r\n resLeft = (resLevel + 1) * 100 / (resolutions.length + 1) + '%';\r\n range.disabled = false;\r\n ctl.minResolution = resolutions[range.value];\r\n }\r\n else {\r\n resLevel = 0;\r\n resText = '';\r\n range.value = 0;\r\n resLeft = '0';\r\n ctl.minResolution = 0;\r\n range.disabled = true;\r\n }\r\n ctl._dialogDiv.querySelector(ctl._selectors.RESOLUTIONPANEL).classList.toggle(TC.Consts.classes.HIDDEN, !!range.disabled);\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).classList.toggle(TC.Consts.classes.HIDDEN, !!range.disabled);\r\n\r\n resDiv.style.left = resLeft;\r\n resDiv.innerHTML = resText;\r\n };\r\n\r\n const findTileMatrixLimits = function (schema, resolution) {\r\n var result = null;\r\n for (var i = 0, len = schema.tileMatrixLimits.length; i < len; i++) {\r\n result = schema.tileMatrixLimits[i];\r\n if (result.res <= resolution) {\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n const updateThumbnails = function (ctl) {\r\n ctl._dialogDiv.querySelectorAll(ctl._classSelector + '-bl-node input[type=checkbox]').forEach(function (cb, idx) {\r\n if (cb.checked) {\r\n var schema = ctl.requestSchemas.filter(function (elm) {\r\n return elm.layerId === cb.value;\r\n })[0];\r\n if (schema) {\r\n var tml = findTileMatrixLimits(schema, ctl.minResolution);\r\n if (tml) {\r\n const tmsKey = '{TileMatrixSet}';\r\n const tmKey = '{TileMatrix}';\r\n const trKey = '{TileRow}';\r\n const tcKey = '{TileCol}';\r\n var url = schema.url;\r\n if (url.indexOf(tmKey) < 0) {\r\n // Caso KVP\r\n var qsIdx = url.indexOf('?');\r\n if (qsIdx >= 0) {\r\n url = url.substr(0, qsIdx);\r\n }\r\n for (var j = 0, lenj = ctl.baseLayers.length; j < lenj; j++) {\r\n var l = ctl.baseLayers[j];\r\n if (l.id === schema.layerId) {\r\n url = url + '?layer=' + l.layerNames + '&style=default&tilematrixset=' + tmsKey +\r\n '&Service=WMTS&Request=GetTile&Version=1.0.0&Format=' + l.format +\r\n '&TileMatrix=' + tmKey + '&TileRow=' + trKey + '&TileCol=' + tcKey;\r\n break;\r\n }\r\n }\r\n }\r\n while (cb && cb.tagName !== 'LABEL') {\r\n cb = cb.parentElement;\r\n }\r\n if (cb) {\r\n cb.style.backgroundSize = 'auto';\r\n cb.style.backgroundPosition = 'left bottom';\r\n cb.style.backgroundImage = 'url(' + url\r\n .replace(tmsKey, schema.tileMatrixSet)\r\n .replace(tmKey, tml.mId)\r\n .replace(trKey, tml.rt)\r\n .replace(tcKey, tml.cl) + ')';\r\n }\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n const formatSize = function (ctl, size) {\r\n var result;\r\n if (size < 1) {\r\n result = ctl.getLocaleString('lessThan1Mb');\r\n }\r\n else {\r\n result = ctl.getLocaleString('approxXMb', { quantity: formatNumber(size) });\r\n }\r\n return result;\r\n };\r\n\r\n const showEstimatedMapSize = function (ctl) {\r\n var text = '';\r\n ctl.tileCount = 0;\r\n for (var i = 0, ii = ctl.requestSchemas.length; i < ii; i++) {\r\n var schema = ctl.requestSchemas[i];\r\n for (var j = 0, jj = schema.tileMatrixLimits.length; j < jj; j++) {\r\n var tml = schema.tileMatrixLimits[j];\r\n if (tml.res < ctl.minResolution) {\r\n break;\r\n }\r\n ctl.tileCount += (tml.cr - tml.cl + 1) * (tml.rb - tml.rt + 1);\r\n }\r\n }\r\n if (ctl.tileCount) {\r\n ctl.estimatedMapSize = Math.round(ctl.tileCount * ctl.options.averageTileSize / 1048576);\r\n text = ctl.getLocaleString('xTiles', { quantity: formatNumber(ctl.tileCount) }) + ' (' + formatSize(ctl, ctl.estimatedMapSize) + ')';\r\n }\r\n ctl._dialogDiv.querySelector(ctl._selectors.TILECOUNT).innerHTML = text;\r\n };\r\n\r\n const getListElementByMapName = function (ctl, name) {\r\n const lis = ctl.div.querySelectorAll(ctl._selectors.LISTITEM);\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n const anchor = li.querySelector('a');\r\n if (anchor && anchor.innerHTML === name) {\r\n return li;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const getListElementByMapUrl = function (ctl, url) {\r\n var hashIdx = url.indexOf('#');\r\n if (hashIdx >= 0) {\r\n url = url.substr(0, hashIdx);\r\n }\r\n const lis = ctl.div.querySelectorAll(ctl._selectors.LISTITEM);\r\n for (var i = 0, len = lis.length; i < len; i++) {\r\n const li = lis[i];\r\n const anchor = li.querySelector('a');\r\n if (anchor && anchor.getAttribute('href') === url) {\r\n return li;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n var saveMapToStorage = function (ctl, map) {\r\n var result = false;\r\n if (ctl.localStorage) {\r\n ctl.localStorage.setItem(ctl.LOCAL_STORAGE_KEY_PREFIX + encodeURIComponent(map.url), map.extent + \" \" + map.name);\r\n result = true;\r\n }\r\n return result;\r\n };\r\n\r\n var removeMapFromStorage = function (ctl, url) {\r\n var result = false;\r\n if (ctl.localStorage) {\r\n ctl.localStorage.removeItem(ctl.LOCAL_STORAGE_KEY_PREFIX + encodeURIComponent(url));\r\n result = true;\r\n }\r\n return result;\r\n };\r\n\r\n const addMap = function (ctl) {\r\n const map = ctl.currentMap;\r\n if (saveMapToStorage(ctl, map)) {\r\n ctl.getRenderedHtml(ctl.CLASS + '-map-node', { name: map.name, url: map.url }, function (html) {\r\n const parser = new DOMParser();\r\n ctl.div.querySelector(ctl._selectors.LIST).appendChild(parser.parseFromString(html, 'text/html').body.firstChild);\r\n ctl.div.querySelector(ctl._selectors.EMPTYLIST).setAttribute('hidden', 'hidden');\r\n ctl.div.querySelector(ctl._selectors.SEARCH).disabled = false;\r\n });\r\n ctl.storedMaps.push(map);\r\n }\r\n };\r\n\r\n const removeMap = function (ctl, url) {\r\n const map = ctl.findStoredMap({ url: url });\r\n if (map) {\r\n if (removeMapFromStorage(ctl, url)) {\r\n const li = getListElementByMapName(ctl, map.name);\r\n if (li) {\r\n li.parentElement.removeChild(li);\r\n }\r\n }\r\n var idx = ctl.storedMaps.indexOf(map);\r\n ctl.storedMaps.splice(idx, 1);\r\n if (!ctl.storedMaps.length) {\r\n ctl.div.querySelector(ctl._selectors.SEARCH).disabled = true;\r\n ctl.div.querySelector(ctl._selectors.EMPTYLIST).removeAttribute('hidden');\r\n }\r\n\r\n ctl.layer.features\r\n .filter(f => f.data.map === map.name)\r\n .forEach(f => ctl.layer.removeFeature(f));\r\n\r\n return map.name;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n var renderObject = { storedMaps: self.storedMaps, listId: self.CLASS + '-list-' + TC.getUID() };\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.preventDefault();\r\n this.selectionStart = 0;\r\n this.selectionEnd = this.value.length;\r\n this.focus();\r\n\r\n });\r\n }).then(function () {\r\n self.renderData(renderObject, function () {\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).addEventListener(TC.Consts.event.CLICK, function () {\r\n self.generateCache();\r\n }, { passive: true });\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).addEventListener('input', function () {\r\n self._updateReadyState();\r\n });\r\n self.div.querySelector(self._selectors.NEWBTN).addEventListener(TC.Consts.event.CLICK, function () {\r\n self.setEditState();\r\n }, { passive: true });\r\n self.div.querySelector(self._classSelector + '-btn-cancel-draw').addEventListener(TC.Consts.event.CLICK, function () {\r\n self.setReadyState();\r\n }, { passive: true });\r\n\r\n self.div.querySelector(self._classSelector + '-btn-cancel-dl').addEventListener(TC.Consts.event.CLICK, function () {\r\n self.cancelCacheRequest();\r\n }, { passive: true });\r\n\r\n const list = self.div.querySelector(self._selectors.LIST);\r\n list.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.DELETEBTN, function (e) {\r\n self.startDeleteMap(e.target.parentElement.querySelector('a').innerHTML);\r\n }), { passive: true });\r\n list.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.EDITBTN, function (e) {\r\n setNameEditingState(self, e.target.parentElement);\r\n }), { passive: true });\r\n list.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.CANCELBTN, function (e) {\r\n const li = e.target.parentElement;\r\n li.querySelector(self._selectors.TEXTBOX).value = li.querySelector('a').innerHTML;\r\n setNameReadyState(self, li);\r\n }), { passive: true });\r\n list.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.SAVEBTN, function (e) {\r\n const li = e.target.parentElement;\r\n setNameReadyState(self, li);\r\n const anchor = li.querySelector('a');\r\n const newName = li.querySelector(self._selectors.TEXTBOX).value;\r\n const map = self.findStoredMap({ url: anchor.getAttribute('href') });\r\n if (map) {\r\n map.name = newName;\r\n anchor.innerHTML = newName;\r\n anchor.setAttribute('title', newName);\r\n saveMapToStorage(self, map);\r\n }\r\n }), { passive: true });\r\n list.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector(self._selectors.VIEWBTN, function (e) {\r\n const btn = e.target;\r\n var showExtent = !btn.classList.contains(TC.Consts.classes.ACTIVE);\r\n self.div.querySelectorAll(self._selectors.VIEWBTN).forEach(b => b.classList.remove(TC.Consts.classes.ACTIVE));\r\n const mapName = btn.parentElement.querySelector('a').innerHTML;\r\n if (mapName) {\r\n var map = self.findStoredMap({ name: mapName });\r\n if (map) {\r\n var extent = getExtentFromString(map.extent);\r\n self.layer.clearFeatures();\r\n if (showExtent) {\r\n self.layer.addPolygon(\r\n [\r\n [\r\n [extent[0], extent[1]],\r\n [extent[0], extent[3]],\r\n [extent[2], extent[3]],\r\n [extent[2], extent[1]]\r\n ]\r\n ]\r\n , {\r\n showsPopup: false,\r\n data: {\r\n map: map.name\r\n }\r\n }).then(function () {\r\n self.layer.map.zoomToFeatures(self.layer.features);\r\n });\r\n btn.classList.add(TC.Consts.classes.ACTIVE);\r\n btn.setAttribute('title', self.getLocaleString('removeMapExtent'));\r\n }\r\n }\r\n }\r\n }), { passive: true });\r\n\r\n var _filter = function (searchTerm) {\r\n searchTerm = searchTerm.toLowerCase();\r\n //tc-ctl-omm-map-available-empty\r\n const lis = self.div.querySelectorAll(self._selectors.LISTITEM);\r\n lis.forEach(function (li) {\r\n li.style.display = 'none';\r\n });\r\n const mapLis = [];\r\n lis.forEach(function (li) {\r\n if (li.matches('li:not([class]),li.' + TC.Consts.classes.ACTIVE)) {\r\n mapLis.push(li);\r\n }\r\n });\r\n\r\n if (searchTerm.length === 0) {\r\n mapLis.forEach(function (li) {\r\n li.style.removeProperty('display');\r\n });\r\n self.div.querySelector(self._classSelector + '-map-search-icon').style.visibility = 'visible';\r\n } else {\r\n self.div.querySelector(self._classSelector + '-map-search-icon').style.visibility = 'hidden';\r\n var r = new RegExp(searchTerm, 'i');\r\n mapLis.forEach(function (li) {\r\n li.style.display = r.test(li.querySelector('a').textContent) ? '' : 'none';\r\n });\r\n\r\n if (!mapLis.some(function (li) {\r\n return !li.hidden;\r\n })) {\r\n lis.forEach(function (li) {\r\n if (li.matches('[class^=\"tc-ctl-omm-map-not\"]')) {\r\n li.style.removeProperty('display');\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n const trackSearch = self.div.querySelector(self._selectors.SEARCH);\r\n const searchListener = function () {\r\n _filter(this.value.toLowerCase().trim());\r\n };\r\n trackSearch.addEventListener('keyup', searchListener);\r\n trackSearch.addEventListener('search', searchListener);\r\n\r\n self._dialogDiv.querySelector(self._selectors.BLLIST).addEventListener('change', TC.EventTarget.listenerBySelector('input[type=checkbox]', function (e) {\r\n const checkbox = e.target;\r\n if (checkbox.checked) {\r\n self.baseLayers.push(self.map.getLayer(checkbox.value));\r\n }\r\n else {\r\n for (var i = 0, ii = self.baseLayers.length; i < ii; i++) {\r\n const bl = self.baseLayers[i];\r\n if (bl.id === checkbox.value) {\r\n self.baseLayers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n self.updateRequestSchemas();\r\n updateResolutions(self);\r\n updateThumbnails(self);\r\n self._updateReadyState();\r\n showEstimatedMapSize(self);\r\n }));\r\n\r\n const range = self._dialogDiv.querySelector(self._selectors.RNGMAXRES);\r\n const rangeListener = function (e) {\r\n updateResolutions(self, {\r\n rangeValue: e.target.value\r\n });\r\n updateThumbnails(self);\r\n showEstimatedMapSize(self);\r\n };\r\n range.addEventListener('input', rangeListener);\r\n range.addEventListener('change', rangeListener);\r\n\r\n const li = getListElementByMapUrl(self, location.href);\r\n if (li) {\r\n li.classList.add(TC.Consts.classes.ACTIVE);\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n })\r\n .then(function () {\r\n resolve();\r\n })\r\n .catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n\r\n // Control para evitar que se cancele una descarga de cache al salir de la página\r\n window.addEventListener('beforeunload', function (e) {\r\n if (self.isDownloading) {\r\n var msg = self.getLocaleString('cb.mapDownloading.warning');\r\n e.returnValue = msg;\r\n return msg;\r\n }\r\n }, true);\r\n }));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n var self = this;\r\n\r\n const result = TC.control.SWCacheClient.prototype.register.call(self, map);\r\n\r\n self.getServiceWorker().then(\r\n function () {\r\n navigator.serviceWorker.ready.then(function () {\r\n navigator.serviceWorker.addEventListener('message', function (event) {\r\n switch (event.data.event) {\r\n case 'progress':\r\n self.trigger(TC.Consts.event.MAPCACHEPROGRESS, {\r\n url: event.data.name,\r\n requestId: event.data.requestId,\r\n loaded: event.data.count,\r\n total: event.data.total\r\n });\r\n break;\r\n case 'cached':\r\n self.trigger(TC.Consts.event.MAPCACHEDOWNLOAD, {\r\n url: event.data.name,\r\n requestId: event.data.requestId\r\n });\r\n break;\r\n case 'deleted':\r\n self.trigger(TC.Consts.event.MAPCACHEDELETE, { url: event.data.name });\r\n break;\r\n case 'error':\r\n if (event.data.action === self._actions.CREATE) {\r\n TC.error(self.getLocaleString('cb.resourceDownload.error', { url: event.data.url }));\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n });\r\n\r\n if (navigator.onLine) {\r\n // Cacheamos mediante service worker las URLs del manifiesto\r\n requestManifest().then(function (obj) {\r\n const hashStorageKey = self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME + '.hash';\r\n var hash;\r\n if (self.localStorage) {\r\n hash = self.localStorage.getItem(hashStorageKey);\r\n }\r\n if (hash !== obj.hash) {\r\n const firstLoad = !hash;\r\n const requestId = self.cacheUrlList(obj.urls);\r\n const onCacheDownload = function (e) {\r\n if (e.requestId === requestId) {\r\n if (self.localStorage) {\r\n self.localStorage.setItem(hashStorageKey, obj.hash);\r\n }\r\n if (!firstLoad) {\r\n TC.confirm(self.getLocaleString('newAppVersionAvailable'), function () {\r\n location.reload();\r\n });\r\n }\r\n self.off(TC.Consts.event.MAPCACHEDOWNLOAD, onCacheDownload);\r\n }\r\n };\r\n self.on(TC.Consts.event.MAPCACHEDOWNLOAD, onCacheDownload);\r\n }\r\n });\r\n }\r\n },\r\n function (error) {\r\n self.renderPromise().then(function () {\r\n const container = self.div.querySelector(`.${self.CLASS}-new`);\r\n const warning = document.createElement('div');\r\n warning.classList.add('tc-alert', 'alert-warning');\r\n const header = document.createElement('p');\r\n const text = document.createElement('strong');\r\n text.innerHTML = self.getLocaleString('offlineMap.error');\r\n header.appendChild(text);\r\n const reason = document.createElement('p');\r\n reason.innerHTML = error.message;\r\n warning.appendChild(header);\r\n warning.appendChild(reason);\r\n container.querySelector(self._selectors.NEWBTN).classList.add(TC.Consts.classes.HIDDEN);\r\n container.appendChild(warning);\r\n });\r\n }\r\n ).catch(() => console.log(\"No SW available: no events handled\"));\r\n\r\n if (self.mapIsOffline) {\r\n map.div.classList.add(TC.Consts.classes.OFFLINE);\r\n\r\n // Si no está especificado, el panel de aviso offline se cuelga del div del mapa\r\n self._offlineMapHintDiv = TC.Util.getDiv(self.options.offlineMapHintDiv);\r\n if (!self.options.offlineMapHintDiv) {\r\n map.div.appendChild(self._offlineMapHintDiv);\r\n }\r\n self.getRenderedHtml(self.CLASS + '-off-panel', { url: self.getOnlineMapUrl() }, function (html) {\r\n self._offlineMapHintDiv.innerHTML = html;\r\n if (!navigator.onLine) {\r\n const offPanel = self._offlineMapHintDiv.querySelector(self._selectors.OFFPANEL);\r\n offPanel.classList.add(TC.Consts.classes.CONNECTION_OFFLINE);\r\n offPanel.classList.remove(TC.Consts.classes.CONNECTION_MOBILE, TC.Consts.classes.CONNECTION_WIFI);\r\n }\r\n self._offlineMapHintDiv.querySelector(self._selectors.EXIT).addEventListener(TC.Consts.event.CLICK, function (e) {\r\n TC.confirm(self.getLocaleString('offlineMapExit.confirm'),\r\n null,\r\n function () {\r\n e.preventDefault();\r\n });\r\n });\r\n });\r\n }\r\n\r\n const drawId = self.getUID();\r\n const layerId = self.getUID();\r\n self.layerPromise = map.addLayer({\r\n id: layerId,\r\n type: TC.Consts.layerType.VECTOR,\r\n stealth: true,\r\n owner: self,\r\n styles: {\r\n line: map.options.styles.line\r\n }\r\n });\r\n self.layer = null;\r\n Promise.all([\r\n self.layerPromise,\r\n self.renderPromise(),\r\n map.addControl('draw', {\r\n id: drawId,\r\n div: self.div.querySelector(self._selectors.DRAW),\r\n mode: TC.Consts.geom.RECTANGLE,\r\n persistent: false\r\n })\r\n ]).then(function (objects) {\r\n const layer = self.layer = objects[0];\r\n const boxDraw = self.boxDraw = objects[2];\r\n boxDraw.setLayer(layer);\r\n boxDraw\r\n .on(TC.Consts.event.DRAWSTART, function (e) {\r\n self.map.toast(self.getLocaleString('clickOnDownloadAreaOppositeCorner'), { type: TC.Consts.msgType.INFO });\r\n })\r\n .on(TC.Consts.event.DRAWEND, function (e) {\r\n var points = e.feature.geometry[0];\r\n var pStart = points[0];\r\n var pEnd = points[2];\r\n var minx = Math.min(pStart[0], pEnd[0]);\r\n var maxx = Math.max(pStart[0], pEnd[0]);\r\n var miny = Math.min(pStart[1], pEnd[1]);\r\n var maxy = Math.max(pStart[1], pEnd[1]);\r\n self.setExtent([minx, miny, maxx, maxy]);\r\n const checkboxes = self._dialogDiv.querySelectorAll('input[type=checkbox]');\r\n checkboxes.forEach(function (checkbox) {\r\n // Comprobamos que la extensión del mapa está disponible a alguna resolución\r\n const layer = self.map.getLayer(checkbox.value);\r\n var li = checkbox;\r\n while (li && li.tagName !== 'LI') {\r\n li = li.parentElement;\r\n }\r\n if (layer.wrap.getCompatibleMatrixSets(map.crs).includes(layer.matrixSet)) {\r\n const tml = self.wrap.getRequestSchemas({\r\n extent: self.extent,\r\n layers: [layer]\r\n })[0].tileMatrixLimits;\r\n\r\n li.classList.toggle(TC.Consts.classes.HIDDEN, !tml.length);\r\n }\r\n else {\r\n li.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n });\r\n const visibleLi = self._dialogDiv.querySelector(self._selectors.BLLISTITEM + ':not(.' + TC.Consts.classes.HIDDEN + ')');\r\n self._dialogDiv.querySelector(self._selectors.BLLISTTEXT).innerHTML = self.getLocaleString(visibleLi ? 'selectAtLeastOne' : 'cb.noMapsAtSelectedExtent');\r\n\r\n updateThumbnails(self);\r\n showEstimatedMapSize(self);\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-dialog'), {\r\n openCallback: function () {\r\n setTimeout(function () { // Este timeout evita el pulsado accidental cuando sale el diálogo\r\n checkboxes.forEach(function (cb) {\r\n cb.disabled = false;\r\n });\r\n }, 100);\r\n var time;\r\n if (Date.prototype.toLocaleString) {\r\n var opt = {};\r\n opt.year = opt.month = opt.day = opt.hour = opt.minute = opt.second = 'numeric';\r\n time = new Date().toLocaleString(self.map.options.locale.replace('_', '-'), opt);\r\n }\r\n else {\r\n time = new Date().toString();\r\n }\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value = time;\r\n self._updateReadyState();\r\n },\r\n closeCallback: function () {\r\n checkboxes.forEach(function (cb) {\r\n cb.disabled = true;\r\n });\r\n self.boxDraw.layer.clearFeatures();\r\n }\r\n });\r\n });\r\n\r\n map.on(TC.Consts.event.CONTROLDEACTIVATE, function (e) {\r\n if (boxDraw === e.control) {\r\n if (self._state === self._states.EDITING) {\r\n self.setReadyState();\r\n }\r\n }\r\n });\r\n\r\n });\r\n\r\n var addRenderedListNode = function (layer) {\r\n var result = false;\r\n const blList = self._dialogDiv.querySelector(self._selectors.BLLIST);\r\n const isLayerAdded = function () {\r\n return !!blList.querySelector('li[data-layer-uid=\"' + layer.id + '\"]');\r\n };\r\n var isValidLayer = layer.type === TC.Consts.layerType.WMTS && !layer.mustReproject;\r\n if (TC.Util.detectSafari() && TC.Util.detectIOS()) {\r\n isValidLayer = isValidLayer && TC.Util.isSameOrigin(layer.url);\r\n }\r\n if (isValidLayer && !isLayerAdded()) {\r\n result = true;\r\n self.getRenderedHtml(self.CLASS + '-bl-node', layer, function (html) {\r\n if (!isLayerAdded()) {\r\n const parser = new DOMParser();\r\n blList.appendChild(parser.parseFromString(html, 'text/html').body.firstChild);\r\n }\r\n });\r\n }\r\n return result;\r\n };\r\n\r\n const addLayer = function (layer) {\r\n if (layer.isBase && self.mapIsOffline) {\r\n // Capamos las resoluciones de la capa\r\n const resolutions = layer.getResolutions();\r\n if (resolutions) {\r\n const cachedResolutions = resolutions.filter(r => r >= self.currentMapDefinition.res);\r\n if (cachedResolutions.length) {\r\n layer.setResolutions(cachedResolutions);\r\n }\r\n }\r\n }\r\n //14/03/2019 GLS: esperamos a que se haya renderizado el dialogo para obtener la lista\r\n self.renderPromise().then(function () {\r\n addRenderedListNode(layer);\r\n });\r\n };\r\n\r\n map\r\n .on(TC.Consts.event.LAYERADD, function (e) {\r\n addLayer(e.layer);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n //14/03/2019 GLS: esperamos a que se haya renderizado el dialogo para obtener la lista\r\n self.renderPromise().then(function () {\r\n const layer = e.layer;\r\n if (layer.type === TC.Consts.layerType.WMTS) {\r\n const li = self._dialogDiv\r\n .querySelector(self._selectors.BLLIST)\r\n .querySelector('li[data-layer-uid=\"' + layer.id + '\"]');\r\n li.parentElement.removeChild(li);\r\n }\r\n });\r\n })\r\n .on(TC.Consts.event.PROJECTIONCHANGE, function (_e) {\r\n map.baseLayers.forEach(l => addLayer(l));\r\n });\r\n\r\n map.ready(function () {\r\n if (self.mapIsOffline) {\r\n // Deshabilitamos los controles que no son usables en modo offline\r\n var offCtls = [];\r\n self.offlineControls.forEach(function (offCtl) {\r\n offCtl = offCtl.substr(0, 1).toUpperCase() + offCtl.substr(1);\r\n offCtls = offCtls.concat(map.getControlsByClass('TC.control.' + offCtl));\r\n });\r\n\r\n const disablingReason = self.getLocaleString('thisControlCannotBeUsedInOfflineMode');\r\n\r\n map.controls.forEach(function enableOrDisable(control) {\r\n if (offCtls.indexOf(control) < 0) {\r\n control.disable({ reason: disablingReason });\r\n }\r\n });\r\n\r\n document.querySelectorAll(self._selectors.OFFLINEHIDDEN).forEach(function (elm) {\r\n elm.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n }\r\n });\r\n\r\n map.loaded(function () {\r\n\r\n self.layerPromise.then(function (layer) {\r\n map.putLayerOnTop(layer);\r\n });\r\n\r\n self.renderPromise().then(function () {\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = false;\r\n map.baseLayers.forEach(addRenderedListNode);\r\n });\r\n\r\n if (self.mapIsOffline) {\r\n const mapDef = self.currentMapDefinition;\r\n const isSameLayer = function (layer, mapDefLayer) {\r\n const layerUrl = layer.url.indexOf('//') === 0 ? location.protocol + layer.url : layer.url;\r\n return layerUrl === mapDef.url[mapDefLayer.urlIdx] && layer.layerNames === mapDefLayer.id && layer.matrixSet === mapDef.tms[mapDefLayer.tmsIdx];\r\n };\r\n // Añadimos al mapa las capas guardadas que no están por defecto\r\n const missingLayers = map.options.availableBaseLayers\r\n .filter((abl) => abl.type === TC.Consts.layerType.WMTS) // Capas cacheables\r\n .filter((abl) => { // Que estén en el mapa sin conexión\r\n return mapDef.layers.some((l) => isSameLayer(abl, l));\r\n })\r\n .filter((abl) => { // Que no estén en las capas por defecto\r\n return !map.baseLayers.some((l) => l.id === abl.id);\r\n });\r\n Promise.all(missingLayers.map((layer) => {\r\n return map.addLayer(TC.Util.extend({}, layer, { isBase: true }));\r\n })).finally(function () {\r\n // Obtenemos las capas cacheadas\r\n const cachedLayers = [];\r\n for (var i = 0, ii = mapDef.layers.length; i < ii; i++) {\r\n for (var j = 0, jj = map.baseLayers.length; j < jj; j++) {\r\n const baseLayer = map.baseLayers[j];\r\n if (baseLayer && baseLayer.type === TC.Consts.layerType.WMTS && isSameLayer(baseLayer, mapDef.layers[i])) {\r\n cachedLayers.push(baseLayer);\r\n break;\r\n }\r\n }\r\n }\r\n if (cachedLayers.length) {\r\n map.setBaseLayer(cachedLayers[0], function () {\r\n // Quitamos las capas no disponibles (la capa en blanco la mantenemos)\r\n for (var i = map.baseLayers.length - 1; i >= 0; i--) {\r\n const baseLayer = map.baseLayers[i];\r\n if (baseLayer && baseLayer.type !== TC.Consts.layerType.VECTOR && !cachedLayers.includes(baseLayer)) {\r\n map.removeLayer(baseLayer);\r\n }\r\n }\r\n\r\n map.setExtent(self.currentMapExtent, { animate: false });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n self\r\n .on(TC.Consts.event.MAPCACHEDOWNLOAD, function (e) {\r\n self.isDownloading = false;\r\n const removeHash = function (url) {\r\n const hashIdx = url.indexOf('#');\r\n return hashIdx >= 0 ? url.substr(0, hashIdx) : url;\r\n };\r\n const url = removeHash(e.url);\r\n const li = getListElementByMapUrl(self, url);\r\n if (li && !self.serviceWorkerEnabled) {\r\n // Se ha descargado un mapa cuando se quería borrar. Pasa cuando la cache ya estaba borrada pero la entrada en localStorage no.\r\n li.classList.remove(TC.Consts.classes.DISABLED);\r\n TC.alert(self.getLocaleString('cb.delete.error'));\r\n }\r\n else {\r\n if (self.currentMap && url === self.currentMap.url) {\r\n addMap(self);\r\n map.toast(self.getLocaleString('mapDownloaded', { mapName: self.currentMap.name }));\r\n }\r\n }\r\n self.currentMap = null;\r\n self.setReadyState();\r\n })\r\n .on(TC.Consts.event.MAPCACHEDELETE, function (e) {\r\n self.isDownloading = false;\r\n var mapName = removeMap(self, e.url) || self.currentMap && self.currentMap.name;\r\n self.currentMap = null;\r\n if (mapName) {\r\n map.toast(self.getLocaleString('mapDeleted', { mapName: mapName }));\r\n }\r\n self.setReadyState();\r\n })\r\n .on(TC.Consts.event.MAPCACHEPROGRESS, function (e) {\r\n var total = e.total;\r\n if (!total && self.requestSchemas) {\r\n total = self.requestSchemas[0].tileCount;\r\n }\r\n var loaded = e.loaded;\r\n if (loaded) {\r\n self._loadedCount = loaded;\r\n }\r\n else {\r\n self._loadedCount += 1;\r\n loaded = self._loadedCount;\r\n }\r\n self.showDownloadProgress(loaded, total);\r\n })\r\n .on(TC.Consts.event.MAPCACHEERROR, function (e) {\r\n self.isDownloading = false;\r\n self.setReadyState();\r\n var msg = self.getLocaleString('cb.mapCreation.error');\r\n var handleError = true;\r\n switch (e.reason) {\r\n case 'quota':\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonQuota');\r\n break;\r\n case 'resource':\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonResource');\r\n break;\r\n case 'manifest':\r\n if (e.status == '410') {\r\n removeMap(self, e.url);\r\n }\r\n handleError = false;\r\n break;\r\n case ALREADY_EXISTS:\r\n msg += '. ' + self.getLocaleString('cb.mapCreation.error.reasonAlreadyExists');\r\n break;\r\n default:\r\n break;\r\n }\r\n if (handleError) {\r\n if (TC.Util.detectIE()) {\r\n TC.error(msg);\r\n TC.alert(self.getLocaleString('cb.mapCreation.error.reasonEdge'));\r\n }\r\n else {\r\n TC.alert(msg);\r\n }\r\n }\r\n self.currentMap = null;\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.setExtent = function (extent) {\r\n var self = this;\r\n if (Array.isArray(extent) && extent.length >= 4) {\r\n self.extent = extent;\r\n self.updateRequestSchemas();\r\n }\r\n };\r\n\r\n ctlProto._updateReadyState = function () {\r\n const self = this;\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled =\r\n !self.extent ||\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value.length === 0 ||\r\n self._dialogDiv.querySelector(self._selectors.RNGMAXRES).disabled;\r\n };\r\n\r\n ctlProto.setReadyState = function () {\r\n const self = this;\r\n self._state = self._states.READY;\r\n self.showDownloadProgress(0, 1);\r\n self.div.querySelector(self._selectors.DRAWING).classList.add(TC.Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.PROGRESS).classList.add(TC.Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.NEW).classList.remove(TC.Consts.classes.HIDDEN);\r\n self.div.querySelectorAll(self._selectors.LISTITEM).forEach(function (li) {\r\n li.classList.remove(TC.Consts.classes.DISABLED);\r\n });\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled = true;\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = false;\r\n self._dialogDiv.querySelector(self._selectors.TILECOUNT).innerHTML = '';\r\n self.extent = null;\r\n self._loadedCount = 0;\r\n if (self.boxDraw) {\r\n self.boxDraw.cancel();\r\n }\r\n };\r\n\r\n ctlProto.setEditState = function () {\r\n const self = this;\r\n self._state = self._states.EDITING;\r\n self.showDownloadProgress(0, 1);\r\n self.div.querySelector(self._selectors.NEW).classList.add(TC.Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.PROGRESS).classList.add(TC.Consts.classes.HIDDEN);\r\n self.div.querySelector(self._selectors.DRAWING).classList.remove(TC.Consts.classes.HIDDEN);\r\n self.map.toast(self.getLocaleString('clickOnDownloadAreaFirstCorner'), { type: TC.Consts.msgType.INFO });\r\n self._dialogDiv.querySelector(self._selectors.OKBTN).disabled = true;\r\n self.div.querySelector(self._selectors.NEWBTN).disabled = true;\r\n self._dialogDiv.querySelector(self._selectors.NAMETB).value = '';\r\n self.boxDraw.activate();\r\n };\r\n\r\n ctlProto.generateCache = function () {\r\n const self = this;\r\n const options = {\r\n mapName: self._dialogDiv.querySelector(self._selectors.NAMETB).value\r\n };\r\n if (self.findStoredMap({ name: options.mapName })) {\r\n TC.alert(self.getLocaleString('cb.mapNameAlreadyExists.error', options));\r\n }\r\n else {\r\n var startRequest = function () {\r\n self.div.querySelector(self._classSelector + '-name').innerHTML = options.mapName;\r\n self.map.toast(self.getLocaleString('downloadingMap', { mapName: options.mapName }));\r\n setDownloadingState(self);\r\n self.requestCache(options);\r\n };\r\n\r\n // Usamos Storage API si existe\r\n if (navigator.storage && navigator.storage.estimate) {\r\n navigator.storage.estimate().then(function (estimate) {\r\n const availableMB = (estimate.quota - estimate.usage) / 1048576;\r\n if (self.estimatedMapSize < availableMB) {\r\n startRequest();\r\n }\r\n else {\r\n TC.confirm(self.getLocaleString('cb.mapCreation.warning.reasonSize', {\r\n mapName: options.mapName,\r\n mapSize: formatSize(self, self.estimatedMapSize),\r\n availableStorage: formatSize(self, Math.round(availableMB))\r\n }), startRequest);\r\n }\r\n });\r\n }\r\n else {\r\n startRequest();\r\n }\r\n }\r\n };\r\n\r\n ctlProto.cacheUrlList = function (urlList, options) {\r\n var self = this;\r\n var opts = options || {};\r\n const requestId = Date.now().toString();\r\n self.createCache(opts.name || self.LOCAL_STORAGE_KEY_PREFIX + self.ROOT_CACHE_NAME, {\r\n requestId: requestId,\r\n urlList: urlList,\r\n silent: opts.silent\r\n });\r\n return requestId;\r\n };\r\n\r\n ctlProto.requestCache = function (options) {\r\n var self = this;\r\n var opts = options || {};\r\n if (self.map) {\r\n var extent = opts.extent || self.extent || self.map.getExtent();\r\n self.updateRequestSchemas({ extent: extent });\r\n\r\n if (self.requestSchemas) {\r\n var filterTml = function (elm, i, arr) {\r\n var result = elm.res >= self.minResolution;\r\n if (!result && i > 0) {\r\n result = arr[i - 1].res > self.minResolution;\r\n }\r\n return result;\r\n };\r\n var trimTml = function (tml) {\r\n return {\r\n mId: tml.mId,\r\n cl: tml.cl,\r\n cr: tml.cr,\r\n rt: tml.rt,\r\n rb: tml.rb\r\n };\r\n };\r\n // Solo mantenemos los esquemas hasta el nivel de resolución mínima o el inmediatamente inferior a ella si no lo tiene\r\n var requestSchemas = self.requestSchemas.map(function (schema) {\r\n return {\r\n layerId: schema.layerId,\r\n tileMatrixSet: schema.tileMatrixSet,\r\n tileMatrixLimits: schema.tileMatrixLimits.filter(filterTml)\r\n };\r\n });\r\n // Actualizamos el extent para que coincida con las teselas del último nivel de los esquemas\r\n // También eliminamos del esquema todo lo irrelevante para la petición\r\n var intersectionExtent = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n requestSchemas.forEach(function updateExtent(rs) {\r\n const tml = rs.tileMatrixLimits[rs.tileMatrixLimits.length - 1];\r\n const unitsPerTile = tml.res * tml.tSize;\r\n intersectionExtent[0] = Math.min(intersectionExtent[0], tml.origin[0] + unitsPerTile * tml.cl);\r\n intersectionExtent[1] = Math.min(intersectionExtent[1], tml.origin[1] - unitsPerTile * (tml.rb + 1));\r\n intersectionExtent[2] = Math.max(intersectionExtent[2], tml.origin[0] + unitsPerTile * (tml.cr + 1));\r\n intersectionExtent[3] = Math.max(intersectionExtent[3], tml.origin[1] - unitsPerTile * tml.rt);\r\n rs.tileMatrixLimits = rs.tileMatrixLimits.map(trimTml);\r\n });\r\n\r\n // Redondeamos previamente para que por errores de redondeo no haya confusión al identificar un mapa\r\n var precision = Math.pow(10, self.map.wrap.isGeo() ? TC.Consts.DEGREE_PRECISION : TC.Consts.METER_PRECISION);\r\n intersectionExtent = intersectionExtent.map(function (elm, idx) {\r\n var round = idx < 3 ? Math.ceil : Math.floor;\r\n return round(elm * precision) / precision;\r\n });\r\n\r\n var mapDefinition = {\r\n bBox: intersectionExtent,\r\n res: Math.floor(self.minResolution * 1000) / 1000, // Redondeamos previamente para que por errores de redondeo no haya confusión al identificar un mapa\r\n url: [],\r\n tms: [],\r\n format: [],\r\n layers: new Array(self.baseLayers.length)\r\n };\r\n self.baseLayers.forEach(function addMapDefinitionLayer(layer, idx) {\r\n var layerUrl = layer.url.indexOf('//') === 0 ? location.protocol + layer.url : layer.url;\r\n var urlIdx = mapDefinition.url.indexOf(layerUrl);\r\n if (urlIdx < 0) {\r\n urlIdx = mapDefinition.url.push(layerUrl) - 1;\r\n }\r\n var tmsIdx = mapDefinition.tms.indexOf(layer.matrixSet);\r\n if (tmsIdx < 0) {\r\n tmsIdx = mapDefinition.tms.push(layer.matrixSet) - 1;\r\n }\r\n var shortFormat = layer.format.substr(layer.format.indexOf('/') + 1);\r\n var formatIdx = mapDefinition.format.indexOf(shortFormat);\r\n if (formatIdx < 0) {\r\n formatIdx = mapDefinition.format.push(shortFormat) - 1;\r\n }\r\n mapDefinition.layers[idx] = {\r\n urlIdx: urlIdx,\r\n id: layer.layerNames,\r\n tmsIdx: tmsIdx,\r\n formatIdx: formatIdx\r\n };\r\n });\r\n\r\n var params = TC.Util.getQueryStringParams();\r\n var e = params[self.MAP_EXTENT_PARAM_NAME] = intersectionExtent.toString();\r\n params[self.MAP_DEFINITION_PARAM_NAME] = btoa(JSON.stringify(mapDefinition));\r\n if (self.serviceWorkerEnabled) {\r\n params[self.SERVICE_WORKER_FLAG] = 1;\r\n }\r\n const u = location.origin + location.pathname + '?' + TC.Util.getParamString(params);\r\n self.currentMap = { name: opts.mapName, extent: e, url: u };\r\n self.isDownloading = true;\r\n\r\n // Guardado mediante service workers\r\n if (self.serviceWorkerEnabled) {\r\n const urlList = [];\r\n for (var i = 0, len = requestSchemas.length; i < len; i++) {\r\n var schema = requestSchemas[i];\r\n var urlPattern = null;\r\n for (var j = 0, lenj = self.baseLayers.length; j < lenj; j++) {\r\n var l = self.baseLayers[j];\r\n if (l.id === schema.layerId) {\r\n urlPattern = self.wrap.getGetTilePattern(l);\r\n if (l.getFallbackLayer) {\r\n // Esto se usa para meter en almacenamiento local el capabilities de la capa de fallback y evitar errores cuando no haya red\r\n l.getFallbackLayer();\r\n }\r\n if (l.thumbnail) {\r\n urlList.push(l.thumbnail);\r\n }\r\n break;\r\n }\r\n }\r\n if (urlPattern) {\r\n for (var k = 0, lenk = schema.tileMatrixLimits.length; k < lenk; k++) {\r\n const tml = schema.tileMatrixLimits[k];\r\n for (var r = tml.rt; r <= tml.rb; r++) {\r\n for (var c = tml.cl; c <= tml.cr; c++) {\r\n urlList.push(urlPattern.replace('{TileMatrixSet}', schema.tileMatrixSet).replace('{TileMatrix}', tml.mId).replace('{TileCol}', c).replace('{TileRow}', r));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n urlList.push(u);\r\n self.cacheUrlList(urlList, { name: u });\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.cancelCacheRequest = function () {\r\n var self = this;\r\n if (self.currentMap) {\r\n self.deleteCache(self.currentMap.url).then(function (obj) {\r\n if (!obj) {\r\n self.currentMap = null;\r\n }\r\n });\r\n }\r\n self.isDownloading = false;\r\n self.setReadyState();\r\n };\r\n\r\n ctlProto.deleteMap = function (name) {\r\n var self = this;\r\n\r\n var map = self.findStoredMap({ name: name });\r\n if (map) {\r\n self.deleteCache(map.url);\r\n }\r\n };\r\n\r\n ctlProto.startDeleteMap = function (name) {\r\n const self = this;\r\n if (navigator.onLine) {\r\n if (name) {\r\n var confirmText = self.getLocaleString('cb.delete.confirm', { mapName: name });\r\n if (!self.serviceWorkerEnabled) {\r\n confirmText = confirmText + \" \" + self.getLocaleString('cb.delete.confirm.connect.warning');\r\n }\r\n if (confirm(confirmText)) {\r\n if (navigator.onLine) {\r\n setDeletingState(self);\r\n self.deleteMap(name);\r\n } else {\r\n TC.alert(self.getLocaleString('cb.delete.conn.alert'));\r\n }\r\n }\r\n }\r\n } else {\r\n TC.alert(self.getLocaleString('cb.delete.conn.alert'));\r\n }\r\n };\r\n\r\n ctlProto.findStoredMap = function (options) {\r\n var self = this;\r\n return self.storedMaps.filter(function (elm) {\r\n var result = true;\r\n if (options.name && options.name !== elm.name) {\r\n result = false;\r\n }\r\n if (result && options.url && options.url !== elm.url) {\r\n result = false;\r\n }\r\n return result;\r\n })[0];\r\n };\r\n\r\n ctlProto.showDownloadProgress = function (current, total) {\r\n const self = this;\r\n const cs = self._classSelector;\r\n const count = self.div.querySelector(cs + '-progress-count');\r\n if (total) {\r\n var percent = Math.min(Math.round(current * 100 / total), 100);\r\n var percentString = percent + '%';\r\n const pr = self.div.querySelector(cs + '-progress-ratio');\r\n if (pr) {\r\n pr.style.width = percentString;\r\n }\r\n if (count) {\r\n count.innerHTML = percentString;\r\n }\r\n }\r\n else {\r\n const pb = self.div.querySelector(cs + '-progress-bar');\r\n if (pb) {\r\n pb.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n if (count) {\r\n count.innerHTML = self.getLocaleString('xFiles', { quantity: current });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.updateRequestSchemas = function (options) {\r\n var self = this;\r\n var opts = options || {};\r\n opts.extent = opts.extent || self.extent;\r\n opts.layers = opts.layers || self.baseLayers;\r\n self.requestSchemas = self.wrap.getRequestSchemas(opts);\r\n return self.requestSchemas;\r\n };\r\n\r\n ctlProto.getResolutions = function () {\r\n const self = this;\r\n var result = [];\r\n\r\n const resolutionMapper = function (tml) {\r\n return tml.res;\r\n };\r\n // Obtenemos un array de resoluciones por cada esquema de cada capa\r\n const allResolutions = self.requestSchemas.map(function (schema) {\r\n return schema.tileMatrixLimits.map(resolutionMapper);\r\n });\r\n\r\n // \"Hacemos la cremallera\" con los arrays de resoluciones de todas las capas y añadimos resoluciones al array de resultados\r\n result = result\r\n .concat.apply(result, allResolutions)\r\n .sort((a, b) => b - a)\r\n .filter((elm, idx, arr) => idx === 0 || arr[idx - 1] !== elm);\r\n return result;\r\n };\r\n\r\n ctlProto.getOnlineMapUrl = function () {\r\n const self = this;\r\n const params = TC.Util.getQueryStringParams();\r\n delete params[self.MAP_DEFINITION_PARAM_NAME];\r\n delete params[self.MAP_EXTENT_PARAM_NAME];\r\n delete params[self.SERVICE_WORKER_FLAG];\r\n var newParams = TC.Util.getParamString(params);\r\n if (newParams.length) {\r\n newParams = '?' + newParams;\r\n }\r\n return location.pathname + newParams + location.hash;\r\n };\r\n\r\n})();\r\n\r\nconst OfflineMapMaker = TC.control.OfflineMapMaker;\r\nexport default OfflineMapMaker;","\r\n/**\r\n * Opciones de control de mapa de situación.\r\n * @typedef OverviewMapOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string|object} layer - Identificador de capa para usar como mapa de fondo u objeto de opciones de capa.\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.OverviewMap = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.isLoaded = false;\r\n\r\n self.layer = null;\r\n};\r\n\r\nTC.inherit(TC.control.OverviewMap, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.OverviewMap.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-ovmap';\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { return \"
                \";},\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const instanceLayer = function (layer) {\r\n var lyr;\r\n\r\n var findLayerById = function (id, layers) {\r\n var result = null;\r\n for (var i = 0; i < layers.length; i++) {\r\n var lyr = layers[i];\r\n var l = lyr.id || lyr;\r\n if (l === id) {\r\n result = lyr;\r\n break;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n if (typeof layer === 'string') {\r\n var lyrObj = findLayerById(layer, map.options.availableBaseLayers);\r\n if (!TC.Util.isPlainObject(lyrObj)) {\r\n lyrObj = findLayerById(layer, map.options.baseLayers);\r\n }\r\n if (TC.Util.isPlainObject(lyrObj)) {\r\n lyr = new TC.layer.Raster(lyrObj);\r\n }\r\n }\r\n else {\r\n if (layer instanceof TC.Layer) {\r\n lyr = layer;\r\n }\r\n else if (layer.type === TC.Consts.layerType.VECTOR || layer.type === TC.Consts.layerType.KML || layer.type === TC.Consts.layerType.WFS) {\r\n lyr = new TC.layer.Vector(layer);\r\n }\r\n else {\r\n lyr = new TC.layer.Raster(layer);\r\n }\r\n }\r\n\r\n return lyr;\r\n };\r\n\r\n const registerLayer = function (layer) {\r\n var lyr;\r\n\r\n lyr = instanceLayer(layer);\r\n\r\n return lyr;\r\n };\r\n\r\n const resetOVMapProjection = function (_e) {\r\n const resetOptions = {};\r\n self.layer.getCapabilitiesPromise().then(function () {\r\n if (!self.layer.isCompatible(map.crs) && self.layer.wrap.getCompatibleMatrixSets(map.crs).length === 0) {\r\n resetOptions.layer = self.layer.getFallbackLayer();\r\n }\r\n self.wrap.reset(resetOptions);\r\n });\r\n };\r\n\r\n const changeBaseLayer = function (e) {\r\n const self = this;\r\n\r\n if (self.map.baseLayer.type === TC.Consts.layerType.WMS || self.map.baseLayer.type === TC.Consts.layerType.WMTS || self.options.layer) {\r\n var newLayer = self.map.baseLayer.overviewMapLayer || self.options.layer;\r\n let ovMapLayer;\r\n if (self.layer.id !== newLayer) {\r\n ovMapLayer = registerLayer(newLayer);\r\n } else if (TC.Consts.event.PROJECTIONCHANGE.includes(e.type)) {\r\n ovMapLayer = self.layer;\r\n }\r\n if (ovMapLayer) {\r\n self.wrap.reset({\r\n layer: ovMapLayer\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n });\r\n }\r\n }\r\n };\r\n\r\n const result = new Promise(function (resolve, reject) {\r\n TC.Control.prototype.register.call(self, map)\r\n .then(function (ctl) {\r\n self.wrap = new TC.wrap.control.OverviewMap(self);\r\n map.loaded(function () {\r\n self.defaultLayer = registerLayer(self.options.layer);\r\n self.layer = registerLayer(map.baseLayer.overviewMapLayer || self.options.layer || map.options.baseLayers[0] || map.options.availableBaseLayers[0]);\r\n\r\n self.wrap.register(map); \r\n\r\n resetOVMapProjection({ crs: map.crs });\r\n\r\n map.on(TC.Consts.event.PROJECTIONCHANGE + ' ' + TC.Consts.event.BASELAYERCHANGE, changeBaseLayer.bind(self));\r\n });\r\n resolve(ctl);\r\n })\r\n .catch(function (err) {\r\n reject(err);\r\n });\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.loaded = function (callback) {\r\n var self = this;\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n if (self.isLoaded && self.map && self.map.isLoaded) {\r\n callback();\r\n }\r\n else {\r\n self.on(TC.Consts.event.MAPLOAD, callback);\r\n }\r\n }\r\n };\r\n\r\n ctlProto.activate = function () {\r\n this.enable();\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n this.disable();\r\n };\r\n\r\n ctlProto.enable = function () {\r\n var self = this;\r\n TC.Control.prototype.enable.call(self);\r\n self.wrap.enable();\r\n };\r\n\r\n ctlProto.disable = function () {\r\n var self = this;\r\n TC.Control.prototype.disable.call(self);\r\n self.wrap.disable();\r\n };\r\n\r\n})();\r\n\r\nconst OverviewMap = TC.control.OverviewMap;\r\nexport default OverviewMap;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport GeometryFeatureInfo from './GeometryFeatureInfo';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.GeometryFeatureInfo = GeometryFeatureInfo;\r\n\r\n(function () {\r\n TC.control.PolygonFeatureInfo = function () {\r\n var self = this;\r\n TC.control.GeometryFeatureInfo.apply(this, arguments);\r\n self.geometryType = TC.Consts.geom.POLYGON;\r\n self.style = TC.Util.extend(true, { strokeColor: self.DEFAULT_STROKE_COLOR, strokeWidth: 2, fillColor: \"#000\", fillOpacity: 0.3 }, self.options.style);\r\n };\r\n\r\n TC.inherit(TC.control.PolygonFeatureInfo, TC.control.GeometryFeatureInfo);\r\n\r\n var ctlProto = TC.control.PolygonFeatureInfo.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-finfo';\r\n\r\n})();\r\n\r\nconst PolygonFeatureInfo = TC.control.PolygonFeatureInfo;\r\nexport default PolygonFeatureInfo;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.Consts.event.POPUP = TC.Consts.event.POPUP || 'popup.tc';\r\nTC.Consts.event.POPUPHIDE = TC.Consts.event.POPUPHIDE || 'popuphide.tc';\r\nTC.Consts.classes.DRAG = TC.Consts.classes.DRAG || 'tc-drag';\r\nTC.Consts.classes.DRAGGED = TC.Consts.classes.DRAGGED || 'tc-dragged';\r\nTC.Consts.classes.DRAGGABLE = TC.Consts.classes.DRAGGABLE || 'tc-draggable';\r\n\r\nTC.control.Popup = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n self.currentFeature = null;\r\n //self.wrap = { popup: null }; \r\n self.wrap = new TC.wrap.control.Popup(self);\r\n};\r\n\r\nTC.inherit(TC.control.Popup, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Popup.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-popup';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { return \" tc-ctl-popup-has-btn\";},\"3\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"5\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"<
                \\r\\n
                \\r\\n
                \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"closeButton\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":6,\"column\":15}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"shareButton\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":8},\"end\":{\"line\":9,\"column\":15}}})) != null ? stack1 : \"\") + \"
                \\r\\n
                \";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n TC.Control.prototype.renderData.call(self, {\r\n closeButton: self.options.closeButton || self.options.closeButton === undefined,\r\n shareButton: self.options.share\r\n })\r\n .then(function addPopup() {\r\n self.popupDiv = self.div.querySelector(`.${ctlProto.CLASS}`);\r\n self.contentDiv = self.popupDiv.querySelector(`.${ctlProto.CLASS}-content`);\r\n self.menuDiv = self.popupDiv.querySelector(`.${ctlProto.CLASS}-menu`);\r\n self.addUIEventListeners();\r\n\r\n self.map.wrap.addPopup(self).then(function endRender() {\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n })\r\n .catch(err => reject(err instanceof Error ? err : Error(err)));\r\n }));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n return new Promise(function (resolve, reject) {\r\n Promise.all([result, self.renderPromise()]).then(function () {\r\n map.on(TC.Consts.event.VIEWCHANGE, function () {\r\n if (map.view === TC.Consts.view.PRINTING) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.LAYERVISIBILITY, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer && !e.layer.getVisibility()) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.LAYERREMOVE + ' ' + TC.Consts.event.FEATURESCLEAR, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.UPDATE, function () {\r\n if (!self.currentFeature || self.currentFeature._visibilityState === TC.Consts.visibility.NOT_VISIBLE) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n map.on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.currentFeature === e.feature) {\r\n if (self.isVisible()) {\r\n self.hide();\r\n }\r\n }\r\n });\r\n\r\n /*\r\n GLS: Controlamos el ancla del popup cuando hay zoom in/out de pantalla o navegador, debería hacerlo OL pero no lo gestiona.\r\n No funciona, sólo salta la primera vez, paso a sobrescribir el método de OL\r\n */\r\n //var config = { attributes: true, attributeFilter: ['style', 'class'], childList: false, subtree: false };\r\n //var observer = new MutationObserver(function (mutationsList, observer) {\r\n // //var positionMutation = mutationsList.filter(function (mutation) {\r\n // // return mutation.type === \"attributes\"\r\n // //}).filter(function (mutation) {\r\n // // return ['top', 'right', 'bottom', 'left', 'style'].indexOf(mutation.attributeName) > -1;\r\n // //});\r\n\r\n // if (mutationsList.length > 0) {\r\n // // me desconecto para no entrar en un bucle infinito\r\n // //observer.disconnect();\r\n\r\n // var top = mutationsList[0].target[mutationsList[0].attributeName].top;\r\n // var right = mutationsList[0].target[mutationsList[0].attributeName].right;\r\n // var bottom = mutationsList[0].target[mutationsList[0].attributeName].bottom;\r\n // var left = mutationsList[0].target[mutationsList[0].attributeName].left;\r\n\r\n // [{ top: top }, { right: right }, { bottom: bottom }, { left: left }].forEach(function (elm) {\r\n // var key = Object.keys(elm)[0];\r\n // if (elm[key].length > 0) {\r\n // document.querySelector('.ol-overlay-container').style[key] = parseFloat(elm[key].replace('px', '')) / window.devicePixelRatio + 'px';\r\n // }\r\n // });\r\n\r\n // // volvemos a observar\r\n // //observer.observe(document.querySelector('.ol-overlay-container'), config);\r\n // }\r\n //});\r\n //observer.observe(document.querySelector('.ol-overlay-container'), config);\r\n\r\n resolve(self);\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n const closeBtn = self.menuDiv.querySelector(`.${self.CLASS}-close`);\r\n if (closeBtn) {\r\n closeBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.hide();\r\n }, { passive: true });\r\n }\r\n const shareBtn = self.menuDiv.querySelector(`.${self.CLASS}-share`);\r\n if (shareBtn) {\r\n shareBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n if (self.caller) {\r\n self.caller.showShareDialog();\r\n }\r\n }, { passive: true });\r\n }\r\n };\r\n\r\n ctlProto.fitToView = function (delayed) {\r\n var self = this;\r\n if (delayed) {\r\n setTimeout(function () {\r\n self.wrap.fitToView();\r\n }, 1000);\r\n }\r\n else {\r\n self.wrap.fitToView();\r\n }\r\n };\r\n\r\n ctlProto.hide = function () {\r\n var self = this;\r\n if (self.map) {\r\n const data = {\r\n control: self,\r\n feature: self.currentFeature\r\n };\r\n self.setDragged(false);\r\n self.map.wrap.hidePopup(self);\r\n self.getContainerElement().innerHTML = '';\r\n self.map.trigger(TC.Consts.event.POPUPHIDE, data);\r\n }\r\n };\r\n\r\n ctlProto.getContainerElement = function () {\r\n return this.contentDiv || null;\r\n };\r\n\r\n ctlProto.getMenuElement = function () {\r\n return this.menuDiv || null;\r\n };\r\n\r\n ctlProto.setDragged = function (dragged) {\r\n const self = this;\r\n self.dragged = dragged;\r\n if (self.popupDiv) {\r\n self.popupDiv.classList.toggle(TC.Consts.classes.DRAGGED, !!dragged);\r\n }\r\n self.wrap.setDragged(dragged);\r\n };\r\n\r\n ctlProto.setDragging = function (dragging) {\r\n const self = this;\r\n if (dragging) {\r\n self.setDragged(true);\r\n self.popupDiv.classList.add(TC.Consts.classes.DRAG);\r\n }\r\n else {\r\n self.popupDiv.classList.remove(TC.Consts.classes.DRAG);\r\n }\r\n };\r\n\r\n ctlProto.isVisible = function () {\r\n const self = this;\r\n\r\n return self.popupDiv && self.popupDiv.classList.contains(TC.Consts.classes.VISIBLE);\r\n };\r\n\r\n})();\r\n\r\nconst Popup = TC.control.Popup;\r\nexport default Popup;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.Consts.classes.PRINTABLE = 'tc-printable';\r\n\r\nTC.control.Print = function (options)\r\n{\r\n const self = this;\r\n self.options = options || {};\r\n\r\n self.ready = false;\r\n\r\n self.title = self.options.title || TC.Util.getLocaleString(TC.Cfg.locale, 'printPage');\r\n self.cssUrl = self.options.cssUrl || TC.apiLocation + 'TC/css/print.css';\r\n\r\n if (self.options.target) {\r\n (self.options.printableElement || self.options.target).classList.add(TC.Consts.classes.PRINTABLE);\r\n self.render();\r\n }\r\n};\r\n\r\nTC.inherit(TC.control.Print, TC.Control);\r\n\r\n(function () {\r\n const ctlProto = TC.control.Print.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-print';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"print\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":76},\"end\":{\"line\":1,\"column\":92}}})) + \"\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-page'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n\\r\\n\\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"\\r\\n \\r\\n\\r\\n\\r\\n

                \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

                \\r\\n \" + ((stack1 = alias1((depth0 != null ? lookupProperty(depth0,\"content\") : depth0), depth0)) != null ? stack1 : \"\") + \"\\r\\n\\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.renderPrintPage = function () {\r\n const self = this;\r\n const page = open(null, self.CLASS);\r\n const content = (self.options.printableElement || self.options.target).innerHTML;\r\n self.getRenderedHtml(self.CLASS + '-page', { title: self.title, content: content, cssUrl: self.cssUrl })\r\n .then(function (out) {\r\n page.document.write(out);\r\n page.document.close();\r\n page.focus();\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n };\r\n\r\n ctlProto.getRenderTarget = function () {\r\n const self = this;\r\n return self.options.target || self.div;\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n if (self._mustAddListeners) {\r\n const target = self.getRenderTarget();\r\n if (target) {\r\n const btn = target.querySelector('.' + self.CLASS + '-btn');\r\n if (btn) {\r\n btn.addEventListener('click', function (_e) {\r\n self.renderPrintPage();\r\n });\r\n delete self._mustAddListeners;\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n if (self.div) {\r\n TC.Control.prototype.renderData.call(self, data, callback)\r\n .then(() => resolve())\r\n .catch((e) => reject(e));\r\n }\r\n else {\r\n const target = self.getRenderTarget();\r\n if (target) {\r\n self.getRenderedHtml(self.CLASS, null).then(function (out) {\r\n if (!target.querySelector('.' + self.CLASS + '-btn')) {\r\n self._mustAddListeners = true;\r\n target.insertAdjacentHTML('beforeend', out);\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n }\r\n else {\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n }\r\n }\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst Print = TC.control.Print;\r\nexport default Print;","\r\n/**\r\n * Opciones de control de impresión.\r\n * @typedef PrintMapOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string} [logo] - URL del archivo de imagen del logo a añadir a la hoja de impresión.\r\n * @property {PrintMapLegendOptions} [legend] - Opciones de configuración para mostrar la leyenda del mapa en una segunda página de impresión.\r\n */\r\n\r\n/**\r\n * Opciones de leyenda para la impresión.\r\n * @typedef PrintMapLegendOptions\r\n * @see PrintMapOptions\r\n * @property {boolean} [visible=false] - Determina si junto a la página del mapa se imprime una segunda página con la leyenda.\r\n * @property {string} [orientation=\"portrait\"] - Determina la orientación de la página de impresión que contiene la leyenda. Puede tomar el valor `portrait` (vertical) o `landscape` (horizontal).\r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport MapInfo from './MapInfo';\r\nimport Proxification from '../tool/Proxification';\r\nTC.tool = TC.tool || {};\r\nTC.tool.Proxification = Proxification;\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\nTC.control.MapInfo = MapInfo;\r\n\r\nTC.control.PrintMap = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.PrintMap, TC.control.MapInfo);\r\n\r\n(function () {\r\n var ctlProto = TC.control.PrintMap.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-prnmap';\r\n\r\n const ORIENTATION = {\r\n PORTRAIT: 'portrait',\r\n LANDSCAPE: 'landscape'\r\n };\r\n const PAGE_SIZE = {\r\n A4: 'A4',\r\n A3: 'A3'\r\n };\r\n\r\n /*\r\n GLS:\r\n La librería makePDF se basa en la librería PDFKit explicación sobre la unidad de medida que usa:\r\n PDF points (72 per inch)\r\n https://stackoverflow.com/questions/51540144/pdfkit-node-js-measurement-unit\r\n https://www.ninjaunits.com/converters/pixels/points-pixels/\r\n https://www.ninjaunits.com/converters/pixels/pixels-points/\r\n\r\n La clave es mantener las dimensiones del mapa en px enteros (canvas sólo admite px enteros), ajustando el layout que está en puntos y que sí admite decimales\r\n */\r\n\r\n /* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-portrait-a4 indicando el valor en px la sección del mapa */\r\n var a4_portrait = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 595,\r\n height: 842\r\n },\r\n pageMargins: [29.5, 14, 29.5, 22.5],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0]\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 534,\r\n height: 775.5\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0]\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 534,\r\n height: 775.5\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n /* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-landscape-a4 indicando el valor en px la sección del mapa */\r\n var a4_landscape = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 842,\r\n height: 595\r\n },\r\n pageMargins: [30, 14, 30, 22],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 528\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n /*width: 45,*/\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 528\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n\r\n /* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-portrait-a3 indicando el valor en px la sección del mapa */\r\n var a3_portrait = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 841.89,\r\n height: 1190.55\r\n },\r\n pageMargins: [29.954, 14, 29.954, 21.55],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n margin: [0, 10, 0, 0],\r\n alignment: 'center'\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 1125\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n width: 489,\r\n margin: [0, 10, 0, 0],\r\n alignment: 'center'\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 780,\r\n height: 1125\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n /* GLS: si se cambian los valores de los layout es necesario actualizar los valores de la clases CSS: tc-ctl-prnmap-landscape-a3 indicando el valor en px la sección del mapa */\r\n var a3_landscape = {\r\n logoWidth: 60,\r\n logoHeight: 30,\r\n layoutPDF: {\r\n pageSize: {\r\n width: 1190.55,\r\n height: 841.89\r\n },\r\n pageMargins: [28.775, 14, 28.775, 14.89],\r\n content: [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 1131,\r\n height: 783\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ]\r\n },\r\n reset: function () {\r\n this.layoutPDF.content = [\r\n {\r\n columns: [\r\n { /* logo */\r\n image: null,\r\n height: 22,\r\n width: 45,\r\n margin: [0, 0, 0, 6]\r\n },\r\n { /* título */\r\n text: \"\",\r\n alignment: 'center',\r\n margin: [0, 10, 0, 0],\r\n width: 600\r\n },\r\n { /* barra de escala */\r\n alignment: 'right',\r\n margin: [0, 10, 0, 0]\r\n }\r\n ]\r\n },\r\n {\r\n table: {\r\n widths: ['*'],\r\n body: [\r\n [{ /* mapa */\r\n image: null,\r\n width: 1131,\r\n height: 783\r\n }]\r\n ]\r\n },\r\n layout: {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n\r\n const getLayout = function (orientation, format) {\r\n switch (orientation) {\r\n case ORIENTATION.PORTRAIT: {\r\n switch (format) {\r\n case PAGE_SIZE.A4: {\r\n return a4_portrait;\r\n }\r\n case PAGE_SIZE.A3: {\r\n return a3_portrait;\r\n }\r\n default:\r\n }\r\n break;\r\n }\r\n case ORIENTATION.LANDSCAPE: {\r\n switch (format) {\r\n case PAGE_SIZE.A4: {\r\n return a4_landscape;\r\n }\r\n case PAGE_SIZE.A3: {\r\n return a3_landscape;\r\n }\r\n default:\r\n }\r\n break;\r\n }\r\n default:\r\n return a4_portrait;\r\n }\r\n };\r\n\r\n const getLogoColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[0];\r\n };\r\n const getTitleColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[1];\r\n };\r\n const getScaleBarColumn = function (layout) {\r\n return layout.layoutPDF.content[0].columns[2];\r\n };\r\n const getMap = function (layout) {\r\n return layout.layoutPDF.content[1].table.body[0][0];\r\n };\r\n\r\n const options = {\r\n qrCode: {\r\n sideLength: 85\r\n }\r\n };\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"print\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":20}}})) + \"

                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n \\r\\n
                \\r\\n
                \\r\\n \\r\\n
                \\r\\n
                \\r\\n \\r\\n
                \\r\\n
                \\r\\n \\r\\n \\r\\n \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n

                \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"qrAdvice\",true,{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":26,\"column\":19},\"end\":{\"line\":26,\"column\":43}}})) + \"

                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-view'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { return \"
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-tools'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \\r\\n
                \\r\\n
                \\r\\n
                \";},\"useData\":true}\r\n\r\n const hasLegend = function () {\r\n const self = this;\r\n\r\n return self.map.workLayers.some(function (layer) {\r\n return layer.type === TC.Consts.layerType.WMS && layer.getVisibility();\r\n });\r\n };\r\n\r\n const hasLegendToPrint = function () {\r\n const self = this;\r\n\r\n return self.map.workLayers.some(function (layer) {\r\n if (layer.type === TC.Consts.layerType.WMS && layer.getVisibility()) {\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (layer.isVisibleByScale(layer.names[i])) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n });\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.control.MapInfo.prototype.register.call(self, map);\r\n\r\n // GLS: Añado el flag al mapa para tenerlo en cuenta cuando se establece la función de carga de imágenes\r\n self.map.crossOrigin = 'anonymous';\r\n\r\n const manageLegendOnZoom = function () {\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n layout.reset();\r\n };\r\n\r\n const print = function () {\r\n\r\n self.map.setView(TC.Consts.view.PRINTING);\r\n\r\n var codeContainer = document.querySelector('.' + self.CLASS + '-qrcode');\r\n const cb = document.querySelector(`#${self.CLASS}-image-qr-${self.id}`);\r\n if (!cb.disabled && cb.checked) {\r\n if (!codeContainer) {\r\n codeContainer = document.createElement('div');\r\n codeContainer.classList.add(self.CLASS + '-qrcode');\r\n self.map.div.appendChild(codeContainer);\r\n }\r\n\r\n codeContainer.innerHTML = '';\r\n self.makeQRCode(codeContainer, options.qrCode.sideLength, options.qrCode.sideLength);\r\n } else {\r\n if (codeContainer) {\r\n codeContainer.innerHTML = '';\r\n }\r\n }\r\n\r\n const printBtnSelector = '.' + self.CLASS + '-btn';\r\n self.map.on(TC.Consts.event.STARTLOADING, function () {\r\n const printBtn = self.div.querySelector(printBtnSelector);\r\n printBtn.classList.add('disabled');\r\n printBtn.disabled = true;\r\n });\r\n\r\n self.map.on(TC.Consts.event.STOPLOADING, function () {\r\n const printBtn = self.div.querySelector(printBtnSelector);\r\n printBtn.classList.remove('disabled');\r\n printBtn.disabled = false;\r\n });\r\n\r\n if (hasLegend.call(self)) {\r\n // GLS: controlamos si una capa deja de verse por la escala para resetear la leyenda \r\n self.map.on(TC.Consts.event.ZOOM, manageLegendOnZoom);\r\n }\r\n\r\n const updateCanvas = function (printFormat) {\r\n if (printFormat) {\r\n self.map.div.classList.add(printFormat);\r\n /*\r\n * Validamos que el resultado en pixels sean valores enteros, si no lo son, redondeamos y establecemos evitando estiramiento del canvas /\r\n */\r\n var bounding = self.map.div.getBoundingClientRect();\r\n if (!Number.isInteger(bounding.width)) {\r\n self.map.div.style.width = Math.round(bounding.width) + 'px';\r\n }\r\n if (!Number.isInteger(bounding.height)) {\r\n self.map.div.style.height = Math.round(bounding.height) + 'px';\r\n }\r\n\r\n const newWidth = `calc(50% - ${bounding.width / 2}px)`;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-left`).style.width = newWidth;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-right`).style.width = newWidth;\r\n self._viewDiv.querySelector(`.${self.CLASS}-view-bottom`).style.top = bounding.height + 'px';\r\n\r\n self.map.toast(self.getLocaleString('print.advice.title') + ': ' + self.getLocaleString('print.advice.desc'), { type: TC.Consts.msgType.INFO, duration: 7000 });\r\n\r\n // En móviles no se ve el mapa entero, así que escalamos el viewport\r\n bounding = self.map.div.getBoundingClientRect();\r\n if (window.screen.width < bounding.width) {\r\n const zoomOut = window.screen.width / bounding.width;\r\n const zoomIn = bounding.width / window.screen.width;\r\n const viewportMeta = document.querySelector('meta[name=\"viewport\"]');\r\n self._viewportMeta = viewportMeta.getAttribute('content');\r\n viewportMeta.setAttribute('content', `user-scalable=yes, initial-scale=${zoomOut}, minimum-scale=${zoomOut}`);\r\n const toolsStyle = self.getToolsElement().style;\r\n self._toolsTransform = toolsStyle.transform;\r\n self._toolsTransformOrigin = toolsStyle.transformOrigin;\r\n toolsStyle.transform = `scale(${zoomIn}, ${zoomIn})`;\r\n toolsStyle.transformOrigin = '100% 0%';\r\n const toast = document.querySelector('.' + TC.Consts.classes.TOAST_CONTAINER);\r\n if (toast) {\r\n const toastStyle = toast.style;\r\n self._toastTransform = toastStyle.transform;\r\n self._toastTransformOrigin = toastStyle.transformOrigin;\r\n toastStyle.transform = `scale(${zoomIn}, ${zoomIn})`;\r\n toastStyle.transformOrigin = '0% 100%';\r\n }\r\n }\r\n }\r\n\r\n self.map.wrap.map.updateSize();\r\n };\r\n\r\n const resetPrinting = function () {\r\n\r\n // Deshacemos el reescalado para la previsualización en móviles\r\n if (Object.prototype.hasOwnProperty.call(self, '_viewportMeta')) {\r\n document.querySelector('meta[name=\"viewport\"]').setAttribute('content', self._viewportMeta);\r\n delete self._viewportMeta;\r\n const toolsStyle = self.getToolsElement().style;\r\n toolsStyle.transform = self._toolsTransform;\r\n toolsStyle.transformOrigin = self._toolsTransformOrigin;\r\n delete self._toolsTransform;\r\n delete self._toolsTransformOrigin;\r\n const toast = document.querySelector('.' + TC.Consts.classes.TOAST_CONTAINER);\r\n if (toast) {\r\n toast.style.transform = self._toastTransform;\r\n toast.style.transformOrigin = self._toastTransformOrigin;\r\n }\r\n delete self._toastTransform;\r\n delete self._toastTransformOrigin;\r\n }\r\n\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n layout.reset();\r\n\r\n if (hasLegend.call(self)) {\r\n self.map.off(TC.Consts.event.ZOOM, manageLegendOnZoom);\r\n }\r\n\r\n self.map.toastHide(self.getLocaleString('print.advice.title') + ': ' + self.getLocaleString('print.advice.desc'));\r\n\r\n self.map.div.classList.remove(self.currentFormat, self.CLASS + '-printing');\r\n\r\n self.map.div.style.removeProperty('width');\r\n self.map.div.style.removeProperty('height');\r\n\r\n updateCanvas();\r\n\r\n self.map.setView(TC.Consts.view.DEFAULT);\r\n\r\n self._viewDiv.classList.add(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n if (!self._viewDiv) {\r\n self._viewDiv = TC.Util.getDiv();\r\n document.body.appendChild(self._viewDiv);\r\n\r\n self.getRenderedHtml(self.CLASS + '-view', null, function (html) {\r\n self._viewDiv.innerHTML = html;\r\n });\r\n\r\n self.getRenderedHtml(self.CLASS + '-tools', null, function (html) {\r\n self.map.div.insertAdjacentHTML('beforeend', html);\r\n\r\n self.map.div.querySelector('.' + self.CLASS + '-btn-close').addEventListener('click', resetPrinting);\r\n\r\n self.map.div.querySelector('.' + self.CLASS + '-btn-pdf').addEventListener('click', self.createPdf.bind(self));\r\n });\r\n }\r\n\r\n self.orientation = self.div.querySelector(\"#print-design\").value;\r\n self.format = self.div.querySelector(\"#print-size\").value;\r\n\r\n self.currentFormat = self.CLASS + '-' + self.orientation + '-' + self.format;\r\n\r\n self._viewDiv.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n self.map.div.classList.add(self.CLASS + \"-printing\");\r\n updateCanvas(self.currentFormat);\r\n };\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('.' + self.CLASS + '-btn', print));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector(`#${self.CLASS}-image-qr-${self.id}`, function (_evt) {\r\n self.generateLink();\r\n }));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('h2', function (_evt) {\r\n if (!self.registeredListeners) {\r\n self.generateLink();\r\n }\r\n self.registerListeners();\r\n }));\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(TC.Control.prototype.renderData.call(self, { controlId: self.id }, callback));\r\n };\r\n\r\n ctlProto.createPdf = async function () {\r\n var self = this;\r\n\r\n var loadingCtrl = self.map.getControlsByClass(TC.control.LoadingIndicator)[0];\r\n var hasWait = loadingCtrl.addWait(); \r\n await import(\"pdfmake/build/pdfmake\");\r\n let pdfFonts = await import(\"pdfmake/build/vfs_fonts\");\r\n pdfMake.vfs = pdfFonts.pdfMake.vfs; \r\n let result;\r\n self.canvas = TC.Util.mergeCanvases(self.map.wrap.getCanvas());\r\n var layout = getLayout(self.orientation || ORIENTATION.PORTRAIT, self.format.toString().toUpperCase() || \"A4\");\r\n var printLayout = layout.layoutPDF;\r\n\r\n const createPDF = function (printLayout) {\r\n var filename = window.location.host + '_';\r\n var title = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n\r\n if (title) {\r\n filename += title;\r\n } else {\r\n var currentDate = TC.Util.getFormattedDate(new Date().toString(), true);\r\n filename += currentDate;\r\n }\r\n\r\n try {\r\n pdfMake.createPdf(printLayout).download(filename.replace(/[\\\\\\/:*?\"<>\\|]/g, \"\") + '.pdf');\r\n } catch (error) {\r\n self.map.toast(self.getLocaleString('print.error'), { type: TC.Consts.msgType.ERROR });\r\n TC.error(error.message + ' ' + error.stack, TC.Consts.msgErrorMode.EMAIL);\r\n }\r\n\r\n loadingCtrl.removeWait(hasWait);\r\n };\r\n\r\n const imageErrorHandling = function (imageUrl) {\r\n TC.error(self.getLocaleString('print.error'));\r\n TC.error('No se ha podido generar el base64 correspondiente a la imagen: ' + imageUrl, TC.Consts.msgErrorMode.EMAIL, 'Error en la impresión'); //Correo de error\r\n };\r\n\r\n const getLogo = function () {\r\n\r\n const onLogoError = function () {\r\n var logoColumn = getLogoColumn(layout);\r\n delete logoColumn.image;\r\n logoColumn.text = \"\";\r\n logoColumn.width = 0;\r\n return logoColumn;\r\n };\r\n\r\n if (self.options.logo) {\r\n return TC.Util.imgToDataUrl(self.options.logo).then(function (result) {\r\n const canvas = result.canvas;\r\n const dataUrl = result.dataUrl;\r\n\r\n var logoColumn = getLogoColumn(layout);\r\n //URI: si no se define la anchura en el layout calcula la anchura en función de proporción entre ancho y alto de la imagen y el alto de su posición en el PDF\r\n if (!logoColumn.width)\r\n logoColumn.width = (canvas.width / canvas.height) * logoColumn.height;\r\n logoColumn.image = dataUrl;\r\n return logoColumn;\r\n\r\n }, function () {\r\n imageErrorHandling(self.options.logo);\r\n\r\n return onLogoError();\r\n });\r\n } else {\r\n return onLogoError();\r\n }\r\n };\r\n const getScaleBar = function () {\r\n const onError = function () {\r\n var scaleBarColumn = getScaleBarColumn(layout);\r\n delete scaleBarColumn.image;\r\n scaleBarColumn.text = \"\";\r\n scaleBarColumn.width = \"auto\";\r\n return scaleBarColumn;\r\n };\r\n\r\n let scaleCtrl = self.map.getControlsByClass(TC.control.ScaleBar)[0];\r\n if (scaleCtrl) {\r\n var elem = document.getElementsByClassName(\"ol-scale-line-inner\"); // no cogemos el DIV del control ya que contiene los bordes y suman al ancho total\r\n var bounding = elem[0].getBoundingClientRect();\r\n if (bounding) {\r\n var styling = getComputedStyle(elem[0], null);\r\n var leftBorder = parseInt(styling.getPropertyValue('border-left-width').replace('px', '')) || 0;\r\n var rightBorder = parseInt(styling.getPropertyValue('border-right-width').replace('px', '')) || 0;\r\n\r\n var scaleBarColumn = getScaleBarColumn(layout);\r\n\r\n scaleBarColumn.table = {\r\n widths: [((bounding.width > bounding.height ? bounding.width : bounding.height) - leftBorder - rightBorder) * 0.75], // lo pasamos a pt\r\n body: [\r\n [{ border: [true, false, true, true], text: scaleCtrl.getText(), fontSize: 10, alignment: 'center' }]\r\n ]\r\n };\r\n\r\n scaleBarColumn.layout = {\r\n paddingLeft: function (_i, _node) { return 0; },\r\n paddingRight: function (_i, _node) { return 0; },\r\n paddingTop: function (_i, _node) { return 0; },\r\n paddingBottom: function (_i, _node) { return 0; }\r\n };\r\n\r\n return scaleBarColumn;\r\n } else {\r\n return onError();\r\n }\r\n } else {\r\n return onError();\r\n }\r\n };\r\n const getLegend = function () {\r\n var content = [];\r\n var layers = self.map.workLayers.filter(function (layer) {\r\n return layer.type === TC.Consts.layerType.WMS && layer.getVisibility();\r\n });\r\n var legendByGroup = [];\r\n\r\n var _process = function (value, parentLayer, treeLevel) {\r\n if (parentLayer.isVisibleByScale(value.name)) { //Si la capa es visible, la mostramos en la leyenda\r\n var src,\r\n srcBase64;\r\n\r\n //Para las capas cargadas por POST (por ejemplo la búsquedas de Comercio Pamplona)\r\n if (parentLayer.options && parentLayer.options.params && parentLayer.options.params.base64LegendSrc) {\r\n srcBase64 = parentLayer.options.params.base64LegendSrc;\r\n }\r\n else if (value.legend) {\r\n src = value.legend.src;\r\n }\r\n\r\n result.push({ src: src, title: value.title, level: treeLevel, srcBase64: srcBase64 });\r\n }\r\n };\r\n var _traverse = function (o, func, parentLayer, treeLevel) {\r\n if (Array.isArray(o)) {\r\n for (var i = 0; i < o.length; i++) {\r\n _traverse(o[i], func, parentLayer, treeLevel);\r\n }\r\n } else {\r\n if (o && Object.prototype.hasOwnProperty.call(o, 'children') && o.children.length > 0) {\r\n if (o.title || o.name) {\r\n result.push({ header: o.title || o.name, level: treeLevel });\r\n }\r\n _traverse(o.children, func, parentLayer, ++treeLevel);\r\n }\r\n }\r\n\r\n if (o && Object.prototype.hasOwnProperty.call(o, 'children') && o.children.length === 0) {\r\n func.apply(this, [o, parentLayer, treeLevel]);\r\n treeLevel--;\r\n }\r\n };\r\n var _getLegendImages = function () {\r\n var imagePromises = [];\r\n\r\n for (var i = 0; i < legendByGroup.length; i++) {\r\n var layers = legendByGroup[i].layers;\r\n\r\n for (var j = 0; j < layers.length; j++) {\r\n (function (k, l) {\r\n var layer = legendByGroup[k].layers[l];\r\n var src = layer.src || layer.srcBase64;\r\n\r\n if (src) {\r\n\r\n if (!TC.tool || !TC.tool.Proxification) {\r\n TC.syncLoadJS(TC.apiLocation + 'TC/tool/Proxification');\r\n }\r\n\r\n imagePromises.push(new Promise(function (resolve, reject) {\r\n var toolProxification = new TC.tool.Proxification(TC.proxify, { allowedMixedContent: true });\r\n toolProxification.fetchImage(src, { exportable: true }).then(function (img) {\r\n if (img.complete) {\r\n var imageDetail = TC.Util.imgTagToDataUrl(img, 'image/png');\r\n layer.image = { base64: imageDetail.base64, canvas: imageDetail.canvas, height: img.height, width: img.width };\r\n } else {\r\n imageErrorHandling(src);\r\n }\r\n\r\n resolve();\r\n\r\n }, function (error) {\r\n imageErrorHandling(src);\r\n reject(error);\r\n });\r\n }));\r\n }\r\n })(i, j);\r\n }\r\n }\r\n\r\n return imagePromises;\r\n };\r\n layers.forEach(function (layer) {\r\n result = [];\r\n if (!layer.layerNames || layer.layerNames.length === 0) return;\r\n var hideTree = layer.options.hideTree;\r\n\r\n layer.tree = null;\r\n layer.options.hideTree = true;\r\n\r\n _traverse(layer.getNestedTree(), _process, layer, 0);\r\n\r\n layer.options.hideTree = hideTree;\r\n\r\n if (result.length > 0) {\r\n legendByGroup.push({ title: layer.title, layers: result });\r\n }\r\n });\r\n\r\n return new Promise(function (resolve, reject) {\r\n Promise.all(_getLegendImages()).then(function () {\r\n\r\n const getGroupTable = function (group, index) {\r\n var rows = [[{ text: group.title, fontSize:13, style: [\"tablegroup\"], margin: [0, index > 0 ? 10 : 0, 0, 2] }]];\r\n var indentation = 10;\r\n rows = rows.concat(group.layers.filter(function (item) {\r\n return Object.prototype.hasOwnProperty.call(item, 'header') && item.header.trim().toLowerCase() !== group.title.trim().toLowerCase();\r\n }).map(function (item, _index) {\r\n return [{ text: item.header.trim(), fontSize: Math.max(9, 14 - item.level), margin: [indentation * item.level, 0, 0, 2] }];\r\n }));\r\n\r\n const headerRows = rows.length;\r\n var headerItem = null;\r\n var itemIndex = null;\r\n\r\n const getLayerTable = function (item, _index) {\r\n if (item.header) {\r\n headerItem = item;\r\n\r\n if (itemIndex) {\r\n itemIndex = null;\r\n }\r\n } else {\r\n if (!itemIndex) {\r\n itemIndex = 1;\r\n }\r\n\r\n var position;\r\n if (headerItem) {\r\n var headerIndex = rows.map(item => item[0].text || \"\").indexOf(headerItem.header);\r\n position = headerIndex + itemIndex++;\r\n }\r\n\r\n if (item.image) {\r\n itemIndex++;\r\n var imageWidth = item.image.width* 0.75;//item.image.canvas.width / 2;\r\n var imageHeight = item.image.height * 0.75;//(imageWidth * item.image.canvas.height / item.image.canvas.width);\r\n\r\n const dataLayer = [{\r\n \"ul\": [{\r\n \"text\": item.title,\n \"fontSize\": Math.max(9, 14 - item.level),\r\n \"margin\": [0 - indentation, 0, 0, 5]\r\n }, {\n \"image\": item.image.base64,\r\n \"width\": imageWidth,\r\n \"height\": imageHeight,\n \"margin\": [0, 0, 0, 2]\n }\n ],\n \"type\": \"none\",\r\n \"margin\": [indentation * item.level, 0, 0, 2],\r\n }];\r\n\r\n if (position) {\r\n rows.splice(position, 0, dataLayer);\r\n //rows.splice(position + 1, 0, imageLayer);\r\n } else {\r\n rows.push(dataLayer);\r\n //rows.push(imageLayer);\r\n }\r\n\r\n } else {\r\n const data = [{\r\n text: item.title,\r\n fontSize: 11,\r\n margin: [indentation * item.level, 0, 0, 2]\r\n }];\r\n\r\n if (position) {\r\n rows.splice(position, 0, data);\r\n } else {\r\n rows.push(data);\r\n }\r\n }\r\n }\r\n };\r\n\r\n group.layers.forEach(getLayerTable);\r\n\r\n content.push({\r\n layout: 'noBorders',\r\n table: {\r\n dontBreakRows: true,\r\n keepWithHeaderRows: 1,\r\n headerRows: headerRows,\r\n body: rows\r\n }\r\n });\r\n };\r\n\r\n legendByGroup.map(function (group, index) {\r\n return {\r\n groupIndex: index,\r\n height: group.layers.filter(function (item) {\r\n return item.image && item.image.canvas;\r\n }).reduce(function (prev, current, index, vector) {\r\n return prev + vector[index].image.canvas.height;\r\n }, 0)\r\n }\r\n }).sort(function (a, b) {\r\n if (a.height > b.height) {\r\n return 1;\r\n }\r\n if (a.height < b.height) {\r\n return -1;\r\n }\r\n return 0;\r\n }).forEach(function (groupWithHeight, index) {\r\n getGroupTable(legendByGroup[groupWithHeight.groupIndex], index)\r\n });\r\n\r\n resolve(content);\r\n\r\n }, function () {\r\n reject([]);\r\n });\r\n });\r\n };\r\n const drawQR = function () {\r\n // GLS: añadimos el QR\r\n //QR\r\n const cb = document.querySelector(`#${self.CLASS}-image-qr-${self.id}`);\r\n if (!cb.disabled && cb.checked) {\r\n const qrTarget = document.querySelector('.' + self.CLASS + '-qrcode');\r\n qrTarget.innerHTML = '';\r\n return self.makeQRCode(qrTarget, options.qrCode.sideLength, options.qrCode.sideLength).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n return TC.Util.addToCanvas(self.canvas, qrCodeBase64, { x: self.canvas.width - options.qrCode.sideLength, y: self.canvas.height - options.qrCode.sideLength }, {width: options.qrCode.sideLength, height: options.qrCode.sideLength }).then(function (mapCanvas) {\r\n return mapCanvas;\r\n });\r\n } else {\r\n return self.canvas;\r\n }\r\n });\r\n } else {\r\n return self.canvas;\r\n }\r\n };\r\n\r\n const basics = [getLogo, function () {\r\n var titleColumn = getTitleColumn(layout);\r\n titleColumn.text = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n return titleColumn;\r\n }, getScaleBar, drawQR];\r\n\r\n Promise.all(basics.map(function (fn) {\r\n return fn();\r\n })).then(function (basicsDone) {\r\n\r\n if (basicsDone[2].table) { // GLS: ajustamos el ancho del título para arrinconar la escala\r\n const totalWidth = layout.layoutPDF.pageSize.width - (layout.layoutPDF.pageMargins[0] + layout.layoutPDF.pageMargins[2]);\r\n const logoWidth = layout.layoutPDF.content[0].columns[0].width || 0;\r\n const scaleBarColumn = layout.layoutPDF.content[0].columns[2];\r\n const scaleBarWidth = scaleBarColumn.table.widths[0] + 2;\r\n const titleColumn = layout.layoutPDF.content[0].columns[1];\r\n titleColumn.width = totalWidth - logoWidth - scaleBarWidth;\r\n if (logoWidth === 0) {\r\n // Si no hay logo reajustamos texto de título y margen de barra de escala\r\n titleColumn.alignment = \"left\";\r\n scaleBarColumn.margin[3] = 2;\r\n }\r\n }\r\n\r\n var mapPlace = getMap(layout);\r\n var canvas = basicsDone[3] || self.canvas;\r\n\r\n mapPlace.image = canvas.toDataURL();\r\n\r\n if (hasLegendToPrint.call(self) && // GLS: validamos que haya capas visibles por escala \r\n printLayout.content.length === 2) { // GLS: es la primera descarga o hemos resetado la leyenda por algún zoom por lo que no tenemos la leyenda en el layout\r\n\r\n const title = self.div.querySelector('.' + self.CLASS + '-title').value.trim();\r\n printLayout.content.push({\r\n pageBreak: 'before',\r\n pageOrientation: (self.options.legend && self.options.legend.orientation) || ORIENTATION.PORTRAIT,\r\n text: title.length > 0 ? title : '',\r\n fontSize: 14,\r\n margin: [0, 20, 0, 10]\r\n });\r\n printLayout.styles = {\r\n \"tablegroup\": {\r\n bold: true\r\n }\r\n }\r\n printLayout.defaultStyle={\r\n alignment: 'left'\r\n }\r\n\r\n getLegend().then(function (content) {\r\n printLayout.content = printLayout.content.concat(content);\r\n createPDF(printLayout);\r\n });\r\n } else {\r\n createPDF(printLayout);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.manageMaxLengthExceed = function (maxLengthExceed) {\r\n const self = this;\r\n const alertElm = self.div.querySelector('.' + self.CLASS + '-alert');\r\n const checkboxQR = document.querySelector(`#${self.CLASS}-image-qr-${self.id}`);\r\n\r\n checkboxQR.disabled = maxLengthExceed.qr;\r\n\r\n if (checkboxQR.checked) {\r\n alertElm.classList.toggle(TC.Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n } else {\r\n alertElm.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n ctlProto.generateLink = async function () {\r\n const self = this;\r\n const checkbox = self.div.querySelector(`.${self.CLASS}-div input[id|=\"${self.CLASS}-image-qr-${self.id}\"]`);\r\n const label = self.div.querySelector(`label[for=\"${checkbox.id}\"]`);\r\n checkbox.disabled = true;\r\n label.classList.add(TC.Consts.classes.LOADING);\r\n const result = await TC.control.MapInfo.prototype.generateLink.call(self);\r\n label.classList.remove(TC.Consts.classes.LOADING);\r\n return result;\r\n };\r\n\r\n ctlProto.getToolsElement = function () {\r\n const self = this;\r\n return self.map.div.querySelector(`.${self.CLASS}-tools`);\r\n };\r\n\r\n})();\r\n\r\nconst PrintMap = TC.control.PrintMap;\r\nexport default PrintMap;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\n(function () {\r\n\r\n TC.control.ProjectionSelector = function () {\r\n const self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self._cssClasses = {\r\n LOAD_CRS_BUTTON: self.CLASS + '-crs-btn-load',\r\n CRS_DIALOG: self.CLASS + '-crs-dialog',\r\n CRS_LIST: self.CLASS + '-crs-list',\r\n CURRENT_CRS_NAME: self.CLASS + '-cur-crs-name',\r\n CURRENT_CRS_CODE: self.CLASS + '-cur-crs-code',\r\n CHANGE: self.CLASS + '-change',\r\n NO_CHANGE: self.CLASS + '-no-change'\r\n };\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self._dialogDiv.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('button:not(.' + self._cssClasses.LOAD_CRS_BUTTON + ')', function (e) {\r\n const crs = e.target.dataset.crsCode;\r\n if (crs) {\r\n self.setProjection({\r\n crs: crs,\r\n allowFallbackLayer: true\r\n });\r\n }\r\n }), { passive: true });\r\n\r\n self._dialogDiv.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON, function () {\r\n self.loadFallbackProjections();\r\n }), { passive: true });\r\n };\r\n\r\n TC.inherit(TC.control.ProjectionSelector, TC.Control);\r\n\r\n const ctlProto = TC.control.ProjectionSelector.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-projs';\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n const result = TC.Control.prototype.render.call(self, callback);\r\n\r\n self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n });\r\n return result;\r\n };\r\n\r\n ctlProto.getAvailableCRS = function (options) {\r\n return this.map.getCompatibleCRS(TC.Util.extend(options || {}, { includeFallbacks: true }));\r\n };\r\n\r\n ctlProto.showProjectionChangeDialog = function (options) {\r\n const self = this;\r\n\r\n const dialog = self._dialogDiv.querySelector('.' + self._cssClasses.CRS_DIALOG);\r\n const body = dialog.querySelector('.tc-modal-body');\r\n body.classList.add(TC.Consts.classes.LOADING);\r\n const ul = body.querySelector('ul.' + self._cssClasses.CRS_LIST);\r\n ul.innerHTML = '';\r\n const blFirstOption = self.map.baseLayer.firstOption || self.map.baseLayer;\r\n const blFallback = blFirstOption.isRaster() ? blFirstOption.getFallbackLayer() : null;\r\n\r\n const loadProjs = function () {\r\n var crsList = [];\r\n var blCRSList = [];\r\n\r\n options = options || {};\r\n \r\n if (blFirstOption.isRaster()) {\r\n blCRSList = blFirstOption.getCompatibleCRS();\r\n crsList = self.getAvailableCRS(TC.Util.extend(options, {}));\r\n } else {\r\n blCRSList = self.map.baseLayers\r\n .filter((layer) => {\r\n return layer.isRaster();\r\n })\r\n .map((layer) => {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: true });\r\n })\r\n .reduce((prev, current) => {\r\n return prev.concat(current.filter(l => prev.indexOf(l) < 0));\r\n });\r\n\r\n const crsLists = (options.layer ? self.map.workLayers.concat(options.layer) : self.map.workLayers)\r\n .filter(function (layer) {\r\n return layer.isRaster();\r\n })\r\n .map(function (layer) {\r\n return layer.getCompatibleCRS({ normalized: true, includeFallback: true });\r\n });\r\n\r\n crsList = blCRSList.filter((crs) => {\r\n return crsLists.every((elm) => {\r\n return elm.indexOf(crs) > -1;\r\n });\r\n });\r\n }\r\n\r\n self.map.loadProjections({\r\n crsList: crsList,\r\n orderBy: 'name'\r\n }).then(function (projList) {\r\n var hasFallbackCRS = false;\r\n var currentCRSName = dialog.querySelector('.' + self._cssClasses.CURRENT_CRS_NAME);\r\n var currentCRSCode = dialog.querySelector('.' + self._cssClasses.CURRENT_CRS_CODE);\r\n projList\r\n .forEach(function (projObj) {\r\n if (currentCRSName && currentCRSCode && TC.Util.CRSCodesEqual(self.map.crs, projObj.code)) {\r\n currentCRSName.textContent = projObj.name;\r\n currentCRSCode.textContent = projObj.code;\r\n }\r\n else {\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.textContent = projObj.name + ' (' + projObj.code + ')';\r\n button.dataset.crsCode = projObj.code;\r\n const li = document.createElement('li');\r\n li.appendChild(button);\r\n if (blCRSList.filter(function (crs) {\r\n return TC.Util.CRSCodesEqual(crs, projObj.code);\r\n }).length === 0) {\r\n // Es un CRS del fallback\r\n hasFallbackCRS = true;\r\n li.classList.add(TC.Consts.classes.HIDDEN);\r\n button.classList.add(TC.Consts.classes.WARNING);\r\n }\r\n ul.appendChild(li);\r\n }\r\n });\r\n if (hasFallbackCRS) {\r\n const li = document.createElement('li');\r\n const button = document.createElement('button');\r\n button.setAttribute('type', 'button');\r\n button.classList.add(self._cssClasses.LOAD_CRS_BUTTON);\r\n button.innerHTML = self.getLocaleString('showOnTheFlyProjections');\r\n li.appendChild(button);\r\n ul.appendChild(li);\r\n }\r\n\r\n // Mostramos un aviso si no hay CRS compatibles\r\n if (ul.querySelectorAll('li').length === 0) {\r\n const li = document.createElement('li');\r\n li.innerHTML = self.getLocaleString('thereAreNoCompatibleCRS');\r\n ul.appendChild(li);\r\n }\r\n const visibleLi = ul.querySelectorAll('li:not(.' + TC.Consts.classes.HIDDEN + ')');\r\n dialog.querySelectorAll('.' + self._cssClasses.CHANGE).forEach(function (elm) {\r\n elm.style.display = visibleLi.length > 1 ? '' : 'none';\r\n });\r\n dialog.querySelectorAll('.' + self._cssClasses.NO_CHANGE).forEach(function (elm) {\r\n elm.style.display = visibleLi.length > 1 ? 'none' : '';\r\n });\r\n dialog.querySelector('ul.' + self._cssClasses.CRS_LIST).style.display = visibleLi.length > 0 || hasFallbackCRS ? '' : 'none';\r\n body.classList.remove(TC.Consts.classes.LOADING);\r\n });\r\n };\r\n\r\n if (blFallback) {\r\n blFallback.getCapabilitiesPromise().then(loadProjs);\r\n }\r\n else {\r\n loadProjs();\r\n }\r\n TC.Util.showModal(dialog, options);\r\n };\r\n\r\n ctlProto.setProjection = function (options) {\r\n const self = this;\r\n options = options || {};\r\n\r\n TC.loadProjDef({\r\n crs: options.crs,\r\n callback: function () {\r\n self.map.setProjection(options);\r\n }\r\n });\r\n };\r\n\r\n ctlProto.loadFallbackProjections = function () {\r\n const self = this;\r\n const lis = self._dialogDiv\r\n .querySelector('.' + self._cssClasses.CRS_DIALOG)\r\n .querySelectorAll('ul.' + self._cssClasses.CRS_LIST + ' li');\r\n lis.forEach(function (li) {\r\n li.classList.remove(TC.Consts.classes.HIDDEN);\r\n if (li.querySelector('button.' + self._cssClasses.LOAD_CRS_BUTTON)) {\r\n li.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n });\r\n self._dialogDiv.querySelectorAll('p.' + TC.Consts.classes.WARNING).forEach(function (p) {\r\n p.classList.remove(TC.Consts.classes.HIDDEN);\r\n });\r\n self._dialogDiv.querySelectorAll('.' + self._cssClasses.CHANGE).forEach(function (elm) {\r\n elm.style.display = lis.length > 1 ? '' : 'none';\r\n });\r\n self._dialogDiv.querySelectorAll('.' + self._cssClasses.NO_CHANGE).forEach(function (elm) {\r\n elm.style.display = lis.length > 1 ? 'none' : '';\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst ProjectionSelector = TC.control.ProjectionSelector;\r\nexport default ProjectionSelector;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport Point from '../feature/Point';\r\nTC.feature = TC.feature || {};\r\nTC.feature.Point = Point;\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.Consts.event.DRAWCHART = 'drawchart.tc';\r\nTC.Consts.event.DRAWTABLE = 'drawtable.tc';\r\nTC.Consts.event.RESULTSPANELMIN = 'resultspanelmin.tc';\r\nTC.Consts.event.RESULTSPANELMAX = 'resultspanelmax.tc';\r\nTC.Consts.event.RESULTSPANELCLOSE = 'resultspanelclose.tc';\r\nTC.Consts.event.RESULTSPANELRESIZE = 'resultspanelresize.tc';\r\n\r\nTC.control.ResultsPanel = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.wrap = new TC.wrap.control.ResultsPanel(self);\r\n\r\n self.data = {};\r\n self.classes = {\r\n SHOW_IN: 'showIn',\r\n SHOW_OUT: 'showOut',\r\n RESIZABLE: 'tc-resizable'\r\n };\r\n\r\n self.content = self.contentType.TABLE;\r\n\r\n if (TC.Util.isEmptyObject(self.options)) {\r\n self.options = { content: \"table\" };\r\n }\r\n\r\n if (self.options || { content: \"table\" }) {\r\n if (self.options.content)\r\n self.content = self.contentType[self.options.content.toUpperCase()];\r\n\r\n if (self.options.chart)\r\n self.chart = self.options.chart;\r\n\r\n if (self.options.table)\r\n self.table = self.options.table;\r\n\r\n if (self.options.save)\r\n self.save = self.options.save;\r\n\r\n if (self.options.share)\r\n self.share = self.options.share;\r\n\r\n }\r\n};\r\n\r\nTC.inherit(TC.control.ResultsPanel, TC.Control);\r\n\r\n(function () {\r\n\r\n const ctlProto = TC.control.ResultsPanel.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-p-results';\r\n\r\n ctlProto.COLLIDING_PRIORITY = {\r\n IGNORE: 0,\r\n LOW: 1,\r\n MEDIUM: 2,\r\n HIGH: 3\r\n };\r\n\r\n ctlProto.CHART_SIZE = {\r\n MIN_HEIGHT: 75,\r\n MAX_HEIGHT: 128,\r\n\r\n MIN_WIDTH: 215,\r\n MEDIUM_WIDTH: 310,\r\n MAX_WIDTH: 445\r\n };\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \\r\\n
                \\r\\n
                \\r\\n

                \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n

                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n \\r\\n \\r\\n
                \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-table'] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"tableTitle\") : depth0), depth0)) + \"

                \\r\\n \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"columns\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":16},\"end\":{\"line\":9,\"column\":25}}})) != null ? stack1 : \"\") + \" \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"results\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(4, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":12},\"end\":{\"line\":16,\"column\":21}}})) != null ? stack1 : \"\") + \" \\r\\n
                \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(alias1(depth0, depth0)) + \"\\r\\n\";},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":16},\"end\":{\"line\":15,\"column\":25}}})) != null ? stack1 : \"\");},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + alias2(alias1(depth0, depth0)) + \"\\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"results\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":0},\"end\":{\"line\":19,\"column\":7}}})) != null ? stack1 : \"\");},\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + '-chart'] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"msg\") : depth0), depth0)) + \"\\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"secondChart\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":4},\"end\":{\"line\":38,\"column\":15}}})) != null ? stack1 : \"\") + \"
                \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \\r\\n
                \\r\\n \\r\\n Min,Max: \\r\\n \\r\\n
                \\r\\n \\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"min\") : depth0), depth0)) + \", \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"max\") : depth0), depth0)) + \"\\r\\n \\r\\n \\r\\n \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"secondChart\") : depth0)) != null ? lookupProperty(stack1,\"min\") : stack1), depth0)) + \", \" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"secondChart\") : depth0)) != null ? lookupProperty(stack1,\"max\") : stack1), depth0)) + \" \\r\\n \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n \\r\\n \" + alias2(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geo.trk.chart.elevationGain\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":16},\"end\":{\"line\":22,\"column\":54}}})) + \": \\r\\n \\r\\n
                \\r\\n \\r\\n +\" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"upHill\") : depth0), depth0)) + \" m, -\" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"downHill\") : depth0), depth0)) + \" m\\r\\n \\r\\n \\r\\n +\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"secondChart\") : depth0)) != null ? lookupProperty(stack1,\"upHill\") : stack1), depth0)) + \" m, -\" + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"secondChart\") : depth0)) != null ? lookupProperty(stack1,\"downHill\") : stack1), depth0)) + \" m\\r\\n \\r\\n
                \\r\\n
                \\r\\n
                \\r\\n\";},\"6\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, alias2=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + alias1(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geo.trk.chart.elevationGain\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":36,\"column\":12},\"end\":{\"line\":36,\"column\":50}}})) + \": +\" + alias1(alias2((depth0 != null ? lookupProperty(depth0,\"upHill\") : depth0), depth0)) + \" m, -\" + alias1(alias2((depth0 != null ? lookupProperty(depth0,\"downHill\") : depth0), depth0)) + \" m\\r\\n \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"msg\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":40,\"column\":15}}})) != null ? stack1 : \"\") + \"
                \\r\\n\";},\"useData\":true}\r\n\r\n const isElementVisible = function (elm) {\r\n const computedStyle = getComputedStyle(elm);\r\n return elm && !elm.hidden && computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden';\r\n };\r\n\r\n ctlProto.isVisible = function () {\r\n const self = this;\r\n const bodyElm = self.div.querySelector('.prsidebar-body');\r\n const maximizeElm = self.div.querySelector('.prcollapsed-max');\r\n return isElementVisible(bodyElm) || isElementVisible(maximizeElm);\r\n };\r\n\r\n ctlProto.isMinimized = function () {\r\n const self = this;\r\n const bodyElm = self.div.querySelector('.prsidebar-body');\r\n const maximizeElm = self.div.querySelector('.prcollapsed-max');\r\n return isElementVisible(maximizeElm) && !isElementVisible(bodyElm);\r\n };\r\n\r\n const manageClassList = function (classElement, toAdd, toRemove) {\r\n const self = this;\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm) {\r\n elm.classList.add(toAdd);\r\n elm.classList.remove(toRemove);\r\n }\r\n };\r\n\r\n ctlProto.show = function (classElement) {\r\n const self = this;\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm && elm.style.display === 'none') {\r\n elm.style.display = '';\r\n }\r\n\r\n manageClassList.call(self, classElement, self.classes.SHOW_IN, self.classes.SHOW_OUT);\r\n };\r\n\r\n ctlProto.hide = function (classElement) {\r\n const self = this;\r\n\r\n manageClassList.call(self, classElement, self.classes.SHOW_OUT, self.classes.SHOW_IN);\r\n\r\n const elm = self.div.querySelector('.' + classElement);\r\n if (elm) {\r\n elm.style.display = 'none';\r\n }\r\n };\r\n\r\n ctlProto.doVisible = function () {\r\n const self = this;\r\n\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.show('prsidebar-body');\r\n };\r\n\r\n const hideResizeHandlers = function (ctl) {\r\n document.querySelectorAll('.' + ctl.CLASS + '-resize-handler').forEach((el) => {\r\n el.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n return TC.Control.prototype.render.call(self, function () {\r\n\r\n self.mainTitleElm = self.div.querySelector('.prpanel-title-text');\r\n\r\n self.minimizeButton = self.div.querySelector('.prcollapsed-slide-submenu-min');\r\n self.minimizeButton.addEventListener('click', function () {\r\n self.minimize();\r\n });\r\n\r\n self.closeButton = self.div.querySelector('.prcollapsed-slide-submenu-close');\r\n self.closeButton.addEventListener('click', function () {\r\n self.close();\r\n const resizedTarget = self.div.querySelector('.' + self.classes.RESIZABLE + '.prpanel-default');\r\n if (resizedTarget) {\r\n // si el usuario cierra el panel desde el aspa, eliminamos el rastro del redimensionado para empezar de cero\r\n delete resizedTarget.style.removeProperty(\"width\");\r\n delete resizedTarget.style.removeProperty(\"height\");\r\n delete resizedTarget.dataset.chartSizeWidth;\r\n delete resizedTarget.dataset.chartSizeHeight;\r\n delete resizedTarget.dataset.panelSizeWidth;\r\n delete resizedTarget.dataset.panelSizeHeight;\r\n }\r\n });\r\n\r\n self.maximizeButton = self.div.querySelector('.prcollapsed-max');\r\n self.maximizeButton.addEventListener('click', function () {\r\n self.maximize();\r\n });\r\n\r\n if (self.save) {\r\n self.saveButton = self.div.querySelector('.prcollapsed-slide-submenu-csv');\r\n self.saveButton.addEventListener('click', function () {\r\n self.exportToExcel();\r\n });\r\n self.saveButton.removeAttribute('hidden');\r\n }\r\n if (self.options.download && self.options.content === \"table\") {\r\n self.downloadButton = self.div.querySelector('.prcollapsed-slide-submenu-dwn');\r\n self.downloadButton.addEventListener('click', function () {\r\n if (TC.Util.isFunction(self.options.download)) {\r\n self.options.download.apply(self, []);\r\n }\r\n });\r\n self.downloadButton.removeAttribute('hidden');\r\n }\r\n if (self.options.share) {\r\n self.shareButton = self.div.querySelector('.' + self.CLASS + \"-share-btn\");\r\n self.shareButton.addEventListener('click', function () {\r\n if (self.caller) {\r\n self.caller.showShareDialog();\r\n }\r\n });\r\n self.shareButton.removeAttribute('hidden');\r\n }\r\n if (self.content) {\r\n self.content = self.content;\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n self.mainTitleElm.setAttribute('title', self.options.titles.main);\r\n self.mainTitleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n self.maximizeButton.setAttribute('title', self.options.titles.max);\r\n }\r\n } else {\r\n self.mainTitleElm.setAttribute('title', self.getLocaleString(\"rsp.title\"));\r\n self.mainTitleElm.innerHTML = self.getLocaleString(\"rsp.title\");\r\n }\r\n }\r\n\r\n self.infoDiv = self.div.querySelector('.' + self.CLASS + '-info');\r\n self.tableDiv = self.div.querySelector('.' + self.CLASS + '-table');\r\n //self.$divChart = self._$div.find('.' + self.CLASS + '-chart');\r\n self.menuDiv = self.div.querySelector('.' + self.CLASS + '-menu');\r\n\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(self.div, {\r\n left: function () {\r\n self.minimize();\r\n }\r\n });\r\n }\r\n\r\n if (!TC.Util.detectMobile()) {\r\n const doResizable = !(Object.prototype.hasOwnProperty.call(self.options, \"resize\") && !self.options.resize);\r\n switch (true) {\r\n case self.options.content === \"chart\" && doResizable: // si es un perfil de elevación\r\n case self.options.resize: // si está configurado a true\r\n case self.options.content === \"table\" && self.infoDiv && self.infoDiv.childElementCount > 0 && doResizable: // si es una tabla y es el renderizado de GFI\r\n self.resizable = true;\r\n self.div.classList.add(self.classes.RESIZABLE);\r\n break;\r\n default:\r\n self.resizable = false;\r\n break;\r\n }\r\n } else {\r\n hideResizeHandlers(self);\r\n }\r\n\r\n if (callback && typeof callback === \"function\") {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.renderPanelResizable = function (options) {\r\n const self = this;\r\n options = options || {};\r\n TC.loadJS(\r\n !window.interact,\r\n [TC.apiLocation + TC.Consts.url.INTERACTJS],\r\n function () {\r\n const target = \".\" + self.classes.RESIZABLE;\r\n const targetNode = options.target && options.target.querySelector(\".prpanel.prpanel-default\") || document.querySelector(\".prpanel.prpanel-default\");\r\n if (!interact.isSet(target)) {\r\n targetNode.classList.add(self.classes.RESIZABLE);\r\n targetNode.closest('.' + self.CLASS).classList.add(self.classes.RESIZABLE);\r\n const svg = document.querySelector('.tc-chart.c3 svg');\r\n if (svg) {\r\n svg.parentElement.style.maxHeight = 'unset';\r\n svg.removeAttribute('max-height');\r\n svg.removeAttribute('max-width');\r\n svg.removeAttribute('min-height');\r\n svg.removeAttribute('min-width');\r\n }\r\n const interactable = interact(target)\r\n .resizable({\r\n preserveAspectRatio: options.preserveAspectRatio || true,\r\n edges: {\r\n right: '.tc-ctl-p-results-resize-handler',\r\n bottom: '.tc-ctl-p-results-resize-handler'\r\n },\r\n cursorChecker(_action, _interactable, element, _interacting) {\r\n let cursor = \"\";\r\n let currentHandlers = element.querySelectorAll(':hover');\r\n currentHandlers.forEach(function (handler) {\r\n switch (true) {\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerRight\") > -1:\r\n cursor = 'w-resize';\r\n break;\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerBottom\") > -1:\r\n cursor = 'n-resize';\r\n break;\r\n case handler.classList.value.indexOf(\"tc-resizable-grid-handlerDiagonal\") > -1:\r\n cursor = 'nw-resize';\r\n break;\r\n default:\r\n cursor = 'pointer';\r\n }\r\n });\r\n return cursor;\r\n },\r\n listeners: {\r\n end: function (event) {\r\n self.onResize(event);\r\n },\r\n move(event) {\r\n switch (true) {\r\n case event.target.style.cursor === 'w-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.rect.width}px`,\r\n height: `${event.target.getBoundingClientRect().height}px`\r\n });\r\n break;\r\n case event.target.style.cursor === 'nw-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.rect.width}px`,\r\n height: `${event.rect.height}px`\r\n });\r\n break;\r\n case event.target.style.cursor === 'n-resize':\r\n Object.assign(event.target.style, {\r\n width: `${event.target.getBoundingClientRect().width}px`,\r\n height: `${event.rect.height}px`\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (event.target.querySelector('.tc-chart.c3')) {\r\n event.target.classList.add(TC.Consts.classes.LOADING);\r\n }\r\n }\r\n },\r\n modifiers: [\r\n interact.modifiers.restrict({\r\n restriction: 'body'\r\n })\r\n ]\r\n });\r\n\r\n if (options.callback && TC.Util.isFunction(options.callback)) {\r\n options.callback();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getResizableChartSize = function (target) {\r\n if (target) {\r\n let chartWrapperBounding = target.querySelector('.tc-chart.c3').getBoundingClientRect();\r\n const newSize = {\r\n width: chartWrapperBounding.width,\r\n height: chartWrapperBounding.height\r\n };\r\n return newSize;\r\n }\r\n };\r\n\r\n ctlProto.getResultsPanelFromElement = function (element) {\r\n const self = this;\r\n\r\n let resultsPanels = self.map.getControlsByClass(TC.control.ResultsPanel);\r\n for (var i = 0; i < resultsPanels.length; i++) {\r\n if (resultsPanels[i].div.querySelector('.' + self.classes.RESIZABLE + '.prpanel-default') === element) {\r\n return resultsPanels[i];\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.onResize = function (e) {\r\n const self = this;\r\n const target = e.target;\r\n if (target.querySelector('.tc-chart.c3')) {\r\n target.classList.remove(TC.Consts.classes.LOADING);\r\n const newSize = self.getResizableChartSize(target);\r\n if (newSize) {\r\n let resultsPanel = self.getResultsPanelFromElement(target);\r\n if (resultsPanel) {\r\n resultsPanel.chart.chart.resize(newSize);\r\n }\r\n }\r\n }\r\n self.map.trigger(TC.Consts.event.RESULTSPANELRESIZE, {\r\n control: self, size: {\r\n width: target.getBoundingClientRect().width,\r\n height: target.getBoundingClientRect().height\r\n }\r\n });\r\n };\r\n\r\n ctlProto.minimize = function () {\r\n const self = this;\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (collapsedElm.classList.contains(TC.Consts.classes.HIDDEN)) { // ya está minimizado\r\n collapsedElm.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n self.hide('prsidebar-body');\r\n self.show('prcollapsed-max');\r\n\r\n self.map.trigger(TC.Consts.event.RESULTSPANELMIN, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.maximize = function () {\r\n const self = this;\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (!collapsedElm.classList.contains(TC.Consts.classes.HIDDEN)) { // ya está maximizado\r\n collapsedElm.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n self.show('prsidebar-body');\r\n self.hide('prcollapsed-max');\r\n\r\n self.map.trigger(TC.Consts.event.RESULTSPANELMAX, { control: self });\r\n }\r\n };\r\n\r\n ctlProto.close = function () {\r\n const self = this;\r\n\r\n self.div.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n if (self.chart && self.chart.chart) {\r\n // preservamos el tamaño redimensionado por el usuario\r\n const resizedTarget = self.div.querySelector('.' + self.classes.RESIZABLE + '.prpanel-default');\r\n if (resizedTarget && resizedTarget.style && resizedTarget.style.width && resizedTarget.style.height) {\r\n const chartElement = resizedTarget.querySelector('.tc-chart');\r\n const chartBounding = chartElement.getBoundingClientRect();\r\n // cuando el panel está colapsado no tenemos disponible el tamaño del perfil\r\n if (parseInt(chartBounding.width) > 0 && parseInt(chartBounding.height) > 0) {\r\n resizedTarget.dataset.chartSizeWidth = chartBounding.width;\r\n resizedTarget.dataset.chartSizeHeight = chartBounding.height;\r\n }\r\n resizedTarget.dataset.panelSizeWidth = resizedTarget.style.width;\r\n resizedTarget.dataset.panelSizeHeight = resizedTarget.style.height;\r\n }\r\n self.chart.chart = self.chart.chart.destroy();\r\n }\r\n\r\n const body = self.getContainerElement();\r\n if (body) {\r\n body.style.display = 'none';\r\n self.div.querySelector('.prcollapsed-max').style.display = 'none';\r\n body.querySelectorAll('video,audio,iframe').forEach(elm => elm.remove());\r\n\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n collapsedElm.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n let resizable = document.querySelector(\".\" + self.classes.RESIZABLE);\r\n if (resizable) {\r\n resizable.style = \"\";\r\n }\r\n\r\n self.map.trigger(TC.Consts.event.RESULTSPANELCLOSE, { control: self, feature: self.currentFeature });\r\n }\r\n };\r\n\r\n ctlProto.openChart = function (data) {\r\n const self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n // Cerramos el resto de los perfiles\r\n self.map.getControlsByClass(TC.control.ResultsPanel)\r\n .filter(function (ctl) {\r\n return ctl !== self;\r\n })\r\n .filter(function (ctl) {\r\n return ctl.options.content === 'chart';\r\n })\r\n .forEach(function (ctl) {\r\n ctl.close();\r\n });\r\n\r\n if (data) {\r\n\r\n if (data.msg) {\r\n self.map.toast(data.msg);\r\n if (self.isVisible()) {\r\n self.hide('prsidebar-body');\r\n }\r\n }\r\n else {\r\n self.elevationProfileChartData = data;\r\n self.renderElevationProfileChart({\r\n data: data,\r\n div: self.div.querySelector('.' + ctlProto.CLASS + '-chart')\r\n });\r\n }\r\n }\r\n };\r\n\r\n const formatYAxis = function (d, locale) {\r\n let y = parseInt(d.toFixed(0)) || 0;\r\n return y.toLocaleString(locale) + ' m';\r\n };\r\n\r\n ctlProto.renderElevationProfileChart = function (options) {\r\n const self = this;\r\n options = options || {};\r\n TC.loadJS(!window.c3,\r\n TC.Consts.url.D3C3 || TC.apiLocation + 'lib/d3c3/d3c3.min.js',\r\n function () {\r\n const data = options.data;\r\n data.ele = data.ele.map(val => val === null ? 0 : val);\r\n const div = options.div;\r\n let locale = TC.Util.getMapLocale(self.map);\r\n\r\n var templateData = {\r\n upHill: data.upHill ? data.upHill.toLocaleString(locale) : '0',\r\n downHill: data.downHill ? data.downHill.toLocaleString(locale) : '0'\r\n };\r\n\r\n const hasSecondaryElevationProfileChartData = data.secondaryElevationProfileChartData &&\r\n Array.isArray(data.secondaryElevationProfileChartData) &&\r\n data.secondaryElevationProfileChartData.length > 0 && data.secondaryElevationProfileChartData[0];\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n templateData.min = formatYAxis(data.min, locale);\r\n templateData.max = formatYAxis(data.max, locale);\r\n\r\n templateData.secondChart = {\r\n upHill: data.secondaryElevationProfileChartData[0].upHill ? data.secondaryElevationProfileChartData[0].upHill.toLocaleString(locale) : '0',\r\n downHill: data.secondaryElevationProfileChartData[0].downHill ? data.secondaryElevationProfileChartData[0].downHill.toLocaleString(locale) : '0',\r\n min: formatYAxis(data.secondaryElevationProfileChartData[0].min, locale),\r\n max: formatYAxis(data.secondaryElevationProfileChartData[0].max, locale)\r\n };\r\n }\r\n self.getRenderedHtml(ctlProto.CLASS + '-chart', templateData, function (out) {\r\n\r\n div.innerHTML = out;\r\n div.style.display = '';\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n const titleElm = self.div.querySelector('.prpanel-title-text');\r\n titleElm.setAttribute('title', self.options.titles.main);\r\n titleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n self.div.querySelector('.prcollapsed-max').setAttribute('title', self.options.titles.max);\r\n }\r\n }\r\n\r\n var legendOptions = { show: false };\r\n if (hasSecondaryElevationProfileChartData) {\r\n legendOptions = {\r\n position: 'inset',\r\n inset: {\r\n anchor: \"bottom-left\",\r\n x: -55,\r\n y: -30,\r\n step: 1\r\n }\r\n };\r\n }\r\n let chartOptions = TC.Util.extend({\r\n bindto: div.querySelector('.tc-chart'),\r\n padding: {\r\n top: 13, // por el nuevo diseño del tooltip añado 13 //data.secondaryElevationProfileChartData[0] ? 10 : 0,\r\n right: 15,\r\n bottom: 0,\r\n left: 45\r\n },\r\n legend: legendOptions\r\n }, self.createChartOptions(data));\r\n\r\n // preservamos el tamaño redimensionado por el usuario\r\n const resizedTarget = self.div.querySelector('.' + self.classes.RESIZABLE + '.prpanel-default');\r\n if (resizedTarget &&\r\n resizedTarget.dataset.chartSizeWidth && parseInt(resizedTarget.dataset.chartSizeWidth) > 0 &&\r\n resizedTarget.dataset.chartSizeHeight && parseInt(resizedTarget.dataset.chartSizeHeight) > 0) {\r\n TC.Util.extend(chartOptions.size, { width: resizedTarget.dataset.chartSizeWidth, height: resizedTarget.dataset.chartSizeHeight });\r\n\r\n if (resizedTarget.dataset.panelSizeWidth && parseInt(resizedTarget.dataset.panelSizeWidth) > 0 &&\r\n resizedTarget.dataset.panelSizeHeight && parseInt(resizedTarget.dataset.panelSizeHeight) > 0) {\r\n resizedTarget.style.width = resizedTarget.dataset.panelSizeWidth;\r\n resizedTarget.style.height = resizedTarget.dataset.panelSizeHeight;\r\n }\r\n }\r\n if (self.chart.tooltip) {\r\n chartOptions.tooltip = {\r\n position: function (_data, _width, _height, element) {\r\n let container = document.querySelector('.c3-tooltip-container');\r\n let chartOffsetX = document.querySelector(\".c3\").getBoundingClientRect().left;\r\n let graphOffsetX = document.querySelector(\".c3 g.c3-axis-y\").getBoundingClientRect().right;\r\n let tooltipWidth = container.clientWidth;\r\n let x = parseInt(d3.mouse(element)[0]) + graphOffsetX - chartOffsetX - Math.floor(tooltipWidth / 2);\r\n\r\n // alto del tooltipOnBottom\r\n let xAxisHeight = document.querySelector(\".c3 g.c3-axis-x\").getBoundingClientRect().height + 2;\r\n let onBottom = container.querySelector(\".onBottom\");\r\n if (onBottom && xAxisHeight) {\r\n onBottom.style.height = xAxisHeight + 'px';\r\n }\r\n return { top: 0, left: x };\r\n },\r\n contents: function (d) {\r\n var fn = self.chart.tooltip;\r\n if (typeof fn !== \"function\")\r\n fn = TC.Util.getFnFromString(self.chart.tooltip);\r\n return fn.call(eval(self.chart.ctx), d);\r\n }\r\n };\r\n }\r\n\r\n if (self.chart && self.chart.onmouseout) {\r\n chartOptions.onmouseout = function () {\r\n var fn = self.chart.onmouseout;\r\n if (typeof fn !== \"function\")\r\n fn = TC.Util.getFnFromString(self.chart.onmouseout);\r\n fn.call(eval(self.chart.ctx));\r\n };\r\n }\r\n\r\n chartOptions.onrendered = function () {\r\n if (TC.Util.isFunction(chartOptions._onrendered)) {\r\n chartOptions._onrendered.call(this);\r\n }\r\n self.map.trigger(TC.Consts.event.DRAWCHART, { control: self, svg: this.svg[0][0], chart: this });\r\n };\r\n\r\n if (window.c3) {\r\n\r\n if (!c3._isOverriden) {\r\n // GLS: Override de la función generateDrawLine y generateDrawArea para establecer otro tipo de interpolación en la línea\r\n window.c3.chart.internal.fn.generateDrawLine = function (lineIndices, isSub) {\r\n var $$ = this, config = $$.config,\r\n line = $$.d3.svg.line(),\r\n getPoints = $$.generateGetLinePoints(lineIndices, isSub),\r\n yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\r\n xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\r\n yValue = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);\r\n };\r\n line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);\r\n if (!config.line_connectNull) { line = line.defined(function (d) { return d.value != null; }); }\r\n return function (d) {\r\n var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\r\n x = isSub ? $$.x : $$.subX, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;\r\n if ($$.isLineType(d)) {\r\n if (config.data_regions[d.id]) {\r\n path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\r\n } else {\r\n if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\r\n path = line.interpolate('linear')(values);\r\n }\r\n } else {\r\n if (values[0]) {\r\n x0 = x(values[0].x);\r\n y0 = y(values[0].value);\r\n }\r\n path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\r\n }\r\n return path ? path : \"M 0 0\";\r\n };\r\n };\r\n window.c3.chart.internal.fn.generateDrawArea = function (areaIndices, isSub) {\r\n var $$ = this, config = $$.config, area = $$.d3.svg.area(),\r\n getPoints = $$.generateGetAreaPoints(areaIndices, isSub),\r\n yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,\r\n xValue = function (d) { return (isSub ? $$.subxx : $$.xx).call($$, d); },\r\n value0 = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(0);\r\n },\r\n value1 = function (d, i) {\r\n return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);\r\n };\r\n area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(value0).y1(value1);\r\n if (!config.line_connectNull) {\r\n area = area.defined(function (d) { return d.value !== null; });\r\n }\r\n return function (d) {\r\n var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,\r\n x0 = 0, y0 = 0, path;\r\n if ($$.isAreaType(d)) {\r\n if ($$.isStepType(d)) { values = $$.convertValuesToStep(values); }\r\n path = area.interpolate('linear')(values);\r\n } else {\r\n if (values[0]) {\r\n x0 = $$.x(values[0].x);\r\n y0 = $$.getYScale(d.id)(values[0].value);\r\n }\r\n path = config.axis_rotated ? \"M \" + y0 + \" \" + x0 : \"M \" + x0 + \" \" + y0;\r\n }\r\n return path ? path : \"M 0 0\";\r\n };\r\n };\r\n c3._isOverriden = true;\r\n }\r\n\r\n self.chart.chart = c3.generate(chartOptions);\r\n }\r\n });\r\n }\r\n );\r\n };\r\n\r\n const closeOpenedTableResultsPanel = function () {\r\n const self = this;\r\n\r\n self.map.getControlsByClass(TC.control.ResultsPanel)\r\n .filter(function (ctl) {\r\n return ctl !== self && ctl.isVisible();\r\n })\r\n .filter(function (ctl) {\r\n return ctl.options.content !== 'chart';\r\n })\r\n .forEach(function (ctl) {\r\n ctl.close();\r\n });\r\n };\r\n\r\n ctlProto.openTable = function () {\r\n var self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n var data = arguments[0];\r\n if (data) {\r\n\r\n var css;\r\n if (data.css) {\r\n css = data.css;\r\n }\r\n var callback = data.callback;\r\n var columns = data.columns;\r\n\r\n if (data.data && data.data.length > 0) {\r\n //Si no recibe columnas, las extrae de las claves del primer objeto de la colección de datos\r\n if (!columns) {\r\n columns = [];\r\n for (var k in data.data[0]) {\r\n columns.push(k);\r\n }\r\n }\r\n\r\n //deleteColumns();\r\n\r\n self.tableData = {\r\n columns: columns,\r\n results: data.data,\r\n css: css,\r\n callback: callback,\r\n sort: data.sort ? {} : null\r\n };\r\n var scrollPosition = null;\r\n const _sort = (tableData, field, order) => {\r\n var sortedDataTable = tableData;\r\n if (field) {\n const mappedArr = self.tableData.results.map(function (el, i) {\r\n return { index: i, properties: el };\r\n });\n mappedArr.sort((a, b) => {\n const valorA = a.properties[field] || \"\";\n const valorB = b.properties[field] || \"\";\n if (order)\n if (typeof (valorA) === \"string\")\n return valorA.localeCompare(valorB)\n else\n return valorA < valorB ? -1 : (valorA == valorB ? 0 : 1);\n else\n if (typeof (valorB) === \"string\")\n return valorB.localeCompare(valorA)\n else\n return valorA < valorB ? 1 : (valorA == valorB ? 0 : -1);\n });\n\n sortedDataTable = Object.assign({}, tableData, {\r\n results: mappedArr.map(function (el) {\n return Object.assign({}, el.properties, { index: el.index });\n })\r\n });\n sortedDataTable.sort = { field: field, order: order };\n }\r\n self.getRenderedHtml(self.CLASS + '-table', sortedDataTable).then(function (html) {\r\n const table = self.div.querySelector('.' + self.CLASS + '-table');\r\n const parent = table.parentElement;\r\n parent.removeChild(table);\r\n table.innerHTML = html;\r\n parent.appendChild(table);\r\n if (tableData.callback) {\r\n tableData.callback(table);\r\n }\r\n if (sortedDataTable.sort) {\r\n table.querySelectorAll(\"thead th\").forEach(th => {\r\n th.addEventListener(\"click\", e => {\n scrollPosition = e.target.offsetParent.scrollLeft;\r\n const field = e.target.dataset.orderField || e.target.innerText\r\n\r\n if (sortedDataTable.sort.field === field && sortedDataTable.sort.order)\r\n _sort(tableData, field, false);\r\n else if (sortedDataTable.sort.field === field && !sortedDataTable.sort.order) {\n _sort(tableData, field, true);\n } else {\n _sort(tableData, field, true);\n }\r\n });\r\n });\r\n }\r\n closeOpenedTableResultsPanel.call(self);\r\n\r\n self.map.trigger(TC.Consts.event.DRAWTABLE, { control: self });\n if (scrollPosition) {\n table.scrollLeft = scrollPosition;\n }\r\n });\r\n };\r\n _sort(self.tableData);\r\n\r\n self.div.querySelector('.' + self.CLASS + '-chart').style.display = 'none';\r\n self.div.querySelector('.' + self.CLASS + '-info').style.display = 'none';\r\n\r\n self.show('prsidebar-body');\r\n }\r\n }\r\n };\r\n\r\n ctlProto.open = function (html, container) {\r\n const self = this;\r\n\r\n self.onOpen();\r\n self.div.classList.remove(TC.Consts.classes.HIDDEN);\r\n\r\n const toCheck = container || self.div.querySelector('.' + self.CLASS + '-table');\r\n var checkIsRendered = function () {\r\n var clientRect = toCheck.getBoundingClientRect();\r\n if (clientRect && clientRect.width > 100) {\r\n window.cancelAnimationFrame(this.requestIsRendered);\r\n\r\n //closeOpenedTableResultsPanel.call(self);\r\n this.map.trigger(TC.Consts.event.DRAWTABLE, { control: self });\r\n }\r\n };\r\n\r\n self.requestIsRendered = window.requestAnimationFrame(checkIsRendered.bind(self));\r\n\r\n const chartElm = self.div.querySelector('.' + self.CLASS + '-chart');\r\n chartElm.style.display = 'none';\r\n const tableElm = self.div.querySelector('.' + self.CLASS + '-table');\r\n tableElm.style.display = 'none';\r\n const infoElm = self.div.querySelector('.' + self.CLASS + '-info');\r\n infoElm.style.display = 'none';\r\n\r\n if (html) {\r\n if (container) {\r\n self.getTableContainer = function () {\r\n return container;\r\n };\r\n container.innerHTML = html;\r\n container.style.display = '';\r\n } else {\r\n tableElm.innerHTML = html;\r\n tableElm.style.display = '';\r\n }\r\n }\r\n else {\r\n if (chartElm.childElementCount) {\r\n chartElm.style.display = '';\r\n }\r\n else if (tableElm.childElementCount) {\r\n tableElm.style.display = '';\r\n }\r\n else if (infoElm.childElementCount) {\r\n infoElm.style.display = '';\r\n }\r\n }\r\n\r\n const maximizeElm = self.div.querySelector('.prcollapsed-max');\r\n\r\n if (self.options.titles) {\r\n\r\n if (self.options.titles.main) {\r\n const titleElm = self.div.querySelector('.prpanel-title-text');\r\n titleElm.setAttribute('title', self.options.titles.main);\r\n titleElm.innerHTML = self.options.titles.main;\r\n }\r\n\r\n if (self.options.titles.max) {\r\n maximizeElm.setAttribute('title', self.options.titles.max);\r\n }\r\n }\r\n\r\n if (self.options.classes) {\r\n if (self.options.classes.collapsed) {\r\n maximizeElm.querySelector('span.prcollapsed-max-table').classList.add(self.options.classes.collapsed);\r\n }\r\n }\r\n\r\n // si está minimizado\r\n const collapsedElm = self.div.querySelector(self.content.collapsedClass);\r\n if (isElementVisible(collapsedElm)) {\r\n self.maximize();\r\n }\r\n\r\n self.show('prsidebar-body');\r\n self.hide('prcollapsed-max');\r\n };\r\n\r\n ctlProto.onOpen = function () {\r\n const self = this;\r\n if (self.resizable) {\r\n self.renderPanelResizable({ target: self.div, preserveAspectRatio: true });\r\n }\r\n else {\r\n hideResizeHandlers(self);\r\n }\r\n };\r\n\r\n ctlProto.loadDataOnChart = function (data) {\r\n const self = this;\r\n const endFn = function () {\r\n self.elevationProfileChartData = data;\r\n self.renderElevationProfileChart({\r\n data: data,\r\n div: self.div.querySelector('.' + ctlProto.CLASS + '-chart')\r\n });\r\n };\r\n // puede llegar aquí después de borrar un track.\r\n if (self.chart && self.chart.chart) {\r\n self.chart.chart.unload({\r\n done: endFn\r\n });\r\n }\r\n else {\r\n endFn();\r\n }\r\n };\r\n\r\n ctlProto.createChartOptions = function (options) {\r\n const self = this;\r\n var result = {};\r\n options = options || {};\r\n const locale = options.locale || TC.Util.getMapLocale(self.map);\r\n switch (options.chartType) {\r\n default:\r\n if (options.ele != null) {\r\n const getChartSize = function () {\r\n const panelStyle = getComputedStyle(self.getContainerElement());\r\n const docWidth = document.documentElement.clientWidth / 100 * 40; // css panel contendor\r\n const r = {\r\n height: docWidth > 445 ? options.maxHeight || self.CHART_SIZE.MAX_HEIGHT : options.minHeight || self.CHART_SIZE.MIN_HEIGHT\r\n };\r\n // Si el panel ocupa el ancho del mapa dejamos el ancho del perfil que ocupe todo, en cualquier otro caso tenemos tres anchos predefinidos.\r\n if (panelStyle.width === getComputedStyle(self.map.div).width) {\r\n r.width = parseFloat(panelStyle.width) * 0.95;\r\n }\r\n else {\r\n r.width = docWidth > 445 ? options.maxWidth || self.CHART_SIZE.MAX_WIDTH : docWidth > 310 ? options.mediumWidth || self.CHART_SIZE.MEDIUM_WIDTH : options.minWidth || self.CHART_SIZE.MIN_WIDTH;\r\n }\r\n return r;\r\n };\r\n const gradIds = ['grad' + TC.getUID()];\r\n\r\n let maxy = Number.NEGATIVE_INFINITY;\r\n let miny = Number.POSITIVE_INFINITY;\r\n options.ele.forEach(function (y) {\r\n if (typeof y === 'number') {\r\n maxy = Math.max(y, maxy);\r\n miny = Math.min(y, miny);\r\n }\r\n });\r\n\r\n let xColumn = [...options.x];\r\n let eleColumn = [...options.ele];\r\n\r\n result = {\r\n data: {\r\n x: 'x',\r\n columns: [\r\n ['x'].concat(xColumn),\r\n ['ele'].concat(eleColumn)\r\n ],\r\n types: {\r\n 'ele': 'area-spline'\r\n },\r\n colors: {\r\n \"ele\": 'url(#' + gradIds[0] + ')'\r\n }\r\n },\r\n size: getChartSize(),\r\n point: {\r\n show: false\r\n },\r\n axis: {\r\n x: {\r\n tick: {\r\n outer: false,\r\n count: 5, format: function (d) {\r\n d = d / 1000;\r\n var dist;\r\n var measure;\r\n if (d < 1) {\r\n dist = Math.round(d * 1000);\r\n measure = ' m';\r\n } else {\r\n dist = Math.round(d * 100) / 100;\r\n measure = ' km';\r\n }\r\n\r\n dist = dist.toLocaleString(locale);\r\n return dist + measure;\r\n }\r\n }\r\n },\r\n y: {\r\n padding: {\r\n top: 0, bottom: 0\r\n },\r\n max: maxy,\r\n min: miny,\r\n tick: {\r\n count: 2,\r\n format: function (d) {\r\n return formatYAxis(d, locale);\r\n }\r\n }\r\n }\r\n },\r\n onresize: function () {\r\n let size;\r\n let targetNode = this.config.bindto.closest('.' + self.classes.RESIZABLE + '.prpanel-default');\r\n if (targetNode) {\r\n size = self.getResizableChartSize(targetNode);\r\n } else {\r\n size = getChartSize();\r\n }\r\n if (size) {\r\n this.api.resize(size);\r\n }\r\n }\r\n };\r\n\r\n const hasSecondaryElevationProfileChartData = options.secondaryElevationProfileChartData &&\r\n Array.isArray(options.secondaryElevationProfileChartData) &&\r\n options.secondaryElevationProfileChartData.length > 0 && options.secondaryElevationProfileChartData[0];\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n result.data.names = {\r\n ele: self.getLocaleString(\"geo.profile.fromTrack\"),\r\n ele2: self.getLocaleString(\"mdt\")\r\n };\r\n result.data.columns.push(['ele2'].concat(options.secondaryElevationProfileChartData[0].ele));\r\n\r\n result.data.types.ele2 = result.data.types.ele;\r\n gradIds.push('grad' + TC.getUID());\r\n result.data.colors.ele2 = 'url(#' + gradIds[gradIds.length - 1] + ')';\r\n result.data.axes = {\r\n ele: 'y'\r\n };\r\n\r\n if (eleColumn.every((val) => val === 0)) {\r\n result.axis.y.min = options.secondaryElevationProfileChartData[0].min;\r\n result.axis.y.max = options.secondaryElevationProfileChartData[0].max;\r\n } else if (options.secondaryElevationProfileChartData[0].ele.every((val) => val === 0)) {\r\n result.axis.y.min = Math.min(...eleColumn);\r\n result.axis.y.max = Math.max(...eleColumn);\r\n } else {\r\n result.axis.y.min = Math.min(...eleColumn.concat(options.secondaryElevationProfileChartData[0].min));\r\n result.axis.y.max = Math.max(...eleColumn.concat(options.secondaryElevationProfileChartData[0].max));\r\n }\r\n }\r\n\r\n if (options.time) result.time = (\"00000\" + options.time.h).slice(-2) + ':' + (\"00000\" + options.time.m).slice(-2) + ':' + (\"00000\" + options.time.s).slice(-2);\r\n\r\n var rendered = false;\r\n result._onrendered = function () {\r\n if (!rendered) {\r\n rendered = true;\r\n\r\n if (hasSecondaryElevationProfileChartData) {\r\n // redondeamos los cuadritos de la leyenda.\r\n document.querySelectorAll('.c3-legend-item-tile').forEach((item) => {\r\n item.setAttribute('rx', 5);\r\n item.setAttribute('ry', 1);\r\n });\r\n // añdimos title a los elementos de la leyenda\r\n document.querySelectorAll('.c3-legend-item').forEach((item) => {\r\n var title = document.createElementNS('http://www.w3.org/2000/svg', 'title');\r\n title.textContent = self.getLocaleString(\"hide\");\r\n item.appendChild(title);\r\n\r\n item.addEventListener(TC.Consts.event.CLICK, function () {\r\n if (item.classList.contains(TC.Consts.classes.HIDDEN)) {\r\n item.querySelector('title').textContent = self.getLocaleString(\"hide\");\r\n } else {\r\n item.querySelector('title').textContent = self.getLocaleString(\"show\");\r\n }\r\n\r\n item.classList.toggle(TC.Consts.classes.HIDDEN);\r\n }, { passive: true });\r\n });\r\n }\r\n }\r\n\r\n if (!this.svg) {\r\n return; // es posible que lleguemos aquí y el usuario justo haya deseleccionado el track de la lista.\r\n }\r\n\r\n const svg = this.svg[0][0];\r\n var svgDefsElement = svg.getElementsByTagName('defs')[0];\r\n var xmlns = \"http://www.w3.org/2000/svg\";\r\n\r\n const createLinearGradient = function (id, colors) {\r\n var grad = document.createElementNS(xmlns, \"linearGradient\");\r\n grad.setAttributeNS(null, \"id\", id);\r\n grad.setAttributeNS(null, \"x1\", \"0%\");\r\n grad.setAttributeNS(null, \"x2\", \"0%\");\r\n grad.setAttributeNS(null, \"y1\", \"0%\");\r\n grad.setAttributeNS(null, \"y2\", \"100%\");\r\n grad.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\r\n\r\n const stop0 = document.createElementNS(xmlns, \"stop\");\r\n stop0.setAttributeNS(null, \"offset\", \"0%\");\r\n stop0.setAttributeNS(null, \"stop-color\", colors[0]);\r\n stop0.setAttributeNS(null, \"stop-opacity\", \"0.7\");\r\n grad.appendChild(stop0);\r\n\r\n const stop50 = document.createElementNS(xmlns, \"stop\");\r\n stop50.setAttributeNS(null, \"offset\", \"50%\");\r\n stop50.setAttributeNS(null, \"stop-color\", colors[1]);\r\n stop50.setAttributeNS(null, \"stop-opacity\", \"0.9\");\r\n grad.appendChild(stop50);\r\n\r\n const stop100 = document.createElementNS(xmlns, \"stop\");\r\n stop100.setAttributeNS(null, \"offset\", \"100%\");\r\n stop100.setAttributeNS(null, \"stop-color\", colors[2]);\r\n stop100.setAttributeNS(null, \"stop-opacity\", \"1\");\r\n grad.appendChild(stop100);\r\n\r\n svgDefsElement.appendChild(grad);\r\n };\r\n\r\n createLinearGradient(gradIds[0], [\"red\", \"orange\", \"green\"]);\r\n if (options.secondaryElevationProfileChartData) {\r\n createLinearGradient(gradIds[gradIds.length - 1], [\"blue\", \"cian\", \"green\"]);\r\n }\r\n\r\n const d3Node = d3.select(\".c3-brush\").node();\r\n if (d3Node) {\r\n d3Node.parentNode.removeChild(d3Node);\r\n }\r\n\r\n d3.select(\".c3-event-rects,.c3-event-rects-single\")\r\n .selectAll(\"rect\")\r\n .style(\"cursor\", \"pointer\")\r\n .on(\"click\", function (e) {\r\n d3.event.stopPropagation();\r\n let point = self.elevationProfileChartData.coords[e.index];\r\n if (point) {\r\n point = point.slice(0, 2);\r\n if (self.map.crs !== self.map.options.utmCrs) {\r\n point = TC.Util.reproject(point, self.map.options.utmCrs, self.map.crs);\r\n }\r\n self.map.zoomToFeatures([new TC.feature.Point(point, {})]);\r\n }\r\n });\r\n\r\n const path = d3.select('.c3-axis.c3-axis-x').select('path');\r\n if (!path.empty()) {\r\n let pattern = path.attr('d');\r\n let match = /^M\\d\\,(\\d)V\\dH\\d{3}V(\\d)$/i.exec(pattern);\r\n if (match) { // quitamos las barritas de los extremos del axis-x\r\n pattern = pattern.replace(/(M\\d\\,)\\d/i, \"$10\").replace(/(H\\d{3}V)(\\d)/i, \"$10\");\r\n path.attr('d', pattern);\r\n } else {\r\n let match = /^M\\s\\d\\s(\\d)\\sV\\s\\d\\sH\\s\\d{3}\\sV\\s(\\d)$/i.exec(pattern);\r\n if (match) { // quitamos las barritas de los extremos del axis-x\r\n pattern = pattern.replace(/(M\\s\\d\\s)\\d/i, \"$10\").replace(/(H\\s\\d{3}\\sV\\s)(\\d)/i, \"$10\");\r\n path.attr('d', pattern);\r\n }\r\n }\r\n }\r\n\r\n\r\n const svgRect = svg.getBoundingClientRect();\r\n const chartSize = {\r\n width: svgRect.width,\r\n height: svgRect.height\r\n };\r\n\r\n // revisar\r\n //svg.removeAttribute('height');\n //svg.removeAttribute('width');\n\n //svg.setAttribute('viewbox', '0 0 ' + chartSize.width + ' ' + chartSize.height);\n\r\n // ¿es necesario pasar los labels a multiline?\r\n var setMultilineLabels = function () {\r\n var x = d3.scale.ordinal().rangeRoundBands([0, chartSize.width], .1, .3);\r\n d3.select('.c3-axis-x').selectAll('text:not(.c3-axis-x-label)')\r\n .call(function (textNode, _width) {\r\n textNode.each(function () {\r\n textNode.each(function (d, i) {\r\n if (i === 0) {\r\n return;\r\n }\r\n\r\n const d3text = d3.select(this);\r\n\r\n if (d3text.node().childNodes.length === 1) {\r\n var clone = d3text.select('tspan').node().cloneNode();\r\n var words = d3text.text().split(' ');\r\n\r\n d3text.select('tspan').text(words[0]);\r\n clone.textContent = words[1];\r\n var dy = clone.getAttribute('dy');\r\n dy = dy ? parseFloat(clone.getAttribute('dy')) : .71;\r\n dy = dy + 0.18 + 'em';\r\n clone.setAttribute('dy', dy);\r\n d3text.node().appendChild(clone);\r\n }\r\n });\r\n });\r\n }, x.rangeBand());\r\n };\r\n\r\n const xAxisNodeRect = d3.select('.c3-axis-x').node().getBoundingClientRect();\r\n if (!xAxisNodeRect.width) {\r\n\r\n if (self.elevationChartLabelsRAF) {\r\n window.cancelAnimationFrame(self.elevationChartLabelsRAF);\r\n self.elevationChartLabelsRAF = undefined;\r\n }\r\n\r\n const hasSize = function () {\r\n const xAxis = d3.select('.c3-axis-x');\r\n const xAxisNode = xAxis.node();\r\n if (xAxis.length && !xAxisNode) {\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n }\r\n else if (xAxis.length && xAxisNode &&\r\n !xAxisNode.getBoundingClientRect().width) {\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n } else {\r\n window.cancelAnimationFrame(self.elevationChartLabelsRAF);\r\n self.elevationChartLabelsRAF = undefined;\r\n\r\n const _xAxisNodeRect = xAxisNode.getBoundingClientRect();\r\n const _yAxisNodeRect = d3.select('.c3-axis-y').node().getBoundingClientRect();\r\n if (_xAxisNodeRect.width >= chartSize.width - _yAxisNodeRect.width ||\r\n _xAxisNodeRect.width * 100 / (chartSize.width - _yAxisNodeRect.width) > 90) {\r\n setMultilineLabels();\r\n }\r\n }\r\n };\r\n\r\n self.elevationChartLabelsRAF = requestAnimationFrame(hasSize);\r\n }\r\n else {\r\n const yAxisNodeRect = d3.select('.c3-axis-y').node().getBoundingClientRect();\r\n if (xAxisNodeRect.width >= chartSize.width - yAxisNodeRect.width ||\r\n xAxisNodeRect.width * 100 / (chartSize.width - yAxisNodeRect.width) > 90) {\r\n setMultilineLabels();\r\n }\r\n }\r\n\r\n // pasamos el perfil original adelante si no no se aprecian bien las diferencias por el color y si lo gestionamos antes afecta a la leyenda\r\n d3.select('svg').select(\".c3-chart-lines\").selectAll(\".c3-target-ele\").each(function () {\r\n this.parentNode.appendChild(this);\r\n });\r\n\r\n if (!self.isMinimized()) {\r\n self.show('prsidebar-body');\r\n self.hide('prcollapsed-max');\r\n }\r\n\r\n\r\n self.div.querySelector('.' + self.CLASS + '-table').style.display = '';\r\n self.div.querySelector('.' + self.CLASS + '-info').style.display = '';\r\n };\r\n }\r\n else {\r\n result = {\r\n msg: self.getLocaleString(\"geo.trk.chart.chpe.empty\")\r\n };\r\n }\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n const getTime = function (timeFrom, timeTo) {\r\n var diff = timeTo - timeFrom;\r\n var d = {};\r\n var daysDifference = Math.floor(diff / 1000 / 60 / 60 / 24);\r\n diff -= daysDifference * 1000 * 60 * 60 * 24;\r\n\r\n var hoursDifference = Math.floor(diff / 1000 / 60 / 60);\r\n diff -= hoursDifference * 1000 * 60 * 60;\r\n\r\n d.h = hoursDifference + daysDifference * 24;\r\n\r\n var minutesDifference = Math.floor(diff / 1000 / 60);\r\n diff -= minutesDifference * 1000 * 60;\r\n\r\n d.m = minutesDifference;\r\n\r\n d.s = Math.floor(diff / 1000);\r\n\r\n return TC.Util.extend({}, d, { toString: (\"00000\" + d.h).slice(-2) + ':' + (\"00000\" + d.m).slice(-2) + ':' + (\"00000\" + d.s).slice(-2) });\r\n };\r\n\r\n ctlProto.getElevationChartTooltip = function (data) {\r\n const self = this;\r\n\r\n const locale = self.map.options.locale && self.map.options.locale.replace('_', '-') || undefined;\r\n const coords = self.elevationProfileChartData.coords;\r\n const getElevationByDataElem = function (dataElem) {\r\n return dataElem.value ? parseInt(dataElem.value.toFixed(0)).toLocaleString(locale) : \"0\";\r\n };\r\n const p = coords[data[0].index];\r\n let doneTime;\r\n if (coords[0].length === 4 && coords[0][3] > 0 && p) {\r\n doneTime = getTime(coords[0][3], p[3]);\r\n }\r\n let distance = data[0].x / 1000;\r\n let distanceFormatted = (distance < 1 ? Math.round(distance * 1000) : Math.round(distance * 100) / 100).toLocaleString(locale) + (distance < 1 ? ' m' : ' km');\r\n\r\n let elevationDiv = '
                ' +\r\n '' +\r\n data.map((elem, index) => {\r\n if (elem) {\r\n return index === 0 ? '' + getElevationByDataElem(elem) + ' m' + '' :\r\n '' + getElevationByDataElem(elem) + ' m ' + '';\r\n } else {\r\n return \"\";\r\n }\r\n }).join('') +\r\n '' +\r\n '
                ';\r\n\r\n let distanceAndTimeDiv = '
                ' +\r\n '' + distanceFormatted + ' ' +\r\n (doneTime ? '' + doneTime.toString + '' + '
                ' : '
                ');\r\n\r\n\r\n return elevationDiv + distanceAndTimeDiv;\r\n };\r\n\r\n ctlProto.getTableContainer = function () {\r\n return this.tableDiv;\r\n };\r\n\r\n ctlProto.getInfoContainer = function () {\r\n return this.infoDiv;\r\n };\r\n\r\n ctlProto.getMenuElement = function () {\r\n return this.menuDiv;\r\n };\r\n\r\n ctlProto.getContainerElement = function () {\r\n return this.div.querySelector('.prsidebar-body');\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n self.wrap.register(map);\r\n\r\n if (self.openOn) {\r\n self.map.one(self.openOn, function (e, _args) {\r\n self.content.fnOpen.call(self, e.data);\r\n });\r\n }\r\n\r\n if (self.closeOn) {\r\n self.map.one(self.closeOn, function (_e, _args) {\r\n self.close();\r\n });\r\n }\r\n\r\n if (self.options.openOn) {\r\n self.map.on(self.options.openOn, function (e, _args) {\r\n self.content.fnOpen.call(self, e.data);\r\n });\r\n }\r\n\r\n if (self.options.closeOn) {\r\n self.map.on(self.options.closeOn, function (_e, _args) {\r\n self.close();\r\n });\r\n }\r\n\r\n map\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.currentFeature === e.feature && self.isVisible()) {\r\n self.close();\r\n }\r\n })\r\n .on(TC.Consts.event.FEATURESCLEAR + ' ' + TC.Consts.event.LAYERREMOVE, function (e) {\r\n if (self.currentFeature && self.currentFeature.layer === e.layer && self.isVisible()) {\r\n self.close();\r\n }\r\n });\r\n\r\n //map.on(TC.Consts.event.VIEWCHANGE, function () {\r\n\r\n // map.getControlsByClass(TC.control.ResultsPanel).filter(function (ctl) {\r\n // return ctl.options.content !== \"chart\" && ($(ctl.div).find('.' + ctl.CLASS + '-info:visible').length === 1 || $(ctl.div).find('.' + ctl.CLASS + '-table:visible').length === 1);\r\n // }).forEach(function (ctl) {\r\n // ctl.close();\r\n // });\r\n //});\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.exportToExcel = function () {\r\n const self = this;\r\n\r\n var rows = [self.tableData.columns];\r\n\r\n self.tableData.results.forEach(function (value) {\r\n var row = [];\r\n for (var k in value) {\r\n if (Object.prototype.hasOwnProperty.call(value, k) && k !== \"Id\" && k !== \"Geom\") { //Las columnas ID y Geom no aparece en la exportaci\\u00f3n\r\n row.push(value[k]);\r\n }\r\n }\r\n rows.push(row);\r\n });\r\n TC.loadJS(!TC.tool || !TC.tool.ExcelExport, TC.apiLocation + 'TC/tool/ExcelExport', function saveToExcel() {\r\n const exporter = new TC.tool.ExcelExport();\r\n var fileName = self.save.fileName ? self.save.fileName : 'resultados.xls';\r\n var title = self.options.titles && self.options.titles.main ? self.options.titles.main : null;\r\n exporter.Save(fileName, rows, title);\r\n });\r\n };\r\n\r\n ctlProto.contentType = {\r\n TABLE: {\r\n fnOpen: ctlProto.openTable,\r\n collapsedClass: '.prcollapsed-max-table'\r\n },\r\n CHART: {\r\n fnOpen: ctlProto.openChart,\r\n collapsedClass: '.prcollapsed-max-chart'\r\n }\r\n };\r\n})();\r\n\r\nconst ResultsPanel = TC.control.ResultsPanel;\r\nexport default ResultsPanel;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\n(function () {\r\n\r\n TC.control.SWCacheClient = function () {\r\n const self = this;\r\n TC.Control.apply(this, arguments);\r\n self.serviceWorkerEnabled = false;\r\n self.serviceWorkerIsRequired = self.options.serviceWorkerIsRequired || true;\r\n };\r\n\r\n TC.inherit(TC.control.SWCacheClient, TC.Control);\r\n\r\n var ctlProto = TC.control.SWCacheClient.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-swcc';\r\n ctlProto.SW_URL = 'tc-cb-service-worker.js';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n // Si el navegador es compatible, añadimos el service worker.\r\n self._swPromise = new Promise(function (resolve, reject) {\r\n if (navigator.serviceWorker) {\r\n\r\n navigator.serviceWorker.register(self.SW_URL, {\r\n scope: './'\r\n }).then(\r\n function (reg) {\r\n self.serviceWorkerEnabled = true;\r\n if (reg.installing) {\r\n resolve(reg.installing);\r\n } else if (reg.waiting) {\r\n resolve(reg.waiting);\r\n } else if (reg.active) {\r\n resolve(reg.active);\r\n }\r\n console.log(reg.scope, 'register');\r\n },\r\n function (reason) {\r\n self.serviceWorkerEnabled = false;\r\n reject(new Error(reason));\r\n console.error('Could not register service worker: ' + reason);\r\n });\r\n }\r\n else { \r\n reject(new Error(\"Browser does not support service workers\"));\r\n }\r\n });\r\n\r\n self._swPromise.catch(() => {\r\n let unsafeProtocol = false;\r\n const isFrame = window.parent !== window;\r\n for (var scope = window; !unsafeProtocol; scope = scope.parent) {\r\n try {\r\n if (scope.location.protocol !== 'https:') {\r\n unsafeProtocol = true;\r\n }\r\n }\r\n catch (e) {\r\n }\r\n if (scope === scope.parent) {\r\n break;\r\n }\r\n }\r\n if (unsafeProtocol) {\r\n map.toast(self.getLocaleString('httpsRequired.warning', { url: location.href.replace(location.protocol, '') }), { type: TC.Consts.msgType.WARNING });\r\n }\r\n else if (isFrame) {\r\n map.toast(self.getLocaleString('frameOrNotCompatible.warning'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n else {\r\n if (self.serviceWorkerIsRequired) {\r\n map.toast(self.getLocaleString('browserNotCompatible.warning'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n }\r\n });\r\n return result;\r\n };\r\n\r\n ctlProto.getServiceWorker = function () {\r\n if (!this._swPromise) {\r\n return Promise.reject(new Error('No service worker available'));\r\n }\r\n return this._swPromise;\r\n };\r\n\r\n var addMessageEventListener = function (resolve, reject, cacheName, action, eventName) {\r\n var MESSAGE = 'message';\r\n var messageHandler = function messageHandler(event) {\r\n if (event.data.name === cacheName) {\r\n if (event.data.action === action && event.data.event === eventName) {\r\n resolve(cacheName);\r\n }\r\n else if (event.data.event === 'error') {\r\n reject(Error(`Error message from service worker [${event.data.url} - ${event.data.action} - ${event.data.name}]`));\r\n }\r\n if (event.data.event !== 'progress') {\r\n navigator.serviceWorker.removeEventListener(MESSAGE, messageHandler);\r\n }\r\n }\r\n };\r\n navigator.serviceWorker.addEventListener(MESSAGE, messageHandler);\r\n };\r\n\r\n ctlProto.createCache = function (name, options) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n self.getServiceWorker().then(function (sw) {\r\n var ACTION = 'create';\r\n var opts = options || {};\r\n addMessageEventListener(resolve, reject, name, ACTION, 'cached');\r\n sw.postMessage({\r\n action: ACTION,\r\n name: name,\r\n requestId: opts.requestId,\r\n list: opts.urlList || [],\r\n silent: opts.silent\r\n });\r\n }, function () {\r\n resolve(false);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.deleteCache = function (name, options) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n self.getServiceWorker().then(function (sw) {\r\n var ACTION = 'delete';\r\n var opts = options || {};\r\n addMessageEventListener(resolve, reject, name, ACTION, 'deleted');\r\n sw.postMessage({\r\n action: ACTION,\r\n requestId: opts.requestId,\r\n name: name,\r\n silent: opts.silent\r\n });\r\n }, function () {\r\n resolve(false);\r\n });\r\n });\r\n };\r\n\r\n})();\r\n\r\nconst SWCacheClient = TC.control.SWCacheClient;\r\nexport default SWCacheClient;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.Consts.SCREEN_SIZE_KEY = 'TC.Map.screenSize';\r\n\r\nTC.control.Scale = function () {\r\n TC.Control.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.Scale, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Scale.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-scl';\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                1:\" + alias2(lookupProperty(helpers,\"round\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"scale\") : depth0),{\"name\":\"round\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":51},\"end\":{\"line\":1,\"column\":66}}})) + \"
                \";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({ scale: self.getScale(), screenSize: TC.Cfg.screenSize }, function () {\r\n\r\n const span = self.div.querySelector('span');\r\n span.textContent = '1:' + self.format(span.textContent.substr(2));\r\n\r\n self.div.querySelector('input[type=\"button\"]').addEventListener(TC.Consts.event.CLICK, function () {\r\n self.setScreenSize();\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.Control.prototype.register.call(self, map);\r\n var screenSize = TC.Util.storage.getLocalValue(TC.Consts.SCREEN_SIZE_KEY);\r\n if (screenSize) {\r\n TC.Cfg.screenSize = screenSize;\r\n }\r\n self.render(function () {\r\n map.on(TC.Consts.event.ZOOM, function () {\r\n delete self.metersPerDegree;\r\n self.update();\r\n });\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.update = function () {\r\n this.render();\r\n };\r\n\r\n /*\r\n * setScreenSize: Prompts for screen size in inches, updates and stores value\r\n */\r\n ctlProto.setScreenSize = function () {\r\n var self = this;\r\n TC.prompt(self.getLocaleString('selectScreenSize'), TC.Cfg.screenSize, function (value) {\r\n if (value) {\r\n TC.Cfg.screenSize = parseFloat(value);\r\n TC.Util.storage.setLocalValue(TC.Consts.SCREEN_SIZE_KEY, TC.Cfg.screenSize);\r\n self.update();\r\n }\r\n });\r\n };\r\n\r\n /*\r\n * getScale: Gets scale denominator with a resolution or current map resolution and estimated screen DPI\r\n * Parameters: number (optional), the resolution to get scale from. If no parameter is given, current map resolution is used\r\n * Returns: number\r\n */\r\n ctlProto.getScale = function (resolution) {\r\n var self = this;\r\n var result = 0;\r\n var res = !resolution && self.map ? self.map.wrap.getResolution() : resolution;\r\n if (res) {\r\n result = res * self.getDpi(TC.Cfg.screenSize) / .0254;\r\n if (window.devicePixelRatio) {\r\n result = result * window.devicePixelRatio;\r\n }\r\n }\r\n if (self.map && self.map.wrap.isGeo()) {\r\n if (!self.metersPerDegree) {\r\n var extent = self.map.getExtent();\r\n if (extent) {\r\n self.metersPerDegree = TC.Util.getMetersPerDegree(extent);\r\n }\r\n }\r\n if (self.metersPerDegree) {\r\n result = result * self.metersPerDegree;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n /*\r\n * getDpi: Gets estimated DPI based on screen resolution and screenSize value\r\n * Returns: number\r\n */\r\n ctlProto.getDpi = function (screenSize) {\r\n var self = this;\r\n self.dpi = Math.sqrt(screen.width * screen.width + screen.height * screen.height) / screenSize;\r\n return self.dpi;\r\n };\r\n\r\n\r\n ctlProto.format = function (number) {\r\n var n = (new Number(number)).toFixed(0);\r\n var a = [];\r\n while (n.length > 3) {\r\n var l = n.length - 3;\r\n a.unshift(n.substr(l));\r\n n = n.substr(0, l);\r\n }\r\n if (n) {\r\n a.unshift(n);\r\n }\r\n return a.join('.');\r\n };\r\n\r\n})();\r\n\r\nconst Scale = TC.control.Scale;\r\nexport default Scale;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\nTC.control.ScaleBar = function () {\r\n TC.Control.apply(this, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.ScaleBar, TC.Control);\r\n\r\n(function () {\r\n var ctlProto = TC.control.ScaleBar.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-sb';\r\n\r\n ctlProto.render = function () {\r\n var self = this;\r\n if (!self.wrap) {\r\n self.wrap = new TC.wrap.control.ScaleBar(self);\r\n }\r\n self.wrap.render();\r\n return self._set1stRenderPromise(Promise.resolve());\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n Promise.all([TC.Control.prototype.register.call(self, map), map.wrap.getMap()]).then(function (objects) {\r\n objects[1].addControl(self.wrap.ctl);\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getText = function () {\r\n var self = this;\r\n\r\n return self.wrap.getText();\r\n };\r\n\r\n})();\r\n\r\nconst ScaleBar = TC.control.ScaleBar;\r\nexport default ScaleBar;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Scale from './Scale';\r\n\r\nTC.control = TC.control || {};\r\nTC.Consts = Consts;\r\nTC.control.Scale = Scale;\r\n\r\nTC.control.ScaleSelector = function () {\r\n var self = this;\r\n\r\n TC.control.Scale.apply(self, arguments);\r\n\r\n self.scales = null;\r\n};\r\n\r\nTC.inherit(TC.control.ScaleSelector, TC.control.Scale);\r\n\r\n(function () {\r\n var ctlProto = TC.control.ScaleSelector.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-ss';\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { return \" selected=\\\"true\\\"\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                \";},\"useData\":true}\r\n\r\n ctlProto.render = function (callback) {\r\n var self = this;\r\n return self._set1stRenderPromise(new Promise(function (resolve, reject) {\r\n if (self.map) {\r\n if (!self.scales && self.map.options.resolutions) {\r\n self.scales = self.map.options.resolutions.map(self.getScale, self);\r\n }\r\n var render = function () {\r\n self.scales = self.map.wrap.getResolutions().map(self.getScale, self);\r\n self.renderData({ scale: self.getScale(), screenSize: TC.Cfg.screenSize, scales: self.scales }, function () {\r\n\r\n self.div.querySelectorAll('option').forEach(function (option) {\r\n option.textContent = '1:' + self.format(option.textContent.substr(2));\r\n });\r\n\r\n self.div.querySelector('input[type=\"button\"]').addEventListener(TC.Consts.event.CLICK, function () {\r\n self.setScreenSize();\r\n }, { passive: true });\r\n\r\n self.div.querySelector('select').addEventListener('change', function () {\r\n self.setScale(this.value);\r\n });\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n };\r\n if (self.scales) {\r\n render();\r\n }\r\n else {\r\n self.map.wrap.getMap().then(render);\r\n }\r\n }\r\n else {\r\n reject(Error('ScaleSelector no registrado'));\r\n }\r\n }));\r\n };\r\n\r\n /*\r\n * setScale: Sets the resolution of the map from a scale denominator and estimated screen DPI\r\n * Parameters: number, the scale denominator\r\n * Returns: number, the resolution\r\n */\r\n ctlProto.setScale = function (scale) {\r\n var self = this;\r\n var result = scale * .0254 / self.getDpi(TC.Cfg.screenSize);\r\n if (window.devicePixelRatio) {\r\n result = result / window.devicePixelRatio;\r\n }\r\n if (self.metersPerDegree) {\r\n result = result / self.metersPerDegree;\r\n }\r\n self.map.wrap.setResolution(result);\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst ScaleSelector = TC.control.ScaleSelector;\r\nexport default ScaleSelector;","\r\n/**\r\n * Opciones de control de búsquedas. La configuración por defecto tiene como origen de datos el WFS de IDENA. \r\n * Es posible establecer un origen de datos distinto en el que consultar, para ello en lugar de asignar un booleano a la propiedad, que activa o desactiva la búsqueda, \r\n * se asignará un objeto con las propiedades a sobrescribir. Las propiedades a sobrescribir no siempre serán las mismas, variarán en función de la configuración que tenga la búsqueda que se quiera modificar.\r\n * @typedef SearchOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean|CadastralSearchOptions} [cadastralParcel=true] - Esta propiedad activa/desactiva la búsqueda de parcelas catastrales en el buscador del mapa. Formato: municipio, polígono, parcela.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link CadastralSearchOptions}.\r\n *\r\n * @property {boolean} [coordinates=true] - Esta propiedad activa/desactiva la localización de coordenadas en Sistema de Referencia ETRS89, bien UTM Huso 30 Norte (EPSG:25830) o latitud-longitud (EPSG:4258, EPSG:4326 o CRS:84) en el buscador del mapa.\r\n * @property {string} [instructions=\"Buscar municipio, casco urbano, calle, dirección, referencia catastral, coordenadas UTM o latitud-longitud\"] - Esta propiedad establece el atributo `title` del cajetín y del botón del buscador del mapa.\r\n * @property {boolean|MunicipalitySearchOptions} [municipality=true] - Esta propiedad activa/desactiva la búsqueda de municipios en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link MunicipalitySearchOptions}.\r\n * @property {boolean|PlaceNameSearchOptions} [placeName=false] - Esta propiedad activa/desactiva la búsqueda de topónimos en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PlaceNameSearchOptions}.\r\n * @property {boolean|PlaceNameMunicipalitySearchOptions} [placeNameMunicipality=false] - Esta propiedad activa/desactiva la búsqueda de topónimo en un municipio en el buscador del mapa. Formato: municipio, topónimo.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PlaceNameMunicipalitySearchOptions}.\r\n * @property {boolean|PostalAddressSearchOptions} [postalAddress=true] - Esta propiedad activa/desactiva la búsqueda de direcciones postales en el buscador del mapa. Formato: entidad de población, vía, portal.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link PostalAddressSearchOptions}.\r\n * @property {boolean|RoadSearchOptions} [road=false] - Esta propiedad activa/desactiva la búsqueda de carreteras en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link RoadSearchOptions}.\r\n * @property {boolean|RoadMilestoneSearchOptions} [roadMilestone=false] - Esta propiedad activa/desactiva la búsqueda de punto kilométrico en una carretera en el buscador del mapa. Formato: carretera, pk.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link RoadMilestoneSearchOptions}.\r\n * @property {boolean|StreetSearchOptions} [street=true] - Esta propiedad activa/desactiva la búsqueda de vías en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link StreetSearchOptions}.\r\n * @property {boolean|UrbanAreaSearchOptions} [town=true] - Esta propiedad activa/desactiva de cascos urbanos en el buscador del mapa.\r\n *\r\n * Para configurar un origen de datos distinto a IDENA, establecer como valor un objeto con el formato {@link UrbanAreaSearchOptions}.\r\n * @example [Ver en vivo](../examples/cfg.SearchOptions.html) {@lang html}\r\n *
                \r\n * \r\n */\r\n\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de parcelas catastrales.\r\n * @typedef CadastralSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la parcela catastral.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON}, {@link SITNA.Consts.format.GML3}, {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {CadastralSearchOptionsExt} municipality - Definición de la fuente de datos para la búsqueda de parcela por nombre de municipio en lugar de por código del mismo.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de parcelas.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos en los que buscar el código de municipio.\r\n * - `secondQueryWord`: se indicará el campo o campos en los que buscar el polígono.\r\n * - `thirdQueryWord`: se indicará el campo o campos en los que buscar la parcela.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto, \r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible `cluster`.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchCadastralSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Configuración del origen de datos auxiliar a la búsqueda de parcelas catastrales para la codificación de los nombres de municipio.\r\n * @typedef CadastralSearchOptionsExt\r\n * @see CadastralSearchOptions\r\n * @property {string[]} featureType - Colección de nombre de capa o capas a consultar.\r\n * @property {string} idProperty - Nombre de campo que identifica unívocamente el municipio cuyos valores deben coincidir con los posibles valores del campo indicado en firstQueryWord.\r\n * @property {string} labelProperty - Nombre de campo en el que buscar el texto indicado.\r\n * @example\r\n * {\r\n * url: '//miServicioWFS/ogc/wfs',\r\n * featurePrefix: 'IDENA', \r\n * featureType: ['Pol_ParcelaUrbana', 'Pol_ParcelaRustica', 'Pol_ParcelaMixta'],\r\n * municipality: {\r\n * featureType: 'Pol_Municipio',\r\n * labelProperty: 'MUNICIPIO',\r\n * idProperty: 'COD_MUNICIPIO' \r\n * },\r\n * queryProperties: {\r\n * firstQueryWord: 'COD_MUNICIPIO',\r\n * secondQueryWord: 'POLIGONO',\r\n * thirdQueryWord: 'PARCELA'\r\n * }\r\n * }\r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de una búsqueda.\r\n * @typedef SearchQueryPropertyOptions\r\n * @see CadastralSearchOptions\r\n * @see MunicipalitySearchOptions\r\n * @see PostalAddressSearchOptions\r\n * @see RoadSearchOptions\r\n * @see RoadMilestoneSearchOptions\r\n * @see StreetSearchOptions\r\n * @see UrbanAreaSearchOptions\r\n * @property {string[]} firstQueryWord - Colección de nombre de campo o campos a consultar para el 1º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n * @property {string[]} secondQueryWord - Colección de nombre de campo o campos a consultar para el 2º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n * @property {string[]} thirdQueryWord - Colección de nombre de campo o campos a consultar para el 3º término del criterio de búsqueda, deben existir en la capa o capas definidas en la propiedad `FeatureType`.\r\n */\r\n\r\n/**\r\n * Opciones de configuración para la composición de la cabecera de una lista de sugerencias de búsqueda.\r\n * @typedef SearchSuggestionHeaderOptions\r\n * @see CadastralSearchOptions\r\n * @see MunicipalitySearchOptions\r\n * @see PostalAddressSearchOptions\r\n * @see RoadSearchOptions\r\n * @see RoadMilestoneSearchOptions\r\n * @see StreetSearchOptions\r\n * @see UrbanAreaSearchOptions\r\n * @property {string} label - Clave del diccionario de traducciones que indica qué tipo de búsqueda es: Parcela Catastral, Municipio, Calle… Revisar la sección **Soporte multiidioma** en {@tutorial layout_cfg}.\r\n * @property {SearchResultColorDictionary|SearchResultColor|string} color - Configuración para obtener el color que representa al tipo de búsqueda.\r\n * Se establece como color la primera coincidencia en `styles` que cumpla con la configuración.\r\n * \r\n * La definición como string ha de ser para indicar el nombre de una propiedad presente en {@link PointStyleOptions}, {@link LineStyleOptions} o {@link PolygonStyleOptions}.\r\n * @example\r\n * {\r\n * label: \"search.list.town\",\r\n * color: \"strokeColor\"\r\n * }\r\n */\r\n\r\n/**\r\n * Algunas búsquedas hacen la consulta sobre varias capas. Este objeto define el color de los resultados de la búsqueda de cada capa. Estos colores también se mostrarán en la leyenda de la lista de sugerencias de resultados posibles de la búsqueda.\r\n * @typedef SearchResultColorDictionary\r\n * @see SearchSuggestionHeaderOptions\r\n * @property {SearchResultColor} color - Configuración para obtener el color.\r\n * @property {string} title - Title para identificar al color. Se define con la clave del diccionario de traducciones. Revisar la sección **Soporte multiidioma** en {@tutorial layout_cfg}.\r\n * @example\r\n * CATAST_Pol_ParcelaUrba: {\r\n * title: \"search.list.cadastral.urban\",\r\n * color: {\r\n * geomType: \"polygon\",\r\n * css: \"strokeColor\"\r\n * } \r\n * }\r\n */\r\n\r\n/**\r\n * Definición del color con el que se dibujará los resultados de la búsqueda en el mapa. Este color también se mostrará en la leyenda de la lista de sugerencias de resultados posibles de la búsqueda.\r\n * @typedef SearchResultColor\r\n * @see SearchSuggestionHeaderOptions\r\n * @property {string} css - Nombre de la propiedad de los estilos de la cual extraer el color. Ha de ser alguna de las distintas propiedades de colores presentes en {@link PointStyleOptions}, \r\n * {@link LineStyleOptions} o {@link PolygonStyleOptions}.\r\n * @property {string} geomType - Nombre del tipo de geometría (el valor es un miembro de {@link SITNA.Consts.geom}).\r\n * @example\r\n * color: {\r\n * geomType: \"point\",\r\n * css: \"fontColor\"\r\n * } \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de municipios.\r\n * @typedef MunicipalitySearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un municipio. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del municipio.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[NombreMunicipio]` y `outputFormatLabel` como `“{0}”` para un resultado con valor del campo `NombreMunicipio` a `Pamplona` mostrará en la lista resultados del tipo: *Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de municipios.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la propiedad `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del municipio.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto, \r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible `cluster`.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchMunicipalitySource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de direcciones postales.\r\n * @typedef PostalAddressSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a la dirección postal. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la dirección postal.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[EntidadPoblacion, Via, Numero]` y `outputFormatLabel` como `“{1} {2}, {0}”` para un resultado con valor del campo `EntidadPoblacion` a `Pamplona`, valor del campo `Via` a `Calle Estafeta` y valor del campo `Numero` a 13 mostrará en la lista resultados del tipo: *Calle Estafeta 13, Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de direcciones postales.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la entidad de población.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la vía.\r\n * - `thirdQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el número de portal.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto, \r\n * deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPostalAddressSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de topónimo.\r\n * @typedef PlaceNameSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un topónimo. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del topónimo.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['MUNICIPIO', 'TOPONIMO']` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `MUNICIPIO` a `Aranguren` y valor del campo `TOPONIMO` a `Camino de Pamplona` mostrará en la lista resultados del tipo: *Camino de Pamplona (Aranguren)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de topónimo.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la siguiente propiedad:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del topónimo.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType` \r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPlacenameSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de topónimo en un municipio.\r\n * @typedef PlaceNameMunicipalitySearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un topónimo en un municipio. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del topónimo.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO']` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `MUNICIPIO` a `Aranguren` y valor del campo `TOPONIMO` a `Camino de Pamplona` mostrará en la lista resultados del tipo: *Camino de Pamplona (Aranguren)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de topónimo en un municipio.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del municipio.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del topónimo.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType` \r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchPlacenameMunicipalitySource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de carreteras.\r\n * @typedef RoadSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a una carretera. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la carretera.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['Carretera']` y `outputFormatLabel` como `“{0}”` para un resultado con valor del campo `Carretera` a `N-121` mostrará en la lista resultados del tipo: *N-121*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de carreteras.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la siguiente propiedad:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la carretera. \r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType` \r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchRoadSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de punto kilométrico de carretera.\r\n * @typedef RoadMilestoneSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un punto kilométrico de una carretera. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del punto kilométrico.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `['Carretera', 'PK']` y `outputFormatLabel` como `“{0}: PK {1}”` para un resultado con valor del campo `Carretera` a `AP-15` y valor del campo `PK` a `10` mostrará en la lista resultados del tipo: *AP-15: PK 10*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de punto kilométrico.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la carretera.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el número del punto kilométrico.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType` \r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchRoadMilestoneSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de vías.\r\n * @typedef StreetSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a una vía. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría de la vía.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[EntidadPoblacion, Via]` y `outputFormatLabel` como `“{1}, {0}”` para un resultado con valor del campo `EntidadPoblacion` a `Pamplona` y valor del campo `Via` a `Calle Estafeta` mostrará en la lista resultados del tipo: *Calle Estafeta, Pamplona*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de vías.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a las siguientes propiedades:\r\n * - `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la entidad de población.\r\n * - `secondQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre de la vía.\r\n * @property {string[]} renderFeatureType - Colección con los nombres de las capas auxiliares a añadir al resultado de la búsqueda en el mapa. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `dataIdProperty`.\r\n *\r\n * No se muestran sugerencias en base a las capas auxiliares, únicamente se añade información en el momento de pintar en el mapa, es por ello que debe existir relación en los datos entre las capas definidas en `featureType` y `renderFeatureType` y que ambas cuenten con los campos definidos en `dataIdProperty`.\r\n * @property {StyleOptions[]} styles - Colección de objetos de configuración de estilo. La relación entre capa y estilo se hace mediante el índice en las colecciones 1 y 2 siendo 1 la concatenación de `featureType` \r\n * y `renderFeatureType` y 2 `styles`, por tanto, deberá haber tantas instancias como la suma de las capas definidas en `featureType` y en `renderFeatureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchStreetSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\n/**\r\n * Opciones de configuración del origen de datos de la búsqueda de cascos urbanos.\r\n * @typedef UrbanAreaSearchOptions\r\n * @see SearchOptions\r\n * @see {@link http://www.opengeospatial.org/standards/wfs|OGC Web Feature Service Standard}\r\n * @property {string[]} dataIdProperty - Colección con el nombre del campo o campos que nos servirán para identificar unívocamente a un casco urbano. Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {string} featurePrefix - Prefijo del nombre de la capa o capas a definir en la propiedad `featureType`. En caso de ser un WFS de GeoServer, se trata del nombre del espacio de trabajo (workspace).\r\n * @property {string[]} featureType - Colección con el nombre de la capa o capas a consultar. Es posible indicar más de una capa si todas ellas cuentan con los campos definidos en `queryProperties`.\r\n * @property {string} geometryName - Nombre del campo de la geometría del casco urbano.\r\n * @property {string} [outputFormat=JSON] - Tipo de formato en el cual obtener los datos del servicio WFS. Valores admitidos: {@link SITNA.Consts.format.JSON} o {@link SITNA.Consts.format.GML3} o {@link SITNA.Consts.format.GML32} o {@link SITNA.Consts.format.GML}.\r\n * @property {string} outputFormatLabel - Cadena con el patrón a mostrar en la lista de sugerencias. Reemplaza el valor numérico (entre llaves) que corresponde con el índice de la colección `outputProperties` con el valor del campo. Las llaves de cierre y apertura son necesarias.\r\n *\r\n * Por ejemplo: `outputProperties` como `[NombreMunicipio, NombreCascoUrbano]` y `outputFormatLabel` como `“{1} ({0})”` para un resultado con valor del campo `NombreMunicipio` a `Galar` y valor del campo `NombreCascoUrbano` a `Salinas de Pamplona` mostrará en la lista resultados del tipo: *Salinas de Pamplona (Galar)*.\r\n * @property {string[]} outputProperties - Colección con los nombres de campos a mostrar (según el patrón indicando en `outputFormatLabel`) en la lista de sugerencias. \r\n * Los campos indicados también se usan para controlar los posibles registros duplicados en la lista de sugerencias. Es decir, indicando código y nombre los resultados se agruparán por los 2 campos. \r\n * Los campos definidos deben existir en la capa o capas definidas en la propiedad `featureType`.\r\n * @property {SearchQueryPropertyOptions} queryProperties - Definición de los campos por los que filtrar la búsqueda de vías.\r\n *\r\n * En este tipo de búsqueda es obligatorio dar un valor a la propiedad `firstQueryWord`: se indicará el campo o campos (tipo `string`) en los que buscar el nombre del casco urbano.\r\n * @property {StyleOptions[]} styles - La relación entre capa y estilo se hace mediante el índice en la colección en `featureType` y en `styles`, por tanto, deberá haber tantas instancias como capas definidas en `featureType`.\r\n * \r\n * No está disponible cluster.\r\n * @property {SearchSuggestionHeaderOptions} suggestionListHead - Configuración de la cabecera a mostrar en la lista de sugerencias. La cabecera consta de un literal y de un color. El literal indica el tipo de búsqueda y el color será el que mejor representa a las entidades correspondientes en el mapa.\r\n * @property {string} url - Dirección del servicio WFS (las búsquedas en API SITNA están implementadas sobre el estándar [OGC Web Feature Service](http://www.opengeospatial.org/standards/wfs)).\r\n * @example [Ver en vivo](../examples/Cfg.SearchTownSource.html) {@lang html}\r\n
                \r\n \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport { Defaults } from '../Cfg';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\nimport filter from '../filter';\r\nimport autocomplete from '../ui/autocomplete';\r\n\r\nTC.control = TC.control || {};\r\nTC.filter = filter;\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\nTC.Defaults = Defaults;\r\nTC.control.infoShare = infoShare;\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\n\r\n(function () {\r\n // Polyfill window.performance.now\r\n if (!window.performance) {\r\n window.performance = {\r\n offset: Date.now(),\r\n now: function () {\r\n return Date.now() - this.offset;\r\n }\r\n };\r\n } else if (window.performance && !window.performance.now) {\r\n window.performance.offset = Date.now();\r\n window.performance.now = function () {\r\n return Date.now() - window.performance.offset;\r\n };\r\n }\r\n}());\r\n\r\nconst SearchType = function (type, options, parent) {\r\n var self = this;\r\n\r\n self.parent = parent;\r\n\r\n self._featureTypes = [];\r\n\r\n TC.Util.extend(self, options);\r\n\r\n self.typeName = type;\r\n\r\n self._throwConfigError = function () {\r\n var self = this;\r\n\r\n throw new Error('Error en la configuración de la búsqueda: ' + self.typeName);\r\n };\r\n\r\n self.getFeatureTypes = function (toFilter) {\r\n var self = this;\r\n\r\n if (toFilter) {\r\n return self.featureType instanceof Array ? self.featureType : [self.featureType];\r\n }\r\n\r\n if (self._featureTypes.length === 0) {\r\n var type_featureType = self.featureType instanceof Array ? self.featureType : [self.featureType];\r\n var type_renderFeatureType = self.renderFeatureType ? self.renderFeatureType instanceof Array ? self.renderFeatureType : [self.renderFeatureType] : [];\r\n self._featureTypes = type_featureType.concat(type_renderFeatureType);\r\n }\r\n\r\n return self._featureTypes;\r\n };\r\n\r\n self.isFeatureOfThisType = function (id) {\r\n var self = this;\r\n\r\n return self.getFeatureTypes().indexOf(id) > -1;\r\n };\r\n\r\n self.getStyleByFeatureType = function (featureType) {\r\n var self = this;\r\n\r\n if (self.getFeatureTypes().indexOf(featureType) > -1) {\r\n return self.styles[self.getFeatureTypes().indexOf(featureType)];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n var getColor = function (css, geomType, featureType) {\r\n var self = this;\r\n\r\n var getValue = function (style, geomType, css) {\r\n if (geomType) {\r\n if (style.hasOwnProperty(geomType) && style[geomType].hasOwnProperty(css)) {\r\n return style[geomType][css];\r\n }\r\n } else {\r\n for (var gType in style) {\r\n if (style[gType].hasOwnProperty(css)) {\r\n return style[gType][css];\r\n }\r\n }\r\n }\r\n };\r\n\r\n if (featureType) {\r\n const style = self.getStyleByFeatureType(featureType);\r\n return getValue(style, geomType, css);\r\n } else {\r\n for (var i = 0; i < self.styles.length; i++) {\r\n const style = self.styles[i];\r\n const color = getValue(style, geomType, css);\r\n if (color) {\r\n return color;\r\n }\r\n }\r\n }\r\n };\r\n\r\n self.getSuggestionListHead = function () {\r\n var self = this;\r\n\r\n var headerData, label, color;\r\n\r\n if (typeof self.suggestionListHead === \"function\") {\r\n headerData = self.suggestionListHead();\r\n label = headerData.label;\r\n color = [{\r\n color: headerData.color,\r\n title: headerData.label\r\n }];\r\n } else {\r\n headerData = self.suggestionListHead;\r\n label = self.parent.getLocaleString(headerData.label);\r\n\r\n // color es string que es el atributo CSS. El valor se obtiene de la 1º coincidencia encontrada en styles\r\n if (typeof headerData.color === \"string\") {\r\n color = [{\r\n color: getColor.call(self, headerData.color),\r\n title: label\r\n }];\r\n } else if (headerData.color instanceof Array) { // color es un array de objetos, con nombre de featureType como clave\r\n var featureTypes = self.getFeatureTypes();\r\n if (headerData.color.length === featureTypes.length) {\r\n color = headerData.color.map(function (elm, i) {\r\n return {\r\n color: getColor.call(self, elm[featureTypes[i]].color.css, elm[featureTypes[i]].color.geomType, featureTypes[i]),\r\n title: self.parent.getLocaleString(elm[featureTypes[i]].title) || label\r\n };\r\n });\r\n } else {\r\n self._throwConfigError();\r\n }\r\n } else if (typeof headerData.color === \"object\") { // color es un objeto con atributo css y tipo de geometría\r\n color = [{\r\n color: getColor.call(self, headerData.color.css, headerData.color.geomType),\r\n title: label\r\n }];\r\n }\r\n }\r\n\r\n if (label && color) {\r\n var liHTML = '
              • ' + label + '';\r\n\r\n liHTML += color.map(function (elm) {\r\n if (elm.color) {\r\n return '';\r\n }\r\n }).join('') + '
              • ';\r\n\r\n return liHTML;\r\n\r\n } else {\r\n self._throwConfigError();\r\n }\r\n };\r\n\r\n self.getSuggestionListElements = function (data) {\r\n var self = this;\r\n var results = [];\r\n\r\n var areSame = function (a, b) {\r\n switch (true) {\r\n case typeof a === \"number\":\r\n if (a === b) {\r\n return true;\r\n }\r\n break;\r\n case typeof a === \"string\":\r\n if (!isNaN(a) || !isNaN(b)) {\r\n if (a === b) {\r\n return true;\r\n }\r\n } else {\r\n if (a.trim() === b.trim()) {\r\n return true;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n return false;\r\n };\r\n var getUnique = function (inputArray) {\r\n var outputArray = [];\r\n for (var i = 0; i < inputArray.length; i++) {\r\n if (outputArray.indexOf(inputArray[i]) === -1) {\r\n outputArray.push(inputArray[i]);\r\n }\r\n }\r\n\r\n return outputArray;\r\n };\r\n var intoResults = function (compareData) {\r\n for (var r = 0; r < results.length; r++) {\r\n var length = 0;\r\n var isThere = [];\r\n for (var property in compareData) {\r\n isThere.push(areSame(compareData[property], results[r].properties[property]));\r\n length++;\r\n }\r\n if (isThere.filter(function (i) { return i; }).length === length) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var features = self.parseFeatures(data);\r\n\r\n features.forEach(function (feature) {\r\n var attributes = [], ids = [];\r\n var valueToAdd = '';\r\n\r\n var properties = self.outputProperties;\r\n var dataIdProperties = self.dataIdProperty;\r\n\r\n var strFormat = self.outputFormatLabel;\r\n var dataLayer = feature.id.split('.').slice(0, 1).shift();\r\n\r\n if (!(self.outputProperties instanceof Array)) {\r\n properties = self.outputProperties[dataLayer];\r\n dataIdProperties = self.dataIdProperty[dataLayer];\r\n strFormat = strFormat[dataLayer];\r\n }\r\n\r\n for (var j = 0; j < properties.length; j++) {\r\n attributes.push(feature.data[properties[j]]);\r\n }\r\n\r\n for (j = 0; j < dataIdProperties.length; j++) {\r\n ids.push(feature.data[dataIdProperties[j]]);\r\n }\r\n\r\n var compareData = {};\r\n for (var p = 0; p < self.outputProperties.length; p++) {\r\n compareData[self.outputProperties[p]] = attributes[p];\r\n }\r\n\r\n if (attributes instanceof Array && strFormat && getUnique(attributes).length > 1) {\r\n valueToAdd = strFormat.tcFormat(attributes);\r\n }\r\n else if (attributes instanceof Array && getUnique(attributes).length === 1) {\r\n valueToAdd = attributes[0];\r\n }\r\n\r\n var text = valueToAdd.toCamelCase();\r\n\r\n if (!intoResults(compareData)) {\r\n\r\n results.push({\r\n text: text,\r\n label: text,\r\n id: ids.join('#'),\r\n dataRole: self.typeName,\r\n dataLayer: dataLayer,\r\n properties: compareData\r\n });\r\n }\r\n });\r\n\r\n return results;\r\n };\r\n\r\n self.parseFeatures = function (data) {\r\n var parser;\r\n if (self.outputFormat === TC.Consts.format.JSON) {\r\n parser = new TC.wrap.parser.JSON();\r\n }\r\n else {\r\n parser = new TC.wrap.parser.WFS({\r\n featureNS: self.featurePrefix,\r\n featureType: self.featureType\r\n });\r\n }\r\n return parser.read(data);\r\n };\r\n\r\n self.getPattern = function () {\r\n var self = this;\r\n\r\n if (typeof self.pattern === \"function\") {\r\n return self.pattern();\r\n } else {\r\n return self.pattern;\r\n }\r\n };\r\n\r\n self.filter = (function (self) {\r\n\r\n const bindRootFilterNode = function (filtersArr, dataT) {\r\n var rootFilters = [];\r\n\r\n if (dataT != self.parent.rootCfg.active.root) {\r\n // GLS: Si llego aquí, significa que el usuario está indicando la población\r\n if (dataT.indexOf('#') === -1 && !self.parent.rootCfg.active.limit) { // si no está limitada la búsqueda, indico la población\r\n\r\n var filterNode = self.parent.rootCfg.active.queryProperties.firstQueryWord.map(function (queryWord) {\r\n return self.filter.getFilterNode(queryWord, self.parent._LIKE_PATTERN + dataT + self.parent._LIKE_PATTERN);\r\n });\r\n\r\n if (filterNode.length > 1) {\r\n rootFilters.push('');\r\n rootFilters = rootFilters.concat(filterNode);\r\n rootFilters.push('');\r\n } else {\r\n rootFilters = rootFilters.concat(filterNode);\r\n }\r\n\r\n } else { // por tanto no añado todas las raíces posibles, añado la población que ha indicado (validando antes contra rootLabel) \r\n const item = dataT.split('#');\r\n\r\n self.parent.rootCfg.active.dataIdProperty.forEach(function addAnd(dataIdProperty, idx, arr) {\r\n if (idx === 0 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n rootFilters.push(self.filter.getFilterNode(dataIdProperty, item.length > idx ? item[idx] : item[0]));\r\n\r\n if (idx === arr.length - 1 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n });\r\n }\r\n } else {\r\n self.parent.rootCfg.active.root.forEach(function addOr(item, idx, arr) {\r\n if (idx === 0 && arr.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n self.parent.rootCfg.active.dataIdProperty.forEach(function addAnd(dataIdProperty, i, a) {\r\n if (i === 0 && a.length > 1) {\r\n rootFilters.push('');\r\n }\r\n\r\n rootFilters.push(self.filter.getFilterNode(dataIdProperty, item.length > i ? item[i] : item[0]));\r\n\r\n if (i === a.length - 1 && a.length > 1) {\r\n rootFilters.push('');\r\n }\r\n });\r\n });\r\n\r\n if (self.parent.rootCfg.active.root.length > 1) {\r\n rootFilters.push('');\r\n }\r\n }\r\n\r\n return filtersArr.concat(rootFilters);\r\n };\r\n\r\n return {\r\n getPropertyValue: function (role, propertyName) {\r\n return self.getSearchTypeByRole(role)[propertyName];\r\n },\r\n getIsLikeNode: function (name, value) {\r\n var toEscape = /([\\-\\\"\\.\\xba\\(\\)\\/])/g;\r\n if (toEscape.test(value)) {\r\n value = value.replace(toEscape, \"\\\\$1\");\r\n }\r\n\r\n if (value.toString().indexOf(self.parent._LIKE_PATTERN) > -1)\r\n return '' +\r\n '' + name + '' +\r\n '' + value.toLowerCase().replace(/\\/gi, \">\") + '' +\r\n '' +\r\n '' +\r\n '' + name + '' +\r\n '' + value.toUpperCase().replace(/\\/gi, \">\") + '' +\r\n '';\r\n else\r\n return '' +\r\n '' + name + '' +\r\n '' + value.replace(/\\/gi, \">\") + '' +\r\n '';\r\n },\r\n getFunctionStrMatches: function (name, value) {\r\n var toEscape = /([\\-\\\"\\xba\\(\\)\\/])/g;\r\n if (toEscape.test(value)) {\r\n value = value.replace(toEscape, \"\\\\$1\");\r\n }\r\n\r\n if (value.toString().indexOf(self.parent._LIKE_PATTERN) > -1) {\r\n\r\n var pattern = value;\r\n pattern = pattern.replace(/a/gi, \"[aáà]\");\r\n pattern = pattern.replace(/e/gi, \"[eéè]\");\r\n pattern = pattern.replace(/i/gi, \"[iíì]\");\r\n pattern = pattern.replace(/o/gi, \"[oóò]\");\r\n pattern = pattern.replace(/u/gi, \"[uúüù]\");\r\n\r\n return ' ' +\r\n ' ' +\r\n '' + name + ' ' +\r\n '' + '(?i)' + pattern.replace(/\\/gi, \">\") + ' ' +\r\n ' ' +\r\n 'true ' +\r\n '';\r\n }\r\n else {\r\n return '' +\r\n '' + name + '' +\r\n '' + value.replace(/\\/gi, \">\") + '' +\r\n '';\r\n }\r\n },\r\n getFilterNode: function (propertyName, propertyValue) {\r\n var r;\r\n\r\n var fn = self.filter.getIsLikeNode;\r\n\r\n if (self.filterByMatch) {\r\n\r\n fn = self.filter.getFunctionStrMatches;\r\n\r\n var regex = new RegExp('\\\\' + self.parent._LIKE_PATTERN, 'gi');\r\n propertyValue = propertyValue.replace(regex, self.parent._MATCH_PATTERN);\r\n }\r\n\r\n if (!(propertyName instanceof Array) && typeof propertyName !== 'string') {\r\n var f = [];\r\n for (var key in propertyName) {\r\n if (propertyName[key] instanceof Array && propertyName[key].length > 1) {\r\n r = '';\r\n propertyName[key].forEach(pName => {\r\n r += fn(pName.trim(), propertyValue);\r\n });\r\n\r\n r += '';\r\n f.push('(' + r + ')');\r\n } else {\r\n var propName = propertyName[key];\r\n if (propertyName[key] instanceof Array && propertyName[key].length === 1) {\r\n propName = propertyName[key][0];\r\n }\r\n\r\n f.push('(' +\r\n '' + fn(propName.trim(), propertyValue) + '' +\r\n ')');\r\n }\r\n }\r\n\r\n return f.join('');\r\n\r\n } else if (propertyName instanceof Array && propertyName.length > 1) {\r\n r = '';\r\n propertyName.forEach(pName => {\r\n r += fn(pName.trim(), propertyValue);\r\n });\r\n return r += '';\r\n } else {\r\n return fn(propertyName instanceof Array && propertyName.length === 1 ? propertyName[0].trim() : propertyName.trim(), propertyValue);\r\n }\r\n },\r\n getFilter: function (data) {\r\n var r = {};\r\n r.multiL = false;\r\n r.f = '';\r\n\r\n var _f;\r\n\r\n switch (true) {\r\n case self.typeName === TC.Consts.searchType.NUMBER:\r\n _f = [];\r\n if (!self.parent.rootCfg.active && (/(\\<|\\>|\\<\\>)/gi.exec(data.t) || /(\\<|\\>|\\<\\>)/gi.exec(data.s))) {\r\n let match = /(\\<|\\>|\\<\\>)/gi.exec(data.t);\r\n if (match)\r\n\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t.substring(0, data.t.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n }\r\n\r\n match = /(\\<|\\>|\\<\\>)/gi.exec(data.s);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s.substring(0, data.s.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n } else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n\r\n _f.push(self.filter.getFilterNode(self.queryProperties.thirdQueryWord, data.p + self.parent._LIKE_PATTERN));\r\n\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n\r\n break;\r\n case self.typeName === TC.Consts.searchType.STREET:\r\n _f = [];\r\n\r\n if (!self.parent.rootCfg.active && (/(\\<|\\>|\\<\\>)/gi.exec(data.t) || /(\\<|\\>|\\<\\>)/gi.exec(data.s))) {\r\n let match = /(\\<|\\>|\\<\\>)/gi.exec(data.t);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t.substring(0, data.t.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else {\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n }\r\n\r\n match = /(\\<|\\>|\\<\\>)/gi.exec(data.s);\r\n if (match)\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s.substring(0, data.s.indexOf(match[0])).trim() + self.parent._LIKE_PATTERN));\r\n else _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n } else {\r\n\r\n if (self.parent.rootCfg.active) {\r\n _f = bindRootFilterNode(_f, data.t);\r\n }\r\n else {\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n }\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n }\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n break;\r\n case self.typeName === TC.Consts.searchType.LOCALITY:\r\n r.f = self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN);\r\n r.multiL = true;\r\n break; // GLS: consulta de 2 niveles (carretera con pk / topónimo con municipio)\r\n case self.queryProperties.hasOwnProperty('secondQueryWord'):\r\n _f = [];\r\n _f.push(self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN));\r\n _f.push(self.filter.getFilterNode(self.queryProperties.secondQueryWord, self.parent._LIKE_PATTERN + data.s + self.parent._LIKE_PATTERN));\r\n r.f = '' + '' + _f.join('') + '' + '';\r\n break;\r\n default: // GLS: consulta de 1 único nivel (municipio, casco urbano, carretera)\r\n r.f = '' + self.filter.getFilterNode(self.queryProperties.firstQueryWord, self.parent._LIKE_PATTERN + data.t + self.parent._LIKE_PATTERN) + '';\r\n break;\r\n }\r\n\r\n return r;\r\n },\r\n getParams: function (data) {\r\n var filters = self.filter.getFilter(data);\r\n\r\n var params = {\r\n REQUEST: 'GetFeature',\r\n SERVICE: 'WFS',\r\n MAXFEATURES: 500,\r\n VERSION: self.version,\r\n OUTPUTFORMAT: self.outputFormat\r\n };\r\n\r\n var featureTypes = self.getFeatureTypes(true);\r\n if (!(featureTypes instanceof Array))\r\n params.TYPENAME = self.featurePrefix ? self.featurePrefix + ':' + featureTypes.trim() : featureTypes.trim();\r\n else {\r\n var ft = featureTypes.map(featureType => self.featurePrefix ?\r\n self.featurePrefix + ':' + featureType.trim() :\r\n featureType.trim());\r\n\r\n params.TYPENAME = ft.join(',');\r\n }\r\n\r\n var _getProperties = function (properties) {\r\n if ((properties || '') !== '') {\r\n if (!(properties instanceof Array)) {\r\n var p = [];\r\n if (properties instanceof Object) {\r\n for (var key in properties) {\r\n var prop = properties[key][0];\r\n if (properties[key].length > 1)\r\n prop = properties[key].join(',');\r\n\r\n p.push(prop);\r\n }\r\n }\r\n return p;\r\n }\r\n else {\r\n return properties.join(',');\r\n }\r\n }\r\n };\r\n var _properties = _getProperties(self.outputProperties);\r\n var _ids = _getProperties(self.dataIdProperty);\r\n\r\n const removeDuplicates = (toCheck) => {\r\n const arr = toCheck.split(',');\r\n return arr.filter((item, i) => {\r\n return arr.indexOf(item) === i;\r\n }).join(',');\r\n };\r\n\r\n if (_properties instanceof Array && _ids instanceof Array) {\r\n params.PROPERTYNAME = '';\r\n for (var i = 0; i < _properties.length; i++) {\r\n params.PROPERTYNAME += '(' + removeDuplicates(_properties[i] + ',' + _ids[i]) + ')';\r\n }\r\n } else {\r\n params.PROPERTYNAME = removeDuplicates(_properties + ',' + _ids);\r\n }\r\n\r\n params.FILTER = filters.f;\r\n\r\n return TC.Util.getParamString(params);\r\n },\r\n getGoToFilter: function (id) {\r\n var props = [];\r\n var _id = id.split('#');\r\n\r\n var source = self.dataIdProperty;\r\n var dataLayer = self.getFeatureTypes();\r\n\r\n if (source && dataLayer) {\r\n\r\n if (id.indexOf('#') > -1 && dataLayer instanceof Array && dataLayer.length > 1) {\r\n dataLayer.forEach(dLayer => {\r\n source[dLayer].forEach((src, idx) => {\r\n props.push({ name: src, value: _id[idx] });\r\n });\r\n });\r\n } else if (id.indexOf('#') === -1 && dataLayer instanceof Array) {\r\n let src = source;\r\n\r\n dataLayer.forEach(dLayer => {\r\n if (!props.hasOwnProperty(dLayer)) {\r\n\r\n if (src instanceof Object && source.hasOwnProperty(dLayer)) {\r\n src = source[dLayer];\r\n }\r\n\r\n src.forEach((s, idx) => {\r\n if (idx < _id.length) {\r\n props.push({ name: s, value: _id[idx] });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n if (source instanceof Object && source.hasOwnProperty(dataLayer)) {\r\n source = source[dataLayer];\r\n }\r\n\r\n source.forEach((src, idx) => {\r\n props.push({ name: src, value: _id[idx] });\r\n });\r\n }\r\n }\r\n\r\n return self.filter.transformFilter(props);\r\n },\r\n transformFilter: function (properties) {\r\n var self = this;\r\n\r\n if (!TC.filter) {\r\n TC.syncLoadJS(TC.apiLocation + 'TC/Filter');\r\n }\r\n\r\n if (properties && properties instanceof Array) {\r\n var filters = properties.map(function (elm) {\r\n if (elm.hasOwnProperty(\"type\")) {\r\n switch (true) {\r\n case elm.type === TC.Consts.comparison.EQUAL_TO: {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n }\r\n } else {\r\n return new TC.filter.equalTo(elm.name, elm.value);\r\n }\r\n });\r\n\r\n if (filters.length > 1) {\r\n return TC.filter.and.apply(null, filters);\r\n } else {\r\n return filters[0];\r\n }\r\n }\r\n }\r\n };\r\n })(self);\r\n};\r\n\r\nTC.control.Search = function () {\r\n var self = this;\r\n TC.Control.apply(self, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.exportsState = true;\r\n\r\n TC.Consts.event.TOOLSCLOSE = TC.Consts.event.TOOLSCLOSE || 'toolsclose.tc';\r\n\r\n self.url = '//idena.navarra.es/ogc/wfs';\r\n self.version = '1.1.0';\r\n self.featurePrefix = 'IDENA';\r\n\r\n if (self.options && self.options.url) {\r\n self.url = self.options.url;\r\n }\r\n\r\n self._LIKE_PATTERN = '*';\r\n self._MATCH_PATTERN = '.*';\r\n\r\n self.UTMX = 'X';\r\n self.UTMY = 'Y';\r\n self.LON = 'Lon';\r\n self.LAT = 'Lat';\r\n\r\n self.UTMX_LABEL = 'X: ';\r\n self.UTMY_LABEL = 'Y: ';\r\n self.LON_LABEL = 'Lon: ';\r\n self.LAT_LABEL = 'Lat: ';\r\n\r\n self.MUN = 'Mun';\r\n self.POL = 'Pol';\r\n self.PAR = 'Par';\r\n\r\n self.MUN_LABEL = 'Mun: ';\r\n self.POL_LABEL = 'Pol: ';\r\n self.PAR_LABEL = 'Par: ';\r\n\r\n self._search = { data: [] };\r\n\r\n self.EMPTY_RESULTS_LABEL = self.getLocaleString('noResults');\r\n self.EMPTY_RESULTS_TITLE = self.getLocaleString('checkCriterion');\r\n self.OUTBBX_LABEL = self.getLocaleString('outsideOfLimits');\r\n self.WFS_TYPE_ATTRS = [\"url\", \"version\", \"geometryName\", \"featurePrefix\", \"featureType\", \"properties\", \"outputFormat\"];\r\n\r\n self.availableSearchTypes = {};\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.CADASTRAL] = {\r\n suggestionRoot: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n searchWeight: 3,\r\n featureType: ['CATAST_Pol_ParcelaUrba', 'CATAST_Pol_ParcelaRusti', 'CATAST_Pol_ParcelaMixta'],\r\n municipality: {\r\n featureType: 'CATAST_Pol_Municipio',\r\n labelProperty: 'MUNICIPIO',\r\n idProperty: 'CMUNICIPIO'\r\n },\r\n queryProperties: {\r\n firstQueryWord: 'CMUNICIPIO',\r\n secondQueryWord: 'POLIGONO',\r\n thirdQueryWord: 'PARCELA'\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.cadastral\",\r\n color: [\r\n {\r\n CATAST_Pol_ParcelaUrba: {\r\n title: \"search.list.cadastral.urban\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n },\r\n {\r\n CATAST_Pol_ParcelaRusti: {\r\n title: \"search.list.cadastral.rustic\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n },\r\n {\r\n CATAST_Pol_ParcelaMixta: {\r\n title: \"search.list.cadastral.mixed\",\r\n color: {\r\n geomType: \"polygon\",\r\n css: \"strokeColor\"\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#136278',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n },\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#0c8b3d',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n },\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#e5475f',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getCadastralRef,\r\n goTo: self.goToCadastralRef,\r\n goToIdFormat: self.MUN + '{0}' + self.POL + '{1}' + self.PAR + '{2}',\r\n idPropertiesIdentifier: '#'\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.COORDINATES] = {\r\n parser: self.getCoordinates,\r\n goTo: self.goToCoordinates,\r\n searchWeight: 4,\r\n label: null,\r\n suggestionListHead: function (_text) {\r\n return {\r\n label: self.availableSearchTypes[TC.Consts.searchType.COORDINATES].label || self.getLocaleString('search.list.coordinates')\r\n };\r\n }\r\n };\r\n\r\n self.queryProperties = {\r\n QUERYWORD: 'QueryWord',\r\n FIRST: 'first',\r\n SECOND: 'second',\r\n THIRD: 'third'\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.MUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Municipio',\r\n dataIdProperty: ['CMUNICIPIO'],\r\n queryProperties: {\r\n firstQueryWord: ['MUNINOAC', 'MUNICIPIO']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.municipality\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['MUNICIPIO'],\r\n outputFormatLabel: '{0}',\r\n searchWeight: 1,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#fe06a5',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.MUNICIPALITY]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n //self.availableSearchTypes[TC.Consts.searchType.LOCALITY] = {\r\n // root: null,\r\n // limit: false,\r\n // url: self.url || '//idena.navarra.es/ogc/wfs',\r\n // version: self.version || '1.1.0',\r\n // outputFormat: TC.Consts.format.JSON,\r\n // featurePrefix: self.featurePrefix || 'IDENA',\r\n // geometryName: 'the_geom',\r\n // featureType: ['CATAST_Pol_Municipio', 'ESTADI_Pol_EntidadPob'],\r\n // renderFeatureType: ['CATAST_Pol_Municipio'],\r\n // dataIdProperty: {\r\n // CATAST_Pol_Municipio: ['CMUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['CMUNICIPIO', 'CENTIDAD']\r\n // },\r\n // queryProperties: {\r\n // firstQueryWord: {\r\n // CATAST_Pol_Municipio: ['MUNINOAC', 'MUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['ENTINOAC', 'ENTIDAD']\r\n // }\r\n // },\r\n // suggestionListHead: {\r\n // label: \"search.list.locality\",\r\n // color: \"strokeColor\"\r\n // },\r\n // outputProperties: {\r\n // CATAST_Pol_Municipio: ['MUNICIPIO'],\r\n // ESTADI_Pol_EntidadPob: ['MUNICIPIO', 'ENTIDAD']\r\n // },\r\n // outputFormatLabel: {\r\n // CATAST_Pol_Municipio: '{0}',\r\n // ESTADI_Pol_EntidadPob: '{1} ({0})'\r\n // },\r\n // searchWeight: 1,\r\n // styles: [\r\n // {\r\n // polygon: {\r\n // fillColor: '#000000',\r\n // fillOpacity: 0,\r\n // strokeColor: '#ffffff',\r\n // strokeWidth: 5,\r\n // strokeOpacity: 1\r\n // }\r\n // },\r\n // {\r\n // polygon: {\r\n // fillColor: '#000000',\r\n // fillOpacity: 0.1,\r\n // strokeColor: '#feba1e',\r\n // strokeWidth: 2,\r\n // strokeOpacity: 1\r\n // }\r\n // }\r\n // ],\r\n // parser: self.getStringPattern.bind(this, [TC.Consts.searchType.LOCALITY]),\r\n // goTo: self.goToStringPattern\r\n //};\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.COUNCIL] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Concejo',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CCONCEJO'],\r\n queryProperties: {\r\n firstQueryWord: ['CONCEJO']\r\n },\r\n outputProperties: ['MUNICIPIO', 'CONCEJO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 4,\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.COUNCIL]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern,\r\n idPropertiesIdentifier: '#',\r\n suggestionListHead: {\r\n label: \"search.list.council\",\r\n color: \"strokeColor\"\r\n },\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#49006a',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ]\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.STREET] = {\r\n root: null,\r\n limit: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n renderFeatureType: 'CATAST_Txt_Calle',\r\n featureType: 'CATAST_Lin_CalleEje',\r\n dataIdProperty: ['CVIA'],\r\n searchWeight: 5,\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC', 'ENTIDADC'],\r\n secondQueryWord: ['VIA', 'VIANOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.street\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['ENTIDADC', 'VIA', 'CVIA', 'CENTIDADC', 'CMUNICIPIO'],\r\n outputFormatLabel: '{1}, {0}',\r\n styles: [\r\n {\r\n line: {\r\n strokeColor: \"#CB0000\",\r\n strokeOpacity: 1,\r\n strokeWidth: 2,\r\n strokeLinecap: \"round\",\r\n strokeDashstyle: \"solid\"\r\n }\r\n },\r\n {\r\n point: {\r\n label: \"VIA\",\r\n angle: \"CADANGLE\",\r\n fontColor: \"#000000\",\r\n fontSize: 10,\r\n fontWeight: \"bold\",\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.STREET]),\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.NUMBER] = {\r\n root: null,\r\n limit: null,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Txt_Portal',\r\n renderFeatureType: '',\r\n searchWeight: 6,\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDADC', 'CVIA', 'PORTAL'],\r\n queryProperties: {\r\n firstQueryWord: ['ENTIDADC', 'ENTINOAC'],\r\n secondQueryWord: ['VIA', 'VIANOAC'],\r\n thirdQueryWord: ['PORTAL']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.number\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['ENTIDADC', 'VIA', 'PORTAL', 'CVIA', 'CENTIDADC', 'CMUNICIPIO'],\r\n outputFormatLabel: '{1} {2}, {0}',\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"PORTAL\",\r\n angle: \"CADANGLE\",\r\n fontColor: \"#CB0000\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.NUMBER]),\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.URBAN] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'ESTADI_Pol_EntidadPob',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDAD'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC', 'ENTIDAD']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.urban\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'ENTIDAD'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 2,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#feba1e',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.URBAN]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.PLACENAME] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'TOPONI_Txt_Toponimos',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CTOPONIMO'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['TOPONIMO', 'TOPONINOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.placeName\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 7,\r\n /*filterByMatch: true, // si queremos que filtre por expresión regular */\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"TOPONIMO\",\r\n angle: \"CADANGLE\",\r\n fontColor: \"#ff5722\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.PLACENAME]),\r\n stringPatternToCheck: self.stringPatternsValidators.s_or_t,\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.PLACENAMEMUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'TOPONI_Txt_Toponimos',\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CTOPONIMO'],\r\n idPropertiesIdentifier: '#',\r\n queryProperties: {\r\n firstQueryWord: ['MUNICIPIO', 'MUNINOAC'],\r\n secondQueryWord: ['TOPONIMO', 'TOPONINOAC']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.placeName\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['MUNICIPIO', 'TOPONIMO', 'CMUNICIPIO', 'CTOPONIMO'],\r\n outputFormatLabel: '{1} ({0})',\r\n searchWeight: 8,\r\n /*filterByMatch: true, si queremos que filtre por expresión regular */\r\n styles: [\r\n {\r\n point: {\r\n radius: 0,\r\n label: \"TOPONIMO\",\r\n angle: \"CADANGLE\",\r\n fontColor: \"#ff5722\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#FFFFFF\",\r\n labelOutlineWidth: 4\r\n }\r\n }\r\n ],\r\n parser: self.getStringPattern.bind(this, [TC.Consts.searchType.PLACENAMEMUNICIPALITY]),\r\n stringPatternToCheck: [self.stringPatternsValidators.ts, self.stringPatternsValidators.st],\r\n goTo: self.goToStringPattern\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.COMMONWEALTH] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: ['POLUCI_Pol_MancoRSUg'],\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMANCOMUNI'],\r\n queryProperties: {\r\n firstQueryWord: ['MANCOMUNID']\r\n },\r\n outputProperties: ['MANCOMUNID'],\r\n outputFormatLabel: '{0}',\r\n searchWeight: 9,\r\n styles: [\r\n {\r\n polygon: {\r\n fillColor: '#000000',\r\n fillOpacity: 0.1,\r\n strokeColor: '#fc4e2a',\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n }\r\n ]\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.ROAD] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'INFRAE_Lin_CtraEje',\r\n dataIdProperty: ['DCARRETERA'],\r\n queryProperties: {\r\n firstQueryWord: ['DCARRETERA']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.road\",\r\n color: \"strokeColor\"\r\n },\r\n outputProperties: ['DCARRETERA'],\r\n outputFormatLabel: self.getLocaleString('search.list.road.shorter') + ': ' + '{0}',\r\n searchWeight: 10,\r\n styles: [\r\n {\r\n polygon: {\r\n strokeColor: \"#00b2fc\",\r\n strokeOpacity: 1,\r\n strokeWidth: 5\r\n },\r\n line: {\r\n strokeColor: \"#00b2fc\",\r\n strokeOpacity: 1,\r\n strokeWidth: 5,\r\n strokeLinecap: \"round\",\r\n strokeDashstyle: \"solid\"\r\n }\r\n }\r\n ],\r\n parser: self.getRoad,\r\n goTo: self.goToRoad,\r\n pattern: function () {\r\n return new RegExp(\"^(?:(?:\" + self.getLocaleString(\"search.list.road\") + \"|\" + self.getLocaleString(\"search.list.road.shorter\") + \")\\\\:?)?\\\\s*((A?|AP?|N?|R?|E?|[A-Z]{2}?|[A-Z]{1}?)\\\\s*\\\\-?\\\\s*(\\\\d{1,4})\\\\s*\\\\-?\\\\s*(A?|B?|C?|R?))$\", \"i\");\r\n }\r\n };\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.ROADMILESTONE] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'INFRAE_Sym_CtraPK',\r\n dataIdProperty: ['DCARRETERA', 'CPK'],\r\n queryProperties: {\r\n firstQueryWord: ['DCARRETERA'],\r\n secondQueryWord: ['PK']\r\n },\r\n suggestionListHead: {\r\n label: \"search.list.milestone.larger\",\r\n color: \"fontColor\"\r\n },\r\n outputProperties: ['DCARRETERA', 'PK'],\r\n outputFormatLabel: self.getLocaleString('search.list.road.shorter') + ': {0} ' + self.getLocaleString('search.list.milestone') + ': {1}',\r\n searchWeight: 11,\r\n styles: [\r\n {\r\n point: {\r\n label: [\"DCARRETERA\", \"PK\"],\r\n fontColor: \"#00b2fc\",\r\n fontSize: 14,\r\n labelOutlineColor: \"#ffffff\",\r\n labelOutlineWidth: 2\r\n }\r\n }\r\n ],\r\n parser: self.getMilestone,\r\n goTo: self.goToMilestone,\r\n pattern: function () {\r\n return new RegExp(\"^(?:(?:\" + self.getLocaleString(\"search.list.road\") + \"|\" + self.getLocaleString(\"search.list.road.shorter\") + \")\\\\:?)?\\\\s*((A?|AP?|N?|R?|E?|[A-Z]{2}?|[A-Z]{1}?)\\\\s*\\\\-?\\\\s*(\\\\d{1,4})\\\\s*\\\\-?\\\\s*(A?|B?|C?|R?))\\\\s*\\\\,*\\\\s*(?:(?:\" + self.getLocaleString(\"search.list.milestone\") + \"\\\\:?)|(?:P\\\\:?)|(?:K\\\\:?)|(?:KM\\\\:?)|(?:\\\\s+|\\\\,+))\\\\s*(\\\\d{1,4})$\", \"i\");\r\n }\r\n };\r\n\r\n self.rootCfg = {};\r\n self.rootCfg[TC.Consts.searchType.MUNICIPALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: 'CATAST_Pol_Municipio',\r\n dataIdProperty: ['CMUNICIPIO'],\r\n queryProperties: {\r\n firstQueryWord: ['MUNICIPIO']\r\n },\r\n outputProperties: ['MUNICIPIO'],\r\n outputFormatLabel: '{0}',\r\n getRootLabel: function () {\r\n return new Promise(function (resolve, _reject) {\r\n\r\n if (self.rootCfg.active && !self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel) {\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = self.rootCfg[TC.Consts.searchType.MUNICIPALITY].version;\r\n params.REQUEST = 'GetFeature';\r\n params.TYPENAME = self.rootCfg[TC.Consts.searchType.MUNICIPALITY].featurePrefix + ':' + self.rootCfg[TC.Consts.searchType.MUNICIPALITY].featureType;\r\n params.OUTPUTFORMAT = self.rootCfg[TC.Consts.searchType.MUNICIPALITY].outputFormat;\r\n params.PROPERTYNAME = ['CMUNICIPIO'].concat(self.rootCfg[TC.Consts.searchType.MUNICIPALITY].outputProperties).join(',');\r\n\r\n params.CQL_FILTER = self.rootCfg[TC.Consts.searchType.MUNICIPALITY].root.map(function (elem) {\r\n return ['CMUNICIPIO'].map(function (id, index) {\r\n return id + '=' + elem[index];\r\n }).join(' AND ');\r\n });\r\n\r\n params.CQL_FILTER = params.CQL_FILTER.join(' OR ');\r\n\r\n TC.ajax({\r\n url: self.rootCfg[TC.Consts.searchType.MUNICIPALITY].url + '?' + TC.Util.getParamString(params),\r\n method: 'GET',\r\n responseType: TC.Consts.mimeType.JSON\r\n }).then(function (response) {\r\n const data = response.data;\r\n if (data.totalFeatures > 0) {\r\n\r\n self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel = data.features.map(function (feature) {\r\n return {\r\n id: ['CMUNICIPIO'].map(function (elem) {\r\n return feature.properties[elem];\r\n }).join('#'),\r\n label: feature.properties[self.rootCfg[TC.Consts.searchType.MUNICIPALITY].outputProperties[0]].toLowerCase()\r\n };\r\n });\r\n\r\n resolve(self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel);\r\n\r\n } else {\r\n self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel = [];\r\n resolve(self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel);\r\n }\r\n }).catch(function () {\r\n resolve([]);\r\n });\r\n }\r\n else {\r\n resolve(self.rootCfg[TC.Consts.searchType.MUNICIPALITY].rootLabel);\r\n }\r\n });\r\n }\r\n };\r\n self.rootCfg[TC.Consts.searchType.LOCALITY] = {\r\n root: null,\r\n limit: false,\r\n url: self.url || '//idena.navarra.es/ogc/wfs',\r\n version: self.version || '1.1.0',\r\n outputFormat: TC.Consts.format.JSON,\r\n featurePrefix: self.featurePrefix || 'IDENA',\r\n geometryName: 'the_geom',\r\n featureType: ['ESTADI_Pol_EntidadPob'],\r\n renderFeatureType: '',\r\n dataIdProperty: ['CMUNICIPIO', 'CENTIDADC'],\r\n queryProperties: {\r\n firstQueryWord: ['ENTINOAC']\r\n },\r\n outputProperties: ['ENTINOAC'],\r\n getRootLabel: function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (self.rootCfg.active && !self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel) {\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = self.rootCfg[TC.Consts.searchType.LOCALITY].version;\r\n params.REQUEST = 'GetFeature';\r\n params.TYPENAME = self.rootCfg[TC.Consts.searchType.LOCALITY].featurePrefix + ':' + self.rootCfg[TC.Consts.searchType.LOCALITY].featureType;\r\n params.OUTPUTFORMAT = self.rootCfg[TC.Consts.searchType.LOCALITY].outputFormat;\r\n params.PROPERTYNAME = ['CMUNICIPIO', 'CENTIDAD'].concat(self.rootCfg[TC.Consts.searchType.LOCALITY].outputProperties).join(',');\r\n\r\n params.CQL_FILTER = self.rootCfg[TC.Consts.searchType.LOCALITY].root.map(function (elem) {\r\n return ['CMUNICIPIO', 'CENTIDAD'].map(function (id, index) {\r\n return id + '=' + elem[index];\r\n }).join(' AND ');\r\n });\r\n\r\n params.CQL_FILTER = params.CQL_FILTER.join(' OR ');\r\n\r\n TC.ajax({\r\n url: self.rootCfg[TC.Consts.searchType.LOCALITY].url + '?' + TC.Util.getParamString(params),\r\n method: 'GET',\r\n responseType: TC.Consts.mimeType.JSON\r\n }).then(function (response) {\r\n const data = response.data;\r\n if (data.totalFeatures > 0) {\r\n\r\n self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel = data.features.map(function (feature) {\r\n return {\r\n id: ['CMUNICIPIO', 'CENTIDAD'].map(function (elem) {\r\n return feature.properties[elem];\r\n }).join('#'),\r\n label: feature.properties[self.rootCfg[TC.Consts.searchType.LOCALITY].outputProperties[0]].toLowerCase()\r\n };\r\n });\r\n\r\n resolve(self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel);\r\n\r\n } else {\r\n self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel = [];\r\n resolve(self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel);\r\n }\r\n }).catch(function () {\r\n resolve([]);\r\n });\r\n }\r\n else {\r\n resolve(self.rootCfg[TC.Consts.searchType.LOCALITY].rootLabel);\r\n }\r\n });\r\n }\r\n };\r\n\r\n self.allowedSearchTypes = [];\r\n\r\n if (self.options.allowedSearchTypes) {\r\n for (var allowed in self.options.allowedSearchTypes) {\r\n\r\n if (self.availableSearchTypes[allowed] && !TC.Util.isEmptyObject(self.options.allowedSearchTypes[allowed])) {\r\n\r\n // GLS: gestionamos el override de featureType y renderFeatureType.\r\n // Si por defecto cuenta con renderFeatureType y sobrescribe featureType y no renderFeatureType, \r\n // elimino la propiedad renderFeatureType y elimino el último estilo definido, que se corresponde con el de renderFeatureType.\r\n if (self.availableSearchTypes[allowed].renderFeatureType && self.availableSearchTypes[allowed].renderFeatureType.length > 0 &&\r\n self.options.allowedSearchTypes[allowed].featureType && !self.options.allowedSearchTypes[allowed].renderFeatureType) {\r\n\r\n delete self.availableSearchTypes[allowed].renderFeatureType;\r\n self.availableSearchTypes[allowed].styles = self.availableSearchTypes[allowed].styles.slice(0, self.availableSearchTypes[allowed].styles.length - 1);\r\n }\r\n\r\n // GLS: override de la configuración por defecto con la del config.JSON\r\n TC.Util.extend(self.availableSearchTypes[allowed], self.options.allowedSearchTypes[allowed]);\r\n\r\n\r\n // GLS: Limitamos la búsqueda en portales y calles cuando así se establezca en la configuración de las búsquedas\r\n if (self.options.allowedSearchTypes[allowed].root &&\r\n (allowed !== TC.Consts.searchType.MUNICIPALITY && self.options.allowedSearchTypes[allowed].rootType === TC.Consts.searchType.MUNICIPALITY) ||\r\n allowed !== TC.Consts.searchType.LOCALITY && self.options.allowedSearchTypes[allowed].rootType === TC.Consts.searchType.LOCALITY) {\r\n\r\n self.rootCfg.active = self.rootCfg[self.options.allowedSearchTypes[allowed].rootType];\r\n self.rootCfg.active.root = self.options.allowedSearchTypes[allowed].root;\r\n self.rootCfg.active.limit = self.options.allowedSearchTypes[allowed].limit;\r\n\r\n self.availableSearchTypes[TC.Consts.searchType.STREET].queryProperties.firstQueryWord =\r\n self.availableSearchTypes[TC.Consts.searchType.NUMBER].queryProperties.firstQueryWord =\r\n self.rootCfg.active.dataIdProperty;\r\n }\r\n }\r\n\r\n // Si esta a false lo borramos de las disponibles\r\n if (!self.options.allowedSearchTypes[allowed]) {\r\n delete self.options.allowedSearchTypes[allowed];\r\n } else {\r\n self.addAllowedSearchType(allowed, self.availableSearchTypes[allowed] ? self.availableSearchTypes[allowed] : self.options.allowedSearchTypes[allowed], self);\r\n }\r\n }\r\n }\r\n\r\n if (self.rootCfg.active) {\r\n self.rootCfg.active.getRootLabel();\r\n }\r\n\r\n self.queryableFeatures = self.options.queryableFeatures || false;\r\n\r\n self.UTMX_LEN = 6;\r\n self.UTMY_LEN = 7;\r\n\r\n self.wrap = new TC.wrap.control.Search(self);\r\n\r\n self.interval = 500;\r\n\r\n self.NORMAL_PATTERNS = {\r\n ROMAN_NUMBER: /M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3}){1,}?\\S?\\./i,\r\n ABSOLUTE_NOT_DOT: /[`~!@#$%^&*_|+\\=?;:'\"\\{\\}\\[\\]\\\\]/gi,\r\n ABSOLUTE: /[`~!@#$%^&*_|+\\=?;:'.\\{\\}\\[\\]\\\\]/gi\r\n };\r\n};\r\n\r\nTC.inherit(TC.control.Search, TC.Control);\r\nTC.mix(TC.control.Search, TC.control.infoShare);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Search.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-search';\r\n\r\n TC.Consts.event.SEARCHQUERYEMPTY = TC.Consts.event.SEARCHQUERYEMPTY || 'searchqueryempty.tc';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"search.1\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":23}}})) + \"

                \\r\\n
                \\r\\n \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n

                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"search.1\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":35}}})) + \" - \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"share\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":38},\"end\":{\"line\":5,\"column\":54}}})) + \"

                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n\\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n Promise.all([TC.Control.prototype.register.call(self, map), self.renderPromise()]).then(function () {\r\n if (self.options && self.options.share) {\r\n self.getShareDialog().then(function () {\r\n resolve(self);\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n } else {\r\n resolve(self);\r\n }\r\n });\r\n });\r\n };\r\n\r\n const highlighting = function (elm) {\r\n const self = this;\r\n\r\n var highlighted = elm.label;\r\n var strReg = [];\r\n\r\n // eliminamos caracteres extraños del patrón ya analizado\r\n\r\n if (self.lastPattern.trim().length === 0 && self.textInput.value.trim().length > 0) {\r\n self.lastPattern = self.textInput.value.trim();\r\n }\r\n\r\n var normalizedLastPattern = self.lastPattern;\r\n if (self.NORMAL_PATTERNS.ROMAN_NUMBER.test(normalizedLastPattern))\r\n normalizedLastPattern = normalizedLastPattern.replace(self.NORMAL_PATTERNS.ABSOLUTE_NOT_DOT, '');\r\n else\r\n normalizedLastPattern = normalizedLastPattern.replace(self.NORMAL_PATTERNS.ABSOLUTE, '');\r\n\r\n\r\n var querys = [];\r\n var separatorChar = ',';\r\n if (normalizedLastPattern.indexOf(separatorChar) === -1) {\r\n separatorChar = ' ';\r\n }\r\n\r\n querys = normalizedLastPattern.trim().split(separatorChar);\r\n\r\n // si estamos tratando con coordenadas el separador es el espacio, no la coma\r\n if (elm.label.indexOf(self.LAT_LABEL) > -1 && elm.label.indexOf(self.LON_LABEL) > -1 ||\r\n elm.label.indexOf(self.UTMX_LABEL) > -1 && elm.label.indexOf(self.UTMY_LABEL) > -1) {\r\n querys = self.lastPattern.split(' ');\r\n\r\n for (var t = 0; t < querys.length; t++) {\r\n if (querys[t].trim().slice(-1) === ',') {\r\n querys[t] = querys[t].slice(0, -1);\r\n }\r\n }\r\n }\r\n\r\n for (var q = 0; q < querys.length; q++) {\r\n if (querys[q].trim().length > 0) {\r\n strReg.push('(' + querys[q].trim().replace(/\\(/gi, \"\").replace(/\\)/gi, \"\") + ')');\r\n const match = /((\\<)|(\\>)|(\\<\\>))/gi.exec(querys[q].trim());\r\n if (match) {\r\n var _strReg = querys[q].trim().replace(/((\\<)|(\\>)|(\\<\\>))/gi, '').split(' ');\r\n for (var st = 0; st < _strReg.length; st++) {\r\n if (_strReg[st].trim().length > 0)\r\n strReg.push('(' + _strReg[st].trim().replace(/\\(/gi, \"\\\\(\").replace(/\\)/gi, \"\\\\)\") + ')');\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (elm.dataRole === TC.Consts.searchType.ROAD || elm.dataRole === TC.Consts.searchType.ROADMILESTONE) {\r\n var rPattern = self.getSearchTypeByRole(elm.dataRole).getPattern();\r\n const match = rPattern.exec(self.lastPattern);\r\n\r\n if (match) {\r\n strReg = [];\r\n\r\n if (match[2] && match[3] && match[4]) {\r\n strReg.push('(' + match[2] + \"-\" + match[3] + \"-\" + match[4] + ')');\r\n } else if (match[2] && match[3]) {\r\n strReg.push('(' + match[2] + \"-\" + match[3] + ')');\r\n } else if (match[3] && match[4]) {\r\n strReg.push('(' + match[3] + \"-\" + match[4] + ')');\r\n } else if (match[2] || match[3]) {\r\n strReg.push('(' + (match[2] || match[3]) + ')');\r\n }\r\n\r\n if (match[5]) {\r\n strReg.push(\"(?:\" + self.getLocaleString(\"search.list.milestone\") + \"\\\\:\\\\s\\\\d*)\" + \"(\" + match[5] + \")\" + \"\\\\d*\");\r\n }\r\n }\r\n }\r\n\r\n var pattern = '(' + strReg.join('|') + ')';\r\n\r\n pattern = pattern.replace(/á|à/gi, \"a\");\r\n pattern = pattern.replace(/é|è/gi, \"e\");\r\n pattern = pattern.replace(/í|ì/gi, \"i\");\r\n pattern = pattern.replace(/ó|ò/gi, \"o\");\r\n pattern = pattern.replace(/ú|ù/gi, \"u\");\r\n pattern = pattern.replace(/ü/gi, \"u\");\r\n\r\n pattern = pattern.replace(/a/gi, \"[a|á|à]\");\r\n pattern = pattern.replace(/e/gi, \"[e|é|è]\");\r\n pattern = pattern.replace(/i/gi, \"[i|í|ì]\");\r\n pattern = pattern.replace(/o/gi, \"[o|ó|ò]\");\r\n pattern = pattern.replace(/u/gi, \"[u|ú|ü|ù]\");\r\n var rex = new RegExp(pattern, \"gi\");\r\n\r\n var label = elm.label;\r\n\r\n if (elm.dataRole !== TC.Consts.searchType.ROAD || elm.dataRole !== TC.Consts.searchType.ROADMILESTONE) {\r\n highlighted = label.replace(rex,\r\n function () {\r\n var params = Array.prototype.slice.call(arguments, 0);\r\n\r\n if (params[params.length - 3]) {\r\n return params[0].replace(params[params.length - 3], \"\" + params[params.length - 3] + \"\");\r\n } else {\r\n return \"\" + params[0] + \"\";\r\n }\r\n });\r\n } else {\r\n highlighted = label.replace(rex, \"$1\");\r\n }\r\n\r\n return highlighted;\r\n };\r\n\r\n const selectionCallback = function (e) {\r\n const self = this;\r\n var _target = e.target;\r\n\r\n if (_target.tagName.toLowerCase() !== 'a') {\r\n let el = e.target;\r\n const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;\r\n\r\n while (el) {\r\n if (matchesSelector.call(el, 'a')) {\r\n _target = el;\r\n break;\r\n } else {\r\n el = el.parentElement;\r\n }\r\n }\r\n }\r\n\r\n if (_target.querySelector('span[hidden]')) {\r\n self.textInput.value = _target.querySelector('span[hidden]').textContent;\r\n self.lastPattern = self.textInput.value;\r\n self._goToResult(unescape(_target.getAttribute('href')).substring(1), _target.parentNode.getAttribute('dataRole'));\r\n TC.UI.autocomplete.call(self.textInput, 'clear');\r\n\r\n self.shareButton && self.shareButton.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n };\r\n\r\n const sortAlphaNum = function (a, b) {\r\n const reA = /[^a-zA-Z]/g;\r\n const reN = /[^0-9]/g;\r\n\r\n var AInt = parseInt(a, 10);\r\n var BInt = parseInt(b, 10);\r\n\r\n if (isNaN(AInt) && isNaN(BInt)) {\r\n var aA = a.replace(reA, \"\");\r\n var bA = b.replace(reA, \"\");\r\n if (aA === bA) {\r\n var aN = parseInt(a.replace(reN, \"\"), 10);\r\n var bN = parseInt(b.replace(reN, \"\"), 10);\r\n return aN === bN ? 0 : aN > bN ? 1 : -1;\r\n } else {\r\n return aA > bA ? 1 : -1;\r\n }\r\n } else if (isNaN(AInt)) {//A is not an Int\r\n return 1;//to make alphanumeric sort first return -1 here\r\n } else if (isNaN(BInt)) {//B is not an Int\r\n return -1;//to make alphanumeric sort first return 1 here\r\n } else {\r\n return AInt > BInt ? 1 : -1;\r\n }\r\n };\r\n\r\n const sortByRoleAndAlphabet = function (a, b) {\r\n const self = this;\r\n\r\n if (self.getSearchTypeByRole(a.dataRole).searchWeight && self.getSearchTypeByRole(b.dataRole).searchWeight) {\r\n if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) > (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return 1;\r\n } else if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) < (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return -1;\r\n }\r\n else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n } else {\r\n if (a.dataRole > b.dataRole) {\r\n return 1;\r\n }\r\n else if (a.dataRole < b.dataRole)\r\n return -1;\r\n else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n }\r\n };\r\n\r\n const sortByRoot = function (a, b) {\r\n const self = this;\r\n\r\n const sort_ = function () {\r\n var first = self.rootCfg.active.root[0] instanceof Array ? self.rootCfg.active.root[0].join('-') : self.rootCfg.active.root[0];\r\n\r\n var aRoot, bRoot;\r\n if (a.properties && a.properties.length > 0 && b.properties && b.properties.length > 0) {\r\n aRoot = self.rootCfg.active.dataIdProperty.map(function (elem) { return a.properties[elem].toString(); }).join('-');\r\n bRoot = self.rootCfg.active.dataIdProperty.map(function (elem) { return b.properties[elem].toString(); }).join('-');\r\n } else {\r\n aRoot = a.id;\r\n bRoot = b.id;\r\n }\r\n\r\n if (aRoot !== first && bRoot === first) {\r\n return 1;\r\n } else if (aRoot === first && bRoot !== first) {\r\n return -1;\r\n } else {\r\n return sortAlphaNum(a.label, b.label);\r\n }\r\n }.bind(this);\r\n\r\n if (self.getSearchTypeByRole(a.dataRole).searchWeight && self.getSearchTypeByRole(b.dataRole).searchWeight) {\r\n if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) > (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return 1;\r\n } else if ((self.getSearchTypeByRole(a.dataRole).searchWeight || 0) < (self.getSearchTypeByRole(b.dataRole).searchWeight || 0)) {\r\n return -1;\r\n }\r\n else {\r\n return sort_();\r\n }\r\n }\r\n else {\r\n return sort_();\r\n }\r\n };\r\n\r\n const buildHTML = function (results) {\r\n const self = this;\r\n\r\n var html = [];\r\n var dataRoles = [];\r\n\r\n // ordenamos por roles y alfabéticamente\r\n var data = results.results.sort(sortByRoleAndAlphabet.bind(self));\r\n\r\n if (self.rootCfg.active) {// si hay root, aplicamos el orden por entidades \r\n data = data.sort(sortByRoot.bind(self));\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var elm = data[i];\r\n\r\n if (dataRoles.indexOf(elm.dataRole) === -1) {\r\n html.push(self.getSearchTypeByRole(elm.dataRole).getSuggestionListHead());\r\n dataRoles.push(elm.dataRole);\r\n }\r\n\r\n html.push(`
                • ${highlighting.call(self, elm)}
                • `);\r\n }\r\n\r\n Array.prototype.map.call(self.resultsList.querySelectorAll('li[dataRole]'), (elm) => {\r\n return elm.getAttribute('dataRole');\r\n }).filter((dataRole, i, liDataRoles) => {\r\n return liDataRoles.indexOf(dataRole) === i && !dataRoles.includes(dataRole);\r\n }).forEach(dataRole => {\r\n html.push(self.getSearchTypeByRole(dataRole).getSuggestionListHead());\r\n html.push(`
                • ${self.getLocaleString('searching')}
                • `);\r\n });\r\n\r\n return html.join('');\r\n };\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n self.renderData(),\r\n self.getRenderedHtml(self.CLASS + '-dialog', {}, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n var self = this;\r\n self._search = self._search || {};\r\n var _search = function () {\r\n self.search(self.textInput.value, function (list) {\r\n if (list.length === 1) {\r\n self.textInput.value = list[0].label;\r\n self._goToResult(list[0].id, self.resultsList.querySelector('li:not([header])').getAttribute('dataRole'));\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n else if (list.length === 0) {\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n });\r\n };\r\n self.layerStyleFN = (function () {\r\n function getFeatureType(idFeature) {\r\n return idFeature.indexOf('.') > -1 ? idFeature.split('.')[0] : idFeature;\r\n }\r\n function getStyle(property, geomType, id) {\r\n var type = self.getSearchTypeByFeature(id);\r\n if (type) {\r\n var style = type.getStyleByFeatureType(getFeatureType(id));\r\n if (style && style.hasOwnProperty(geomType)) {\r\n return style[geomType][property];\r\n }\r\n }\r\n return TC.Cfg.styles[geomType][property];\r\n }\r\n return function (geomType, property, extractValue, f) {\r\n var self = this;\r\n if (TC.Feature && !(f instanceof TC.Feature)) {\r\n self.map.trigger(TC.Consts.event.FEATURESADD, { layer: self.layer, geom: f.geom });\r\n }\r\n var prop = getStyle(property, geomType, getFeatureType(f.id));\r\n if (extractValue) {\r\n if (prop instanceof Array) {\r\n var values = prop.map(function (p) {\r\n return f.getData().hasOwnProperty(p) ? f.getData()[p] : '';\r\n });\r\n var searchType = this.getSearchTypeByFeature(getFeatureType(f.id));\r\n if (searchType) {\r\n return searchType.outputFormatLabel.tcFormat(values);\r\n } else {\r\n return values.join(' ');\r\n }\r\n } else {\r\n return f.getData().hasOwnProperty(prop) ? f.getData()[prop] : '';\r\n }\r\n }\r\n else {\r\n return prop;\r\n }\r\n };\r\n }());\r\n return new Promise(function (resolve, reject) {\r\n TC.Control.prototype.renderData.call(self, Object.assign(data || {}, { share: self.options.share }), function () {\r\n if (self.map) {\r\n self.layerPromise = self.map.addLayer({\r\n id: self.getUID(),\r\n title: 'Búsquedas',\r\n owner: self,\r\n stealth: true,\r\n declutter: true,\r\n type: TC.Consts.layerType.VECTOR,\r\n styles: {\r\n polygon: {\r\n fillColor: self.layerStyleFN.bind(self, 'polygon', 'fillColor', false),\r\n fillOpacity: self.layerStyleFN.bind(self, 'polygon', 'fillOpacity', false),\r\n strokeColor: self.layerStyleFN.bind(self, 'polygon', 'strokeColor', false),\r\n strokeOpacity: self.layerStyleFN.bind(self, 'polygon', 'strokeOpacity', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'polygon', 'strokeWidth', false)\r\n },\r\n line: {\r\n strokeColor: self.layerStyleFN.bind(self, 'line', 'strokeColor', false),\r\n strokeOpacity: self.layerStyleFN.bind(self, 'line', 'strokeOpacity', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'line', 'strokeWidth', false)\r\n },\r\n marker: {\r\n anchor: TC.Defaults.styles.marker.anchor,\r\n height: TC.Defaults.styles.marker.height,\r\n width: TC.Defaults.styles.marker.width\r\n },\r\n point: {\r\n radius: self.layerStyleFN.bind(self, 'point', 'radius', false),\r\n height: self.layerStyleFN.bind(self, 'point', 'height', false),\r\n width: self.layerStyleFN.bind(self, 'point', 'width', false),\r\n fillColor: self.layerStyleFN.bind(self, 'point', 'fillColor', false),\r\n fillOpacity: self.layerStyleFN.bind(self, 'point', 'fillOpacity', false),\r\n strokeColor: self.layerStyleFN.bind(self, 'point', 'strokeColor', false),\r\n strokeWidth: self.layerStyleFN.bind(self, 'point', 'strokeWidth', false),\r\n fontSize: self.layerStyleFN.bind(self, 'point', 'fontSize', false),\r\n fontColor: self.layerStyleFN.bind(self, 'point', 'fontColor', false),\r\n labelOutlineColor: self.layerStyleFN.bind(self, 'point', 'labelOutlineColor', false),\r\n labelOutlineWidth: self.layerStyleFN.bind(self, 'point', 'labelOutlineWidth', false),\r\n label: self.layerStyleFN.bind(self, 'point', 'label', true),\r\n angle: self.layerStyleFN.bind(self, 'point', 'angle', true)\r\n }\r\n }\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n return self.layer;\r\n });\r\n }\r\n else {\r\n self.layerPromise = Promise.reject(new Error('Control not registered to map'));\r\n }\r\n\r\n // desde keypress y desde la lupa\r\n var _research = function () {\r\n self.textInput.value = self.resultsList.label || self.resultsList.querySelector('li:not([header]) > a > span').textContent;\r\n self.lastPattern = self.textInput.value;\r\n self._goToResult(self.resultsList.id || unescape(self.resultsList.querySelector('li:not([header]) > a').getAttribute('href')).substring(1), self.resultsList.querySelector('li:not([header])').getAttribute('dataRole'));\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n };\r\n\r\n self.textInput = self.div.querySelector('input.' + self.CLASS + '-txt');\r\n if (self.options && self.options.placeHolder) {\r\n self.textInput.setAttribute('placeHolder', self.options.placeHolder.trim());\r\n }\r\n\r\n self.resultsList = self.div.querySelector('.' + self.CLASS + '-list');\r\n self.button = self.div.querySelector('.' + self.CLASS + '-btn');\r\n self.button.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.getLayer().then(function (l) {\r\n if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length > 1) { }\r\n else if (l.features.length > 0) {\r\n l.map.zoomToFeatures(l.features);\r\n }\r\n else if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length === 1) {\r\n _research();\r\n }\r\n else {\r\n self.textInput.dispatchEvent(new Event(\"keyup\"));\r\n }\r\n });\r\n }, { passive: true });\r\n if (self.options.instructions) {\r\n self.textInput.setAttribute('title', self.options.instructions.trim());\r\n self.button.setAttribute('title', self.options.instructions.trim());\r\n }\r\n\r\n // GLS: añadimos la funcionalidad al mensaje de \"No hay resultados\", al hacer click repliega el mensaje.\r\n self.resultsList.addEventListener(TC.Consts.event.CLICK, TC.EventTarget.listenerBySelector('a.' + self.CLASS + '-li-empty', function () {\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n self.textInput.focus();\r\n }), { passive: true });\r\n\r\n self.textInput.addEventListener('keypress', function (e) {\r\n if (e.which == 13) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n self.lastPattern = \"\";\r\n\r\n if (self.resultsList.querySelectorAll('li > a:not(.tc-ctl-search-li-loading):not(.tc-ctl-search-li-empty)').length === 1) {\r\n _research();\r\n } else {\r\n _search();\r\n }\r\n return false;\r\n }\r\n });\r\n self.textInput.addEventListener(\"search\", function () {\r\n if (self.textInput.value.length === 0) {\r\n delete self.toShare;\r\n self.shareButton && self.shareButton.classList.add(TC.Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n _search();\r\n }\r\n });\r\n self.textInput.addEventListener(\"input\", function () {\r\n if (self.textInput.value.length === 0) {\r\n self.shareButton && self.shareButton.classList.add(TC.Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n _search();\r\n }\r\n });\r\n self.textInput.addEventListener(\"targetCleared.autocomplete\", function () {\r\n self.shareButton && self.shareButton.classList.add(TC.Consts.classes.HIDDEN);\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n self.textInput.addEventListener(\"targetUpdated.autocomplete\", function () {\r\n if (self.resultsList.querySelectorAll('li').length > 0) {\r\n self.resultsList.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n });\r\n\r\n\r\n if (self.options.share) {\r\n self.shareButton = self.div.querySelector('.' + self.CLASS + '-share-btn');\r\n self.shareButton.addEventListener(TC.Consts.event.CLICK, function () {\r\n self.showShareDialog();\r\n }, { passive: true });\r\n }\r\n\r\n self.lastPattern = '';\r\n self.retryTimeout = null;\r\n var searchDelay;\r\n\r\n const source = function (_text, callback) {\r\n self.lastpress = performance.now();\r\n\r\n if (!searchDelay) {\r\n const step = function () {\r\n var criteria = self.textInput.value.trim();\r\n\r\n if (criteria.length > 0 &&\r\n (!self.lastPattern || criteria !== self.lastPattern) &&\r\n performance.now() - self.lastpress > self.interval) {\r\n\r\n window.cancelAnimationFrame(searchDelay);\r\n searchDelay = undefined;\r\n\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n\r\n // Pendiente de afinar\r\n //if (self.lastPattern && criteria.substring(0, criteria.lastIndexOf(' ')) == self.lastPattern) { \r\n\r\n // // Si el patrón de búsqueda anterior y actual es el mismo más algo nuevo (típico en la búsqueda de un portal), lo nuevo lo separo por coma\r\n // // self.lastPattern: \"Calle Cataluña/Katalunia Kalea, Pamplona\"\r\n // // text: \"Calle Cataluña/Katalunia Kalea, Pamplona 18\"\r\n\r\n // criteria = criteria.substring(0, criteria.lastIndexOf(' ')) + (self.lastPattern.trim().endsWith(',') ? \"\" : \",\") + criteria.substring(criteria.lastIndexOf(' '));\r\n //}\r\n\r\n self.lastPattern = criteria;\r\n\r\n self.search(criteria, callback);\r\n } else {\r\n searchDelay = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n searchDelay = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n TC.UI.autocomplete.call(self.textInput, {\r\n link: '#',\r\n target: self.resultsList,\r\n minLength: 2,\r\n ctx: self,\r\n source: source,\r\n callback: selectionCallback.bind(self),\r\n buildHTML: buildHTML.bind(self)\r\n });\r\n\r\n const getNextSibling = function (elem, selector) {\r\n // Get the next sibling element\r\n var sibling = elem.nextElementSibling;\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.nextElementSibling;\r\n }\r\n };\r\n\r\n const getPreviousSibling = function (elem, selector) {\r\n // Get the next sibling element\r\n var sibling = elem.previousElementSibling;\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.previousElementSibling;\r\n }\r\n };\r\n\r\n // Detect up/down arrow\r\n const onKeydown = function (e) {\r\n if (!e.ctrlKey && !e.altKey && !e.shiftKey) {\r\n if (e.keyCode === 40) { // down arrow\r\n if (self.textInput == document.activeElement && self.resultsList.querySelector('li:not([header]) a')) {\r\n // Scenario 1: We're focused on the search input; move down to the first li\r\n self.resultsList.querySelector('li:not([header]) a').focus();\r\n } else if (self.resultsList.querySelector('li:not([header]):last-child a') === document.activeElement) { //} else if (self.resultsList.querySelector('li:not([header]):last a').is(':focus')) {\r\n // Scenario 2: We're focused on the last li; move up to search input\r\n self.textInput.focus();\r\n } else {\r\n // Scenario 3: We're in the list but not on the last element, simply move down\r\n getNextSibling(document.activeElement.parentElement, 'li:not([header])')\r\n .querySelector('a').focus();\r\n }\r\n e.preventDefault(); // Stop page from scrolling\r\n e.stopPropagation();\r\n } else if (e.keyCode === 38) { // up arrow\r\n if (self.textInput == document.activeElement) {\r\n // Scenario 1: We're focused on the search input; move down to the last li\r\n self.resultsList.querySelector('li:not([header]):last-child a').focus();\r\n } else if (document.activeElement == self.resultsList.querySelector('li:not([header]) a')) {\r\n self.resultsList.querySelector('li:not([header]):last-child a').focus();\r\n } else {\r\n // Scenario 3: We're in the list but not on the first element, simply move up\r\n getPreviousSibling(document.activeElement.parentElement, 'li:not([header])')\r\n .querySelector('a').focus();\r\n }\r\n e.preventDefault(); // Stop page from scrolling\r\n e.stopPropagation();\r\n }\r\n }\r\n e.stopPropagation();\r\n };\r\n\r\n self.textInput.addEventListener('keydown', onKeydown);\r\n self.resultsList.addEventListener('keydown', onKeydown);\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n\r\n self.layerPromise.then(resolve).catch(reject);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.addAllowedSearchType = function (name, options) {\r\n var self = this;\r\n\r\n self.allowedSearchTypes.push(new SearchType(name, options, self));\r\n };\r\n\r\n ctlProto.getSearchTypeByRole = function (type) {\r\n var self = this;\r\n\r\n return self.allowedSearchTypes.filter(function (allowed) {\r\n return allowed.typeName == type;\r\n })[0];\r\n };\r\n\r\n ctlProto.getSearchTypeByFeature = function (id) {\r\n var self = this;\r\n\r\n var type = self.allowedSearchTypes.filter(function (allowed) {\r\n return allowed.isFeatureOfThisType(id);\r\n });\r\n\r\n if (type.length > 0) {\r\n return type[0];\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.getElementOnSuggestionList = function (id, dataRole) {\r\n const self = this;\r\n\r\n for (var i = 0; i < self.searchRequestsResults.length; i++) {\r\n if (self.searchRequestsResults[i].id == id && (!dataRole || (dataRole && self.searchRequestsResults[i].dataRole === dataRole)))\r\n return self.searchRequestsResults[i];\r\n }\r\n };\r\n\r\n ctlProto.getLayer = function () {\r\n const self = this;\r\n return self.layerPromise;\r\n };\r\n\r\n ctlProto.getFeatures = function () {\r\n const self = this;\r\n return self.layer.features;\r\n };\r\n\r\n ctlProto.cleanMap = function () {\r\n const self = this;\r\n\r\n if (self.layer) {\r\n const l = self.layer;\r\n var features = l.features.slice();\r\n l.clearFeatures();\r\n\r\n if (features && features.length > 0) {\r\n self.map.trigger(TC.Consts.event.FEATUREREMOVE, { layer: l, feature: features[0] });\r\n }\r\n\r\n for (var i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n if (l.hasOwnProperty(self.WFS_TYPE_ATTRS[i]))\r\n delete l[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n }\r\n };\r\n\r\n ctlProto.getMunicipalities = function () {\r\n var self = this;\r\n\r\n TC.cache.search = TC.cache.search || {};\r\n self._municipalitiesPromise = new Promise(function (resolve, _reject) {\r\n if (TC.cache.search.municipalities) {\r\n resolve(TC.cache.search.municipalities);\r\n }\r\n else {\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL);\r\n\r\n if (type.municipality && type.municipality.featureType && type.municipality.labelProperty && type.municipality.idProperty) {\r\n var params = {\r\n REQUEST: 'GetFeature',\r\n SERVICE: 'WFS',\r\n TYPENAME: type.municipality.featureType,\r\n VERSION: type.version,\r\n PROPERTYNAME: type.municipality.labelProperty + \",\" + type.municipality.idProperty,\r\n OUTPUTFORMAT: type.outputFormat\r\n };\r\n if (type.featurePrefix) {\r\n params.TYPENAME = type.featurePrefix + ':' + params.TYPENAME;\r\n }\r\n var url = type.url + '?' + TC.Util.getParamString(params);\r\n TC.ajax({\r\n url: url,\r\n method: 'GET',\r\n responseType: 'text'\r\n }).then(function (response) {\r\n const data = response.data;\r\n var parser;\r\n if (type.outputFormat === TC.Consts.format.JSON) {\r\n parser = new TC.wrap.parser.JSON();\r\n }\r\n else {\r\n parser = new TC.wrap.parser.WFS({\r\n featureNS: type.municipality.featurePrefix,\r\n featureType: type.municipality.featureType\r\n });\r\n }\r\n var features = parser.read(data);\r\n TC.cache.search.municipalities = [];\r\n for (var i = 0; i < features.length; i++) {\r\n var feature = features[i];\r\n TC.cache.search.municipalities.push({ label: feature.data[type.municipality.labelProperty], id: feature.data[type.municipality.idProperty] });\r\n }\r\n\r\n TC.cache.search.municipalities.sort(function (a, b) {\r\n var result;\r\n if (a.label < b.label) {\r\n result = -1;\r\n }\r\n else if (a.label > b.label) {\r\n result = 1;\r\n }\r\n else {\r\n result = 0;\r\n }\r\n return result;\r\n });\r\n\r\n resolve(TC.cache.search.municipalities);\r\n }).catch(function () {\r\n resolve();\r\n });\r\n } else {\r\n throw new Error(\"Error en la configuración de la búsqueda: \" + type.typeName + \". Error en el objeto municipality\");\r\n }\r\n }\r\n });\r\n return self._municipalitiesPromise;\r\n };\r\n\r\n ctlProto.getCoordinates = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n var match = pattern.match(new RegExp('^' + self.UTMX_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*' + self.UTMY_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$'));\r\n if (match) {\r\n pattern = match[1] + ' ' + match[2];\r\n }\r\n\r\n match = pattern.match(new RegExp('^' + self.LAT_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LON_LABEL.trim().toLowerCase() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n pattern = match[1] + ' ' + match[3];\r\n }\r\n\r\n if (/\\d/.test(pattern) && (new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$').test(pattern) || /^([-+]?\\d{1,3}([.,]\\d+)?)\\,?\\s*([-+]?\\d{1,2}([.,]\\d+)?)$/.test(pattern))) {\r\n match = /^([-+]?\\d{1,3}([.,]\\d+)?)\\,?\\s*([-+]?\\d{1,2}([.,]\\d+)?)$/.exec(pattern);\r\n if (match && (match[1].indexOf(',') > -1 || match[3].indexOf(',') > -1)) {\r\n match[1] = match[1].replace(',', '.');\r\n match[3] = match[3].replace(',', '.');\r\n\r\n pattern = match[1] + ' ' + match[3];\r\n }\r\n\r\n if (!match || match && (match[1].indexOf(',') > -1 ? match[1].replace(',', '.') : match[1]) <= 180 && (match[3].indexOf(',') > -1 ? match[3].replace(',', '.') : match[3]) <= 90) {\r\n\r\n match = new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$').exec(pattern);\r\n if (match && (match[1].indexOf(',') > -1 || match[2].indexOf(',') > -1)) {\r\n match[1] = match[1].replace(',', '.');\r\n match[2] = match[2].replace(',', '.');\r\n\r\n pattern = match[1] + ' ' + match[2];\r\n }\r\n\r\n // parse coordinates\r\n pattern = pattern.replace(self.UTMX_LABEL, '').replace(self.UTMY_LABEL, '').replace(self.LON_LABEL, '').replace(self.LAT_LABEL, '');\r\n var coords = TC.Util.parseCoords(pattern);\r\n if (coords) {\r\n var xValue = coords[0].value;\r\n var yValue = coords[1].value;\r\n var xLabel = coords[0].type === TC.Consts.UTM ? self.UTMX : self.LAT;\r\n var yLabel = coords[1].type === TC.Consts.UTM ? self.UTMY : self.LON;\r\n var id = xLabel + xValue + yLabel + yValue;\r\n\r\n var point = self.getPoint(id);\r\n if (point && !self.insideLimit(point)) {\r\n xValue = coords[1].value;\r\n yValue = coords[0].value;\r\n xLabel = coords[1].type === TC.Consts.UTM ? self.UTMX : self.LAT;\r\n yLabel = coords[0].type === TC.Consts.UTM ? self.UTMY : self.LON;\r\n id = xLabel + xValue + yLabel + yValue;\r\n point = self.getPoint(id);\r\n }\r\n\r\n if (point) {\r\n self.availableSearchTypes[TC.Consts.searchType.COORDINATES].label = /^X([-+]?\\d+(?:\\.\\d+)?)Y([-+]?\\d+(?:\\.\\d+)?)$/.test(id) ? self.getLocaleString('search.list.coordinates.utm') + self.map.crs : self.getLocaleString('search.list.coordinates.geo');\r\n\r\n //console.log('getCoordinates promise resuelta');\r\n resolve([{\r\n id: id, label: self.getLabel(id), dataRole: TC.Consts.searchType.COORDINATES\r\n }]);\r\n }\r\n else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n } else {\r\n //console.log('getCoordinates promise resuelta');\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getCadastralRef = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n var match = pattern.match(new RegExp(self.MUN_LABEL.trim().toLowerCase() + '?\\\\s(.*)\\\\,\\\\s?' + self.POL_LABEL.trim().toLowerCase() + '?\\\\s(\\\\d{1,2})\\\\,\\\\s?' + self.PAR_LABEL.trim().toLowerCase() + '?\\\\s(\\\\d{1,4})'));\r\n if (match) {\r\n pattern = match[1] + ', ' + match[2] + ', ' + match[3];\r\n }\r\n\r\n var _pattern = pattern;\r\n if (!/^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.test(pattern) && self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL).suggestionRoot)\r\n _pattern = self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL).suggestionRoot + ', ' + pattern;\r\n\r\n if (/^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.test(_pattern) && !new RegExp('^([-+]?[0-9]{' + self.UTMX_LEN + '})\\\\s*\\\\,\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '})$').test(pattern)) {\r\n self.getMunicipalities().then(function (list) {\r\n var match = /^(.*)\\,(\\s*\\d{1,2}\\s*)\\,(\\s*\\d{1,4}\\s*)$/.exec(_pattern);\r\n if (match) {\r\n var matcher = new RegExp(match[1].trim().replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\"), \"i\");\r\n var results = [];\r\n\r\n const getItem = function (mun, munLabel, pol, par) {\r\n var properties = [];\r\n\r\n properties.push[self.MUN] = mun;\r\n properties.push[self.POL] = pol;\r\n properties.push[self.PAR] = par;\r\n\r\n return {\r\n id: self.MUN + mun + self.POL + pol + self.PAR + par,\r\n label: self.getLabel(self.MUN + munLabel + self.POL + pol + self.PAR + par),\r\n dataRole: TC.Consts.searchType.CADASTRAL,\r\n properties: properties\r\n };\r\n };\r\n\r\n results = list.filter(function (value) {\r\n value = value.label || value.id || value;\r\n return matcher.test(value) || matcher.test(self.removePunctuation(value));\r\n });\r\n\r\n if (results.length > 0) {\r\n for (var i = 0; i < results.length; i++) {\r\n results[i] = getItem(results[i].id, results[i].label, match[2].trim(), match[3].trim());\r\n }\r\n }\r\n\r\n if (/^[0-9]*$/g.test(match[1])) {\r\n\r\n if (match[1].trim() === self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL).suggestionRoot) {\r\n\r\n var suggestionRoot = list.filter(function (elm) {\r\n return parseInt(elm.id) === parseInt(self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL).suggestionRoot);\r\n })[0];\r\n\r\n if (suggestionRoot) {\r\n resolve([getItem(suggestionRoot.id, suggestionRoot.label, match[2].trim(), match[3].trim())]);\r\n }\r\n }\r\n\r\n results.push(getItem(match[1].trim(), match[1].trim(), match[2].trim(), match[3].trim()));\r\n }\r\n\r\n //console.log('getCadastralRef promise resuelta');\r\n resolve(results);\r\n }\r\n });\r\n } else {\r\n //console.log('getCadastralRef promise resuelta - no es ref catastral');\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.stringPatternsValidators = {\r\n tsp: function (text, result, root, limit) {\r\n const self = this;\r\n // town, street, portal - street, town, portal\r\n var match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n if (match && match[1] && match[2]) {\r\n\r\n var getPortal = function () {\r\n return formatStreetNumber.call(self, (match[3] || match[4] || match[5] || match[6]).trim());\r\n };\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[1].trim()) && /^([^0-9]+)$/i.test(match[2].trim())) {\r\n result.push({\r\n t: match[1].trim(), s: match[2].trim(), p: getPortal()\r\n });\r\n result.push({\r\n t: match[2].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n if (/^([^0-9]+)$/i.test(match[1].trim())) result.push({\r\n t: match[1].trim(), s: match[2].trim(), p: getPortal()\r\n });\r\n else result.push({\r\n s: match[1].trim(), t: match[2].trim(), p: getPortal()\r\n });\r\n }\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n spt: function (text, result, root, limit) {\r\n const self = this;\r\n // street, portal, town\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))(?:\\s*\\,\\s*)([^0-9\\,]+)$/i.exec(text);\r\n if (match && match[6] && match[1]) {\r\n\r\n var getPortal = function () {\r\n return formatStreetNumber.call(self, (match[2] || match[3] || match[4] || match[5]).trim());\r\n };\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[6].trim()) && /^([^0-9]+)$/i.test(match[1].trim())) {\r\n result.push({\r\n t: match[6].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n result.push({\r\n t: match[1].trim(), s: match[6].trim(), p: getPortal()\r\n });\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n if (/^([^0-9]+)$/i.test(match[6].trim())) result.push({\r\n t: match[6].trim(), s: match[1].trim(), p: getPortal()\r\n });\r\n else result.push({\r\n s: match[6].trim(), t: match[1].trim(), p: getPortal()\r\n });\r\n }\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n tnsp: function (text, result, root, limit) {\r\n const self = this;\r\n // town, numbers street, portal\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)([^0-9\\,]+)(?:\\s*\\,\\s*)(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n\r\n if (match && match[1] && match[2]) {\r\n result.push({\r\n t: match[2].trim(), s: match[1].trim(), p: formatStreetNumber.call(self, (match[3] || match[4] || match[5] || match[6]).trim())\r\n });\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n ts: function (text, result, root, limit) {\r\n const self = this;\r\n // town, street\r\n var match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(text);\r\n\r\n // topónimo, municipio\r\n if (!match && /^[^0-9]*$/i.test(text.trim())) { // si no hay números reviso dándole la vuelta, si hay números que lo trate la función st\r\n var criteria = text.split(',').reverse();\r\n match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(criteria.join(','));\r\n }\r\n\r\n if (match && match[1] && match[2]) {\r\n // ninguno contiene número duplicamos búsqueda\r\n if (/^([^0-9]+)$/i.test(match[1].trim()) && /^([^0-9]+)$/i.test(match[2].trim())) {\r\n result.push({\r\n t: match[1].trim(), s: match[2].trim()\r\n });\r\n result.push({\r\n s: match[1].trim(), t: match[2].trim()\r\n });\r\n\r\n bindRoot.call(this, result, root, limit);\r\n }\r\n else { // indicamos como calle el criterio que contiene números, ya que no existen municipios con números pero sí calles\r\n\r\n var getStreet = function (s) {\r\n var revS = s.split(' ').reverse();\r\n // validamos si el criterio es compuesto \r\n var fs = [];\r\n for (var si = 0; si < revS.length; si++) {\r\n if (revS[si].length === 1) {\r\n fs.push(revS[si]);\r\n revS[si] = '';\r\n }\r\n }\r\n\r\n return fs.length > 0 ? revS.reverse().join(' ').trim() + self._LIKE_PATTERN + fs.reverse().join(self._LIKE_PATTERN) : revS.reverse().join(' ').trim();\r\n };\r\n\r\n if (/^([^0-9]+)$/i.test(match[1].trim()))\r\n result.push({\r\n t: match[1].trim(), s: getStreet(match[2].trim())\r\n });\r\n else result.push({\r\n s: getStreet(match[1].trim()), t: match[2].trim()\r\n });\r\n\r\n bindRoot.call(this, result, root, limit, true);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n st: function (text, result, root, limit) {\r\n const self = this;\r\n // street, town\r\n var match = /^(?:([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+))(?:\\s*\\,\\s*)([^0-9\\,]+)$/i.exec(text);\r\n\r\n if (!match) {\r\n const criteria = text.split(',').reverse();\r\n match = /^([^0-9\\,]+)(?:\\s*\\,\\s*)(?:([^\\,][a-zñáéíóúüàèìòù\"\\s*\\-\\.\\(\\)\\/0-9]+))$/i.exec(criteria.join(','));\r\n }\r\n\r\n if (match) { // puede generar falsos positivos cuando el portal llega seguido de la calle -> calle mayor 14, pamplona\r\n var data = {\r\n };\r\n const criteria = text.split(',').reverse();\r\n for (var i = 0; i < criteria.length; i++) {\r\n if (/^([^0-9\\,]+)$/i.test(criteria[i].trim())) { // si no hay números se trata de municipio\r\n data.t = criteria[i].trim();\r\n }\r\n else if (/(\\s*\\d+)/i.test(criteria[i].trim())) { // si contiene número, puede ser calle o calle + portal\r\n if (criteria[i].trim().indexOf(' ') === -1) { // si no contiene espacios se trata de calle compuesta por números\r\n data.s = criteria[i].trim();\r\n } else { // si contiene espacio puede contener calle + portal\r\n var _criteria = criteria[i].trim().split(' ').reverse();\r\n\r\n var isPortal = function (c) {\r\n var m = /^(?:(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(c.trim());\r\n if (m) {\r\n data.p = formatStreetNumber.call(self, c.trim());\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var x = 0;\r\n var p = _criteria[x].trim();\r\n while (x < _criteria.length && !isPortal(p)) {\r\n x++;\r\n if (x < _criteria.length)\r\n p = p + _criteria[x];\r\n\r\n }\r\n\r\n if (data.p) {\r\n var _cr = _criteria;\r\n for (var h = 0; h < _cr.length; h++) {\r\n // validamos que lo que hemos deducido como portal, está en portal para no añadirlo a calle\r\n var inPortal = false;\r\n for (var c = 0; c < _cr[h].split('').length; c++) {\r\n if (data.p.indexOf(_cr[h][c]) > -1)\r\n inPortal = true;\r\n }\r\n\r\n if (inPortal) {\r\n _cr[h] = '';\r\n if (data.p == formatStreetNumber.call(self, p)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (/^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9]+)$/i.test(_criteria.reverse().join(' ').trim())) {\r\n var fs = [];\r\n var criteriaRev = _criteria.reverse();\r\n for (var chs = 0; chs < criteriaRev.length; chs++) {\r\n if (criteriaRev[chs].trim().length === 1) {\r\n fs.push(criteriaRev[chs].trim());\r\n criteriaRev[chs] = '';\r\n }\r\n }\r\n\r\n data.s = fs.length > 0 ? criteriaRev.reverse().join(' ').trim() + self._LIKE_PATTERN + fs.reverse().join(self._LIKE_PATTERN) : criteriaRev.reverse().join(' ').trim();\r\n }\r\n\r\n\r\n // nombre_de_calle = 137, 1, 20...\r\n // duplico la búsqueda para el caso de [Calle nombre_de_calle], municipio\r\n result.push({\r\n t: data.t,\r\n s: data.s + ' ' + data.p\r\n });\r\n } else {\r\n data.s = criteria[i].trim();\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.push(data);\r\n bindRoot.call(this, result, root, limit);\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n s_or_t: function (text, result, root, _limit) {\r\n var match = /^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/0-9\\<\\>]+)$/i.exec(text);\r\n if (match && match[1]) {\r\n if (root) {\r\n result.push({\r\n t: match[1].trim()\r\n });\r\n\r\n result.push({\r\n t: root,\r\n s: match[1].trim()\r\n });\r\n }\r\n else result.push({\r\n t: match[1].trim()\r\n });\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n sp: function (text, result, root, _limit) {\r\n const self = this;\r\n var match = /^([^\\,][a-zñáéíóúüàèìòù\\s*\\-\\.\\(\\)\\/]+)\\s*\\,?\\s*((\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4}))$/i.exec(text);\r\n if (match && match[1] && match[2]) { // && text.indexOf(',') > -1 && text.split(',').length < 3) {\r\n if (root)\r\n result.push({\r\n t: root,\r\n s: match[1].trim(),\r\n p: formatStreetNumber.call(self, match[2].trim())\r\n });\r\n else\r\n result.push({\r\n t: match[1].trim(),\r\n s: match[2].trim()\r\n });\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n snp: function (text, result, root, _limit) { // calle puede contener números con portal (cuando exista un municipio root establecido)\r\n const self = this;\r\n var match = /^([^\\,][0-9\\s*\\-\\.\\(\\)\\/]+)\\s*\\,?\\s*(\\d{1,3}\\s?\\-?\\s?[a-z]{0,4}\\s?\\-?\\s?[a-z]{0,4})|([a-z]{1,4}\\s?\\-?\\s?\\d{1,3})|(sn|S\\/N|s\\/n|s\\-n)|([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.exec(text);\r\n if (match && match[1] && match[2] && root) {\r\n result.push({\r\n t: root,\r\n s: match[1].trim(),\r\n p: formatStreetNumber.call(self, match[2].trim())\r\n });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n };\r\n\r\n /* métodos auxiliares de getStringPattern */\r\n\r\n const normalizedCriteria = function (value) {\r\n const self = this;\r\n\r\n value = self.removePunctuation(value);\r\n\r\n // elimino los caracteres especiales\r\n if (self.NORMAL_PATTERNS.ROMAN_NUMBER.test(value)) {\r\n value = value.replace(self.NORMAL_PATTERNS.ABSOLUTE_NOT_DOT, '');\r\n }\r\n else {\r\n value = value.replace(self.NORMAL_PATTERNS.ABSOLUTE, '');\r\n }\r\n return value.toLowerCase();\r\n };\r\n\r\n const formatStreetNumber = function (value) {\r\n const self = this;\r\n\r\n var is_nc_c = function (value) {\r\n return /^(\\d{1,3})\\s?\\-?\\s?([a-z]{0,4})\\s?\\-?\\s?([a-z]{0,4})$/i.test(value);\r\n };\r\n var nc_c = function (value) {\r\n var f = [];\r\n var m = /^(\\d{1,3})\\s?\\-?\\s?([a-z]{0,4})\\s?\\-?\\s?([a-z]{0,4})$/i.exec(value);\r\n if (m) {\r\n for (var i = 1; i < m.length; i++) {\r\n if (m[i].trim().length > 0)\r\n f.push(m[i].trim());\r\n }\r\n\r\n return f.join(self._LIKE_PATTERN);\r\n }\r\n return value;\r\n };\r\n\r\n var is_cn = function (value) {\r\n return /^([a-z]{1,4})\\s?\\-?\\s?(\\d{1,3})$/i.test(value);\r\n };\r\n var cn = function (value) {\r\n var f = [];\r\n var m = /^([a-z]{1,4})\\s?\\-?\\s?(\\d{1,3})$/i.exec(value);\r\n if (m) {\r\n for (var i = 1; i < m.length; i++) {\r\n if (m[i].trim().length > 0)\r\n f.push(m[i].trim());\r\n }\r\n\r\n return f.join(self._LIKE_PATTERN);\r\n }\r\n return value;\r\n };\r\n\r\n var is_sn = function (value) {\r\n return /^(sn|S\\/N|s\\/n|s\\-n)$/i.test(value);\r\n };\r\n var sn = function (value) {\r\n var m = /^(sn|S\\/N|s\\/n|s\\-n)$/i.exec(value);\r\n if (m) {\r\n return 's*n';\r\n }\r\n return value;\r\n };\r\n\r\n\r\n var is_cmc = function (value) {\r\n return /^([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.test(value);\r\n };\r\n var cmc = function (value) {\r\n var m = /^([a-z]{1,4}\\s?\\+\\s?[a-z]{1,4})$/i.exec(value);\r\n if (m) {\r\n return value;\r\n }\r\n return value;\r\n };\r\n\r\n var isCheck = [is_nc_c, is_cn, is_sn, is_cmc];\r\n var check = [nc_c, cn, sn, cmc];\r\n var ch = 0;\r\n while (ch < check.length && !isCheck[ch].call(self, value)) {\r\n ch++;\r\n }\r\n\r\n if (ch < check.length)\r\n return check[ch].call(self, value);\r\n else return value;\r\n };\r\n\r\n const bindRoot = function (result, root, limit, addRoot) {\r\n const self = this;\r\n\r\n if (root) {\r\n var i = result.length;\r\n while (i--) {\r\n if (!addRoot) {\r\n if (result[i].t) {\r\n var indicatedRoot = self.rootCfg.active.rootLabel.filter(function (elem) {\r\n return elem.label.indexOf(self.removePunctuation(result[i].t).toLowerCase()) > -1;\r\n }.bind(self));\r\n\r\n if (indicatedRoot.length === 1) {\r\n result[i].t = indicatedRoot[0].id;\r\n } else if (indicatedRoot.length > 1) {\r\n\r\n indicatedRoot.map(function (elem) {\r\n var newResult = TC.Util.extend({\r\n }, result[i]);\r\n newResult.t = elem.id;\r\n\r\n result.push(newResult);\r\n });\r\n\r\n } else if (indicatedRoot.length === 0 && limit) {\r\n result.splice(i, 1);\r\n }\r\n }\r\n }\r\n else {\r\n result.push(TC.Util.extend({}, result[i], { t: root }));\r\n }\r\n }\r\n }\r\n };\r\n\r\n const getObjectsFromStringToQuery = function (allowedRoles, text) {\r\n const self = this;\r\n const root = self.rootCfg.active && self.rootCfg.active.root || '';\r\n const limit = self.rootCfg.active && self.rootCfg.active.limit || false;\r\n\r\n var result = [];\r\n\r\n const test = function () {\r\n var tests = [function (text) {\r\n return text.length >= 3;\r\n },\r\n function (text) {\r\n return /^\\d+$/.test(text) ?\r\n false :\r\n /^\\d+\\,\\s*\\d+$/.test(text) ? false : true;\r\n }];\r\n\r\n for (var i = 0; i < tests.length; i++) {\r\n if (!tests[i].call(self, text))\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // eliminamos espacios en blanco\r\n text = text.trim();\r\n\r\n // comprobamos si acaba con coma, si es así, la eliminamos\r\n if (text.charAt(text.length - 1) === ',') {\r\n text = text.substring(0, text.length - 1);\r\n }\r\n\r\n if (test(text)) {\r\n var check = [];\r\n\r\n check = allowedRoles.map(function (dataRole) {\r\n return self.getSearchTypeByRole(dataRole);\r\n }).filter(function (searchType) {\r\n return searchType.stringPatternToCheck;\r\n }).map(function (searchType) {\r\n return searchType.stringPatternToCheck;\r\n }).flat();\r\n\r\n if (check.length === 0) {\r\n check = [self.stringPatternsValidators.tsp, self.stringPatternsValidators.spt, self.stringPatternsValidators.tnsp, self.stringPatternsValidators.ts, self.stringPatternsValidators.st];\r\n if (root && text.split(',').length < 3) {\r\n check = [self.stringPatternsValidators.sp, self.stringPatternsValidators.snp, self.stringPatternsValidators.s_or_t].concat(check);\r\n }\r\n else {\r\n check = check.concat([self.stringPatternsValidators.sp, self.stringPatternsValidators.snp, self.stringPatternsValidators.s_or_t]);\r\n }\r\n }\r\n\r\n var ch = 0;\r\n try {\r\n while (ch < check.length && !check[ch].call(self, text, result, root, limit)) {\r\n ch++;\r\n }\r\n }\r\n catch (ex) {\r\n TC.error(\"Error según el patrón: \" + text, TC.Consts.msgErrorMode.EMAIL, \"Error en la búsqueda del callejero\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const requestToWFS = function (type, signal, doneCallback, data) {\r\n const self = this;\r\n\r\n return fetch(type.url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\r\n },\r\n body: type.filter.getParams(data),\r\n signal: signal\r\n })\r\n .then(function (response) {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error requestToWFS\";\r\n }\r\n })\r\n .then(doneCallback)\r\n .catch(function (err) {\r\n if (err.name === 'AbortError') {\r\n console.log('Search: petición abortada');\r\n } else {\r\n TC.error(err);\r\n }\r\n\r\n throw err;\r\n\r\n //console.log('getStringPattern promise resuelta - data.statusText: ' + data.statusText);\r\n });\r\n };\r\n\r\n ctlProto.getStringPattern = function (allowedRoles, pattern) {\r\n const self = this;\r\n\r\n return new Promise((resolve, reject) => {\r\n let toQuery = [];\r\n let requestsQuery = [];\r\n\r\n pattern = normalizedCriteria.call(self, pattern);\r\n\r\n /* gestionamos:\r\n Entidad de población: Irisarri Auzoa (Igantzi)\r\n Topónimo: Aldabeko Bidea (Arbizu)\r\n */\r\n let combinedCriteria = /(.*)\\((.*)\\)?/.exec(pattern);\r\n if (combinedCriteria && combinedCriteria.length > 2) {\r\n // búsqueda de entidad de población\r\n toQuery = getObjectsFromStringToQuery.call(self, allowedRoles, combinedCriteria[1]) || [];\r\n // búsqueda de topónimo\r\n let toQueryCombined = getObjectsFromStringToQuery.call(self, allowedRoles, combinedCriteria[1] + ',' + combinedCriteria[2]) || [];\r\n\r\n toQuery = toQuery.concat(toQueryCombined);\r\n } else {\r\n toQuery = getObjectsFromStringToQuery.call(self, allowedRoles, pattern) || [];\r\n }\r\n\r\n if (toQuery.length > 0) {\r\n let pendingSuggestionLstHead = [];\r\n let filterRoles = (dataToQuery) => {\r\n return allowedRoles.filter(function (elm) {\r\n return Object.keys(self.getSearchTypeByRole(elm).queryProperties).length === Object.keys(dataToQuery).length;\r\n });\r\n };\r\n let pendingHeaderRoles = [];\r\n\r\n for (var i = 0; i < toQuery.length; i++) {\r\n let dataToQuery = toQuery[i];\r\n let roles = filterRoles(dataToQuery);\r\n\r\n for (var r = 0; r < roles.length; r++) {\r\n let type = self.getSearchTypeByRole(roles[r]);\r\n\r\n if (pendingHeaderRoles.indexOf(type.typeName) < 0) {\r\n pendingSuggestionLstHead.push(type.getSuggestionListHead());\r\n pendingSuggestionLstHead.push('
                • ' + self.getLocaleString('searching') + '
                • ');\r\n\r\n pendingHeaderRoles.push(type.typeName);\r\n }\r\n\r\n let responseToSuggestionLstElmt = (response) => {\r\n return type.getSuggestionListElements(response);\r\n };\r\n\r\n requestsQuery.push(requestToWFS.call(self, type, self.searchRequestsAbortController.signal, responseToSuggestionLstElmt, dataToQuery));\r\n }\r\n }\r\n\r\n if (requestsQuery.length > 0) {\r\n self.resultsList.innerHTML += pendingSuggestionLstHead.join('');\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n Promise.all(requestsQuery)\r\n .then((results) => {\r\n //console.log('getStringPattern promise resuelta'); \r\n resolve([].concat.apply([], results));\r\n }).catch((_error) => {\r\n reject();\r\n });\r\n } else {\r\n reject();\r\n }\r\n } else {\r\n reject();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getRoad = function (pattern) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n pattern = pattern.trim();\r\n if (pattern.length < 2) {\r\n resolve([]);\r\n } else {\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.ROAD);\r\n\r\n var roadPattern = type.getPattern();\r\n var match = roadPattern.exec(pattern);\r\n if (match && match[3]) {\r\n\r\n var _pattern = match[2] ? match[2].trim() + \"-\" + match[3].trim() : match[3].trim();\r\n if (match[4] && match[4].length > 0) {\r\n _pattern = _pattern + \"-\" + match[4].trim();\r\n }\r\n\r\n self.resultsList.innerHTML = type.getSuggestionListHead() +\r\n '
                • ' + self.getLocaleString('searching') + '
                • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n //console.log('getRoad new');\r\n fetch(type.url + '?' + type.filter.getParams({ t: _pattern }), {\r\n signal: self.searchRequestsAbortController.signal\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error getRoad\";\r\n }\r\n }).then((response) => {\r\n let result = [];\r\n let data = type.parseFeatures(response);\r\n if (data.length > 0) {\r\n data.map(function (feature) {\r\n var properties = type.outputProperties;\r\n if (!result.some(function (elem) {\r\n return (elem.text == feature.data[properties[0]]);\r\n })) {\r\n var label = type.outputFormatLabel.tcFormat(type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }));\r\n\r\n var text = type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }).join('-');\r\n\r\n result.push({\r\n id: type.dataIdProperty.map(function (elem) {\r\n return feature.data[elem];\r\n }).join('#'),\r\n label: label,\r\n text: text,\r\n dataLayer: feature.id.split('.')[0],\r\n dataRole: type.typeName\r\n });\r\n }\r\n });\r\n\r\n //console.log('getRoad promise resuelta');\r\n resolve(result);\r\n } else {\r\n //console.log('getRoad promise resuelta');\r\n reject();\r\n }\r\n }).catch(function (_data) {\r\n //console.log('getRoad promise resuelta - xhr fail');\r\n reject();\r\n });\r\n } else {\r\n //console.log('getRoad promise resuelta - no encaja en road');\r\n reject();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getMilestone = function (pattern) {\r\n var self = this;\r\n return new Promise(function (resolve, reject) {\r\n pattern = pattern.trim();\r\n if (pattern.length < 3) {\r\n resolve([]);\r\n } else {\r\n\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.ROADMILESTONE);\r\n\r\n var roadMilestonePattern = type.getPattern();\r\n var match = roadMilestonePattern.exec(pattern);\r\n if (match && match[3] && match[5]) {\r\n\r\n var _pattern = match[2] ? match[2].trim() + \"-\" + match[3].trim() : match[3].trim();\r\n if (match[4] && match[4].length > 0) {\r\n _pattern = _pattern + \"-\" + match[4].trim();\r\n }\r\n\r\n self.resultsList.innerHTML = type.getSuggestionListHead() +\r\n '
                • ' + self.getLocaleString('searching') + '
                • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n //console.log('getMilestone new');\r\n\r\n fetch(type.url + '?' + type.filter.getParams({ t: _pattern, s: match[5].trim() }), {\r\n signal: self.searchRequestsAbortController.signal\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n } else {\r\n throw \"Search: error getMilestone\";\r\n }\r\n }).then(function (response) {\r\n let result = [];\r\n let data = type.parseFeatures(response);\r\n if (data.length > 0) {\r\n data.map(function (feature) {\r\n var properties = type.outputProperties;\r\n if (!result.some(function (elem) {\r\n return (elem.label == feature.data[properties[0]]);\r\n })) {\r\n var text = type.outputFormatLabel.tcFormat(type.outputProperties.map(function (outputProperty) {\r\n return feature.data[outputProperty];\r\n }));\r\n result.push({\r\n id: type.dataIdProperty.map(function (elem) {\r\n return feature.data[elem];\r\n }).join('#'),\r\n label: text,\r\n text: text,\r\n dataLayer: feature.id.split('.')[0],\r\n dataRole: type.typeName\r\n });\r\n }\r\n });\r\n //console.log('getMilestone promise resuelta');\r\n resolve(result);\r\n } else {\r\n //console.log('getMilestone promise resuelta');\r\n reject();\r\n }\r\n }).catch(function (_data) {\r\n //console.log('getMilestone promise resuelta - xhr fail');\r\n reject();\r\n });\r\n } else {\r\n //console.log('getMilestone promise resuelta - no encaja en pk');\r\n reject();\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.search = function (pattern, callback) {\r\n var self = this;\r\n\r\n pattern = pattern.trim();\r\n if (pattern.length > 0) {\r\n pattern = pattern.toLowerCase();\r\n\r\n if (self.searchRequestsAbortController) {\r\n self.searchRequestsAbortController.abort();\r\n }\r\n\r\n self.resultsList.innerHTML = '';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n self.searchRequestsResults = [];\r\n\r\n let onAbort = () => {\r\n self.searchRequestsAbortController.signal.removeEventListener('abort', onAbort);\r\n };\r\n\r\n self.searchRequestsAbortController = new AbortController();\r\n self.searchRequestsAbortController.signal.addEventListener('abort', onAbort);\r\n\r\n let toRender = 0;\r\n let renderingEnd = () => {\r\n toRender--;\r\n if (toRender === 0) {\r\n // si al término de las peticiones ya estamos con otro patrón no hacemos nada\r\n if (pattern !== self.textInput.value.trim().toLowerCase()) {\r\n return;\r\n }\r\n else {\r\n if (self.searchRequestsResults.length === 0) {\r\n self.cleanMap();\r\n\r\n if (!self.layer || self.layer.features.length === 0) {\r\n\r\n self.resultsList.innerHTML = '
                • ' + self.EMPTY_RESULTS_LABEL + '
                • ';\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n }\r\n }\r\n\r\n self.lastPattern = \"\";\r\n }\r\n }\r\n };\r\n\r\n let renderResultsOnSuggestionList = () => {\r\n if (self.searchRequestsResults) {\r\n self.searchRequestsResults = self.searchRequestsResults.sort(function (a, b) {\r\n var pattern = /(\\d+)/;\r\n var _a, _b = '';\r\n if (pattern.test(a.label) && pattern.test(b.label)) {\r\n _a = a.label.match(pattern)[1];\r\n _b = b.label.match(pattern)[1];\r\n } else {\r\n _a = a.label;\r\n _b = b.label;\r\n }\r\n\r\n if (_a > _b)\r\n return 1;\r\n else\r\n if (_a < _b)\r\n return -1;\r\n else\r\n return 0;\r\n });\r\n\r\n // compatibilidad hacia atrás\r\n self._search.data = self.searchRequestsResults;\r\n\r\n if (callback) {\r\n callback(self.searchRequestsResults);\r\n }\r\n }\r\n };\r\n\r\n self.allowedSearchTypes.forEach(function (allowed) {\r\n if (allowed.parser) {\r\n toRender++;\r\n\r\n //console.log('registramos promesa: ' + allowed.typeName);\r\n\r\n allowed.parser.call(self, pattern)\r\n .then(function (dataRole, result) {\r\n\r\n let manageLoadingByDataRole = () => {\r\n let loadingElemOfDataRole = self.resultsList.querySelector('li[dataRole=\"' + dataRole + '\"]');\r\n if (loadingElemOfDataRole) {\r\n let indexLoadingElemOfDataRole = Array.prototype.indexOf.call(loadingElemOfDataRole.parentElement.childNodes, loadingElemOfDataRole);\r\n let headerElemOfDataRole = self.resultsList.childNodes[indexLoadingElemOfDataRole - 1];\r\n\r\n self.resultsList.removeChild(headerElemOfDataRole);\r\n self.resultsList.removeChild(loadingElemOfDataRole);\r\n }\r\n };\r\n\r\n //console.log('resulta promesa: ' + dataRole);\r\n\r\n if (result && result.length > 0) {\r\n\r\n // caso topónimo con y sin municipio Irisarri Auzoa (Igantzi)\r\n let toConcat = result.filter(elm => self.searchRequestsResults.findIndex((srrElm) => srrElm.id === elm.id) === -1);\r\n if (toConcat.length === result.length) {\r\n self.searchRequestsResults = self.searchRequestsResults.concat(toConcat);\r\n\r\n renderResultsOnSuggestionList();\r\n } else if (result.length === 1) {\r\n manageLoadingByDataRole();\r\n }\r\n } else {\r\n manageLoadingByDataRole();\r\n }\r\n\r\n renderingEnd();\r\n\r\n //resolve(result);\r\n }.bind(self, allowed.typeName)).catch(function (_dataRole) {\r\n //reject();\r\n //console.log('reject promesa: ' + dataRole);\r\n renderingEnd();\r\n }.bind(self, allowed.typeName));\r\n } else {\r\n console.log('Falta implementación del método parser');\r\n }\r\n });\r\n }\r\n else {\r\n self.lastPattern = \"\";\r\n\r\n self.cleanMap();\r\n }\r\n };\r\n\r\n var setQueryableFeatures = function (features) {\r\n const self = this;\r\n\r\n if (features && features.length > 0) {\r\n const setShowPopup = function (features) {\r\n for (var i = 0; i < features.length; i++) {\r\n if (features[i].showsPopup != self.queryableFeatures)\r\n features[i].showsPopup = self.queryableFeatures;\r\n }\r\n };\r\n setShowPopup(features);\r\n // salta el evento con la primera feature y es la que llega aquí pero se pintan más y no asignamos el showPopup a todas \r\n setShowPopup(self.layer.features);\r\n }\r\n };\r\n ctlProto._goToResult = function (id, dataRole) {\r\n const self = this;\r\n\r\n self.toShare = { id: id, dataRole: dataRole };\r\n\r\n var goTo = null;\r\n\r\n //02/03/2020 cuando selecciona un elemento abortamos peticiones pendientes\r\n if (self.searchRequestsAbortController) {\r\n self.searchRequestsAbortController.abort();\r\n }\r\n\r\n return new Promise(function (resolve, reject) {\r\n if (!self.loading)\r\n self.loading = self.map.getControlsByClass(\"TC.control.LoadingIndicator\")[0];\r\n\r\n var wait;\r\n wait = self.loading.addWait();\r\n\r\n // en pantallas pequeñas, colapsamos el panel de herramientas\r\n if (matchMedia('(max-width: 30em)').matches) {\r\n self.textInput.blur();\r\n self.map.trigger(TC.Consts.event.TOOLSCLOSE);\r\n }\r\n\r\n self.cleanMap();\r\n\r\n var customSearchType = false;\r\n var keepOnLooping = true;\r\n\r\n self.allowedSearchTypes.forEach(function (allowed) {\r\n if (keepOnLooping) {\r\n\r\n if (!self.availableSearchTypes[allowed.typeName]) {\r\n\r\n if (allowed.goTo) {\r\n customSearchType = true;\r\n\r\n goTo = allowed.goTo.call(self, id);\r\n if (goTo !== null) {\r\n keepOnLooping = false;\r\n }\r\n } else console.log('Falta implementación del método goTo');\r\n\r\n } else {\r\n\r\n var dr = dataRole || self.getElementOnSuggestionList.call(self, id).dataRole;\r\n if (dr) {\r\n\r\n var searchType = self.getSearchTypeByRole(dr);\r\n\r\n if (self.availableSearchTypes[dr] && searchType && searchType.goTo) {\r\n goTo = searchType.goTo.call(self, id, dr);\r\n if (goTo !== null) {\r\n keepOnLooping = false;\r\n }\r\n } else if (!self.availableSearchTypes[dr] && searchType && searchType.goTo) {\r\n customSearchType = true;\r\n\r\n goTo = searchType.goTo.call(self, id, dr);\r\n if (goTo !== null) {\r\n keepOnLooping = false;\r\n }\r\n } else console.log('Falta implementación del método goTo');\r\n }\r\n }\r\n }\r\n });\r\n\r\n self.loading.removeWait(wait);\r\n\r\n if (goTo) {\r\n self.getLayer().then(function (layer) {\r\n var i;\r\n switch (true) {\r\n case goTo.params.type === TC.Consts.layerType.VECTOR:\r\n for (i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n if (layer.hasOwnProperty(self.WFS_TYPE_ATTRS[i]))\r\n delete layer[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n break;\r\n case goTo.params.type === TC.Consts.layerType.WFS:\r\n for (i = 0; i < self.WFS_TYPE_ATTRS.length; i++) {\r\n layer[self.WFS_TYPE_ATTRS[i]] = goTo.params[self.WFS_TYPE_ATTRS[i]];\r\n }\r\n break;\r\n default:\r\n }\r\n\r\n layer.type = goTo.params.type;\r\n\r\n const onFeaturesAdd = function (e) {\r\n if (e.layer === self.layer) {\r\n self.map.off(TC.Consts.event.FEATURESADD, onFeaturesAdd);\r\n setQueryableFeatures.call(self, e.features);\r\n }\r\n };\r\n self.map.on(TC.Consts.event.FEATURESADD, onFeaturesAdd);\r\n\r\n const layerEventHandler = function (e) {\r\n if (e.layer === layer) {\r\n self.map.off(TC.Consts.event.LAYERUPDATE, layerEventHandler);\r\n // Salta cuando se pinta una feature que no es de tipo API porque la gestión de estilos salta antes (no es controlable)\r\n self.map.one(TC.Consts.event.FEATURESADD, function (e) {\r\n if (e.layer === layer) {\r\n if (!e.layer.features || e.layer.features.length === 0 && e.layer.wrap.layer.getSource().getFeatures()) {\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n var bounds = e.layer.wrap.layer.getSource().getExtent();\r\n var radius = e.layer.map.options.pointBoundsRadius;\r\n\r\n if (bounds[2] - bounds[0] === 0) {\r\n bounds[0] = bounds[0] - radius;\r\n bounds[2] = bounds[2] + radius;\r\n }\r\n if (bounds[3] - bounds[1] === 0) {\r\n bounds[1] = bounds[1] - radius;\r\n bounds[3] = bounds[3] + radius;\r\n }\r\n e.layer.map.setExtent(bounds);\r\n\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (self.map.on3DView && !self.loadingState) { // GLS: Necesito diferenciar un zoom programático de un zoom del usuario para la gestión del zoom en 3D\r\n self.map._on3DZoomTo({ extent: bounds, layer: e.layer });\r\n }\r\n }\r\n else if (e.layer.features && e.layer.features.length > 0) {\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (!self.loadingState) {\r\n self.layer.map.zoomToFeatures(e.layer.features);\r\n }\r\n\r\n self.map.trigger(TC.Consts.event.FEATURESADD, { layer: self.layer, features: self.layer.features });\r\n\r\n } else if (e.layer.features && e.layer.features.length === 0 && goTo.params.type === TC.Consts.layerType.WFS) {\r\n self.resultsList.inner = goTo.emptyResultHTML;\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n self.map.trigger(TC.Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n }\r\n\r\n self.loading.removeWait(wait);\r\n });\r\n\r\n if (e.layer.features && e.layer.features.length > 0) {\r\n self.resultsList.classList.add(TC.Consts.classes.HIDDEN);\r\n // gestionamos el zoom en imporState cuando estemos cargando estado\r\n if (!self.loadingState) {\r\n self.layer.map.zoomToFeatures(self.layer.features);\r\n }\r\n\r\n self.map.trigger(TC.Consts.event.FEATURESADD, { layer: self.layer, features: self.layer.features });\r\n\r\n self.loading.removeWait(wait);\r\n } else if (e.layer.features && e.layer.features.length === 0 && goTo.params.type === TC.Consts.layerType.WFS) {\r\n self.resultsList.innerHTML = goTo.emptyResultHTML;\r\n self.textInput.dispatchEvent(new CustomEvent(\"targetUpdated.autocomplete\"));\r\n\r\n if (!(e.newData && e.newData.features && e.newData.features.length > 0)) {\r\n self.map.trigger(TC.Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n\r\n self.loading.removeWait(wait);\r\n }\r\n\r\n resolve(goTo);\r\n }\r\n };\r\n self.map.on(TC.Consts.event.LAYERUPDATE, layerEventHandler);\r\n layer.wrap.reloadSource();\r\n });\r\n } else {\r\n reject(Error('Method goTo has no implementation'));\r\n if (!customSearchType) {\r\n self.map.trigger(TC.Consts.event.SEARCHQUERYEMPTY);\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.goToResult = function (id, dataRole) {\r\n var self = this;\r\n // si está habilitada\r\n if (self.getSearchTypeByRole(dataRole)) {\r\n return self._goToResult(id, dataRole);\r\n // si no está habilitada pero está disponible\r\n } else if (self.availableSearchTypes[dataRole]) {\r\n self.addAllowedSearchType(dataRole, self.availableSearchTypes[dataRole], self);\r\n return self._goToResult(id, dataRole);\r\n } else {\r\n alert('No se reconoce el tipo de búsqueda: ' + dataRole);\r\n }\r\n };\r\n\r\n var drawPoint = function (id) {\r\n var self = this;\r\n\r\n let wait = self.loading.addWait();\r\n\r\n var point = self.getPoint(id);\r\n var title;\r\n var promise;\r\n\r\n if (point) {\r\n title = self.getLabel(id);\r\n promise = self.layer.addMarker(point, TC.Util.extend({}, self.map.options.styles.point, { title: title, group: title }));\r\n } else {\r\n var match = /^Lat((?:[+-]?)\\d+(?:\\.\\d+)?)Lon((?:[+-]?)\\d+(?:\\.\\d+)?)$/.exec(id);\r\n id = self.LAT + match[2] + self.LON + match[1];\r\n point = self.getPoint(id);\r\n\r\n if (point) {\r\n title = self.getLabel(id);\r\n promise = self.layer.addMarker(point, TC.Util.extend({}, self.map.options.styles.point, { title: title, group: title }));\r\n\r\n self.textInput.value = title;\r\n }\r\n }\r\n\r\n promise.then(function (feat) {\r\n self.map.trigger(TC.Consts.event.FEATURESADD, {\r\n layer: self.layer, features: [feat]\r\n });\r\n\r\n self.map.zoomToFeatures([feat]);\r\n\r\n self.loading.removeWait(wait);\r\n });\r\n\r\n };\r\n ctlProto.goToCoordinates = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n if (/^X([-+]?\\d+(?:[\\.\\,]\\d+)?)Y([-+]?\\d+(?:[\\.\\,]\\d+)?)$/.test(id) || /^Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.test(id)) {\r\n\r\n goTo.params = {\r\n type: TC.Consts.layerType.VECTOR,\r\n styles: {\r\n marker: {\r\n url: self.layerStyleFN.bind(self, 'marker', 'url', true)\r\n }\r\n }\r\n };\r\n\r\n goTo.emptyResultHTML = '
                • ' + self.OUTBBX_LABEL + '
                • ';\r\n\r\n drawPoint.call(self, id);\r\n\r\n return goTo;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.goToCadastralRef = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var regex = new RegExp(\"^\" + self.MUN + \"(\\\\d+)\" + self.POL + \"(\\\\d{1,2})\" + self.PAR + \"{1}(\\\\d{1,4})\");\r\n if (regex.test(id)) {\r\n var match = regex.exec(id);\r\n\r\n if (!TC.filter) {\r\n TC.syncLoadJS(TC.apiLocation + 'TC/Filter');\r\n }\r\n\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.CADASTRAL);\r\n\r\n goTo.params = {\r\n type: TC.Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.featureType,\r\n properties: new TC.filter.and(\r\n new TC.filter.equalTo(type.queryProperties.firstQueryWord, match[1].trim()),\r\n new TC.filter.equalTo(type.queryProperties.secondQueryWord, match[2].trim()),\r\n new TC.filter.equalTo(type.queryProperties.thirdQueryWord, match[3].trim())),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
                • ' + self.EMPTY_RESULTS_LABEL + '
                • ';\r\n\r\n return goTo;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n ctlProto.goToRoad = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.ROAD);\r\n\r\n goTo.params = {\r\n type: TC.Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
                • ' + self.EMPTY_RESULTS_LABEL + '
                • ';\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.goToMilestone = function (id) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(TC.Consts.searchType.ROADMILESTONE);\r\n\r\n goTo.params = {\r\n type: TC.Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n goTo.emptyResultHTML = '
                • ' + self.EMPTY_RESULTS_LABEL + '
                • ';\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.goToStringPattern = function (id, dataRole) {\r\n var self = this;\r\n var goTo = {};\r\n\r\n var type = self.getSearchTypeByRole(dataRole);\r\n\r\n goTo.params = {\r\n type: TC.Consts.layerType.WFS,\r\n url: type.url,\r\n version: type.version,\r\n geometryName: type.geometryName,\r\n featurePrefix: type.featurePrefix,\r\n featureType: type.getFeatureTypes(),\r\n maxFeatures: 3000,\r\n properties: type.filter.getGoToFilter(id),\r\n outputFormat: type.outputFormat,\r\n styles: type.styles\r\n };\r\n\r\n return goTo;\r\n };\r\n\r\n ctlProto.getPoint = function (pattern) {\r\n var self = this;\r\n var isMapGeo = self.map.wrap.isGeo();\r\n var point;\r\n var match = /^X([-+]?\\d+(?:\\.\\d+)?)Y([-+]?\\d+(?:\\.\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[1]), parseFloat(match[2])];\r\n if (isMapGeo) {\r\n point = TC.Util.reproject(point, self.map.options.utmCrs, self.map.crs);\r\n }\r\n }\r\n else {\r\n match = /^Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[2]), parseFloat(match[1])];\r\n if (!isMapGeo) {\r\n return TC.Util.reproject(point, self.map.options.geoCrs, self.map.crs);\r\n }\r\n }\r\n\r\n match = /^Lon((?:[+-]?)\\d+(?:[.,]\\d+)?)Lat((?:[+-]?)\\d+(?:[.,]\\d+)?)$/.exec(pattern);\r\n if (match && match.length === 3) {\r\n point = [parseFloat(match[2]), parseFloat(match[1])];\r\n if (!isMapGeo) {\r\n return TC.Util.reproject(point, self.map.options.geoCrs, self.map.crs);\r\n }\r\n }\r\n }\r\n\r\n return point;\r\n };\r\n\r\n ctlProto.insideLimit = function (point) {\r\n var self = this;\r\n var getIntersectsBounds = function (extent, point) {\r\n if (extent instanceof Array)\r\n return point[0] >= extent[0] && point[0] <= extent[2] && point[1] >= extent[1] && point[1] <= extent[3];\r\n else return true;\r\n };\r\n\r\n if (getIntersectsBounds(self.map.options.maxExtent, point)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n ctlProto.getPattern = function () {\r\n var self = this;\r\n return self.textInput.value;\r\n };\r\n\r\n ctlProto.getLabel = function (id) {\r\n var self = this;\r\n var result = id;\r\n var locale = TC.Util.getMapLocale(self.map);\r\n\r\n const geoCoordsLabel = function (result, match) {\r\n let parsedCoords = TC.Util.parseCoords(match[1] + ',' + match[3]);\r\n result = result.replace(match[1], parsedCoords[0].value.toLocaleString(locale, { minimumFractionDigits: TC.Consts.DEGREE_PRECISION, maximumFractionDigits: TC.Consts.DEGREE_PRECISION }));\r\n result = result.replace(match[3], parsedCoords[1].value.toLocaleString(locale, { minimumFractionDigits: TC.Consts.DEGREE_PRECISION, maximumFractionDigits: TC.Consts.DEGREE_PRECISION }));\r\n\r\n return result;\r\n };\r\n\r\n if (id.match(new RegExp('^(?:' + self.LAT + '[-\\\\d])|(?:' + self.UTMX + '[-+]?[\\\\d])'))) {\r\n result = result.replace(self.LAT, self.LAT_LABEL).replace(self.LON, ' ' + self.LON_LABEL).replace(self.UTMX, self.UTMX_LABEL).replace(self.UTMY, ' ' + self.UTMY_LABEL);\r\n let match = result.match(new RegExp('^' + self.LAT_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LON_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n result = geoCoordsLabel(result, match);\r\n }\r\n\r\n var localeDecimalSeparator = 1.1.toLocaleString(locale).substring(1, 2);\r\n match = result.match(new RegExp('^' + self.UTMX_LABEL.trim() + '*\\\\s*([-+]?[0-9]{' + self.UTMX_LEN + '}(?:[.,]\\\\d+)?)\\\\s*\\\\,?\\\\s*' + self.UTMY_LABEL.trim() + '*\\\\s*([-+]?[0-9]{' + self.UTMY_LEN + '}(?:[.,]\\\\d+)?)$'));\r\n if (match) {\r\n if (!Number.isInteger(parseFloat(match[1])))\r\n result = result.replace(match[1], match[1].replace('.', localeDecimalSeparator));\r\n if (!Number.isInteger(parseFloat(match[2])))\r\n result = result.replace(match[2], match[2].replace('.', localeDecimalSeparator));\r\n }\r\n\r\n } else if (id.match(new RegExp('^(?:' + self.LON + '[-\\\\d])'))) {\r\n result = result.replace(self.LON, self.LON_LABEL).replace(self.LAT, ' ' + self.LAT_LABEL);\r\n\r\n const match = result.match(new RegExp('^' + self.LON_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,3}([.,]\\\\d+)?)\\\\,?\\\\s*' + self.LAT_LABEL.trim() + '*\\\\s*([-+]?\\\\d{1,2}([.,]\\\\d+)?)$'));\r\n if (match) {\r\n result = geoCoordsLabel(result, match);\r\n }\r\n\r\n } else if (id.match(new RegExp('^(?:(\\\\' + self.MUN + '{1})(.*)' + '(\\\\' + self.POL + '{1})' + '(\\\\d{1,2})' + '(\\\\' + self.PAR + '{1})' + '(\\\\d{1,4}))'))) {\r\n const match = id.match(new RegExp('^(?:(\\\\' + self.MUN + '{1})(.*)' + '(\\\\' + self.POL + '{1})' + '(\\\\d{1,2})' + '(\\\\' + self.PAR + '{1})' + '(\\\\d{1,4}))'));\r\n result = self.MUN_LABEL + match[2] + ', ' + self.POL_LABEL + match[4] + ', ' + self.PAR_LABEL + match[6];\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.removePunctuation = function (text) {\r\n text = text || '';\r\n var result = new Array(text.length);\r\n var map = new Map([\r\n ['á', 'a'],\r\n ['à', 'a'],\r\n ['Á', 'A'],\r\n ['À', 'A'],\r\n ['é', 'e'],\r\n ['è', 'e'],\r\n ['É', 'E'],\r\n ['È', 'E'],\r\n ['í', 'i'],\r\n ['ì', 'i'],\r\n ['Í', 'I'],\r\n ['Ì', 'I'],\r\n ['ó', 'o'],\r\n ['ò', 'o'],\r\n ['Ó', 'O'],\r\n ['Ò', 'O'],\r\n ['ú', 'u'],\r\n ['ù', 'u'],\r\n ['ü', 'u'],\r\n ['Ú', 'U'],\r\n ['Ù', 'U'],\r\n ['Ü', 'U']\r\n ]);\r\n for (var i = 0, len = text.length; i < len; i++) {\r\n result[i] = map.get(text.charAt(i)) || text.charAt(i);\r\n }\r\n return result.join('');\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.toShare) {\r\n return {\r\n id: self.id,\r\n searchText: self.textInput && self.textInput.value,\r\n searchResult: JSON.stringify(self.toShare)\r\n };\r\n }\r\n //else if (self.exportsState && self.layer) {\r\n // return {\r\n // id: self.id,\r\n // searchText: self.textInput && self.textInput.value,\r\n // layer: self.layer.exportState({\r\n // exportStyles: false\r\n // })\r\n // };\r\n //}\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n if (state.searchResult) {\r\n let sharedSearchResult = JSON.parse(state.searchResult);\r\n if (sharedSearchResult.id && sharedSearchResult.dataRole) {\r\n if (sharedSearchResult.doZoom) {\r\n self.map.one(TC.Consts.event.FEATURESADD, function (e) {\r\n if (e.layer === self.layer) {\r\n self.layer.map.zoomToFeatures(e.layer.features);\r\n }\r\n });\r\n }\r\n self.loadingState = true;\r\n self.goToResult(sharedSearchResult.id, sharedSearchResult.dataRole).then(function () {\r\n delete self.loadingState;\r\n self.textInput.value = state.searchText;\r\n self.shareButton && self.shareButton.classList.remove(TC.Consts.classes.HIDDEN);\r\n self.loading.reset();\r\n });\r\n } else {\r\n alert('shared results error');\r\n }\r\n }\r\n //else {\r\n // self.textInput.value = state.searchText;\r\n // self.layer.importState(state.layer).then(function () {\r\n // self.layer.features.forEach(function (f) {\r\n // f.setStyle(null); // Los estilos vienen dados exclusivamente por la capa, borramos estilos propios de la feature\r\n // });\r\n // });\r\n //}\r\n };\r\n\r\n})();\r\n\r\n\r\nif (!String.prototype.tcFormat) {\r\n String.prototype.tcFormat = function () {\r\n var args = (arguments || [\"\"])[0];\r\n return this.replace(/{(\\d+)}/g, function (match, number) {\r\n return typeof args[number] !== 'undefined' ?\r\n args[number]\r\n : match\r\n ;\r\n });\r\n };\r\n}\r\n\r\n\r\nif (!String.prototype.splitRemoveWhiteSpaces) {\r\n String.prototype.splitRemoveWhiteSpaces = function (separator) {\r\n var _arr = [];\r\n var arr = this.split(separator);\r\n for (var i = 0; i < arr.length; i++)\r\n if (arr[i].trim().length > 0)\r\n _arr.push(arr[i].trim());\r\n\r\n return _arr;\r\n };\r\n}\r\n\r\n\r\nif (!String.prototype.toCamelCase) {\r\n String.prototype.toCamelCase = function () {\r\n var _value = this.toLowerCase();\r\n var match = this.toLowerCase().match(/[^A-ZÁÉÍÓÚÜÀÈÌÒÙáéíóúüàèìòùa-z0-9_]+(.)/g);\r\n if (match) {\r\n for (var i = 0; i < match.length; i++) {\r\n if (/[-;:.<>\\{\\}\\[\\]\\/\\s()]/g.test(match[i]))\r\n _value = _value.replace(match[i], match[i].toUpperCase());\r\n }\r\n }\r\n\r\n return _value.charAt(0).toUpperCase() + _value.substring(1);\r\n };\r\n}\r\n\r\n\r\nif (!Array.prototype.hasOwnProperty('findByProperty')) {\r\n Object.defineProperty(Array.prototype, \"findByProperty\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (propertyName, value) {\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i][propertyName] == value)\r\n return this[i];\r\n }\r\n }\r\n });\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (searchString, position) {\r\n var subjectString = this.toString();\r\n if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n };\r\n}\r\n\r\nconst Search = TC.control.Search;\r\nexport default Search;","import TC from '../../TC';\r\nimport TabContainer from './TabContainer';\r\nTC.control = TC.control || {};\r\nTC.control.SelectContainer = TabContainer;\r\nconst SelectContainer = TC.control.SelectContainer;\r\nexport default SelectContainer;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapInfo from './MapInfo';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.MapInfo = MapInfo;\r\n\r\n\r\nTC.control.Share = function (options) {\r\n var self = this;\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.exportsState = true;\r\n\r\n var opts = options || {};\r\n self._dialogDiv = TC.Util.getDiv(opts.dialogDiv);\r\n if (window.$) {\r\n self._$dialogDiv = $(self._dialogDiv);\r\n }\r\n if (!opts.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.render();\r\n};\r\n\r\nTC.inherit(TC.control.Share, TC.control.MapInfo);\r\n\r\n(function () {\r\n var ctlProto = TC.control.Share.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-share';\r\n ctlProto.MAILTO_MAX_LENGTH = 256;\r\n ctlProto.IFRAME_WIDTH = '600px';\r\n ctlProto.IFRAME_HEIGHT = '450px';\r\n ctlProto.FEATURE_PARAM = 'showfeature';\r\n\r\n ctlProto.MOBILEFAV = 'Siga las instrucciones del navegador del dispositivo móvil para añadir como favorito. Se guardará el estado actual del mapa.';\r\n ctlProto.NAVALERT = ' +D para guardar en marcadores.';\r\n\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.getRenderedHtml(self.CLASS + '-dialog', null, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n }).then(function () {\r\n return TC.Control.prototype.renderData.call(self, { controlId: self.id }, function () {\r\n //Si el navegador no soporta copiar al portapapeles, ocultamos el botón de copiar\r\n if (document.queryCommandSupported && document.queryCommandSupported('copy')) {\r\n self.div.querySelectorAll('button').forEach(function (btn) {\r\n btn.classList.remove('hide');\r\n });\r\n self.div.querySelectorAll('input[type=text]').forEach(function (input) {\r\n delete input.dataset.dataOriginalTitle;\r\n });\r\n }\r\n\r\n // Si el SO no es móvil, ocultamos el botón de compartir a WhatsApp\r\n if (!TC.Util.detectMobile()) {\r\n self.div.querySelector(\".share-whatsapp\").classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n\r\n const options = self.div.querySelectorAll('.' + self.CLASS + '-url-box');\r\n self.div.querySelectorAll('span:not(.tc-beta)').forEach(function (span) {\r\n span.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n var label = this;\r\n while (label && label.tagName !== 'LABEL') {\r\n label = label.parentElement;\r\n }\r\n const newFormat = label.querySelector(`input[type=radio][name=\"${self.id}-format\"]`).value;\r\n\r\n options.forEach(function (option) {\r\n option.classList.toggle(TC.Consts.classes.HIDDEN, !option.matches('.tc-' + newFormat));\r\n });\r\n }, { passive: true });\r\n });\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n }));\r\n };\r\n\r\n /*\r\n * Obtiene una URL \"limpia\" para compartir el mapa.\r\n */\r\n ctlProto.getLocation = function () {\r\n var result = window.location.href;\r\n if (window.location.hash) {\r\n result = result.substr(0, result.indexOf(window.location.hash));\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.manageMaxLengthExceed = function (maxLengthExceed) {\r\n const self = this;\r\n\r\n const browserAlert = self.div.querySelector('.' + self.CLASS + '-alert');\r\n //Si la URL sobrepasa el tamaño máximo avisamos que puede fallar en Edge\r\n browserAlert.classList.toggle(TC.Consts.classes.HIDDEN, !maxLengthExceed.browser);\r\n\r\n const qrAlert = self._dialogDiv.querySelector('.' + self.CLASS + '-qr-alert');\r\n qrAlert.classList.toggle(TC.Consts.classes.HIDDEN, !maxLengthExceed.qr);\r\n };\r\n\r\n ctlProto.generateIframe = async function (url) {\r\n const self = this;\r\n const urlString = url || await self.generateLink();\r\n if (urlString) {\r\n return '';\r\n }\r\n return '';\r\n };\r\n\r\n ctlProto.loadParamFeature = function () {\r\n const self = this;\r\n var result = null;\r\n var featureToShow = TC.Util.getParameterByName(self.FEATURE_PARAM);\r\n if (featureToShow) {\r\n var featureObj;\r\n try {\r\n featureObj = JSON.parse(decodeURIComponent(escape(window.atob(featureToShow))));\r\n }\r\n catch (error) {\r\n TC.error(self.getLocaleString('sharedFeatureNotValid'), TC.Consts.msgErrorMode.TOAST);\r\n }\r\n if (featureObj && self.map) {\r\n if (featureObj.geom) {\r\n self.map.addLayer({\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.VECTOR,\r\n title: self.getLocaleString('foi'),\r\n owner: self,\r\n stealth: true\r\n }).then(function (layer) {\r\n self.paramFeatureLayer = layer;\r\n layer.importState({ features: [featureObj] }).then(function () {\r\n self.map.zoomToFeatures(layer.features);\r\n });\r\n });\r\n }\r\n else {\r\n result = featureObj;\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.update = async function () {\r\n const self = this;\r\n const input = self.div.querySelector('.tc-url input[type=text]');\r\n if (input.value.trim().length === 0) {\r\n const link = await self.generateLink();\r\n self.registerListeners();\r\n input.value = link;\r\n self.div.querySelector('.tc-iframe input[type=text]').value = await self.generateIframe(link);\r\n }\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.control.MapInfo.prototype.register.call(self, map);\r\n \r\n result.then(function () {\r\n\r\n self.exportsState = true;\r\n\r\n self.MOBILEFAV = self.getLocaleString('mobileBookmarks.instructions');\r\n self.NAVALERT = self.getLocaleString('bookmarks.instructions');\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('h2', function (_e) {\r\n self.update();\r\n }));\r\n\r\n self.map.on(TC.Consts.event.MAPCHANGE, function (_e) {\r\n const self = this;\r\n const input = self.div.querySelector('.tc-url input[type=text]');\r\n if (input) {\r\n input.dataset.update = true;\r\n }\r\n\r\n delete self.map._controlStatesCache;\r\n }.bind(self));\r\n\r\n var selectInputField = async function (elm, shorten) {\r\n const input = elm.parentElement.querySelector(\"input[type=text]\");\r\n\r\n if (shorten) {\r\n if (input.dataset.update || !input.dataset.shortened) {\r\n self.shortenedLink()\r\n .then(async function (value) {\r\n if (value && value.trim().length > 0) {\r\n\r\n elm.textContent = self.getLocaleString('shortened');\r\n setTimeout(function () {\r\n elm.textContent = self.getLocaleString('shorten');\r\n unselectInputField();\r\n }, 1000);\r\n\r\n delete input.dataset.update;\r\n input.dataset.shortened = true;\r\n input.value = value;\r\n\r\n input.select();\r\n\r\n } else {\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n input.value = await self.generateLink();\r\n }\r\n });\r\n }\r\n } else {\r\n if (!input.classList.contains('tc-url')) {\r\n input.value = await self.generateIframe();\r\n } else {\r\n if (input.dataset.update) {\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n input.value = await self.generateLink();\r\n }\r\n }\r\n\r\n input.select();\r\n }\r\n };\r\n\r\n var unselectInputField = function () {\r\n document.getSelection().removeAllRanges();\r\n document.getSelection().addRange(document.createRange());\r\n };\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('.tc-ctl-share-url-box button', function (evt) {\r\n const btn = evt.target;\r\n const isCopyBtn = !btn.classList.contains('shorten');\r\n\r\n const copy = async function () {\r\n await selectInputField(btn);\r\n\r\n document.execCommand('copy');\r\n\r\n btn.textContent = self.getLocaleString('copied');\r\n\r\n setTimeout(function () {\r\n btn.textContent = self.getLocaleString(isCopyBtn ? 'copy' : 'shorten');\r\n unselectInputField();\r\n }, 1000);\r\n };\r\n\r\n if (!isCopyBtn) {\r\n selectInputField(btn, true);\r\n } else {\r\n copy();\r\n }\r\n }));\r\n\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('input[type=text]', function (evt) {\r\n selectInputField(evt.target);\r\n }));\r\n\r\n //Deshabilitar el click de ratón en los enlaces de compartir cuando están deshabilitados\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('.ga-share-icon.tc-disabled', function (evt) {\r\n evt.stopImmediatePropagation();\r\n evt.preventDefault();\r\n return false;\r\n }));\r\n\r\n //Enviar por e-mail\r\n self.div.addEventListener('click', TC.EventTarget.listenerBySelector('a.share-email', async function (evt) {\r\n evt.preventDefault();\r\n self.shortenedLink().then(function (url) {\r\n if (url) {\r\n const body = encodeURIComponent(url + \"\\n\");\r\n if (body.length > self.MAILTO_MAX_LENGTH) {\r\n map.toast(self.getLocaleString('urlTooLongForMailto'), { type: TC.Consts.msgType.WARNING });\r\n }\r\n window.location.href = 'mailto:?body=' + body;\r\n }\r\n });\r\n }));\r\n\r\n //Generar código QR \r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\"a.qr-generator\", function (evt) {\r\n evt.preventDefault();\r\n const qrContainer = self._dialogDiv.querySelector(\".qrcode\");\r\n qrContainer.innerHTML = '';\r\n\r\n if (self._dialogDiv.querySelector('.' + self.CLASS + '-qr-alert').classList.contains(TC.Consts.classes.HIDDEN)) {\r\n self.makeQRCode(qrContainer, 256, 256).then(function (qrCodeBase64) {\r\n if (qrCodeBase64) {\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-qr-dialog'));\r\n }\r\n });\r\n } else {\r\n TC.Util.showModal(self._dialogDiv.querySelector(self._classSelector + '-qr-dialog'));\r\n }\r\n }));\r\n\r\n\r\n const openSocialMedia = function (win, url, process) {\r\n if (url && url.trim().length > 0) {\r\n win.location.href = process(url);\r\n } else {\r\n TC.error(self.getLocaleString('urlTooLongForShortener'));\r\n win.close();\r\n }\r\n };\r\n\r\n //Compartir en Facebook\r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\"a.share-fb\", function (evt) {\r\n evt.preventDefault();\r\n\r\n const w = window.open();\r\n self.shortenedLink().then(function (url) {\r\n openSocialMedia(w, url, function (url) {\r\n return \"https://www.facebook.com/sharer/sharer.php?u=\" + encodeURIComponent(url);\r\n });\r\n });\r\n\r\n return false;\r\n }));\r\n\r\n //Compartir en Twitter\r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\"a.share-twitter\", function (evt) {\r\n evt.preventDefault();\r\n\r\n const w = window.open();\r\n self.shortenedLink().then(function (url) {\r\n openSocialMedia(w, url, function (url) {\r\n var titulo = encodeURIComponent(window.document.title ? window.document.title : \"Visor API SITNA\");\r\n return \"https://twitter.com/intent/tweet?text=\" + titulo + \"&url=\" + encodeURIComponent(url);\r\n });\r\n });\r\n\r\n return false;\r\n }));\r\n\r\n //Compartir en Whatsapp\r\n if (TC.Util.detectMobile()) {\r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\"a.share-whatsapp\", function (evt) {\r\n evt.preventDefault();\r\n\r\n self.shortenedLink().then(async function (url) {\r\n var waText = 'whatsapp://send?text=';\r\n if (url !== undefined) {\r\n location.href = waText + encodeURIComponent(url);\r\n } else {\r\n location.href = waText + encodeURIComponent(await self.generateLink());\r\n }\r\n });\r\n\r\n return false;\r\n }));\r\n }\r\n\r\n //Guardar en marcadores\r\n self.div.addEventListener(\"click\", TC.EventTarget.listenerBySelector(\"a.share-star\", async function (evt) {\r\n evt.preventDefault();\r\n\r\n var bookmarkURL = await self.generateLink();\r\n var bookmarkTitle = document.title;\r\n\r\n if (TC.Util.detectMobile()) {\r\n // Mobile browsers\r\n alert(ctlProto.MOBILEFAV);\r\n } else if (window.sidebar && window.sidebar.addPanel) {\r\n // Firefox version < 23\r\n window.sidebar.addPanel(bookmarkTitle, bookmarkURL, '');\r\n } else if (window.sidebar && /Firefox/i.test(navigator.userAgent) || window.opera && window.print) {\r\n // Firefox version >= 23 and Opera Hotlist \r\n\r\n window.location.href = bookmarkURL;\r\n alert((/Mac/i.test(navigator.userAgent) ? 'Cmd' : 'Ctrl') + ctlProto.NAVALERT);\r\n\r\n } else if (window.external && 'AddFavorite' in window.external) {\r\n // IE Favorite\r\n window.external.AddFavorite(bookmarkURL, bookmarkTitle);\r\n } else {\r\n // Other browsers (mainly WebKit - Chrome/Safari) \r\n window.location.href = bookmarkURL;\r\n alert((/Mac/i.test(navigator.userAgent) ? 'Cmd' : 'Ctrl') + ctlProto.NAVALERT);\r\n }\r\n\r\n return false;\r\n }));\r\n\r\n //Cuando se añada o borre una capa, comprobamos de nuevo si la URL cumple los requisitos de longitud para habilitar el control\r\n //map.on(TC.Consts.event.MAPLOAD, function () {\r\n // map.on(TC.Consts.event.LAYERREMOVE + ' ' + TC.Consts.event.LAYERADD, function (e) {\r\n // self.generateLink();\r\n // });\r\n //}); \r\n\r\n map.loaded(() => {\r\n if (!self.div.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n self.update();\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"share\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":20}}})) + \"

                  \\r\\n
                  \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
                  \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-dialog'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.generateLink = async function () {\r\n const self = this;\r\n const shareIconContainer = self.div.querySelector('.ga-share-icons');\r\n const textboxes = self.div.querySelectorAll(`.${self.CLASS}-url-box tc-textbox`);\r\n const buttons = self.div.querySelectorAll(`.${self.CLASS}-url-box button`);\r\n const alert = self.div.querySelector('.' + self.CLASS + '-alert');\r\n shareIconContainer.classList.add(TC.Consts.classes.LOADING);\r\n textboxes.forEach(tb => tb.disabled = true);\r\n buttons.forEach(btn => {\r\n btn.classList.add(TC.Consts.classes.LOADING);\r\n btn.disabled = true;\r\n });\r\n alert.classList.add(TC.Consts.classes.LOADING);\r\n const result = await TC.control.MapInfo.prototype.generateLink.call(self);\r\n textboxes.forEach(tb => tb.disabled = false);\r\n buttons.forEach(btn => {\r\n btn.disabled = false;\r\n btn.classList.remove(TC.Consts.classes.LOADING);\r\n });\r\n shareIconContainer.classList.remove(TC.Consts.classes.LOADING);\r\n alert.classList.remove(TC.Consts.classes.LOADING);\r\n return result;\r\n };\r\n\r\n})();\r\n\r\nconst Share = TC.control.Share;\r\nexport default Share;","\r\n/**\r\n * Opciones de control de StreetView.\r\n * @typedef StreetViewOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {string} [googleMapsKey] - El control de StreetView hace uso de la API de Google Maps para funcionar. \r\n * Esta propiedad establece la clave de uso asociada al sitio donde está alojada la aplicación que usa la API SITNA. \r\n * No es necesaria para hacer funcionar el control pero es recomendable obtener una para garantizar el servicio por parte de Google.\r\n * \r\n * Puede obtener más información en el [sitio para desarrolladores de Google](https://developers.google.com/maps/documentation/javascript/get-api-key).\r\n * @property {HTMLElement|string} [viewDiv] - Elemento del DOM en el que mostrar la vista de StreetView o valor de atributo id de dicho elemento.\r\n * @example [Ver en vivo](../examples/cfg.StreetViewOptions.html) {@lang html}\r\n *
                  \r\n *
                  \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.Control = Control;\r\n\r\n(function () {\r\n TC.Consts.url.GOOGLEMAPS = '//maps.googleapis.com/maps/api/js?v=3';\r\n var gMapsUrl = TC.Consts.url.GOOGLEMAPS;\r\n TC.Cfg.proxyExceptions = TC.Cfg.proxyExceptions || [];\r\n TC.Cfg.proxyExceptions.push(TC.Consts.url.GOOGLEMAPS);\r\n\r\n TC.control.StreetView = function () {\r\n var self = this;\r\n self._sv = null;\r\n self._mapActiveControl = null;\r\n\r\n TC.Control.apply(self, arguments);\r\n\r\n self.viewDiv = null;\r\n self._startLonLat = null;\r\n };\r\n\r\n TC.inherit(TC.control.StreetView, TC.Control);\r\n\r\n var ctlProto = TC.control.StreetView.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-sv';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n
                  \\r\\n
                  \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-view'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \";},\"useData\":true}\r\n\r\n const dispatchCanvasResize = function () {\r\n var event = document.createEvent('HTMLEvents');\r\n event.initEvent('resize', true, false);\r\n this.map.div.querySelector('canvas').dispatchEvent(event);\r\n };\r\n\r\n var preset = function (ctl) {\r\n ctl.div.querySelector('.' + ctl.CLASS + '-btn').classList.add(TC.Consts.classes.CHECKED);\r\n ctl.map.div.classList.add(ctl.CLASS + '-active');\r\n };\r\n\r\n var reset = function (ctl) {\r\n const view = ctl.viewDiv;\r\n const onTransitionend = function () {\r\n view.removeEventListener('transitionend', onTransitionend);\r\n dispatchCanvasResize.call(ctl);\r\n };\r\n\r\n view.addEventListener('transitionend', onTransitionend);\r\n\r\n // Por si no salta transitionend\r\n setTimeout(function () {\r\n dispatchCanvasResize.call(ctl);\r\n }, 1000);\r\n\r\n\r\n ctl.layer.clearFeatures();\r\n ctl.div.querySelector('.' + ctl.CLASS + '-btn').classList.remove(TC.Consts.classes.CHECKED);\r\n ctl.div.querySelector('.' + ctl.CLASS + '-drag').classList.remove(TC.Consts.classes.HIDDEN);\r\n ctl.map.div.classList.remove(ctl.CLASS + '-active');\r\n ctl._startLonLat = null;\r\n };\r\n\r\n var resolve = function (ctl) {\r\n var result = false;\r\n const btn = ctl.div.querySelector('.' + ctl.CLASS + '-btn');\r\n const drag = ctl.div.querySelector('.' + ctl.CLASS + '-drag');\r\n\r\n var btnRect = btn.getBoundingClientRect();\r\n var dragRect = drag.getBoundingClientRect();\r\n drag.classList.add(TC.Consts.classes.HIDDEN);\r\n if (dragRect.top < btnRect.top || dragRect.top > btnRect.bottom ||\r\n dragRect.left < btnRect.left || dragRect.left > btnRect.right) {\r\n // Hemos soltado fuera del botón: activar StreetView\r\n result = true;\r\n // Precarga de marcadores\r\n var extent = ctl.map.getExtent();\r\n var xy = [extent[2], extent[3]];\r\n for (var i = 0; i < 16; i++) {\r\n ctl.layer.addMarker(xy, {\r\n cssClass: 'tc-marker-sv-' + i,\r\n width: 48,\r\n height: 48,\r\n anchor: [0, 1]\r\n });\r\n }\r\n /////////////////////\r\n // Activamos StreetView\r\n var mapRect = ctl.map.div.getBoundingClientRect();\r\n var xpos = (dragRect.left * window.devicePixelRatio + dragRect.right * window.devicePixelRatio) / 2 - mapRect.left * window.devicePixelRatio;\r\n var ypos = dragRect.bottom * window.devicePixelRatio - mapRect.top * window.devicePixelRatio;\r\n var coords = ctl.map.wrap.getCoordinateFromPixel([xpos, ypos]);\r\n ctl.callback(coords);\r\n }\r\n else {\r\n reset(ctl);\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n if (!self.viewDiv) {\r\n self.viewDiv = TC.Util.getDiv(self.options.viewDiv);\r\n self.viewDiv.classList.add(self.CLASS + '-view', TC.Consts.classes.HIDDEN);\r\n if (!self.options.viewDiv) {\r\n map.div.insertAdjacentElement('beforebegin', self.viewDiv);\r\n }\r\n }\r\n\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n const googleMapsKey = self.options.googleMapsKey || map.options.googleMapsKey;\r\n if (googleMapsKey) {\r\n gMapsUrl += '&key=' + googleMapsKey;\r\n }\r\n\r\n self.layer = null;\r\n var layerId = self.getUID();\r\n for (var i = 0; i < map.workLayers.length; i++) {\r\n var layer = map.workLayers[i];\r\n if (layer.type === TC.Consts.layerType.VECTOR && layer.id === layerId) {\r\n self.layer = layer;\r\n break;\r\n }\r\n }\r\n if (!self.layer) {\r\n map.loaded(function () {\r\n map.addLayer({\r\n id: layerId,\r\n owner: self,\r\n stealth: true,\r\n type: TC.Consts.layerType.VECTOR\r\n }).then(function (layer) {\r\n self.layer = layer;\r\n });\r\n });\r\n }\r\n\r\n self.renderPromise().then(function () {\r\n TC.loadJS(\r\n !window.Draggabilly,\r\n [TC.apiLocation + TC.Consts.url.DRAGGABILLY],\r\n function () {\r\n const drag = new Draggabilly(self.div.querySelector('.' + self.CLASS + '-drag'), {\r\n containment: self.map.div\r\n });\r\n drag.on('dragStart', function (_e) {\r\n preset(self);\r\n });\r\n drag.on('dragEnd', function (_e) {\r\n resolve(self);\r\n drag.setPosition(0, 0);\r\n });\r\n }\r\n );\r\n\r\n const view = self.viewDiv;\r\n view.querySelector('.' + self.CLASS + '-btn-close').addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation();\r\n self.closeView();\r\n }, { passive: true });\r\n }\r\n , function () {\r\n TC.error(\"Error de renderizado StreetView\");\r\n });\r\n\r\n return result;\r\n };\r\n\r\n\r\n\r\n ctlProto.render = function () {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(new Promise(function (resolve, _reject) {\r\n self.renderData(null, function () {\r\n self.getRenderedHtml(self.CLASS + '-view', null).then(function (out) {\r\n //lo normal sería hacer el resolve después de volcar out en viewDiv\r\n //pero a veces fallaba\r\n //no se detonaba, sin dar error alguno\r\n //así que lo arreglo como a mí me gusta:\r\n setTimeout(function () {\r\n self.viewDiv.innerHTML = out;\r\n resolve(self);\r\n }\r\n , 300);\r\n\r\n\r\n //console.log(\"Casi resuelto... \" + out.length);\r\n //self._$viewDiv.html(out);\r\n //if (err)\r\n //{\r\n // TC.error(err);\r\n //}\r\n //resolve(self);\r\n //console.log(\"Resuelto!\");\r\n\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n });\r\n }));\r\n };\r\n\r\n var waitId = 0;\r\n\r\n ctlProto.callback = function (coords) {\r\n var self = this;\r\n var geogCrs = 'EPSG:4326';\r\n\r\n var ondrop = function (feature) {\r\n if (self._sv) {\r\n var bounds = feature.getBounds();\r\n const lonLat = TC.Util.reproject([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2], self.map.crs, geogCrs);\r\n self._sv.setPosition({ lng: lonLat[0], lat: lonLat[1] });\r\n }\r\n };\r\n\r\n var ondrag = function (feature) {\r\n if (self._sv) {\r\n var bounds = feature.getBounds();\r\n self._startLonLat = TC.Util.reproject([(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2], self.map.crs, geogCrs);\r\n }\r\n };\r\n\r\n var li = self.map.getLoadingIndicator();\r\n if (li) {\r\n waitId = li.addWait(waitId);\r\n }\r\n\r\n const mapDiv = self.map.div;\r\n\r\n var setMarker = function (sv, center) {\r\n self.layer.clearFeatures();\r\n\r\n var xy;\r\n var heading;\r\n if (sv) {\r\n var latLon = sv.getPosition();\r\n xy = TC.Util.reproject([latLon.lng(), latLon.lat()], geogCrs, self.map.crs);\r\n heading = sv.getPov().heading;\r\n }\r\n else {\r\n xy = coords;\r\n heading = 0;\r\n }\r\n self.map.addMarker(xy, {\r\n cssClass: 'tc-marker-sv-' + (Math.round(16.0 * heading / 360) + 16) % 16,\r\n width: 48,\r\n height: 48,\r\n anchor: [0.4791666666666667, 0.7083333333333333],\r\n layer: self.layer,\r\n showsPopup: false\r\n });\r\n Promise.all(self.map._markerPromises).then(function () {\r\n // Para poder arrastrar a pegman \r\n self.layer.wrap.setDraggable(true, ondrop, ondrag);\r\n });\r\n\r\n if (center) {\r\n var setCenter = function () {\r\n self.map.setCenter(xy);\r\n };\r\n // Esperamos a que el mapa esté colapsado para centrarnos: ahorramos ancho de banda\r\n if (mapDiv.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n setCenter();\r\n }\r\n else {\r\n setTimeout(setCenter, 1200);\r\n }\r\n }\r\n };\r\n\r\n TC.loadJS(\r\n !window.google || !google.maps,\r\n gMapsUrl,\r\n function () {\r\n\r\n if (window.google) {\r\n\r\n setMarker();\r\n\r\n const view = self.viewDiv;\r\n const lonLat = TC.Util.reproject(coords, self.map.crs, geogCrs);\r\n const mapsLonLat = new google.maps.LatLng(lonLat[1], lonLat[0]);\r\n\r\n // Comprobamos si hay datos de SV en el sitio elegido.\r\n const svService = new google.maps.StreetViewService();\r\n svService.getPanorama({\r\n location: mapsLonLat,\r\n preference: google.maps.StreetViewPreference.BEST\r\n }, function (svPanoramaData, svStatus) {\r\n if (svStatus !== google.maps.StreetViewStatus.OK) {\r\n if (li) {\r\n li.removeWait(waitId);\r\n }\r\n setTimeout(function () { // Timeout para dar tiempo a ocultarse a LoadingIndicator\r\n TC.alert(svStatus === google.maps.StreetViewStatus.ZERO_RESULTS ? self.getLocaleString('noStreetView') : self.getLocaleString('streetViewUnknownError'));\r\n self.layer.wrap.setDraggable(false);\r\n reset(self);\r\n }, 100);\r\n }\r\n else {\r\n const onTransitionend = function (e) {\r\n if (!self._transitioning) {\r\n return;\r\n }\r\n\r\n if (e.propertyName === 'width' || e.propertyName === 'height') {\r\n\r\n self._transitioning = false;\r\n\r\n if (li) {\r\n li.removeWait(waitId);\r\n }\r\n\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n mapDiv.dispatchEvent(resizeEvent);\r\n\r\n dispatchCanvasResize.call(self);\r\n view.removeEventListener('transitionend', onTransitionend);\r\n\r\n var svOptions = {\r\n position: mapsLonLat,\r\n pov: {\r\n heading: 0,\r\n pitch: 0\r\n },\r\n zoom: 1,\r\n fullscreenControl: false,\r\n zoomControlOptions: {\r\n position: google.maps.ControlPosition.LEFT_TOP\r\n },\r\n panControlOptions: {\r\n position: google.maps.ControlPosition.LEFT_TOP\r\n },\r\n imageDateControl: true\r\n };\r\n\r\n if (!self._sv) {\r\n self._sv = new google.maps.StreetViewPanorama(view, svOptions);\r\n google.maps.event.addListener(self._sv, 'position_changed', function () {\r\n setMarker(self._sv, view.classList.contains(TC.Consts.classes.VISIBLE));\r\n });\r\n google.maps.event.addListener(self._sv, 'pov_changed', function () {\r\n if (self.layer.features && self.layer.features.length > 0) {\r\n var pegmanMarker = self.layer.features[0];\r\n\r\n delete pegmanMarker.options.url;\r\n pegmanMarker.options.cssClass = 'tc-marker-sv-' + (Math.round(16.0 * self._sv.getPov().heading / 360) + 16) % 16;\r\n pegmanMarker.setStyle(pegmanMarker.options);\r\n }\r\n });\r\n google.maps.event.addListener(self._sv, 'status_changed', function () {\r\n var svStatus = self._sv.getStatus();\r\n\r\n if (svStatus !== google.maps.StreetViewStatus.OK) {\r\n self._sv.setVisible(false);\r\n TC.alert(svStatus === google.maps.StreetViewStatus.ZERO_RESULTS ? self.getLocaleString('noStreetView') : self.getLocaleString('streetViewUnknownError'));\r\n if (self._startLonLat) {\r\n self._sv.setVisible(true);\r\n self._sv.setPosition({ lng: self._startLonLat[0], lat: self._startLonLat[1] });\r\n }\r\n else {\r\n self.layer.wrap.setDraggable(false);\r\n self.closeView();\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n self._sv.setOptions(svOptions);\r\n self._sv.setVisible(true);\r\n }\r\n }\r\n };\r\n\r\n self._transitioning = true;\r\n view.addEventListener('transitionend', onTransitionend);\r\n\r\n if (!self.options.viewDiv) {\r\n // No había definida una vista. Para hacer el control compatible con mapas incrustados,\r\n // en este caso a la vista nueva le asignamos el tamaño del mapa.\r\n const mapRect = mapDiv.getBoundingClientRect();\r\n self.viewDiv.style.height = mapRect.height + 'px';\r\n self.viewDiv.style.width = mapRect.width + 'px';\r\n }\r\n mapDiv.classList.add(TC.Consts.classes.COLLAPSED);\r\n view.style.left = '';\r\n view.style.top = '';\r\n view.classList.remove(TC.Consts.classes.HIDDEN);\r\n view.classList.add(TC.Consts.classes.VISIBLE);\r\n\r\n\r\n // Por si no salta transitionend\r\n setTimeout(function () {\r\n onTransitionend({ propertyName: 'width' });\r\n }, 1000);\r\n\r\n const header = document.body.querySelector('header');\r\n if (header) {\r\n header.style.display = 'none';\r\n }\r\n\r\n //apagar lo que sea que esté encendido (probablemente featInfo)\r\n //al cerrar con el aspa, volverá a detonarse StreetView.deactivate()\r\n //que, a su vez, restaurará el control anterior (FeatureInfo)\r\n if (self.map.activeControl) {\r\n self._previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate(true);\r\n }\r\n\r\n setMarker(self._sv);\r\n }\r\n });\r\n }\r\n else {\r\n reset(self);\r\n }\r\n }, false, true);\r\n };\r\n\r\n ctlProto.closeView = function () {\r\n const self = this;\r\n const mapDiv = self.map.div;\r\n const view = self.viewDiv;\r\n\r\n const endProcess = function () {\r\n mapDiv.classList.remove(TC.Consts.classes.COLLAPSED);\r\n const resizeEvent = document.createEvent('HTMLEvents');\r\n resizeEvent.initEvent('resize', false, false);\r\n mapDiv.dispatchEvent(resizeEvent); // Para evitar que salga borroso el mapa tras cerrar SV.\r\n };\r\n const transitionend = 'transitionend';\r\n const onTransitionend = function (e) {\r\n if (e.propertyName === 'width' || e.propertyName === 'height') {\r\n view.removeEventListener(transitionend, onTransitionend);\r\n endProcess();\r\n }\r\n };\r\n view.removeEventListener(transitionend, onTransitionend);\r\n view.addEventListener(transitionend, onTransitionend);\r\n setTimeout(endProcess, 1000); // backup por si falla la transición.\r\n\r\n if (!self.options.viewDiv) {\r\n // No había definida una vista. Para hacer el control compatible con mapas incrustados,\r\n // en este caso a la vista nueva le habíamos asignado el tamaño del mapa.\r\n self.viewDiv.style.removeProperty('height');\r\n self.viewDiv.style.removeProperty('width');\r\n }\r\n view.classList.add(TC.Consts.classes.HIDDEN);\r\n view.classList.remove(TC.Consts.classes.VISIBLE);\r\n self.div.querySelector('.' + self.CLASS + '-drag').classList.remove(TC.Consts.classes.HIDDEN);\r\n self.layer.wrap.setDraggable(false);\r\n reset(self);\r\n self._sv.setVisible(false);\r\n const header = document.body.querySelector('header');\r\n if (header) {\r\n header.style.display = '';\r\n }\r\n\r\n if (self._previousActiveControl) {\r\n self._previousActiveControl.activate();\r\n }\r\n };\r\n})();\r\n\r\nconst StreetView = TC.control.StreetView;\r\nexport default StreetView;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport MapContents from './MapContents';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.MapContents = MapContents;\r\n\r\nTC.control.TOC = function () {\r\n var self = this;\r\n\r\n TC.control.MapContents.apply(self, arguments);\r\n};\r\n\r\nTC.inherit(TC.control.TOC, TC.control.MapContents);\r\n\r\n(function () {\r\n var ctlProto = TC.control.TOC.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-toc';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-toc-wlbranch\"),depth0,{\"name\":\"tc-ctl-toc-wlbranch\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"worklayers\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":25}}})) + \"

                  \\r\\n
                  \\r\\n
                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":34},\"end\":{\"line\":3,\"column\":51}}})) + \"
                  \\r\\n
                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"workLayers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":7,\"column\":17}}})) != null ? stack1 : \"\") + \"
                  \\r\\n
                  \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-branch'] = {\"1\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-toc-node\\\"\";},\"3\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-toc-node tc-ctl-toc-leaf\\\"\";},\"5\":function(container,depth0,helpers,partials,data) { return \" checked\";},\"7\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-toc-node\"),depth0,{\"name\":\"tc-ctl-toc-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                • \\r\\n \\r\\n \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"\\r\\n
                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":7,\"column\":17}}})) != null ? stack1 : \"\") + \"
                  \\r\\n
                • \";},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + '-node'] = {\"1\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-toc-node\\\"\";},\"3\":function(container,depth0,helpers,partials,data) { return \"class=\\\"tc-ctl-toc-node tc-ctl-toc-leaf\\\"\";},\"5\":function(container,depth0,helpers,partials,data) { return \"\";},\"7\":function(container,depth0,helpers,partials,data) { return \" checked\";},\"9\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-toc-node\"),depth0,{\"name\":\"tc-ctl-toc-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                • \\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":2,\"column\":90}}})) != null ? stack1 : \"\") + \"\\r\\n \" + alias3(alias2((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"\\r\\n
                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"children\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":7,\"column\":17}}})) != null ? stack1 : \"\") + \"
                  \\r\\n
                • \";},\"usePartial\":true,\"useData\":true}\r\n\r\n var CLICKEVENT = 'click';\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n const result = TC.control.MapContents.prototype.register.call(self, map);\r\n\r\n map.on(TC.Consts.event.EXTERNALSERVICEADDED, function (e) {\r\n self.onExternalServiceAdded(e);\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.onExternalServiceAdded = function (e) {\r\n const self = this;\r\n if (e && e.layer) {\r\n e.layer.map = self.map;\r\n self.map.addLayer(e.layer).then(function (_layer) {\r\n self.updateLayerTree(e.layer);\r\n });\r\n }\r\n };\r\n\r\n ctlProto.addUIEventListeners = function () {\r\n const self = this;\r\n self.div.addEventListener(CLICKEVENT, TC.EventTarget.listenerBySelector('input[type=checkbox]', function (e) { // No usamos TC.Consts.event.CLICK porque en iPad los eventos touchstart no van bien en los checkbox\r\n const checkbox = e.target;\r\n var ul = checkbox;\r\n while (ul && !ul.matches('ul.' + self.CLASS + '-wl')) {\r\n ul = ul.parentElement;\r\n }\r\n const lis = [];\r\n var i;\r\n for (i = 0; i < ul.children.length; i++) {\r\n const child = ul.children[i];\r\n if (child.tagName === 'LI') {\r\n lis.push(child);\r\n }\r\n }\r\n for (i = 0; i < lis.length; i++) {\r\n const li = lis[i];\r\n if (li.contains(checkbox)) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n var parent = checkbox;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n //URI: El arbol de capas vecotriales falla si tiene una profuncidad de 2 o mas nodos\r\n while (parent && parent.tagName !== 'LI' && !layer.getNodeVisibility(parent.dataset.layerUid));\r\n const uid = parent.dataset.layerUid;\r\n layer.setNodeVisibility(uid, checkbox.checked);\r\n break;\r\n }\r\n }\r\n\r\n e.stopPropagation();\r\n }));\r\n self.div.addEventListener(TC.Consts.event.MOUSEUP, TC.EventTarget.listenerBySelector('button.' + self.CLASS + '-collapse-btn', function (e) {\r\n e.target.blur();\r\n const li = e.target.parentElement;\r\n if (!li.classList.contains(self.CLASS + '-leaf')) {\r\n li.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n const ul = li.querySelector('ul');\r\n ul.classList.toggle(TC.Consts.classes.COLLAPSED);\r\n e.stopPropagation();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.update = function (layer) {\r\n var self = this;\r\n\r\n var _getCheckbox = function (li) {\r\n for (var i = 0, len = li.children.length; i < len; i++) {\r\n const child = li.children[i];\r\n if (child.matches('input[type=checkbox]')) {\r\n return child;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const li = self.getLayerUIElements().find(ui => ui.dataset.layerId === layer.id);\r\n if (!li) return;\r\n _getCheckbox(li).checked = layer.getVisibility();\r\n\r\n layer.tree = null;\r\n const tree = layer.getTree(true);\r\n li.querySelectorAll('li').forEach(function (l) {\r\n const checkbox = _getCheckbox(l);\r\n const uid = l.dataset.layerUid;\r\n switch (layer.getNodeVisibility(uid, tree)) {\r\n case TC.Consts.visibility.VISIBLE:\r\n checkbox.checked = true;\r\n checkbox.indeterminate = false;\r\n break;\r\n case TC.Consts.visibility.NOT_VISIBLE:\r\n checkbox.checked = false;\r\n checkbox.indeterminate = false;\r\n break;\r\n case TC.Consts.visibility.NOT_VISIBLE_AT_RESOLUTION:\r\n checkbox.checked = true;\r\n checkbox.indeterminate = false;\r\n break;\r\n case TC.Consts.visibility.HAS_VISIBLE:\r\n checkbox.checked = false;\r\n checkbox.indeterminate = true;\r\n break;\r\n case null:\r\n // Nodo no encontrado, no visible\r\n checkbox.checked = false;\r\n checkbox.indeterminate = true;\r\n break;\r\n default: {\r\n // visibilityState no establecido, miramos isVisible\r\n const node = layer.findNode(uid, tree);\r\n const isVisible = Object.prototype.hasOwnProperty.call(node, \"isVisible\") ? node.isVisible : true;\r\n checkbox.checked = isVisible;\r\n checkbox.indeterminate = false;\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctlProto.updateScale = function (layer) {\r\n const self = this;\r\n const setVisibilityByScale = function (li, layer) {\r\n if (!li) return;\r\n li.querySelectorAll('li').forEach(function (elm) {\r\n const uid = elm.dataset.layerUid;\r\n elm.classList.toggle(self.CLASS + '-node-notvisible', !layer.isVisibleByScale(uid));\r\n });\r\n };\r\n if (!layer)\r\n self.getLayerUIElements().forEach(function (li) {\r\n setVisibilityByScale(li, self.map.getLayer(li.dataset.layerId));\r\n\r\n });\r\n else\r\n setVisibilityByScale(self.getLayerUIElements().find(ui => ui.dataset.layerId === layer.id), layer); \r\n };\r\n\r\n ctlProto.updateLayerTree = function (layer) {\r\n var self = this;\r\n\r\n if (!layer.isBase && !layer.options.stealth) {\r\n TC.control.MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n self.div.querySelector('.' + self.CLASS + '-empty').classList.add(TC.Consts.classes.HIDDEN);\r\n self.getRenderedHtml(self.CLASS + '-branch', self.layerTrees[layer.id])\r\n .then(function (out) {\r\n const parser = new DOMParser();\r\n const newLi = parser.parseFromString(out, 'text/html').body.firstChild;\r\n const uid = newLi.dataset.layerUid;\r\n const li = self.div.querySelector('.' + self.CLASS + '-wl li[data-layer-uid=\"' + uid + '\"]') ||\r\n self.div.querySelector('.' + self.CLASS + '-wl li[data-layer-id=\"' + layer.id + '\"]');\r\n if (!li) {\r\n newLi.dataset.layerId = layer.id;\r\n const ul = self.div.querySelector('.' + self.CLASS + '-wl');\r\n ul.insertBefore(newLi, ul.firstChild);\r\n\r\n //if (layer instanceof TC.layer.Vector || li)\r\n /*if (li) {\r\n li.innerHTML = newLi.innerHTML;\r\n li.setAttribute('class', newLi.getAttribute('class')); // Esto actualiza si un nodo deja de ser hoja o pasa a ser hoja\r\n if (!li.dataset.layerId) {\r\n li.dataset.layerId = layer.id;\r\n }\r\n }\r\n else {\r\n newLi.dataset.layerId = layer.id;\r\n const ul = self.div.querySelector('.' + self.CLASS + '-wl');\r\n ul.insertBefore(newLi, ul.firstChild);\r\n }*/\r\n\r\n const wl = 'ul.' + self.CLASS + '-wl';\r\n const branch = 'ul.' + self.CLASS + '-branch';\r\n const node = 'li.' + self.CLASS + '-node';\r\n const leaf = 'li.' + self.CLASS + '-leaf';\r\n newLi.querySelectorAll(wl + ' ' + branch + ' ' + branch + ',' + wl + ' ' + branch + ' ' + node).forEach(function (node_) {\r\n if (!node_.matches(leaf)) {\r\n node_.classList.add(TC.Consts.classes.COLLAPSED);\r\n }\r\n });\r\n } else if (layer instanceof TC.layer.Vector) {\r\n const wl = 'ul.' + self.CLASS + '-wl';\r\n const branch = 'ul.' + self.CLASS + '-branch';\r\n const node = 'li.' + self.CLASS + '-node';\r\n const leaf = 'li.' + self.CLASS + '-leaf';\r\n //guardo los no collapsados\r\n const notCollapsedNodesUid = Array.from(li.querySelectorAll(\"li.tc-ctl-toc-node:not(.tc-ctl-toc-leaf):not(.tc-collapsed)\")).reduce(function (previousValue, currentValue) {\r\n console.log(previousValue);\r\n previousValue.push(currentValue.dataset.layerUid);\r\n return previousValue;\r\n }, []);\r\n li.innerHTML = newLi.innerHTML;\r\n li.setAttribute('class', newLi.getAttribute('class')); // Esto actualiza si un nodo deja de ser hoja o pasa a ser hoja\r\n if (!li.dataset.layerId) {\r\n li.dataset.layerId = layer.id;\r\n }\r\n li.querySelectorAll(wl + ' ' + branch + ' ' + branch + ',' + wl + ' ' + branch + ' ' + node).forEach(function (node_) {\r\n //colapso todos los nodos que no son hoja y que previamente no estaban collapsados\r\n if (!node_.matches(leaf) &&\r\n !(node_.tagName === \"LI\" && notCollapsedNodesUid.some(notCollapsedUid => notCollapsedUid === node_.dataset.layerUid) ||\r\n node_.tagName === \"UL\" && notCollapsedNodesUid.some(notCollapsedUid => notCollapsedUid === node_.parentElement.dataset.layerUid)\r\n )) {\r\n node_.classList.add(TC.Consts.classes.COLLAPSED);\r\n }\r\n });\r\n }\r\n \r\n self.update(layer);\r\n self.updateScale(layer);\r\n })\r\n .catch(function (err) {\r\n TC.error(err);\r\n });\r\n }\r\n }; \r\n ctlProto.removeLayer = function (layer) {\r\n if (!layer.isBase) { \r\n TC.control.MapContents.prototype.removeLayer.call(this, layer);\r\n }\r\n };\r\n\r\n ctlProto.updateLayerVisibility = function (layer) {\r\n var self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n if (li.dataset.layerId === layer.id) {\r\n var isHidden = !layer.getVisibility();\r\n li.querySelectorAll('input[type=checkbox]').forEach(function (checkbox) {\r\n if (checkbox.matches('.' + self.CLASS + '-branch-cb')) {\r\n checkbox.checked = !isHidden;\r\n }\r\n else {\r\n checkbox.disabled = isHidden;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctlProto.updateLayerOrder = function (_layer, _oldIdx, _newIdx) {\r\n // Este control no tiene que hacer nada\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n return TC.Control.prototype.render.call(self, function () {\r\n\r\n var controlOptions = self.options.controls || [];\r\n\r\n if (controlOptions.length > 0) {\r\n var ctl = controlOptions[0];\r\n var newDiv = document.createElement(\"div\");\r\n self.div.appendChild(newDiv);\r\n self.map.addControl(ctl.name, TC.Util.extend({ 'div': newDiv }, ctl.options));\r\n }\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.getLayerUIElements = function () {\r\n const self = this;\r\n const result = [];\r\n const children = self.div.querySelector('ul.' + self.CLASS + '-wl').children;\r\n for (var i = 0, len = children.length; i < len; i++) {\r\n const child = children[i];\r\n if (child.tagName === 'LI') {\r\n result.push(child);\r\n }\r\n }\r\n return result;\r\n };\r\n \r\n})();\r\n\r\nconst TOC = TC.control.TOC;\r\nexport default TOC;","\r\n/**\r\n * Opciones de un control que contiene pestañas de selección.\r\n * @typedef TabContainerOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {boolean} [deselectableTabs=false] - Si se establece a `true`, las pestañas se pueden deseleccionar pulsando sobre ellas \r\n * cuando ya estaban seleccionadas previamente.\r\n * @example [Ver en vivo](../examples/cfg.TabContainerOptions.html) {@lang html}\r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Container from './Container';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.Container = Container;\r\n\r\nTC.control.TabContainer = function () {\r\n var self = this;\r\n\r\n TC.control.Container.apply(self, arguments);\r\n\r\n var cs = self._classSelector = '.' + self.CLASS;\r\n self._selectors = {\r\n TAB: cs + '-tab',\r\n RADIOBUTTON: `input[type=radio][name=\"${self.id}-sel\"]`,\r\n ELEMENT: cs + '-elm'\r\n }; \r\n};\r\n\r\nTC.inherit(TC.control.TabContainer, TC.control.Container);\r\n\r\n(function () {\r\n var ctlProto = TC.control.TabContainer.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-tctr';\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"3\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n
                  \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                  \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

                  \\r\\n
                  \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"controls\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":5,\"column\":14}}})) != null ? stack1 : \"\") + \"
                  \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"controls\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":0},\"end\":{\"line\":10,\"column\":9}}})) != null ? stack1 : \"\");},\"useData\":true,\"useDepths\":true}\r\n\r\n ctlProto.onRender = function () {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n self.title = self.title || self.getLocaleString(self.options.title || 'moreControls');\r\n self.div.querySelector('h2').innerHTML = self.title;\r\n\r\n for (var i = 0, len = self.controlOptions.length; i < len; i++) {\r\n var ctl = self.controlOptions[i];\r\n var ctlName = \"\";\r\n var ctlOptions = {};\r\n\r\n // GLS: 20/01/2020 código compatibilidad hacia atrás\r\n if (ctl.name !== undefined && ctl.options !== undefined) {\r\n console.log('Gestionamos config de tabContainer antiguo');\r\n\r\n ctlName = ctl.name;\r\n ctlOptions = ctl.options;\r\n } else {\r\n ctlName = Object.keys(ctl).filter((key) => {\r\n return key !== \"title\";\r\n })[0];\r\n ctlOptions = ctl[ctlName];\r\n }\r\n\r\n self._ctlPromises[i] = self.map.addControl(ctlName, TC.Util.extend({\r\n id: self.uids[i],\r\n div: self.div.querySelector('.' + self.CLASS + '-elm-' + i)\r\n }, ctlOptions));\r\n }\r\n var writeTitle = function (ctl, idx) {\r\n ctl.renderPromise().then(function () {\r\n const title = self.getLocaleString(self.controlOptions[idx].title) || ctl.div.querySelector('h2').innerHTML;\r\n var parent = ctl.div;\r\n do {\r\n parent = parent.parentElement;\r\n }\r\n while (parent && !parent.matches(self._classSelector));\r\n parent.querySelector(self._selectors.TAB + '-' + idx + ' span').innerHTML = title;\r\n });\r\n };\r\n Promise.all(self._ctlPromises).then(function (controls) {\r\n for (var i = 0, len = controls.length; i < len; i++) {\r\n var ctl = controls[i];\r\n ctl.containerControl = self;\r\n writeTitle(ctl, i);\r\n }\r\n resolve(self);\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData({\r\n controlId: self.id,\r\n title: self.title,\r\n controls: self.controlOptions\r\n }, function () {\r\n\r\n var clickHandler = function (_e) {\r\n var closest = this;\r\n while (closest && !closest.matches(self._selectors.TAB)) {\r\n closest = closest.parentElement;\r\n }\r\n var active, hidden = [];\r\n const checkbox = closest.querySelector(self._selectors.RADIOBUTTON);\r\n const newValue = checkbox.value;\r\n const elms = self.div.querySelectorAll(self._selectors.ELEMENT);\r\n if (self._oldValue === newValue && self.options.deselectableTabs) {\r\n setTimeout(function () {\r\n checkbox.checked = false;\r\n }, 0);\r\n self._oldValue = null;\r\n active = null;\r\n hidden = elms;\r\n }\r\n else {\r\n elms.forEach(function (elm) {\r\n if (elm.matches(self._selectors.ELEMENT + '-' + newValue)) {\r\n active = elm;\r\n }\r\n else {\r\n hidden.push(elm);\r\n }\r\n });\r\n self._oldValue = newValue;\r\n }\r\n\r\n if (active && active.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n active.classList.remove(TC.Consts.classes.COLLAPSED);\r\n\r\n // GLS 24/01/2020 necesitamos un mutation observer para poder quitar el tc.collapsed cuando volvamos de \r\n // otro control ya que no hay click porque la pestaña ya está activa.\r\n var observerTabElementAddCollapsedClass = new MutationObserver(function (mutations) { \r\n mutations.forEach(function (mutation) {\r\n if (mutation.target.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n mutation.target.classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n });\r\n });\r\n \r\n observerTabElementAddCollapsedClass.observe(active, { attributes: true }); \r\n }\r\n\r\n if (active) {\r\n active.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n hidden.forEach(function (elm) {\r\n elm.classList.add(TC.Consts.classes.HIDDEN);\r\n });\r\n checkbox.checked = true;\r\n };\r\n\r\n self.div.querySelectorAll('span').forEach(function (span) {\r\n span.addEventListener(TC.Consts.event.CLICK, clickHandler, { passive: true });\r\n });\r\n\r\n // GLS: Si en el register de control se llama a render, ¿por qué volvemos a llamarlo aquí?\r\n //for (var i = 0, len = self._ctlPromises.length; i < len; i++) {\r\n // self.getControl(i).then(function (ctl) {\r\n // ctl.render();\r\n // });\r\n //}\r\n\r\n if (typeof self.defaultSelection === 'number') {\r\n clickHandler.call(self.div.querySelectorAll(self._selectors.RADIOBUTTON)[self.defaultSelection]);\r\n }\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.selectTab = function (index) {\r\n const self = this;\r\n const radioButton = self.div.querySelectorAll(self._selectors.RADIOBUTTON)[index];\r\n if (radioButton) {\r\n radioButton.checked = true;\r\n const elements = self.div.querySelectorAll(self._selectors.ELEMENT);\r\n elements.forEach((element, idx) => element.classList.toggle(TC.Consts.classes.HIDDEN, index !== idx));\r\n }\r\n };\r\n\r\n ctlProto.onControlDisable = function (control) {\r\n const self = this;\r\n self.getControls().then(controls => {\r\n const controlIndex = controls.indexOf(control);\r\n if (controlIndex >= 0) {\r\n let nextControlIndex = controlIndex;\r\n let nextControl = control;\r\n do {\r\n nextControlIndex = (nextControlIndex + 1) % controls.length;\r\n nextControl = controls[nextControlIndex];\r\n }\r\n while (nextControl.isDisabled && nextControl !== control);\r\n if (nextControlIndex !== controlIndex) {\r\n self.selectTab(nextControlIndex);\r\n }\r\n }\r\n });\r\n };\r\n})();\r\n\r\nconst TabContainer = TC.control.TabContainer;\r\nexport default TabContainer;","/**\r\n * Opciones básicas de vista. \r\n * @_typedef ViewOptions \r\n * @_see ThreeDViewOptions \r\n * @_property {HTMLElement|string} [div] - Elemento del DOM en el que crear la vista o valor de atributo id de dicho elemento. \r\n */\r\n\r\n/**\r\n * Configuración adicional necesaria del control 3D en el mapa. Se define el elemento del DOM en el cual se renderizará la vista 3D.\r\n * @typedef ThreeDViewOptions\r\n * @_extends ViewOptions\r\n * @see MapViewOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear la vista o valor de atributo id de dicho elemento. \r\n *\r\n * @example Definición objeto ThreeDViewOptions {@lang javascript}\r\n * { \r\n * div: \"IDElementoDOM\"\r\n * }\r\n * @example [Ver en vivo](../examples/cfg.ThreeDOptions.html) {@lang html}\r\n *
                  \r\n *
                  \r\n * \r\n */\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport ThreeD from '../view/ThreeD';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.view = TC.view || {};\r\nTC.view.ThreeD = ThreeD;\r\nTC.Control = Control;\r\n\r\n(function () {\r\n\r\n TC.control.ThreeD = function () {\r\n var self = this;\r\n\r\n TC.Control.apply(self, arguments);\r\n };\r\n\r\n TC.inherit(TC.control.ThreeD, TC.Control);\r\n\r\n var ctlProto = TC.control.ThreeD.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-3d';\r\n ctlProto.classes = {\r\n BETA: 'tc-beta-button',\r\n BTNACTIVE: 'active'\r\n };\r\n\r\n ctlProto.template = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"useData\":true}\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n const result = TC.Control.prototype.register.call(self, map);\r\n\r\n map.on(TC.Consts.event.VIEWCHANGE, function (e) {\r\n if (e.view === TC.Consts.view.THREED) { // cargamos la vista 3D desde el estado actualizamos el estado del botón\r\n self.activate();\r\n }\r\n });\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.renderData = function (data, callback) {\r\n const self = this;\r\n\r\n return TC.Control.prototype.renderData.call(self, data, function () {\r\n self.button = self.div.querySelector('.' + self.CLASS + '-btn');\r\n\r\n self.button.addEventListener(TC.Consts.event.CLICK, function () {\r\n\r\n if (self.button.disabled) {\r\n return;\r\n }\r\n\r\n if (!self.map.on3DView) {\r\n self.activate();\r\n } else {\r\n self.button.disabled = true;\r\n\r\n TC.view.ThreeD.unapply({\r\n callback: function () {\r\n self.button.setAttribute('title', self.getLocaleString(\"threed.tip\"));\r\n\r\n self.button.classList.remove(self.classes.BTNACTIVE);\r\n\r\n self.button.disabled = false;\r\n }\r\n });\r\n }\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n\r\n ctlProto.activate = function () {\r\n var self = this;\r\n\r\n if (!self.map.on3DView) {\r\n self.button.disabled = true;\r\n }\r\n\r\n self.browserSupportWebGL.call(self);\r\n\r\n const manageButton = function () {\r\n self.button.setAttribute('title', self.getLocaleString('threed.two.tip'));\r\n self.button.classList.remove(self.classes.BETA);\r\n\r\n self.button.classList.add(self.classes.BTNACTIVE);\r\n };\r\n\r\n const removeDisabled = function () {\r\n self.button.disabled = false;\r\n };\r\n\r\n if (!self.map.view3D || !self.map.on3DView) {\r\n TC.view.ThreeD.apply({ map: self.map, options: self.options, getRenderedHtml: self.getRenderedHtml, callback: removeDisabled });\r\n }\r\n\r\n manageButton();\r\n\r\n //TC.Control.prototype.activate.call(self);\r\n };\r\n\r\n ctlProto.deactivate = function () {\r\n var self = this;\r\n\r\n TC.Control.prototype.deactivate.call(self);\r\n };\r\n\r\n ctlProto.browserSupportWebGL = function () {\r\n var self = this;\r\n var result = false;\r\n\r\n //Check for webgl support and if not, then fall back to leaflet\r\n if (!window.WebGLRenderingContext) {\r\n // Browser has no idea what WebGL is. Suggest they\r\n // get a new browser by presenting the user with link to\r\n // http://get.webgl.org\r\n result = false;\r\n } else {\r\n var canvas = document.createElement('canvas');\r\n\r\n var webglOptions = {\r\n alpha: false,\r\n stencil: false,\r\n failIfMajorPerformanceCaveat: true\r\n };\r\n\r\n try {\r\n var gl = canvas.getContext(\"webgl\", webglOptions) ||\r\n canvas.getContext(\"experimental-webgl\", webglOptions) ||\r\n canvas.getContext(\"webkit-3d\", webglOptions) ||\r\n canvas.getContext(\"moz-webgl\", webglOptions);\r\n if (!gl) {\r\n // We couldn't get a WebGL context without a major performance caveat. Let's see if we can get one at all.\r\n webglOptions.failIfMajorPerformanceCaveat = false;\r\n gl = canvas.getContext(\"webgl\", webglOptions) ||\r\n canvas.getContext(\"experimental-webgl\", webglOptions) ||\r\n canvas.getContext(\"webkit-3d\", webglOptions) ||\r\n canvas.getContext(\"moz-webgl\", webglOptions);\r\n if (!gl) {\r\n // No WebGL at all.\r\n result = false;\r\n } else {\r\n // We can do WebGL, but only with software rendering (or similar).\r\n result = 'slow';\r\n self.isSlower = true;\r\n }\r\n } else {\r\n // WebGL is good to go!\r\n result = true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (result === \"slow\" || !result) {\r\n var warning = result === \"slow\" ? \"threed.slowSupport.supported\" : \"threed.not.supported\";\r\n self.map.toast(self.getLocaleString(warning), {\r\n type: TC.Consts.msgType.WARNING,\r\n duration: 10000\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst ThreeDControl = TC.control.ThreeD;\r\nexport default ThreeDControl;","\r\n/**\r\n * Opciones del editor de capas WFS.\r\n * \r\n * Si se desea que este control pueda funcionar en sesiones sin acceso a Internet, es necesario instalar \r\n * en el ámbito de la aplicación que contiene el visor el _[Service Worker](https://developer.mozilla.org/es/docs/Web/API/Service_Worker_API)_ \r\n * creado para el funcionamiento de este control en modo desconectado.\r\n * Para ello basta con copiar el archivo [tc-cb-service-worker.js](https://raw.githubusercontent.com/sitna/api-sitna/master/TC/workers/tc-cb-service-worker.js) a la carpeta raíz de dicha aplicación.\r\n * @typedef WFSEditOptions\r\n * @extends ControlOptions\r\n * @see MapControlOptions\r\n * @property {HTMLElement|string} [div] - Elemento del DOM en el que crear el control o valor de atributo id de dicho elemento.\r\n * @property {ElevationOptions|boolean} [downloadElevation=false] - Si se establece a un valor verdadero, el control ofrecerá la opción de añadir elevaciones \r\n * a las geometrías cuando se descarguen las entidades.\r\n * @property {boolean} [highlightChanges=true] - Si se establece a un valor verdadero, se resaltarán en el mapa con estilo distintivo\r\n * las entidades modificadas, con un estilo distinto según el tipo de edición (entidad añadida, modificada o eliminada).\r\n * @property {boolean} [showOriginalFeatures=false] - Si se establece a un valor verdadero, se mostrarán en el mapa las entidades\r\n * modificadas junto con las mismas entidades antes de ser modificadas, para poder establecer comparaciones.\r\n * @property {boolean} [snapping=true] - Si se establece a un valor verdadero, la edición de geometrías tendrá un comportamiento \r\n * en el que los vértices se \"pegarán\" y alinearán con otros vértices y aristas al acercarlos a ellos, a la manera de imanes.\r\n * @property {StyleOptions} [styles] - Opciones de los estilos de las entidades editadas, por tipo de geometría.\r\n * @example [Ver en vivo](../examples/cfg.WFSEditOptions.html) {@lang html}\r\n *
                  \r\n * \r\n */\r\n\r\nimport localforage from 'localforage';\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport SWCacheClient from './SWCacheClient';\r\nimport Geometry from '../Geometry';\r\nimport Vector from '../layer/Vector';\r\nimport filter from '../filter';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.control.SWCacheClient = SWCacheClient;\r\nTC.Geometry = Geometry;\r\nTC.layer = TC.layer || {};\r\nTC.layer.Vector = Vector;\r\nTC.filter = filter;\r\n\r\n\r\nTC.control.WFSEdit = function () {\r\n const self = this;\r\n\r\n TC.control.SWCacheClient.apply(this, arguments);\r\n self.serviceWorkerIsRequired = self.options.serviceWorkerIsRequired || false;\r\n\r\n self._classSelector = '.' + self.CLASS;\r\n\r\n self.layer = null;\r\n //self.feature = self.options.feature ? self.options.feature : null;\r\n self.callback = TC.Util.isFunction(arguments[2]) ?\r\n arguments[2] :\r\n self.options.callback ? self.options.callback : null;\r\n self.layersEditData = {};\r\n self.showsOriginalFeatures = typeof self.options.showOriginalFeatures === 'boolean' ? self.options.showOriginalFeatures : false;\r\n self.highlightsAdded = self.highlightsModified = self.highlightsRemoved = typeof self.options.highlightChanges === 'boolean' ? self.options.highlightChanges : true;\r\n if (!TC.Util.isFunction(self.options.getBeforeEditLayerStyleFunction)) {\r\n self.getBeforeEditLayerStyleFunction = self.getBeforeEditLayerStyle;\r\n }\r\n self.styles = self.options.styles || {\r\n point: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1,\r\n radius: 6\r\n },\r\n line: {\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n },\r\n polygon: {\r\n fillColor: \"#0000aa\",\r\n fillOpacity: 0.1,\r\n strokeColor: \"#0000aa\",\r\n strokeWidth: 2,\r\n strokeOpacity: 1\r\n }\r\n };\r\n};\r\n\r\nTC.inherit(TC.control.WFSEdit, TC.control.SWCacheClient);\r\n\r\n(function () {\r\n var newFeatureIdNumber = 0;\r\n const getNewFeatureId = function () {\r\n return \"NewFeature.\" + newFeatureIdNumber++;\r\n };\r\n\r\n const setSyncState = function (ctl) {\r\n const layerEditData = ctl.getLayerEditData();\r\n ctl._saveBtn.disabled = !(navigator.onLine && layerEditData && layerEditData.checkedOut) || ctl.isSyncing;\r\n };\r\n\r\n const setEditState = function (ctl, enabled) {\r\n ctl.div.querySelector(ctl._classSelector + '-view').classList.toggle(TC.Consts.classes.HIDDEN, !enabled || !ctl.layer || !(ctl.layer.type === TC.Consts.layerType.WFS || ctl.layer.type === TC.Consts.layerType.WMS));\r\n if (ctl.layer && ctl.layer.wfsLayer) {\r\n const isLayerCropped = TC.filter && TC.filter.Bbox && ctl.layer.wfsLayer.properties instanceof TC.filter.Bbox;\r\n ctl._recropBtn.classList.toggle(TC.Consts.classes.HIDDEN, !isLayerCropped);\r\n }\r\n ctl.div.querySelector(ctl._classSelector + '-edit').classList.toggle(TC.Consts.classes.HIDDEN, !enabled);\r\n };\r\n\r\n const setChangesButtonsState = function (ctl) {\r\n setSyncState(ctl);\r\n const layerEditData = ctl.getLayerEditData();\r\n ctl._discardBtn.disabled = !layerEditData || !layerEditData.checkedOut;\r\n };\r\n\r\n const setChangedState = function (ctl, isChanged) {\r\n if (ctl.layer) {\r\n const layerEditData = ctl.getLayerEditData();\r\n if (typeof isChanged !== 'undefined') {\r\n layerEditData.checkedOut = isChanged;\r\n setChangesButtonsState(ctl);\r\n }\r\n else {\r\n var storagePrefix = getStoragePrefix(ctl);\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n var disabled = true;\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n if (keys[i].indexOf(storagePrefix) === 0) {\r\n disabled = false;\r\n break;\r\n }\r\n }\r\n layerEditData.checkedOut = !disabled;\r\n setChangesButtonsState(ctl);\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n setChangesButtonsState(ctl);\r\n }\r\n };\r\n\r\n const storeFeature = function (key, feature) {\r\n return new Promise(function (resolve, reject) {\r\n var obj;\r\n var geometryType;\r\n switch (true) {\r\n case feature instanceof TC.feature.Polygon:\r\n geometryType = TC.Consts.geom.POLYGON;\r\n break;\r\n case feature instanceof TC.feature.Polyline:\r\n geometryType = TC.Consts.geom.POLYLINE;\r\n break;\r\n case feature instanceof TC.feature.Point:\r\n geometryType = TC.Consts.geom.POINT;\r\n break;\r\n case feature instanceof TC.feature.MultiPolygon:\r\n geometryType = TC.Consts.geom.MULTIPOLYGON;\r\n break;\r\n case feature instanceof TC.feature.MultiPolyline:\r\n geometryType = TC.Consts.geom.MULTIPOLYLINE;\r\n break;\r\n }\r\n obj = {\r\n id: feature.id || feature.provId,\r\n attributes: feature.data,\r\n type: geometryType,\r\n geometry: feature.geometry\r\n };\r\n localforage.setItem(key, obj)\r\n .then(function () {\r\n resolve({ feature: feature });\r\n })\r\n .catch(function (error) {\r\n reject({ feature: feature, error: error });\r\n });\r\n });\r\n };\r\n\r\n\r\n const deleteFeature = function (key) {\r\n return new Promise(function (resolve, reject) {\r\n localforage.removeItem(key)\r\n .then(function () {\r\n resolve(key);\r\n })\r\n .catch(function (error) {\r\n reject(Error(error));\r\n });\r\n });\r\n };\r\n\r\n const readFeature = function (key) {\r\n return new Promise(function (resolve, reject) {\r\n localforage.getItem(key)\r\n .then(function (value) {\r\n resolve({\r\n key: key,\r\n feature: value\r\n });\r\n })\r\n .catch(function (error) {\r\n reject(error);\r\n });\r\n });\r\n };\r\n\r\n const getLayerStoreID = function (layer) {\r\n let featureType = layer.options.featureType[0];\r\n if (featureType.indexOf(':') < 0) {\r\n featureType = layer.options.featureNS + ':' + featureType;\r\n }\r\n return featureType + '@' + layer.options.url;\r\n };\r\n\r\n const getStoragePrefix = function (ctl, layer) {\r\n return ctl.LOCAL_STORAGE_KEY_PREFIX + getLayerStoreID(layer || ctl.layer.wfsLayer || ctl.layer);\r\n };\r\n\r\n const getAddedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_ADDED_KEY_PREFIX;\r\n };\r\n\r\n const getModifiedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_MODIFIED_KEY_PREFIX;\r\n };\r\n\r\n const getRemovedStoragePrefix = function (ctl, layer) {\r\n return getStoragePrefix(ctl, layer) + ctl.LOCAL_STORAGE_REMOVED_KEY_PREFIX;\r\n };\r\n\r\n const getLayerTitle = function (layer) {\r\n return layer.getPath ? layer.getPath().join(' • ') : layer.title || layer.id;\r\n };\r\n\r\n const ctlProto = TC.control.WFSEdit.prototype;\r\n\r\n ctlProto.CLASS = 'tc-ctl-wfsedit';\r\n\r\n ctlProto.template = {\"1\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"3\":function(container,depth0,helpers,partials,data) { return \" checked\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"featureEditing\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":29}}})) + \"

                  \\r\\n
                  \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
                  \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"featuresInEditedLayer\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":15,\"column\":20},\"end\":{\"line\":15,\"column\":52}}})) + \"
                  \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n
                  \\r\\n\";},\"useData\":true}\r\n\r\n ctlProto.LOCAL_STORAGE_KEY_PREFIX = \"TC.offline.edit.\";\r\n ctlProto.LOCAL_STORAGE_ADDED_KEY_PREFIX = \".added.\";\r\n ctlProto.LOCAL_STORAGE_MODIFIED_KEY_PREFIX = \".modified.\";\r\n ctlProto.LOCAL_STORAGE_REMOVED_KEY_PREFIX = \".removed.\";\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n\r\n return new Promise(function (resolve, _reject) {\r\n\r\n TC.control.SWCacheClient.prototype.register.call(self, map).then(function () {\r\n\r\n window.addEventListener('online', function () {\r\n setSyncState(self);\r\n });\r\n window.addEventListener('offline', function () {\r\n setSyncState(self);\r\n });\r\n\r\n self._editPromise = map.addControl('edit', {\r\n id: self.getUID(),\r\n div: self.div.querySelector(`.${self.CLASS}-edit`),\r\n styles: self.styles,\r\n downloadElevation: self.options.downloadElevation,\r\n snapping: self.options.snapping\r\n });\r\n self._editPromise.then(function (ctl) {\r\n self.editControl = ctl;\r\n\r\n self.editControl.getAvailableFeaturesToImport = function () {\r\n const candidates = Object.getPrototypeOf(self.editControl).getAvailableFeaturesToImport.call(self.editControl);\r\n const layerEditData = self.getLayerEditData();\r\n return candidates.filter(obj => {\r\n const layer = map.getLayer(obj.id);\r\n return layer !== layerEditData.addedFeaturesLayer &&\r\n layer !== layerEditData.modifiedFeaturesLayer &&\r\n layer !== layerEditData.removedFeaturesLayer &&\r\n layer !== layerEditData.beforeEditLayer;\r\n });\r\n };\r\n self.editControl.importFeatures = function (features) {\r\n const featuresToImport = features || this.featuresToImport || [];\r\n const layerEditData = self.getLayerEditData();\r\n const newFeatures = layerEditData.attributes ? featuresToImport.map(function (feature) {\r\n const properties = {};\r\n for (let key in layerEditData.attributes) {\r\n properties[key] = feature.data[key];\r\n }\r\n return new feature.constructor(feature.geometry, { geometryName: layerEditData.geometryName, data: properties });\r\n }) : features;\r\n Object.getPrototypeOf(self.editControl).importFeatures.call(self.editControl, newFeatures);\r\n };\r\n self.editControl\r\n .on(TC.Consts.event.DRAWEND, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureAdd(e.feature);\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREMODIFY, function (e) {\r\n const feat = e.feature;\r\n const fid = feat.provId || feat.id;\r\n const storeSuccess = function () {\r\n setChangedState(self, true);\r\n };\r\n const storeFailure = function () {\r\n TC.error(self.getLocaleString('failedWhenSavingModifyOperationInSession'));\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n let storedFeature = layerEditData.addedFeaturesLayer.getFeatureById(fid);\r\n if (storedFeature) {\r\n storedFeature.setCoords(feat.geometry);\r\n storedFeature.setData(feat.getData());\r\n storeFeature(getAddedStoragePrefix(self) + fid, feat).then(storeSuccess, storeFailure);\r\n }\r\n else {\r\n storedFeature = layerEditData.modifiedFeaturesLayer.getFeatureById(fid);\r\n if (storedFeature) {\r\n storedFeature.setCoords(feat.geometry);\r\n storedFeature.setData(feat.getData());\r\n }\r\n else {\r\n layerEditData.modifiedFeaturesLayer.addFeature(self._createAuxFeature(feat));\r\n }\r\n storeFeature(getModifiedStoragePrefix(self) + fid, feat).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREADD, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureAdd(e.feature);\r\n }\r\n })\r\n .on(TC.Consts.event.FEATUREREMOVE, function (e) {\r\n if (self.getLayerEditData().serializable) {\r\n self._storeFeatureRemove(e.feature);\r\n }\r\n });\r\n\r\n map.workLayers.forEach(layer => self.addLayer(layer));\r\n\r\n map\r\n .on(TC.Consts.event.LAYERUPDATE, function (e) {\r\n const layer = e.layer;\r\n if (layer.type === TC.Consts.layerType.WFS && !layer.options.readOnly) {\r\n self.getEditableLayer(layer)\r\n .then(l => self.cacheLayer(l))\r\n .catch(_err => console.log('Layer not editable: ' + layer.id));\r\n }\r\n })\r\n .on(TC.Consts.event.ZOOM, function (_e) {\r\n map.workLayers\r\n .filter(l => l.wfsLayer)\r\n .filter(l => self.layer !== l)\r\n .forEach(function (layer) {\r\n layer.wfsLayer = null;\r\n self.getEditableLayer(layer);\r\n });\r\n })\r\n .on(TC.Consts.event.LAYERADD, function (e) {\r\n self.addLayer(e.layer);\r\n })\r\n .on(TC.Consts.event.LAYERREMOVE, function (e) {\r\n const layer = e.layer;\r\n if (self._removingLayer === layer) {\r\n return;\r\n }\r\n if (self.layer === layer || layer.wmsLayer && self.layer === layer.wmsLayer) {\r\n self.setLayer(null);\r\n }\r\n const option = self._layerSelect.querySelector(`option[value=\"${layer.id}\"]`);\r\n if (option) {\r\n option.parentElement.removeChild(option);\r\n }\r\n })\r\n .on(TC.Consts.event.LAYERERROR, function (e) {\r\n const layer = e.layer;\r\n if (layer.type === TC.Consts.layerType.WFS && !layer.options.readOnly) {\r\n if (e.reason === TC.Consts.WFSErrors.MAX_NUM_FEATURES) {\r\n map.toast(self.getLocaleString('query.msgTooManyResults', { limit: e.data.limit }), { type: TC.Consts.msgType.WARNING });\r\n }\r\n if (self.layer === layer || self.layer && self.layer.wfsLayer === layer) {\r\n delete self.layersEditData[self.layer.id];\r\n self.setLayer(null);\r\n }\r\n if (layer.wmsLayer) {\r\n map.removeLayer(layer);\r\n layer.wmsLayer.wfsLayer = null;\r\n }\r\n }\r\n });\r\n\r\n resolve(self);\r\n });\r\n\r\n map.loaded(function () {\r\n self._layerSelect.disabled = false;\r\n\r\n if (self.options.layer) {\r\n self.setLayer(self.options.layer);\r\n }\r\n else {\r\n const wfsLayers = map.workLayers.filter(function (elm) {\r\n return elm.type === TC.Consts.layerType.WFS && !elm.options.stealth;\r\n });\r\n if (wfsLayers.length === 1) {\r\n self.setLayer(wfsLayers[0].id);\r\n }\r\n else {\r\n self.setLayer(null);\r\n }\r\n }\r\n\r\n self.showOriginalFeatures(self.showsOriginalFeatures);\r\n });\r\n\r\n map.ready(function () {\r\n map.getControlsByClass('TC.control.WorkLayerManager').forEach(function (ctl) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-edit';\r\n let button = container.querySelector('sitna-toggle.' + className);\r\n if (!button) {\r\n const text = self.getLocaleString('featureEditing');\r\n button = new Toggle();\r\n button.text = text;\r\n button.classList.add(className);\r\n button.checkedIconText = getComputedStyle(document.querySelector(':root'))\r\n .getPropertyValue('--icon-edit')\r\n .replaceAll('\"', '');\r\n button.uncheckedIconText = button.checkedIconText;\r\n button.dataset.layerId = layerId;\r\n const layer = map.getLayer(layerId);\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n button.classList.add(TC.Consts.classes.LOADING);\r\n layer.getWFSCapabilities()\r\n .catch(() => button.classList.add(TC.Consts.classes.HIDDEN))\r\n .finally(() => button.classList.remove(TC.Consts.classes.LOADING));\r\n }\r\n }\r\n return button;\r\n },\r\n updateEvents: [TC.Consts.event.BEFORELAYERUPDATE, TC.Consts.event.LAYERUPDATE, TC.Consts.event.LAYERERROR, TC.Consts.event.CONTROLACTIVATE, TC.Consts.event.CONTROLDEACTIVATE],\r\n updateFn: function (_e) {\r\n const button = this;\r\n const layer = map.getLayer(button.dataset.layerId);\r\n setTimeout(() => {\r\n button.classList.toggle(TC.Consts.classes.ACTIVE, self.layer === layer);\r\n }, 500);\r\n button.disabled = !layer || layer.isRaster() && layer.names.length !== 1;\r\n },\r\n actionFn: function () {\r\n const button = this;\r\n const layer = map.getLayer(button.dataset.layerId);\r\n const prevLayer = self.layer;\r\n button.classList.remove(TC.Consts.classes.ACTIVE);\r\n if (layer.names && layer.names.length === 1 || !layer.isRaster()) {\r\n if (layer && prevLayer !== layer) {\r\n self.setLayer(layer).then(() => {\r\n //button.classList.toggle(TC.Consts.classes.ACTIVE, self.layer === layer);\r\n self.openEditSession();\r\n });\r\n }\r\n else {\r\n self.setLayer(null);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n var editLayers = [];\r\n if (self.map) {\r\n for (var i = 0, len = self.map.workLayers.length; i < len; i++) {\r\n var wl = self.map.workLayers[i];\r\n if (wl.type === TC.Consts.layerType.WFS && !wl.options.stealth) {\r\n editLayers.push({\r\n id: wl.id,\r\n title: wl.title || wl.id\r\n });\r\n }\r\n }\r\n }\r\n return self._set1stRenderPromise(TC.Control.prototype.renderData.call(self, {\r\n layers: editLayers,\r\n showOriginalFeatures: self.showsOriginalFeatures,\r\n highlightChanges: self.highlightsAdded || self.highlightsModified || self.highlightsRemoved,\r\n controlId: self.id\r\n }, function () {\r\n\r\n self._layerDiv = self.div.querySelector(self._classSelector + '-layer');\r\n self._layerSelect = self._layerDiv.querySelector(self._classSelector + '-layer-sel');\r\n self._layerSelect.addEventListener('change', function (_e) {\r\n setEditState(self, false);\r\n self.getEditableLayer(self._layerSelect.value)\r\n .then(function (layer) {\r\n self.setLayer(layer.wmsLayer || layer).then(function () {\r\n if (self.layer) {\r\n self.openEditSession();\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n self.setLayer(null);\r\n });\r\n });\r\n\r\n const viewToolsDiv = self.div.querySelector(self._classSelector + '-view');\r\n\r\n self._editingWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-watch`);\r\n self._beforeEditLayerWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-original-watch`);\r\n self._addedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-added-watch`);\r\n self._modifiedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-modified-watch`);\r\n self._removedWatch = viewToolsDiv.querySelector(`.${self.CLASS}-view-removed-watch`);\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-original-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.showOriginalFeatures(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-added-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightAdded(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-modified-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightModified(e.target.checked);\r\n });\r\n\r\n viewToolsDiv.querySelector(`#${self.CLASS}-view-removed-cb-${self.id}`).addEventListener('change', function (e) {\r\n self.highlightRemoved(e.target.checked);\r\n });\r\n\r\n const colorRegExp = new RegExp(`${self.CLASS}-view-clr-(.+)-${self.id}`);\r\n const onColorClick = function (_e) {\r\n const input = this.parentElement.querySelector('input[type=color]');\r\n const layerEditData = self.getLayerEditData();\r\n const layer = layerEditData[input.id.match(colorRegExp)[1] + 'FeaturesLayer'];\r\n switch (layerEditData.geometryType) {\r\n case TC.Consts.geom.POINT:\r\n input.value = layer.styles.point.strokeColor;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n input.value = layer.styles.line.strokeColor;\r\n break;\r\n default:\r\n input.value = layer.styles.polygon.strokeColor;\r\n break;\r\n }\r\n input.click();\r\n };\r\n\r\n const onColorChange = function (e) {\r\n const input = e.target;\r\n const layerEditData = self.getLayerEditData();\r\n const prefix = input.id.match(colorRegExp)[1];\r\n const layer = layerEditData[prefix + 'FeaturesLayer'];\r\n const newColor = layerEditData[prefix + 'CustomColor'] = input.value;\r\n switch (layerEditData.geometryType) {\r\n case TC.Consts.geom.POINT:\r\n layer.styles.point.strokeColor = newColor;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n layer.styles.line.strokeColor = newColor;\r\n break;\r\n default:\r\n layer.styles.polygon.strokeColor = newColor;\r\n layer.styles.polygon.fillColor = newColor;\r\n break;\r\n }\r\n layer.setStyles(layer.styles);\r\n self[`_${prefix}Watch`].src = getLegendImage(layer, layerEditData.geometryType);\r\n };\r\n\r\n const addedColorInputId = `${self.CLASS}-view-clr-added-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${addedColorInputId}\"]`).addEventListener(TC.Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(addedColorInputId).addEventListener('change', onColorChange);\r\n\r\n const modifiedColorInputId = `${self.CLASS}-view-clr-modified-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${modifiedColorInputId}\"]`).addEventListener(TC.Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(modifiedColorInputId).addEventListener('change', onColorChange);\r\n\r\n const removedColorInputId = `${self.CLASS}-view-clr-removed-${self.id}`;\r\n viewToolsDiv.querySelector(`label[for=\"${removedColorInputId}\"]`).addEventListener(TC.Consts.event.CLICK, onColorClick, { passive: true });\r\n document.getElementById(removedColorInputId).addEventListener('change', onColorChange);\r\n\r\n self._saveBtn = self.div.querySelector(self._classSelector + '-btn-save');\r\n self._saveBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n TC.confirm(self.getLocaleString('edit.applyEdits.confirm', { layerTitle: getLayerTitle(self.layer) }), function () {\r\n self.applyEdits();\r\n });\r\n }, { passive: true });\r\n \r\n self._discardBtn = self.div.querySelector(self._classSelector + '-btn-discard');\r\n self._discardBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n TC.confirm(self.getLocaleString('edit.discardEdits.confirm', { layerTitle: getLayerTitle(self.layer) }), function () {\r\n self.discardEdits();\r\n });\r\n }, { passive: true });\r\n\r\n self._recropBtn = self.div.querySelector(`.${self.CLASS}-view button.${self.CLASS}-btn-crop`);\r\n self._recropBtn.addEventListener(TC.Consts.event.CLICK, function () {\r\n if (self.layer) {\r\n const reload = () => {\r\n if (self.layer && self.layer.wfsLayer && TC.filter && TC.filter.Bbox && self.layer.wfsLayer.properties instanceof TC.filter.Bbox) {\r\n const layerEditData = self.getLayerEditData();\r\n self.layer.wfsLayer.properties = new TC.filter.Bbox(null, self.map.getExtent(), self.map.getCRS());\r\n self.layer.wfsLayer.refresh();\r\n if (layerEditData.beforeEditLayer) {\r\n layerEditData.beforeEditLayer.properties = self.layer.wfsLayer.properties;\r\n layerEditData.beforeEditLayer.refresh();\r\n }\r\n }\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n const editedFeatures = layerEditData.addedFeaturesLayer.features.concat(layerEditData.modifiedFeaturesLayer.features, layerEditData.removedFeaturesLayer.features);\r\n if (editedFeatures.length) {\r\n let featuresOutside = false;\r\n const extent = self.map.getExtent();\r\n const bbox = [[extent[0], extent[1]], [extent[0], extent[3]], [extent[2], extent[3]], [extent[2], extent[1]]];\r\n for (var i = 0, ii = editedFeatures.length; i < ii; i++) {\r\n if (!TC.Geometry.intersects(editedFeatures[i].geometry, bbox)) {\r\n featuresOutside = true;\r\n break;\r\n }\r\n }\r\n if (featuresOutside) {\r\n TC.confirm(self.getLocaleString('refreshLayerToCurrentExtent.confirm'), function () {\r\n reload();\r\n });\r\n }\r\n else {\r\n reload();\r\n }\r\n }\r\n else {\r\n reload();\r\n }\r\n \r\n }\r\n }, { passive: true });\r\n\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n }));\r\n };\r\n\r\n ctlProto.addLayer = function (layer) {\r\n const self = this;\r\n const appendOption = function (layer) {\r\n const option = document.createElement('option');\r\n option.setAttribute('value', layer.id);\r\n option.innerHTML = getLayerTitle(layer);\r\n self.renderPromise().then(function () {\r\n self._layerSelect.appendChild(option);\r\n });\r\n };\r\n if (!layer.isBase && !layer.options.readOnly && !layer.options.stealth) {\r\n self.getEditableLayer(layer)\r\n .then(function (l) {\r\n // Añadimos opción cuando es una capa WMS con WFS asociado o una capa WFS independiente\r\n if (layer.isRaster() || !l.wmsLayer) {\r\n appendOption(layer);\r\n }\r\n })\r\n .catch((err) => console.log(`Layer ${layer.id} not editable. Reason: ${err.message}`));\r\n }\r\n };\r\n\r\n ctlProto.setLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n\r\n const map = self.map;\r\n const selector = self.div.querySelector(self._classSelector + '-layer-sel');\r\n\r\n layer = map.getLayer(layer);\r\n const mapLayer = map.workLayers.filter(l => l === layer)[0];\r\n\r\n const setNewLayer = function () {\r\n if (mapLayer) {\r\n self.getEditableLayer(mapLayer)\r\n .then(function (editableLayer) {\r\n const endProcess = function () {\r\n self.layer = mapLayer;\r\n self._enableEditSerialization(mapLayer)\r\n .then(function () {\r\n self.getEditControl().then(c => {\r\n selector.value = self.layer.id;\r\n c.setMode(null);\r\n c.setLayer(editableLayer);\r\n resolve(self.layer);\r\n });\r\n })\r\n .catch((err) => {\r\n self.setLayer(null);\r\n reject(err);\r\n });\r\n };\r\n\r\n if (map.workLayers.indexOf(editableLayer) >= 0) {\r\n endProcess();\r\n }\r\n else {\r\n map.addLayer(editableLayer).then(endProcess);\r\n }\r\n })\r\n .catch(() => {\r\n self.setLayer(null);\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n if (self.layer && self.layer.wfsLayer) {\r\n self._removingLayer = self.layer.wfsLayer;\r\n }\r\n self.getEditControl().then(c => {\r\n setEditState(self, false);\r\n //setChangedState(self, false);\r\n self.closeEditSession()\r\n .then(() => {\r\n selector.value = '';\r\n c.setMode(null);\r\n c.setLayer(null);\r\n self.layer = null;\r\n resolve(null);\r\n })\r\n .finally(() => {\r\n delete self._removingLayer;\r\n });\r\n });\r\n }\r\n };\r\n\r\n if (layer === null || !self.layer) {\r\n setNewLayer();\r\n }\r\n else {\r\n if (self.layer.wfsLayer) {\r\n self._removingLayer = self.layer.wfsLayer;\r\n }\r\n self.closeEditSession().then(() => {\r\n if (mapLayer) {\r\n setNewLayer();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctlProto._storeFeatureAdd = function (feature) {\r\n const self = this;\r\n feature.provId = getNewFeatureId();\r\n const layerEditData = self.getLayerEditData();\r\n const newFeature = self._createAuxFeature(feature);\r\n layerEditData.addedFeaturesLayer.addFeature(newFeature);\r\n storeFeature(getAddedStoragePrefix(self) + feature.provId, newFeature).then(function () {\r\n setChangedState(self, true);\r\n //self.map.toast(self.getLocaleString('addOperationSavedInSession'));\r\n }, function () {\r\n TC.error(self.getLocaleString('failedWhenSavingAddOperationInSession'));\r\n });\r\n };\r\n\r\n ctlProto._storeFeatureRemove = function (feature) {\r\n const self = this;\r\n var fid = feature.provId || feature.id;\r\n var storeSuccess = function () {\r\n setChangedState(self);\r\n //self.map.toast(self.getLocaleString('removeOperationSavedInSession'));\r\n };\r\n var storeFailure = function () {\r\n TC.error(self.getLocaleString('failedWhenSavingRemoveOperationInSession'));\r\n };\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n let storedFeature = layerEditData.addedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n var removedStoragePrefix = getRemovedStoragePrefix(self);\r\n storedFeature = layerEditData.modifiedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n storedFeature = layerEditData.removedFeaturesLayer.getFeatureById(fid);\r\n if (!storedFeature) {\r\n layerEditData.removedFeaturesLayer.addFeature(self._createAuxFeature(feature));\r\n storeFeature(removedStoragePrefix + fid, feature).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n else {\r\n layerEditData.modifiedFeaturesLayer.removeFeature(storedFeature);\r\n layerEditData.removedFeaturesLayer.addFeature(self._createAuxFeature(feature));\r\n deleteFeature(getModifiedStoragePrefix(self) + fid).then(function () {\r\n storeSuccess();\r\n storeFeature(removedStoragePrefix + fid, feature).then(storeSuccess, storeFailure);\r\n }, storeFailure);\r\n }\r\n }\r\n else {\r\n layerEditData.addedFeaturesLayer.removeFeature(storedFeature);\r\n deleteFeature(getAddedStoragePrefix(self) + fid).then(storeSuccess, storeFailure);\r\n }\r\n }\r\n };\r\n\r\n ctlProto._createAuxFeature = function (feature) {\r\n const self = this;\r\n const fid = feature.provId || feature.id;\r\n const layerEditData = self.getLayerEditData();\r\n const result = new feature.constructor(feature.geometry, { geometryName: layerEditData.geometryName, data: feature.getData() });\r\n result.setStyle(null);\r\n result.setId(fid);\r\n return result;\r\n };\r\n\r\n ctlProto.getEditControl = function () {\r\n const self = this;\r\n return self._editPromise || new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(() => resolve(self.editControl));\r\n });\r\n };\r\n\r\n ctlProto.cacheLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n self.getServiceWorker().then(async function () {\r\n if (navigator.onLine) {\r\n const gfUrl = layer.wrap.getGetFeatureUrl();\r\n const dftUrl = await layer.getDescribeFeatureTypeUrl();\r\n if (gfUrl && dftUrl) {\r\n self.createCache(getStoragePrefix(self, layer), {\r\n urlList: [gfUrl, dftUrl]\r\n }).then(() => resolve(), error => reject(error));\r\n }\r\n else {\r\n resolve();\r\n }\r\n }\r\n else {\r\n resolve();\r\n }\r\n }).catch(error => reject(error));\r\n });\r\n };\r\n\r\n ctlProto.getFeatureType = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n layer = layer || self.layer;\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n layer.describeFeatureType()\r\n .then(function (attributes) {\r\n self.getEditControl().then(function (editControl) {\r\n const layerEditData = self.getLayerEditData(layer);\r\n // recogemos los atributos no geométricos y definimos la geometría\r\n layerEditData.attributes = {};\r\n let key;\r\n for (key in attributes) {\r\n const attr = attributes[key];\r\n const geometryType = editControl.getGeometryType(attr.type);\r\n if (geometryType) {\r\n layerEditData.geometryName = attr.name;\r\n layerEditData.geometryType = typeof geometryType === 'boolean' ? null : geometryType;\r\n }\r\n else {\r\n layerEditData.attributes[key] = attr;\r\n }\r\n }\r\n for (key in layerEditData.attributes) {\r\n const attr = layerEditData.attributes[key];\r\n attr.type = attr.type.substr(attr.type.indexOf(':') + 1);\r\n }\r\n resolve(layerEditData);\r\n });\r\n })\r\n .catch(function (err) {\r\n reject(err);\r\n })\r\n .finally(() => li && li.removeWait(waitId));\r\n });\r\n };\r\n\r\n ctlProto._addAuxLayersToMap = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n const map = self.map;\r\n layer = layer || self.layer;\r\n const layerEditData = self.getLayerEditData(layer);\r\n const beLayer = layerEditData.beforeEditLayer;\r\n if (beLayer) {\r\n const afLayer = layerEditData.addedFeaturesLayer;\r\n const mfLayer = layerEditData.modifiedFeaturesLayer;\r\n const rfLayer = layerEditData.removedFeaturesLayer;\r\n Promise.all([\r\n map.addLayer(beLayer),\r\n map.addLayer(afLayer),\r\n map.addLayer(mfLayer),\r\n map.addLayer(rfLayer)\r\n ]).then(function () {\r\n self.getEditableLayer(layer).then(function (editableLayer) {\r\n let idx = map.layers.indexOf(editableLayer);\r\n beLayer.setVisibility(self.showsOriginalFeatures);\r\n afLayer.setVisibility(self.highlightsAdded);\r\n mfLayer.setVisibility(self.highlightsModified);\r\n rfLayer.setVisibility(self.highlightsRemoved);\r\n map.insertLayer(beLayer, ++idx, function () {\r\n const newIdx = idx + 1;\r\n map.insertLayer(afLayer, newIdx);\r\n map.insertLayer(mfLayer, newIdx);\r\n map.insertLayer(rfLayer, newIdx);\r\n\r\n beLayer.setStyles(self.getBeforeEditLayerStyle(editableLayer));\r\n afLayer.setStyles(self.getAddedFeaturesLayerStyle(editableLayer));\r\n mfLayer.setStyles(self.getModifiedFeaturesLayerStyle(editableLayer));\r\n rfLayer.setStyles(self.getRemovedFeaturesLayerStyle(editableLayer));\r\n self._editingWatch.src = getLegendImage(editableLayer, layerEditData.geometryType);\r\n self._beforeEditLayerWatch.src = getLegendImage(beLayer, layerEditData.geometryType);\r\n self._addedWatch.src = getLegendImage(afLayer, layerEditData.geometryType);\r\n self._modifiedWatch.src = getLegendImage(mfLayer, layerEditData.geometryType);\r\n self._removedWatch.src = getLegendImage(rfLayer, layerEditData.geometryType);\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n else {\r\n reject(new Error(`No auxiliary layers for ${layer.id}`));\r\n }\r\n });\r\n };\r\n\r\n ctlProto.openEditSession = function () {\r\n const self = this;\r\n if (!self.layer) {\r\n return Promise.reject(Error('No layer set for editing'));\r\n }\r\n return new Promise(function (resolve, reject) {\r\n\r\n self.getFeatureType() // Obtenemos datos de los atributos y la geometría\r\n .then(function (layerEditData) {\r\n\r\n self.getEditControl().then(function (editControl) {\r\n self.getEditableLayer(self.layer).then(function (editableLayer) {\r\n editControl.setLayer(editableLayer);\r\n switch (layerEditData.geometryType) {\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n editControl.setComplexGeometry(true);\r\n break;\r\n default:\r\n editControl.setComplexGeometry(false);\r\n break;\r\n }\r\n editControl.activate();\r\n setEditState(self, true);\r\n setChangedState(self);\r\n\r\n const modes = [TC.control.Edit.mode.MODIFY, TC.control.Edit.mode.OTHER];\r\n switch (layerEditData.geometryType) {\r\n case TC.Consts.geom.POINT:\r\n modes.push(TC.control.Edit.mode.ADDPOINT);\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n modes.push(TC.control.Edit.mode.ADDLINE);\r\n //modes.push(TC.control.Edit.mode.CUT);\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n modes.push(TC.control.Edit.mode.ADDPOLYGON);\r\n //modes.push(TC.control.Edit.mode.CUT);\r\n break;\r\n default:\r\n break;\r\n }\r\n editControl.constrainModes(modes);\r\n editControl.setMode(TC.control.Edit.mode.MODIFY);\r\n\r\n self._addAuxLayersToMap()\r\n .then(() => resolve())\r\n .catch((err) => reject(err));\r\n });\r\n });\r\n })\r\n .catch(function (err) {\r\n if (self.layer && self.layer.type === TC.Consts.layerType.VECTOR) {\r\n self.getEditControl().then(function (editControl) {\r\n editControl.activate();\r\n setEditState(self, true);\r\n editControl.setMode(TC.control.Edit.mode.MODIFY);\r\n resolve();\r\n });\r\n }\r\n else {\r\n reject(err);\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.closeEditSession = function () {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.renderPromise().then(function () {\r\n setChangedState(self, false);\r\n self.getEditControl().then(c => c.deactivate());\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.beforeEditLayer) {\r\n self._editingWatch.src = TC.Consts.BLANK_IMAGE;\r\n self._beforeEditLayerWatch.src = TC.Consts.BLANK_IMAGE;\r\n self._addedWatch.src = TC.Consts.BLANK_IMAGE;\r\n self._modifiedWatch.src = TC.Consts.BLANK_IMAGE;\r\n self._removedWatch.src = TC.Consts.BLANK_IMAGE;\r\n const previousLayer = self.layer;\r\n self.getEditableLayer(self.layer).then(function (editableLayer) {\r\n const removePromises = [];\r\n const removeLayer = function (layer) {\r\n if (self.map.workLayers.indexOf(layer) >= 0) {\r\n removePromises.push(self.map.removeLayer(layer));\r\n }\r\n };\r\n removeLayer(layerEditData.beforeEditLayer);\r\n removeLayer(layerEditData.beforeEditLayer);\r\n removeLayer(layerEditData.addedFeaturesLayer);\r\n removeLayer(layerEditData.modifiedFeaturesLayer);\r\n removeLayer(layerEditData.removedFeaturesLayer);\r\n if (previousLayer !== editableLayer) {\r\n previousLayer.wfsLayer = null;\r\n removeLayer(editableLayer);\r\n }\r\n Promise.all(removePromises).then(() => resolve());\r\n });\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getEditableLayer = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n const notEditableErrorMsg = `Layer ${layer.id} not editable`;\r\n const map = self.map;\r\n layer = map ? map.getLayer(layer) : layer;\r\n if (layer) {\r\n if (layer.type === TC.Consts.layerType.WFS && (layer.wmsLayer || !layer.options.stealth && !layer.options.readOnly)) {\r\n layer.getCapabilitiesPromise().then(() => resolve(layer));\r\n }\r\n else if (layer.type === TC.Consts.layerType.WMS) {\r\n if (layer.wfsLayer) {\r\n layer.wfsLayer.getCapabilitiesPromise().then(() => resolve(layer.wfsLayer));\r\n }\r\n else {\r\n layer.getWFSCapabilities()\r\n .then(async function (capabilities) {\r\n //comprobamos que la solo es una capa y existe en el capabilities del WFS\r\n const layers = layer.getDisgregatedLayerNames();\r\n const fullLayerName = layers[0];\r\n const colonIdx = fullLayerName.indexOf(':');\r\n const shortLayerName = fullLayerName.substring(colonIdx + 1);\r\n const prefix = 'Edicion'; //fullLayerName.substr(0, colonIdx + 1);\r\n if (layers.length !== 1 || Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, shortLayerName)) {\r\n const wfsLayerOptions = {\r\n id: self.getUID(),\r\n type: TC.Consts.layerType.WFS,\r\n url: await layer.getWFSURL(),\r\n properties: map ? new TC.filter.Bbox(null, map.getExtent(), map.getCRS()) : null,\r\n outputFormat: TC.Consts.format.JSON,\r\n title: `${layer.getPath().join(' • ')} - ${self.getLocaleString('featureEditing')}`,\r\n geometryName: 'geom',\r\n featureType: [fullLayerName],\r\n featureNS: prefix,\r\n styles: self.styles,\r\n stealth: true\r\n };\r\n layer.wfsLayer = new TC.layer.Vector(wfsLayerOptions);\r\n layer.wfsLayer.wmsLayer = layer;\r\n resolve(layer.wfsLayer);\r\n }\r\n else {\r\n reject(new Error(notEditableErrorMsg));\r\n }\r\n })\r\n .catch((err) => reject(err));\r\n }\r\n }\r\n else if (layer.type === TC.Consts.layerType.VECTOR) {\r\n resolve(layer);\r\n }\r\n else {\r\n reject(new Error(notEditableErrorMsg));\r\n }\r\n }\r\n else {\r\n reject(new Error('No layer to edit'));\r\n }\r\n });\r\n };\r\n\r\n ctlProto.isLayerEdited = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n const storagePrefix = getStoragePrefix(self, layer);\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n resolve(keys.some(key => key.indexOf(storagePrefix) === 0));\r\n }\r\n else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.getLayerEditData = function (optionalLayer) {\r\n const self = this;\r\n const layer = optionalLayer || self.layer;\r\n if (!layer) {\r\n return null;\r\n }\r\n return self.layersEditData[layer.id] = self.layersEditData[layer.id] || {\r\n checkedOut: false\r\n };\r\n };\r\n\r\n const getLegendImage = function (layer, geometryType) {\r\n switch (geometryType) {\r\n case TC.Consts.geom.POINT:\r\n case TC.Consts.geom.MULTIPOINT:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.point, { geometryType: TC.Consts.geom.POINT });\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.line, { geometryType: TC.Consts.geom.POLYLINE });\r\n default:\r\n return TC.Util.getLegendImageFromStyle(layer.styles.polygon, { geometryType: TC.Consts.geom.POLYGON });\r\n }\r\n };\r\n\r\n ctlProto._enableEditSerialization = function (layer) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n self.getEditableLayer(layer)\r\n .then(function (editableLayer) {\r\n\r\n const endProcess = function () {\r\n const layerEditData = self.getLayerEditData(layer);\r\n\r\n const baseTitle = getLayerTitle(layer);\r\n\r\n var beforeEditLayer = layerEditData.beforeEditLayer;\r\n if (!beforeEditLayer) {\r\n beforeEditLayer = layerEditData.beforeEditLayer = new TC.layer.Vector(TC.Util.extend({}, editableLayer.options, {\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('dataBeforeEdits')}`,\r\n readOnly: true,\r\n owner: self,\r\n stealth: true\r\n }));\r\n }\r\n\r\n var addedFeaturesLayer = layerEditData.addedFeaturesLayer;\r\n let aflIsOld = true;\r\n if (!addedFeaturesLayer) {\r\n aflIsOld = false;\r\n addedFeaturesLayer = layerEditData.addedFeaturesLayer = new TC.layer.Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('addedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n var modifiedFeaturesLayer = layerEditData.modifiedFeaturesLayer;\r\n let mflIsOld = true;\r\n if (!modifiedFeaturesLayer) {\r\n mflIsOld = false;\r\n modifiedFeaturesLayer = layerEditData.modifiedFeaturesLayer = new TC.layer.Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('modifiedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n var removedFeaturesLayer = layerEditData.removedFeaturesLayer;\r\n let rflIsOld = true;\r\n if (!removedFeaturesLayer) {\r\n rflIsOld = false;\r\n removedFeaturesLayer = layerEditData.removedFeaturesLayer = new TC.layer.Vector({\r\n id: self.getUID(),\r\n title: `${baseTitle} - ${self.getLocaleString('removedFeatures')}`,\r\n owner: self,\r\n stealth: true,\r\n zIndex: 2\r\n });\r\n }\r\n\r\n const featurePromises = [];\r\n if (aflIsOld && mflIsOld && rflIsOld) {\r\n // Existen de antes las capas de adiciones, modificaciones y eliminaciones. Leemos de ahí.\r\n removedFeaturesLayer.features.forEach(function (removedFeature) {\r\n const f = editableLayer.getFeatureById(removedFeature.id);\r\n if (f) {\r\n editableLayer.removeFeature(f);\r\n }\r\n });\r\n modifiedFeaturesLayer.features.forEach(function (modifiedFeature) {\r\n const f = editableLayer.getFeatureById(modifiedFeature.id);\r\n if (f) {\r\n f.setCoords(modifiedFeature.geometry);\r\n f.setData(modifiedFeature.getData());\r\n }\r\n });\r\n addedFeaturesLayer.features.forEach(function (addedFeature) {\r\n if (!editableLayer.getFeatureById(addedFeature.id)) {\r\n featurePromises.push(editableLayer.addFeature(self._createAuxFeature(addedFeature)));\r\n }\r\n });\r\n Promise.all(featurePromises).then(() => {\r\n layerEditData.serializable = true;\r\n resolve(editableLayer);\r\n });\r\n }\r\n else {\r\n // Las capas de adiciones, modificaciones y eliminaciones son nuevas. Leemos de local storage.\r\n const storagePrefix = getStoragePrefix(self, editableLayer);\r\n const addedStoragePrefix = getAddedStoragePrefix(self, editableLayer);\r\n const modifiedStoragePrefix = getModifiedStoragePrefix(self, editableLayer);\r\n const removedStoragePrefix = getRemovedStoragePrefix(self, editableLayer);\r\n //var li = map.getLoadingIndicator();\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n keys\r\n .filter(key => key.indexOf(storagePrefix) === 0)\r\n .forEach(function (key) {\r\n //li && li.addWait(uid);\r\n featurePromises.push(new Promise(function (res, _rej) {\r\n readFeature(key).then(function (obj) {\r\n var id;\r\n var k = obj.key;\r\n if (k.indexOf(removedStoragePrefix) === 0) {\r\n id = k.substr(removedStoragePrefix.length);\r\n const feature = editableLayer.getFeatureById(id);\r\n editableLayer.removeFeature(feature);\r\n removedFeaturesLayer.addFeature(feature).then(() => res(feature));\r\n //li && li.removeWait(uid);\r\n }\r\n else if (k.indexOf(modifiedStoragePrefix) === 0) {\r\n id = k.substr(modifiedStoragePrefix.length);\r\n const feature = editableLayer.getFeatureById(id);\r\n if (feature) {\r\n feature.setCoords(obj.feature.geometry);\r\n feature.setData(obj.feature.attributes);\r\n const newFeature = feature.clone();\r\n newFeature.setId(feature.id);\r\n modifiedFeaturesLayer.addFeature(newFeature).then(() => res(feature));\r\n //li && li.removeWait(uid);\r\n }\r\n else {\r\n res(feature);\r\n }\r\n }\r\n else if (k.indexOf(addedStoragePrefix) === 0) {\r\n id = k.substr(addedStoragePrefix.length);\r\n var idNumber = parseInt(id.substr(id.lastIndexOf('.') + 1));\r\n newFeatureIdNumber = Math.max(newFeatureIdNumber, idNumber + 1);\r\n var addPromise;\r\n switch (obj.feature.type) {\r\n case TC.Consts.geom.POINT:\r\n addPromise = editableLayer.addPoint(obj.feature.geometry);\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n addPromise = editableLayer.addPolyline(obj.feature.geometry);\r\n break;\r\n case TC.Consts.geom.POLYGON:\r\n addPromise = editableLayer.addPolygon(obj.feature.geometry);\r\n break;\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n addPromise = editableLayer.addMultiPolyline(obj.feature.geometry);\r\n break;\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n addPromise = editableLayer.addMultiPolygon(obj.feature.geometry);\r\n break;\r\n default:\r\n break;\r\n }\r\n addPromise.then(function (feat) {\r\n //feat.setStyle(TC.Util.extend({}, layer.styles.line, layer.styles.polygon));\r\n feat.provId = id;\r\n feat.setData(obj.feature.attributes);\r\n const newFeat = feat.clone();\r\n newFeat.setStyle(null);\r\n newFeat.setId(feat.provId);\r\n addedFeaturesLayer.addFeature(newFeat).then(() => res(newFeat));\r\n //li && li.removeWait(uid);\r\n });\r\n }\r\n });\r\n }));\r\n });\r\n }\r\n Promise.all(featurePromises).then(() => {\r\n layerEditData.serializable = true;\r\n resolve(editableLayer);\r\n });\r\n });\r\n }\r\n };\r\n\r\n if (editableLayer.type === TC.Consts.layerType.WFS) {\r\n if (editableLayer.state === TC.Layer.state.IDLE) {\r\n endProcess();\r\n }\r\n else {\r\n const onLayerUpdate = function (e) {\r\n if (e.layer === editableLayer) {\r\n endProcess();\r\n self.map.off(TC.Consts.event.LAYERUPDATE, onLayerUpdate);\r\n }\r\n };\r\n self.map.on(TC.Consts.event.LAYERUPDATE, onLayerUpdate);\r\n }\r\n }\r\n else {\r\n resolve(editableLayer);\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctlProto.applyEdits = function () {\r\n const self = this;\r\n if (self.layer) {\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n self.isSyncing = true;\r\n setSyncState(self);\r\n const li = self.map.getLoadingIndicator();\r\n const waitId = li && li.addWait();\r\n // Copiamos modificadas para ponerle el nombre de atributo de geometría descrito en DescribeFeatureType.\r\n const modified = layerEditData.modifiedFeaturesLayer.features.map(function (feature) {\r\n const result = new feature.constructor(feature.geometry, { geometryName: layerEditData.geometryName });\r\n const unmodifiedFeature = layerEditData.beforeEditLayer.features.filter(f => f.id === feature.id)[0];\r\n let newData;\r\n if (unmodifiedFeature) {\r\n newData = {};\r\n for (var key in feature.data) {\r\n if (key !== 'id') {\r\n const oldValue = unmodifiedFeature.data[key];\r\n const newValue = feature.data[key];\r\n if (oldValue !== newValue) {\r\n newData[key] = newValue;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n newData = feature.data;\r\n }\r\n result.setData(newData);\r\n result.setId(feature.id);\r\n return result;\r\n });\r\n self.getEditableLayer(self.layer)\r\n .then(function (l) {\r\n l.applyEdits(layerEditData.addedFeaturesLayer.features, modified, layerEditData.removedFeaturesLayer.features)\r\n .then(function (response) {\r\n // SONDA DE PRUEBA, BORRAR EN PRO //\r\n if (response.transactionSummary.totalInserted !== layerEditData.addedFeaturesLayer.features.length ||\r\n response.transactionSummary.totalUpdated !== modified.length ||\r\n response.transactionSummary.totalDeleted !== layerEditData.removedFeaturesLayer.features.length) {\r\n TC.error(\"Error de concordancia de número de entidades en transacción\");\r\n console.log(response, layerEditData.addedFeaturesLayer, modified, layerEditData.removedFeaturesLayer);\r\n throw new Error(`Error en transacción: Insertados ${response.transactionSummary.totalInserted}, hay ${layerEditData.addedFeaturesLayer.features.length} en capa`);\r\n }\r\n ////////////////////////////////////\r\n if (self.layer.type === TC.Consts.layerType.WMS) {\r\n self.layer.refresh();\r\n }\r\n self.deleteCache(getStoragePrefix(self)).then(function () {\r\n self.cacheLayer(l).finally(function () {\r\n self.isSyncing = false;\r\n li && li.removeWait(waitId);\r\n // Las acciones a realizar a partir de este punto son las mismas que al descartar una edición\r\n self.discardEdits();\r\n self.map.toast(self.getLocaleString('changesSuccessfullySyncedWithServer'), { type: TC.Consts.msgType.INFO });\r\n });\r\n });\r\n })\r\n .catch(function (obj) {\r\n self.isSyncing = false;\r\n setSyncState(self);\r\n li && li.removeWait(waitId);\r\n TC.error(self.getLocaleString('errorSyncingChanges', { code: obj.code, reason: obj.reason }), [TC.Consts.msgErrorMode.TOAST, TC.Consts.msgErrorMode.CONSOLE]);\r\n });\r\n });\r\n }\r\n }\r\n };\r\n\r\n ctlProto.discardEdits = function () {\r\n var self = this;\r\n self._joinedFeatureAttributes = [];\r\n var storagePrefix = getStoragePrefix(self);\r\n localforage.keys().then(function (keys) {\r\n if (keys) {\r\n for (var i = 0, len = keys.length; i < len; i++) {\r\n var key = keys[i];\r\n if (key.indexOf(storagePrefix) === 0) {\r\n localforage.removeItem(key);\r\n }\r\n }\r\n if (self.layer) {\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData.serializable) {\r\n layerEditData.addedFeaturesLayer.clearFeatures();\r\n layerEditData.modifiedFeaturesLayer.clearFeatures();\r\n layerEditData.removedFeaturesLayer.clearFeatures();\r\n self.editControl.setSelectedFeatures([]);\r\n self.editControl.modifyControl.closeAttributes();\r\n self.getEditableLayer(self.layer).then(l => l.refresh());\r\n }\r\n }\r\n setChangedState(self, false);\r\n }\r\n });\r\n self.editControl.setMode(null);\r\n };\r\n\r\n ctlProto.showOriginalFeatures = function (show) {\r\n const self = this;\r\n self.showsOriginalFeatures = show;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData) {\r\n layerEditData.beforeEditLayer.setVisibility(show);\r\n }\r\n };\r\n\r\n ctlProto.highlightAdded = function (highlight) {\r\n const self = this;\r\n self.highlightsAdded = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.addedFeaturesLayer) {\r\n layerEditData.addedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n ctlProto.highlightModified = function (highlight) {\r\n const self = this;\r\n self.highlightsModified = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.modifiedFeaturesLayer) {\r\n layerEditData.modifiedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n ctlProto.highlightRemoved = function (highlight) {\r\n const self = this;\r\n self.highlightsRemoved = highlight;\r\n const layerEditData = self.getLayerEditData();\r\n if (layerEditData && layerEditData.removedFeaturesLayer) {\r\n layerEditData.removedFeaturesLayer.setVisibility(highlight);\r\n }\r\n };\r\n\r\n const getStyleFromFeatureType = function (ctl, layer) {\r\n const result = {};\r\n const layerEditData = ctl.getLayerEditData(layer.wmsLayer || layer);\r\n switch (layerEditData.geometryType) {\r\n case TC.Consts.geom.POLYGON:\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n result.polygon = layer.map.options.styles.polygon;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n result.line = layer.map.options.styles.line;\r\n break;\r\n default:\r\n result.point = layer.map.options.styles.point;\r\n break;\r\n }\r\n return result;\r\n };\r\n\r\n ctlProto.getBeforeEditLayerStyle = function (layer) {\r\n const self = this;\r\n const getNegativeColor = function (color) {\r\n const rgba = layer.wrap.getRGBA(color);\r\n for (var i = 0; i < 3; i++) {\r\n rgba[i] = 255 - rgba[i];\r\n }\r\n return '#' + (rgba[0] * 65536 + rgba[1] * 256 + rgba[2]).toString(16).padStart(6, '0');\r\n };\r\n\r\n const dash = [1, 3];\r\n const result = TC.Util.extend(true, {}, layer.options.styles || getStyleFromFeatureType(self, layer));\r\n if (result.point) {\r\n result.point.strokeColor = getNegativeColor(result.point.strokeColor);\r\n result.point.lineDash = dash;\r\n }\r\n if (result.line) {\r\n result.line.strokeColor = getNegativeColor(result.line.strokeColor);\r\n result.line.lineDash = dash;\r\n }\r\n if (result.polygon) {\r\n result.polygon.strokeColor = getNegativeColor(result.polygon.strokeColor);\r\n result.polygon.lineDash = dash;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const colorizeLayer = function (ctl, layer, color) {\r\n const result = TC.Util.extend(true, {}, layer.options.styles || getStyleFromFeatureType(ctl, layer));\r\n if (result.point) {\r\n result.point.strokeColor = color;\r\n result.point.fillColor = color;\r\n }\r\n if (result.line) {\r\n result.line.strokeColor = color;\r\n }\r\n if (result.polygon) {\r\n result.polygon.strokeColor = color;\r\n result.polygon.fillColor = color;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n ctlProto.getAddedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.addedCustomColor || '#00ff00');\r\n };\r\n\r\n ctlProto.getModifiedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.modifiedCustomColor || '#ff7f00');\r\n };\r\n\r\n ctlProto.getRemovedFeaturesLayerStyle = function (layer) {\r\n const self = this;\r\n const layerEditData = self.getLayerEditData(layer.wmsLayer || layer);\r\n return colorizeLayer(self, layer, layerEditData.removedCustomColor || '#ff0000');\r\n };\r\n\r\n})();\r\n\r\nconst WFSEdit = TC.control.WFSEdit;\r\nexport default WFSEdit;","/// \r\n\r\n/**\r\n * Opciones de control de consultas.\r\n * \r\n * Algunos servidores tienen servicios WMS y WFS que actúan en paralelo, es decir, están alojados dentro del mismo nombre de host y publican las mismas capas.\r\n * Si el control `WFSQuery` está en el mapa, verifica si las capas de servicios WMS están asociadas a un WFS paralelo. Si es así, ofrece un interfaz de usuario\r\n * para poder hacer consultas a la capa en base a los valores de las propiedades de los elementos de la capa. Esta interfaz de usuario es accesible desde el control\r\n * `workLayerManager`.\r\n * @typedef WFSQueryOptions\r\n * @see MapControlOptions\r\n * @property {StyleOptions} [styles] - Opciones de estilo de las geometrías de las entidades resultado de la consulta.\r\n * @property {StyleOptions} [highlightStyles] - Opciones de estilo de las geometrías de las entidades resaltadas.\r\n * @example [Ver en vivo](../examples/cfg.WFSQueryOptions.html) {@lang html}\r\n *
                  \r\n * \r\n */\r\n\r\nTC.control = TC.control || {};\r\n\r\n/*pollyfill*/\r\n\r\nif (typeof Object.assign !== 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target, _varArgs) { // .length of function is 2\r\n 'use strict';\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n\r\n\r\nimport TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport Control from '../Control';\r\nimport infoShare from './infoShare';\r\nimport filter from '../filter';\r\nimport autocomplete from '../ui/autocomplete';\r\n//cargo los objetos features, si no, no resaltara las geometrías\r\nimport Feature from '../Feature';\r\nimport Point from '../feature/Point';\r\nimport Polyline from '../feature/Polyline';\r\nimport Polygon from '../feature/Polygon';\r\nimport MultiPolyline from '../feature/MultiPolyline';\r\nimport MultiPolygon from '../feature/MultiPolygon';\r\nimport Button from '../../SITNA/ui/Button';\r\n\r\nTC.control = TC.control || {};\r\nTC.control.infoShare = infoShare;\r\nTC.UI = TC.UI || {};\r\nTC.UI.autocomplete = autocomplete;\r\nTC.Control = Control;\r\nTC.Consts = Consts;\r\nTC.filter = filter;\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\nTC.feature.Point = Point;\r\nTC.feature.Polyline = Polyline;\r\nTC.feature.Polygon = Polygon;\r\nTC.feature.MultiPolyline = MultiPolyline;\r\nTC.feature.MultiPolygon = MultiPolygon;\r\n\r\nTC.control.WFSQuery = function (_options) {\r\n var self = this;\r\n\r\n TC.Control.apply(this, arguments);\r\n\r\n self._dialogDiv = TC.Util.getDiv(self.options.dialogDiv);\r\n if (!self.options.dialogDiv) {\r\n document.body.appendChild(self._dialogDiv);\r\n }\r\n\r\n self.exportsState = true;\r\n\r\n self.styles = self.options.styles;\r\n self.highlightStyles = self.options.highlightStyles || self.options.highLightStyles;\r\n self.download = self.options.download;\r\n self.resultsPanel = null;\r\n self.geometryPanel = null;\r\n self.filters = [];\r\n self.deletedFeatures = [];\r\n self.styles = TC.Util.extend(true, {\r\n polygon: {\r\n strokeColor: self.DEFAULT_STROKE_COLOR,\r\n strokeWidth: 2, fillColor: \"#000\",\r\n fillOpacity: 0.3\r\n },\r\n line: {\r\n strokeColor: self.DEFAULT_STROKE_COLOR,\r\n strokeWidth: 2, fillColor: \"#000\"\r\n }\r\n }, self.options.styles);\r\n\r\n const cs = '.' + self.CLASS;\r\n self._selectors = {\r\n ELEVATION_CHECKBOX: cs + '-dialog-elev input[type=checkbox]',\r\n INTERPOLATION_RADIO: 'input[type=radio][name=finfo-ip-coords]',\r\n INTERPOLATION_DISTANCE: cs + '-dialog-ip-m'\r\n };\r\n};\r\n\r\nTC.inherit(TC.control.WFSQuery, TC.Control);\r\nTC.mix(TC.control.WFSQuery, TC.control.infoShare);\r\n\r\n(function () {\r\n const ctlProto = TC.control.WFSQuery.prototype;\r\n ctlProto.DEFAULT_STROKE_COLOR = '#0000ff';\r\n\r\n const loadingCssClass = TC.Consts.classes.LOADING;\r\n const hiddenCssClass = TC.Consts.classes.HIDDEN;\r\n const spatialCssClass = 'tc-spatial';\r\n var modalBody = null;\r\n var timer = null;\r\n var timerAutocomplete = null;\r\n var controller = null;\r\n var locale = null;\r\n\r\n const empty = function (node) {\r\n if (node)\r\n while (node.children.length) {\r\n node.removeChild(node.children[0]);\r\n }\r\n };\r\n\r\n const getTemplateObjFromFilter = function (ctl, filter) {\r\n const isSpatial = filter instanceof TC.filter.Spatial;\r\n return {\r\n field: isSpatial ? ctl.getLocaleString('geometry') : filter.propertyName,\r\n opText: ctl.getLocaleString(filterByOperation[filter._abbr].key),\r\n valueToShow: filter._valueToShow,\r\n isSpatial: isSpatial\r\n };\r\n };\r\n\r\n const filterByOperation = {\r\n eq: {\r\n Ctor: TC.filter.equalTo,\r\n key: 'query.equalTo'\r\n },\r\n neq: {\r\n Ctor: TC.filter.notEqualTo,\r\n key: 'query.notEqualTo'\r\n },\r\n gt: {\r\n Ctor: TC.filter.greaterThan,\r\n key: 'query.greaterThan'\r\n },\r\n lt: {\r\n Ctor: TC.filter.lessThan,\r\n key: 'query.lowerThan'\r\n },\r\n gte: {\r\n Ctor: TC.filter.greaterThanOrEqualTo,\r\n key: 'query.greaterThanOrEqualTo'\r\n },\r\n lte: {\r\n Ctor: TC.filter.lessThanOrEqualTo,\r\n key: 'query.lowerThanOrEqualTo'\r\n },\r\n contains: {\r\n Ctor: TC.filter.like,\r\n key: 'query.contains'\r\n },\r\n starts: {\r\n Ctor: TC.filter.like,\r\n key: 'query.startsBy'\r\n },\r\n ends: {\r\n Ctor: TC.filter.like,\r\n key: 'query.endsBy'\r\n },\r\n btw: {\r\n Ctor: TC.filter.between,\r\n key: 'query.equalTo'\r\n },\r\n nbtw: {\r\n key: 'query.notEqualTo'\r\n },\r\n intersects: {\r\n Ctor: TC.filter.like,\r\n key: 'query.intersects'\r\n },\r\n within: {\r\n Ctor: TC.filter.between,\r\n key: 'query.within'\r\n },\r\n empty: {\r\n Ctor: TC.filter.equalTo,\r\n key: 'query.empty'\r\n },\r\n null: {\r\n Ctor: TC.filter.isNull,\r\n key: 'query.empty'\r\n }\r\n };\r\n\r\n var _currentLayer = null;\r\n var _currentLayerName = null;\r\n var _currentLayercapabilities = null;\r\n var _currentLayerTitle = null;\r\n var _currentLayerURL = null;\r\n var _getStyles = function () { return null; };\r\n var _getHighLightStyles = function () { return null; };\r\n var getLocaleString = null;\r\n var type = null;\r\n ctlProto.CLASS = 'tc-ctl-wfsquery';\r\n\r\n ctlProto.template = {};\r\n ctlProto.template[ctlProto.CLASS + \"-dialog\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n \\r\\n
                  \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n

                  \" + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,\"layerName\") : depth0), depth0)) + \"

                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias2,lookupProperty(helpers,\"gt\").call(alias2,((stack1 = (depth0 != null ? lookupProperty(depth0,\"layers\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),1,{\"name\":\"gt\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":18},\"end\":{\"line\":10,\"column\":38}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":12},\"end\":{\"line\":19,\"column\":19}}})) != null ? stack1 : \"\") + \"
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n
                  \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-form\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(data && lookupProperty(data,\"key\")),\"FEATURE\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":22},\"end\":{\"line\":6,\"column\":41}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":12},\"end\":{\"line\":8,\"column\":23}}})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { return \" class=\\\"tc-ctl-wfsquery-opt-geom\\\"\";},\"6\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" (\" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"geometry\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":129},\"end\":{\"line\":7,\"column\":148}}})) + \")\";},\"8\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"query.noAttributes\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":60},\"end\":{\"line\":12,\"column\":89}}})) + \"
                  \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"countif\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"attributes\") : depth0),\"FEATURE\",{\"name\":\"countif\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":40}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(8, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":4},\"end\":{\"line\":13,\"column\":11}}})) != null ? stack1 : \"\") + \" \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n
                  \\r\\n
                  \\r\\n
                  \\r\\n \\r\\n \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n \\r\\n \\r\\n \\r\\n
                    \\r\\n
                    \\r\\n \\r\\n
                    \\r\\n
                    \\r\\n \\r\\n \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n\";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-filter\"] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"field\") : depth0), depth0)) + \" \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"opText\") : depth0), depth0)) + \" \" + alias2(lookupProperty(helpers,\"formatNumber\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"valueToShow\") : depth0),(depths[1] != null ? lookupProperty(depths[1],\"locale\") : depths[1]),{\"name\":\"formatNumber\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":35},\"end\":{\"line\":3,\"column\":73}}})) + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"isSpatial\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":73},\"end\":{\"line\":3,\"column\":182}}})) != null ? stack1 : \"\") + \"\\r\\n
                    \\r\\n
                    \t\\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"conditions\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":9}}})) != null ? stack1 : \"\");},\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-table\"] = {\"1\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"startsWith\").call(alias1,depth0,\"h3_\",{\"name\":\"startsWith\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":18},\"end\":{\"line\":4,\"column\":41}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(2, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":9,\"column\":19}}})) != null ? stack1 : \"\");},\"2\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"startsWith\").call(alias1,depth0,\"h4_\",{\"name\":\"startsWith\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":18},\"end\":{\"line\":5,\"column\":41}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":8,\"column\":19}}})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(container.lambda(depth0, depth0)) + \"\\r\\n\";},\"4\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" title=\\\"\" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"wfs.QuerySortTitle\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":34},\"end\":{\"line\":6,\"column\":63}}})) + \"\\\" class=\\\"tc-ctl-wfsquery-results-sortable\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,depth0,((stack1 = (depths[1] != null ? lookupProperty(depths[1],\"sort\") : depths[1])) != null ? lookupProperty(stack1,\"field\") : stack1),{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":110},\"end\":{\"line\":6,\"column\":133}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":104},\"end\":{\"line\":6,\"column\":250}}})) != null ? stack1 : \"\") + \"\\\" \";},\"5\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depths[1] != null ? lookupProperty(depths[1],\"sort\") : depths[1])) != null ? lookupProperty(stack1,\"order\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0, blockParams, depths),\"inverse\":container.program(8, data, 0, blockParams, depths),\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":136},\"end\":{\"line\":6,\"column\":243}}})) != null ? stack1 : \"\");},\"6\":function(container,depth0,helpers,partials,data) { return \"tc-ctl-wfsquery-results-sorting-asc\";},\"8\":function(container,depth0,helpers,partials,data) { return \"tc-ctl-wfsquery-results-sorting-desc\";},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":16,\"column\":12},\"end\":{\"line\":26,\"column\":21}}})) != null ? stack1 : \"\") + \" \\r\\n\";},\"11\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"index\") : depth0), depth0));},\"13\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda((data && lookupProperty(data,\"index\")), depth0));},\"15\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(data && lookupProperty(data,\"key\")),\"index\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":17,\"column\":22},\"end\":{\"line\":17,\"column\":39}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":17,\"column\":12},\"end\":{\"line\":25,\"column\":23}}})) != null ? stack1 : \"\");},\"16\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"startsWith\").call(alias1,(data && lookupProperty(data,\"key\")),\"h3_\",{\"name\":\"startsWith\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":22},\"end\":{\"line\":18,\"column\":45}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(17, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":12},\"end\":{\"line\":24,\"column\":23}}})) != null ? stack1 : \"\");},\"17\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"startsWith\").call(alias1,(data && lookupProperty(data,\"key\")),\"h4_\",{\"name\":\"startsWith\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":22},\"end\":{\"line\":19,\"column\":45}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":19,\"column\":12},\"end\":{\"line\":23,\"column\":23}}})) != null ? stack1 : \"\");},\"18\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-val\"),depth0,{\"name\":\"tc-ctl-finfo-attr-val\",\"hash\":{\"value\":depth0,\"name\":(data && lookupProperty(data,\"key\"))},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \" \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data,blockParams,depths) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"columns\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":8},\"end\":{\"line\":10,\"column\":17}}})) != null ? stack1 : \"\") + \"\\r\\n\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"results\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(10, data, 0, blockParams, depths),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":14,\"column\":8},\"end\":{\"line\":28,\"column\":13}}})) != null ? stack1 : \"\") + \" \\r\\n
                    \\r\\n\";},\"usePartial\":true,\"useData\":true,\"useDepths\":true}\r\n ctlProto.template[\"tc-ctl-finfo-attr-val\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-video\"),depth0,{\"name\":\"tc-ctl-finfo-attr-video\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isImageAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isImageAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":10},\"end\":{\"line\":4,\"column\":39}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(6, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":16,\"column\":11}}})) != null ? stack1 : \"\");},\"4\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-image\"),depth0,{\"name\":\"tc-ctl-finfo-attr-image\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"6\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isAudioAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isAudioAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":14},\"end\":{\"line\":7,\"column\":43}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.program(9, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":8},\"end\":{\"line\":15,\"column\":15}}})) != null ? stack1 : \"\");},\"7\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-audio\"),depth0,{\"name\":\"tc-ctl-finfo-attr-audio\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"9\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isEmbedAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isEmbedAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":18},\"end\":{\"line\":10,\"column\":47}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(10, data, 0),\"inverse\":container.program(12, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":12},\"end\":{\"line\":14,\"column\":19}}})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-attr-embed\"),depth0,{\"name\":\"tc-ctl-finfo-attr-embed\",\"hash\":{\"value\":(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),\"name\":(depth0 != null ? lookupProperty(depth0,\"name\") : depth0)},\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"12\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),null,{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":26},\"end\":{\"line\":13,\"column\":41}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":16},\"end\":{\"line\":13,\"column\":86}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isVideoAttribute\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),(depth0 != null ? lookupProperty(depth0,\"value\") : depth0),{\"name\":\"isVideoAttribute\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":6},\"end\":{\"line\":1,\"column\":35}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(3, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":17,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[\"tc-ctl-finfo-object\"] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":4},\"end\":{\"line\":41,\"column\":13}}})) != null ? stack1 : \"\") + \" \\r\\n
                    \\r\\n\";},\"2\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":18},\"end\":{\"line\":5,\"column\":33}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(10, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":8},\"end\":{\"line\":40,\"column\":19}}})) != null ? stack1 : \"\");},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"eq\").call(alias1,(data && lookupProperty(data,\"key\")),\"_content_\",{\"name\":\"eq\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":18},\"end\":{\"line\":7,\"column\":39}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":7,\"column\":12},\"end\":{\"line\":14,\"column\":19}}})) != null ? stack1 : \"\") + \" \\r\\n\";},\"4\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isEmpty\").call(alias1,depth0,{\"name\":\"isEmpty\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":26},\"end\":{\"line\":8,\"column\":40}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":16},\"end\":{\"line\":10,\"column\":27}}})) != null ? stack1 : \"\");},\"5\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n\";},\"7\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \" + container.escapeExpression(container.lambda((data && lookupProperty(data,\"key\")), depth0)) + \"\\r\\n \" + ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,lookupProperty(helpers,\"isEmpty\").call(alias1,depth0,{\"name\":\"isEmpty\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":61},\"end\":{\"line\":13,\"column\":75}}}),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":51},\"end\":{\"line\":13,\"column\":119}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"8\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"10\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + container.escapeExpression(container.lambda((data && lookupProperty(data,\"key\")), depth0)) + \"\\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":22},\"end\":{\"line\":20,\"column\":37}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.program(13, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":20,\"column\":16},\"end\":{\"line\":35,\"column\":23}}})) != null ? stack1 : \"\") + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"
                    \\r\\n \\r\\n \\r\\n\";},\"11\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \\r\\n
                    \\r\\n \\r\\n
                    \\r\\n\";},\"13\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isArray\").call(alias1,depth0,{\"name\":\"isArray\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":26},\"end\":{\"line\":27,\"column\":40}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":27,\"column\":20},\"end\":{\"line\":33,\"column\":27}}})) != null ? stack1 : \"\") + \" \\r\\n\";},\"14\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n
                    \\r\\n
                    \\r\\n\";},\"16\":function(container,depth0,helpers,partials,data) { return \"
                    \\r\\n\";},\"18\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isArray\").call(alias1,depth0,{\"name\":\"isArray\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":10},\"end\":{\"line\":45,\"column\":24}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(22, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":45,\"column\":4},\"end\":{\"line\":68,\"column\":11}}})) != null ? stack1 : \"\");},\"19\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n \\r\\n
                    \\r\\n \\r\\n
                    \\r\\n \\r\\n \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":53,\"column\":16},\"end\":{\"line\":57,\"column\":25}}})) != null ? stack1 : \"\") + \" \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n\";},\"20\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \" \\r\\n \" + ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-finfo-object\"),depth0,{\"name\":\"tc-ctl-finfo-object\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n\";},\"22\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isUrl\").call(alias1,depth0,{\"name\":\"isUrl\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":14},\"end\":{\"line\":63,\"column\":26}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.program(25, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":8},\"end\":{\"line\":67,\"column\":15}}})) != null ? stack1 : \"\");},\"23\":function(container,depth0,helpers,partials,data) { var alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + alias1(lookupProperty(helpers,\"i18n\").call(alias2,\"open\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":70},\"end\":{\"line\":64,\"column\":85}}})) + \"\\r\\n\";},\"25\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"formatDateOrNumber\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"formatDateOrNumber\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":66,\"column\":0},\"end\":{\"line\":66,\"column\":30}}})) != null ? stack1 : \"\") + \"\\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,lookupProperty(helpers,\"isObject\").call(alias1,depth0,{\"name\":\"isObject\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":6},\"end\":{\"line\":1,\"column\":21}}}),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":69,\"column\":7}}})) != null ? stack1 : \"\");},\"usePartial\":true,\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-geom\"] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n
                    \\r\\n \\r\\n
                    \";},\"useData\":true}\r\n ctlProto.template[ctlProto.CLASS + \"-share-dialog\"] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n

                    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"query.tooltipMagnifBtn\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":16},\"end\":{\"line\":5,\"column\":49}}})) + \" - \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"share\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":5,\"column\":52},\"end\":{\"line\":5,\"column\":68}}})) + \"

                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n
                    \\r\\n\\r\\n\\r\\n\";},\"useData\":true}\r\n\r\n\r\n var checkInput = function (type) {\r\n var input = document.createElement(\"input\");\r\n input.setAttribute(\"type\", type);\r\n return input.type == type;\r\n };\r\n\r\n var _loadDatePolyFill = function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (typeof IMask !== \"undefined\") {\r\n setTimeout(function () {\r\n resolve();\r\n }, 10);\r\n }\r\n else {\r\n TC.loadJS(true,\r\n [TC.apiLocation + '/lib/polyfill/IMask' + (TC.isDebug ? '' : '.min') + '.js'],\r\n function () {\r\n console.log(\"Imask loaded\");\r\n resolve();\r\n });\r\n }\r\n });\r\n };\r\n var _loadNumberPolyFill = function () {\r\n return new Promise(function (resolve, _reject) {\r\n if (typeof IMask !== \"undefined\") {\r\n setTimeout(function () {\r\n resolve();\r\n }, 10);\r\n }\r\n else {\r\n TC.loadJS(true,\r\n [TC.apiLocation + '/lib/polyfill/IMask' + (TC.isDebug ? '' : '.min') + '.js'],\r\n function () {\r\n console.log(\"Imask loaded\");\r\n resolve();\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _getValue = function (input) {\r\n if (inputMaskNumber) {\r\n return inputMaskNumber.unmaskedValue;\r\n\r\n } else if (dateInputMask) {\r\n //si es texto con mascara de fecha convertierto la fecha de dd/mm/yyyy a yyyy-mm-dd\r\n return dateInputMask.unmaskedValue.substring(4) + \"-\" + dateInputMask.unmaskedValue.substring(2, 4) + \"-\" + dateInputMask.unmaskedValue.substring(0, 2);\r\n }\r\n return input.value;//en el resto de los casos la devuelvo tal cual\r\n\r\n };\r\n var _getValueToShow = function (input) {\r\n if (inputMaskNumber) {\r\n return inputMaskNumber.value;\r\n }\r\n else if (dateInputMask) {\r\n //si es de tipo date devolvemos la fecha en formato dd/mm/yyyy\r\n return dateInputMask.value;\r\n }\r\n else if (input.type === \"date\") {\r\n return new Date(input.value).toLocaleDateString(locale, { timeZone: \"UTC\" });\r\n }\r\n else if (input.type === \"number\") {\r\n var dotOrComma = 1.1.toLocaleString(locale).substring(1, 2);\r\n return input.value.replace(\".\", dotOrComma);\r\n }\r\n return input.value;//en el resto de los casos la devuelvo tal cual\r\n\r\n };\r\n var dateInputMask = null;\r\n var inputMaskNumber = null;\r\n var _createDateMask = function (txtBox) {\r\n if (checkInput(\"date\"))\r\n txtBox.type = \"date\";\r\n else {\r\n txtBox.type = \"search\";\r\n _loadDatePolyFill().then(function () {\r\n //construir el polyfill\r\n dateInputMask = new IMask(txtBox, {\r\n mask: Date,\r\n pattern: !locale || locale === \"es-ES\" ?\r\n 'd/`m/`Y'\r\n : locale === \"eu-ES\" ? 'Y/`m/`d' : 'm/`d/`Y',\r\n lazy: false,\r\n format: function (date) {\r\n var day = date.getDate();\r\n var month = date.getMonth() + 1;\r\n var year = date.getFullYear();\r\n if (day < 10) day = \"0\" + day;\r\n if (month < 10) month = \"0\" + month;\r\n switch (locale) {\r\n case \"eu-ES\":\r\n return [year, month, day].join('/');\r\n case \"en-US\":\r\n return [month, day, year].join('/');\r\n case \"es-ES\":\r\n default:\r\n return [day, month, year].join('/');\r\n }\r\n\r\n },\r\n // define str -> date convertion\r\n parse: function (str) {\r\n switch (locale) {\r\n case \"eu-ES\":\r\n return new Date(str.split('/')[1] + \"/\" + str.split('/')[2] + \"/\" + str.split('/')[0]);\r\n case \"en-US\":\r\n return new Date(str);\r\n case \"es-ES\":\r\n default:\r\n return new Date(str.split('/')[1] + \"/\" + str.split('/')[0] + \"/\" + str.split('/')[2]);\r\n }\r\n\r\n },\r\n blocks: {\r\n d: {\r\n mask: IMask.MaskedRange,\r\n from: 1,\r\n to: 31,\r\n maxLength: 2\r\n },\r\n m: {\r\n mask: IMask.MaskedRange,\r\n from: 1,\r\n to: 12,\r\n maxLength: 2\r\n },\r\n Y: {\r\n mask: IMask.MaskedRange,\r\n from: 1900,\r\n to: 9999\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n var _destroyDateMask = function () {\r\n if (dateInputMask) {\r\n var input = dateInputMask.el.input;\r\n dateInputMask.destroy();\r\n dateInputMask = null;\r\n input.value = \"\";\r\n input.type = \"search\";\r\n }\r\n };\r\n var destroyNumberMask = function () {\r\n if (inputMaskNumber) {\r\n var input = inputMaskNumber.el.input;\r\n inputMaskNumber.destroy();\r\n inputMaskNumber = null;\r\n input.value = \"\";\r\n input.type = \"search\";\r\n }\r\n };\r\n\r\n let _internalGetDataTypes;\r\n var _getDataTypes = function () {\r\n return _internalGetDataTypes();\r\n };\r\n\r\n var _manageComplexTypes = function (type, form) {\r\n\r\n var html = '';\r\n html += '';\r\n for (var key in type) {\r\n if (!type[key].type || TC.Util.isGeometry(type[key].type)) continue;\r\n html += '';\r\n }\r\n var container = document.createElement(\"div\");\r\n container.insertAdjacentHTML('beforeend', '');\r\n this.parentNode.parentNode.insertBefore(container, this.parentNode.nextSibling).firstElementChild.addEventListener(\"change\", function () {\r\n _changeAttributeEvent.apply(this, [form, type]);\r\n });\r\n\r\n };\r\n\r\n const _changeAttributeEvent = function (form, data) {\r\n //borrar los hijos\t\t\r\n var combo = this;\r\n combo.parentElement.parentElement.querySelectorAll(\"select\").forEach(function (element) {\r\n if (combo.offsetTop < element.offsetTop) {\r\n element.parentElement.parentElement.removeChild(element.parentElement);\r\n }\r\n });\r\n\r\n const numericSection = form.querySelector(`.${ctlProto.CLASS}-numeric`);\r\n const textSection = form.querySelector(`.${ctlProto.CLASS}-text`);\r\n const dateSection = form.querySelector(`.${ctlProto.CLASS}-date`);\r\n const geomSection = form.querySelector(`.${ctlProto.CLASS}-geom`);\r\n const whereSection = form.querySelector(`.${ctlProto.CLASS}-where`);\r\n const opSection = form.querySelector(`.${ctlProto.CLASS}-op`);\r\n var valueField = whereSection.querySelector(\".tc-textbox\");\r\n valueField.disabled = false;\r\n if (valueField.dataset.autocomplete) {\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n }\r\n numericSection.classList.add(hiddenCssClass);\r\n dateSection.classList.add(hiddenCssClass);\r\n textSection.classList.add(hiddenCssClass);\r\n geomSection.classList.add(hiddenCssClass);\r\n whereSection.classList.add(hiddenCssClass);\r\n if (!data[this.selectedOptions[0].value.substring(this.selectedOptions[0].value.indexOf(\":\") + 1)]) {\r\n opSection.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n type = data[this.selectedOptions[0].value.substring(this.selectedOptions[0].value.indexOf(\":\") + 1)].type;\r\n opSection.classList.remove(hiddenCssClass);\r\n TC.UI.autocomplete.call(valueField, \"destroy\");\r\n //$(valueField).unbind(\"keydown\");\r\n destroyNumberMask();\r\n valueField.type = \"search\";\r\n switch (true) {\r\n case !type:\r\n console.log(\"type es nulo\");\r\n break;\r\n case type instanceof Object:\r\n _manageComplexTypes.apply(this, [type, form]);\r\n break;\r\n case TC.Util.isGeometry(type):\r\n geomSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.add(spatialCssClass);\r\n\r\n if (geomSection.querySelectorAll(\"input:checked\").length === 0) {\r\n geomSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n //const value = [].slice.call(form.querySelectorAll('select[name=' + this.name + ']')).reduce(function (vi, va) { return vi + (vi ? \"/\" : \"\") + va.value; }, \"\");\r\n //_autocompleteConstructor(valueField, value, form.getElementsByClassName(ctlProto.CLASS + \"-list tc-ctl-search-list\")[0]);\r\n break;\r\n case type.indexOf(\"int\") >= 0:\r\n case type.indexOf(\"float\") >= 0:\r\n case type.indexOf(\"double\") >= 0:\r\n case type.indexOf(\"long\") >= 0:\r\n case type.indexOf(\"decimal\") >= 0:\r\n numericSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (numericSection.querySelectorAll(\"input:checked\").length === 0) {\r\n numericSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n\r\n if (checkInput(\"number\")) {\r\n if (TC.Util.detectIE()) {\r\n valueField.type = \"text\";\r\n _loadNumberPolyFill().then(function () {\r\n inputMaskNumber = new IMask(valueField, {\r\n mask: Number, // enable number mask\r\n scale: type.indexOf(\"int\") >= 0 || type.indexOf(\"long\") >= 0 ? 0 : 2, // digits after point, 0 for integers\r\n signed: false, // disallow negative\r\n thousandsSeparator: locale && locale === \"en-US\" ? ',' : '.', // any single char\r\n padFractionalZeros: false, // if true, then pads zeros at end to the length of scale\r\n normalizeZeros: true, // appends or removes zeros at ends\r\n radix: locale && locale === \"en-US\" ? '.' : ',' // fractional delimiter\r\n });\r\n });\r\n }\r\n else {\r\n valueField.type = \"number\";\r\n if (type.indexOf(\"int\") >= 0 || type.indexOf(\"long\") >= 0)\r\n valueField.step = \"1\";\r\n else\r\n valueField.step = \"0.0001\";\r\n }\r\n }\r\n break;\r\n case type.indexOf(\"dateTime\") >= 0:\r\n case type.indexOf(\"date\") >= 0:\r\n\r\n dateSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (dateSection.querySelectorAll(\"input:checked\").length === 0) {\r\n dateSection.firstElementChild.checked = true;\r\n }\r\n _createDateMask(valueField);\r\n break;\r\n case type.indexOf(\"string\") >= 0: {\r\n textSection.classList.remove(hiddenCssClass);\r\n whereSection.classList.remove(hiddenCssClass, spatialCssClass);\r\n\r\n if (textSection.querySelectorAll(\"input:checked\").length === 0) {\r\n textSection.firstElementChild.checked = true;\r\n }\r\n _destroyDateMask();\r\n const value = [].slice.call(form.querySelectorAll('select[name=' + this.name + ']')).reduce(function (vi, va) { return vi + (vi ? \"/\" : \"\") + va.value; }, \"\");\r\n _autocompleteConstructor(valueField, value, form.getElementsByClassName(ctlProto.CLASS + \"-list tc-ctl-search-list\")[0]);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const _renderFilterConditions = function (ctl) {\r\n const form = ctl.getForm();\r\n const whereDiv = form.querySelector(`.${ctl.CLASS}-where-list`);\r\n empty(whereDiv);\r\n ctlProto.getRenderedHtml(ctl.CLASS + \"-filter\", {\r\n conditions: ctl.filters.map(f => getTemplateObjFromFilter(ctl, f)),\r\n locale: ctl.map.options.locale\r\n }, function (html) {\r\n whereDiv.innerHTML = html;\r\n whereDiv.querySelectorAll(`.${ctl.CLASS}-where-cond-view`).forEach(function (btn, idx) {\r\n btn.addEventListener(TC.Consts.event.CLICK, function () {\r\n ctl.map.zoomToFeatures([ctl.filters.filter(f => f instanceof TC.filter.Spatial)[idx].geometry]);\r\n ctl.showGeometryPanel();\r\n }, { passive: true });\r\n });\r\n form.querySelectorAll(`.${ctl.CLASS}-del-cond`).forEach(function (btn, idx) {\r\n btn.addEventListener(TC.Consts.event.CLICK, function () {\r\n ctl.removeFilter(idx);\r\n }, { passive: true });\r\n });\r\n });\r\n };\r\n\r\n var _validate = function (form) {\r\n const self = this;\r\n var option = form.querySelector('.tc-ctl-wfsquery input[type=\"radio\"]:checked');\r\n\r\n if (dateInputMask && !dateInputMask.masked.isComplete) {\r\n if (/^(?=\\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\\x20|$))|(?:2[0-8]|1\\d|0?[1-9]))([-.\\/])(?:1[012]|0?[1-9])\\1(?:1[6-9]|[2-9]\\d)?\\d\\d(?:(?=\\x20\\d)\\x20|$))?(((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\x20[AP]M))|([01]\\d|2[0-3])(:[0-5]\\d){1,2})?$/.test(str) === false)\r\n _showMessage.call(self, \"Fecha \" + str + \" inválida\", TC.Consts.msgType.ERROR);\r\n return false;\r\n }\r\n if (option.length === 0) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoCondition\"));\r\n return false;\r\n }\r\n if (form.querySelectorAll('input[type=\\'date\\']').length && !form.querySelector('input[type=\\'date\\']').checkValidity()) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidDate\"));\r\n return false;\r\n }\r\n var number;\r\n if (form.querySelectorAll('input[type=\\'number\\']').length && (number = form.querySelector('input[type=\\'number\\']')) !== null && !number.checkValidity()) {\r\n if (number.step === \"1\")\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidNumberMustInt\"));\r\n else\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValidNumber\"));\r\n return false;\r\n }\r\n if (form.querySelector('input.tc-textbox').value.trim() === \"\" && (option.value !== \"empty\" && option.value !== \"null\")) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoValueCondition\"));\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n const _getLayerName = () => _currentLayerTitle;\r\n\r\n var _createResultPanel = function (layerName) {\r\n const self = this;\r\n var _layerName = layerName;\r\n var _downloadClickHandler = function (_self, layerName) {\r\n const self = _self;\r\n self.getDownloadDialog().then(function (control) {\r\n var options = {\r\n title: layerName()\r\n };\r\n if (self.map.elevation || self.options.displayElevation) {\r\n options = Object.assign({}, options, {\r\n elevation: Object.assign({}, self.map.elevation && self.map.elevation.options, self.options.displayElevation)\r\n });\r\n }\r\n\r\n control.open(self.resultsLayer.features, options);\r\n });\r\n };\r\n return new Promise(async function (resolve) {\r\n if (!self.resultsPanel) {\r\n var ccontainer = self.map.getControlsByClass(TC.control.ControlContainer);\r\n const panelOptions = {\r\n content: \"table\",\r\n titles: {\r\n main: \"\",\r\n max: \"\"\r\n },\r\n save: {\r\n fileName: _layerName + \".xls\"\r\n },\r\n download: () => _downloadClickHandler(self, _getLayerName),\r\n share: true,\r\n resize: true\r\n };\r\n if (ccontainer.length === 0) {\r\n self.resultsPanel = await self.map.addControl('resultsPanel', panelOptions);\r\n self.resultsPanel.caller = self;\r\n }\r\n else {\r\n panelOptions.position = \"right\";\r\n self.resultsPanel = await ccontainer[0].addControl('resultsPanel', panelOptions);\r\n self.resultsPanel.caller = self;\r\n }\r\n self.resultsPanel.template[self.resultsPanel.CLASS + \"-table\"] = self.template[self.CLASS + \"-table\"];\r\n }\r\n else {\r\n self.resultsPanel.options.save.fileName = _layerName + \".xls\";\r\n }\r\n self.resultsPanel.options.titles.max = self.resultsPanel.getLocaleString('geo.trk.chart.exp');\r\n resolve();\r\n });\r\n };\r\n\r\n var _showMessage = function (Message, type) {\r\n //URI:Compruebao si existe modalbody para saber si la consulta viene de una URL comprtida\r\n if (modalBody) {\r\n var messageDiv = modalBody.getElementsByClassName(\"tc-ctl-wfsquery-message\")[0];\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n else {\r\n messageDiv.innerHTML = Message;\r\n switch (type) {\r\n case TC.Consts.msgType.INFO:\r\n messageDiv.classList.add(\"tc-msg-info\");\r\n break;\r\n case TC.Consts.msgType.WARNING:\r\n messageDiv.classList.add(\"tc-msg-warning\");\r\n break;\r\n case TC.Consts.msgType.ERROR:\r\n default:\r\n messageDiv.classList.add(\"tc-msg-error\");\r\n break;\r\n }\r\n messageDiv.classList.remove(hiddenCssClass);\r\n }\r\n timer = setTimeout(function () {\r\n timer = null;\r\n messageDiv.classList.add(hiddenCssClass);\r\n }, 3000);\r\n }\r\n else {\r\n this.map.toast(Message, { type: type });\r\n }\r\n };\r\n var _getPossibleValues = async function (field, value) {\r\n const self = this;\r\n var _capabilities = Object.assign({}, _currentLayercapabilities);\r\n switch (document.querySelector(\".tc-ctl-wfsquery.tc-ctl-wfsquery-text input:checked\").value) {\r\n case \"starts\":\r\n value = value + \"*\";\r\n break;\r\n case \"contains\":\r\n case \"eq\":\r\n value = \"*\" + value + \"*\";\r\n break;\r\n case \"ends\":\r\n value = \"*\" + value;\r\n break;\r\n }\r\n\r\n if (controller) {\r\n controller.abort();\r\n }\r\n controller = new AbortController();\r\n let signal = controller.signal;\r\n\r\n try {\r\n var data = await _currentLayer.toolProxification.fetch(_currentLayerURL, {\r\n //URI:si el valor de field contiene \"/\" se supone que es un dato compuesto entonces no establezco propiedades a devolver sino que se deja vacío para que devuelva todos.\r\n data: TC.Util.WFGetPropertyValue(_currentLayerName, field.indexOf(\"/\") >= 0 ? false : field, TC.filter.like(field, value, undefined, undefined, undefined, false), _capabilities),//TC.Util.WFSQueryBuilder([_currentLayerName], TC.filter.like(field, value, undefined, undefined, undefined, false), _capabilities, \"JSON\", false),\r\n contentType: \"application/xml\",\r\n method: \"POST\",\r\n signal: signal\r\n });\r\n\r\n if (data.contentType.startsWith(\"application/xml\") || data.contentType.startsWith(\"text/xml\")) {\r\n let xmlDoc = new DOMParser().parseFromString(data.responseText, \"text/xml\");\r\n let error = xmlDoc.querySelector(\"Exception ExceptionText\");\r\n if (error) {\r\n _showMessage.call(self, error.innerHTML, TC.Consts.msgType.ERROR);\r\n return [];\r\n }\r\n //parser de features XML\r\n const arr = [];\r\n xmlDoc.querySelectorAll(\"member > *\").forEach(function (item) {\r\n if (arr.indexOf(item.innerHTML) < 0) {\r\n arr[arr.length] = item.innerHTML;\r\n }\r\n });\r\n return arr;\r\n\r\n }\r\n if (data.contentType.startsWith(\"application/json\")) {\r\n data = JSON.parse(data.responseText);\r\n }\r\n if (data.features && data.features.length > 0) {\r\n let arr;\r\n if (data.features.length === 1) {\r\n arr = [field.split(\"/\").reduce(function (vi, va) { return vi[va.substring(va.indexOf(\":\") + 1)]; }, data.features[0].properties)];\r\n }\r\n if (data.features.length > 1) {\r\n arr = data.features.reduce(function (pv, cv) {\r\n if (pv && pv instanceof Array) {\r\n if (pv.indexOf(cv.properties[field]) < 0)\r\n return pv.concat(field.split(\"/\").reduce(function (vi, va) { return vi[va.substring(va.indexOf(\":\") + 1)]; }, cv.properties));\r\n else\r\n return pv;\r\n }\r\n }, []);\r\n }\r\n //arr.sort();\r\n return arr;\r\n } else\r\n return [];\r\n }\r\n catch (err) {\r\n if (err instanceof DOMException && err.name !== \"AbortError\")\r\n _showMessage.call(self, err, TC.Consts.msgType.ERROR);\r\n return null;\r\n }\r\n };\r\n var _autocompleteConstructor = function (control, property, listCtrl) {\r\n\r\n TC.UI.autocomplete.call(control, {\r\n minLength: 3,\r\n target: listCtrl,\r\n source: function (text, callback) {\r\n var _self = this;\r\n _self.target.innerHTML = '
                  • ' + getLocaleString(\"searching\") + '
                  • ';\r\n _self.target.classList.remove(hiddenCssClass);\r\n if (timerAutocomplete)\r\n window.clearTimeout(timerAutocomplete);\r\n timerAutocomplete = window.setTimeout(async function () {\r\n if (!document.querySelector(\".tc-ctl-wfsquery.tc-ctl-wfsquery-text\").classList.contains(TC.Consts.classes.HIDDEN)) {\r\n var data = await _getPossibleValues.call(_self, property, text);\r\n if (data) {\r\n if (data.length)\r\n callback(data.sort());\r\n else\r\n _self.target.classList.add(hiddenCssClass);\r\n }\r\n }\r\n }, 500);\r\n },\r\n callback: function (e) {\r\n control.value = e.currentTarget.dataset.value;\r\n this.target.classList.add(hiddenCssClass);\r\n },\r\n buildHTML: function (data) {\r\n var pattern = control.value;\r\n this.target.style.maxHeight = \"\";\r\n if (data.results.length > 1)\r\n return data.results.reduce(function (pv, cp, i) {\r\n return (i > 1 ? pv : _highlightText(pv, pattern)) + _highlightText(cp, pattern);\r\n });\r\n else\r\n return _highlightText(data.results[0], pattern);\r\n }\r\n });\r\n control.addEventListener(\"targetCleared.autocomplete\", function () {\r\n listCtrl.classList.add(hiddenCssClass);\r\n });\r\n control.addEventListener('keypress', function (e) {\r\n if (e.which == 13) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n control.addEventListener(\"search\", function (_e) {\r\n if (control.value.length === 0) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n control.addEventListener(\"input\", function (_e) {\r\n if (control.value.length === 0) {\r\n TC.UI.autocomplete.call(control, \"clear\");\r\n }\r\n });\r\n };\r\n var _highlightText = function (text, pattern) {\r\n pattern = new RegExp(pattern.replace(/\\W/g, ''), \"gi\");\r\n return \"
                  • \" + text.replace(pattern, '$&') + \"
                  • \";\r\n };\r\n\r\n var _select = function (feature) {\r\n const self = this;\r\n var _addFeature = function (layer, feature) {\r\n var result;\r\n if (feature instanceof TC.feature.Point) {\r\n result = layer.addPoint(feature.getCoords());\r\n }\r\n else if (feature instanceof TC.feature.Polyline) {\r\n result = layer.addPolyline(feature.getCoords());\r\n }\r\n else if (feature instanceof TC.feature.Polygon) {\r\n result = layer.addPolygon(feature.getCoords());\r\n }\r\n else if (feature instanceof TC.feature.MultiPolygon) {\r\n result = layer.addMultiPolygon(feature.getCoords());\r\n }\r\n else if (feature instanceof TC.feature.MultiPolyline) {\r\n result = layer.addMultiPolyline(feature.getCoords());\r\n }\r\n return result;\r\n };\r\n if (!feature.layer)\r\n return;\r\n var layer = feature.layer.map.getLayer(\"WFSQueryResultsHighlight\");\r\n if (!layer) {\r\n feature.layer.map.addLayer({\r\n id: \"WFSQueryResultsHighlight\",\r\n type: TC.Consts.layerType.VECTOR,\r\n owner: self,\r\n stealth: true,\r\n styles: _getHighLightStyles()\r\n }, function (layer) {\r\n _addFeature(layer, feature);\r\n });\r\n }\r\n else\r\n _addFeature(layer, feature);\r\n };\r\n var _unselect = function (feature) {\r\n var layer = feature.layer.map.getLayer(\"WFSQueryResultsHighlight\");\r\n if (layer) {\r\n layer.clearFeatures();\r\n }\r\n };\r\n ctlProto.render = function (callback) {\r\n const self = this;\r\n\r\n return self._set1stRenderPromise(Promise.all([\r\n TC.Control.prototype.render.call(self, callback),\r\n self.getRenderedHtml(self.CLASS + '-share-dialog', {}, function (html) {\r\n self._dialogDiv.innerHTML = html;\r\n })\r\n ]));\r\n };\r\n\r\n ctlProto.register = function (map) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n\r\n map.on(TC.Consts.event.LAYERERROR, (e) => {\r\n if (e.layer === self.resultsLayer) {\r\n if (self.modalDialog) {\r\n self.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.remove(loadingCssClass);\r\n }\r\n if (e.reason === TC.Consts.WFSErrors.MAX_NUM_FEATURES) {\r\n _showMessage.call(self, getLocaleString(\"query.msgTooManyResults\", { limit: e.data.limit }), TC.Consts.msgType.WARNING);\r\n }\r\n else {\r\n //console.error(e.reason);\r\n _showMessage.call(self, getLocaleString(\"query.errorUndefined\"), TC.Consts.msgType.ERROR);\r\n throw new Error(e.reason);\r\n }\r\n }\r\n });\r\n map.on(TC.Consts.event.BEFOREFEATUREREMOVE, (e) => {\r\n if (e.layer === self.resultsLayer) {\r\n const index = e.layer.features.indexOf(e.feature);\r\n self.deletedFeatures.push(index);\r\n const tr = self.resultsPanel.div.querySelector(\"table tbody tr:not(.\" + TC.Consts.classes.DISABLED + \")[data-index='\" + index + \"']\");\r\n delete tr.dataset.index;\r\n tr.removeAttribute(\"title\");\r\n tr.classList.add(TC.Consts.classes.DISABLED);\r\n for (let j = index + 1; j < e.layer.features.length; j++) {\r\n const tr2 = self.resultsPanel.div.querySelector(\"table tbody tr[data-index='\" + j + \"']\");\r\n if (tr2 && tr2.dataset.index)\r\n tr2.dataset.index = parseInt(tr2.dataset.index, 10) - 1;\r\n }\r\n }\r\n })\r\n\r\n TC.Control.prototype.register.call(self, map).then(function (ctrl) {\r\n var self = ctrl;\r\n\r\n _getStyles = function () {\r\n var styleFN = function (geomType, property) {\r\n return this.options.styles && this.options.styles[geomType] ? this.options.styles[geomType][property] || TC.Cfg.styles[geomType][property] : TC.Cfg.styles[geomType][property];\r\n };\r\n return {\r\n polygon: {\r\n fillColor: styleFN.bind(self, 'polygon', 'fillColor'),\r\n fillOpacity: styleFN.bind(self, 'polygon', 'fillOpacity'),\r\n strokeColor: styleFN.bind(self, 'polygon', 'strokeColor'),\r\n strokeOpacity: styleFN.bind(self, 'polygon', 'strokeOpacity'),\r\n strokeWidth: styleFN.bind(self, 'polygon', 'strokeWidth')\r\n },\r\n line: {\r\n strokeColor: styleFN.bind(self, 'line', 'strokeColor'),\r\n strokeOpacity: styleFN.bind(self, 'line', 'strokeOpacity'),\r\n strokeWidth: styleFN.bind(self, 'line', 'strokeWidth')\r\n },\r\n point: {\r\n radius: styleFN.bind(self, 'point', 'radius'),\r\n height: styleFN.bind(self, 'point', 'height'),\r\n width: styleFN.bind(self, 'point', 'width'),\r\n fillColor: styleFN.bind(self, 'point', 'fillColor'),\r\n fillOpacity: styleFN.bind(self, 'point', 'fillOpacity'),\r\n strokeColor: styleFN.bind(self, 'point', 'strokeColor'),\r\n strokeWidth: styleFN.bind(self, 'point', 'strokeWidth'),\r\n fontSize: styleFN.bind(self, 'point', 'fontSize'),\r\n fontColor: styleFN.bind(self, 'point', 'fontColor'),\r\n labelOutlineColor: styleFN.bind(self, 'point', 'labelOutlineColor'),\r\n labelOutlineWidth: styleFN.bind(self, 'point', 'labelOutlineWidth'),\r\n label: styleFN.bind(self, 'point', 'label'),\r\n angle: styleFN.bind(self, 'point', 'angle')\r\n }\r\n };\r\n };\r\n _getHighLightStyles = function () {\r\n var _default = {\r\n \"polygon\": TC.Util.extend(true, {}, TC.Cfg.styles.polygon, {\r\n fillColor: \"#0099FF\",\r\n fillOpacity: 1,\r\n strokeColor: \"#0099FF\",\r\n strokeWidth: 2\r\n }),\r\n \"line\": TC.Util.extend(true, {}, TC.Cfg.styles.line, {\r\n strokeColor: \"#0099FF\",\r\n strokeWidth: 2\r\n }),\r\n \"point\": TC.Util.extend(true, {}, TC.Cfg.styles.point, {\r\n strokeColor: \"#0099FF\"\r\n })\r\n };\r\n return self.highlightStyles ? {\r\n \"polygon\": TC.Util.extend(true, {}, _default.polygon, self.highlightStyles.polygon ? self.highlightStyles.polygon : {}),\r\n \"line\": TC.Util.extend(true, {}, _default.line, self.highlightStyles.line ? self.highlightStyles.line : {}),\r\n \"point\": TC.Util.extend(true, {}, _default.point, self.highlightStyles.point ? self.highlightStyles.point : {})\r\n } : _default;\r\n };\r\n\r\n locale = map.options.locale;\r\n\r\n getLocaleString = function (key, texts) {\r\n return TC.Util.getLocaleString(locale, key, texts);\r\n };\r\n\r\n map.ready(function () {\r\n map.getControlsByClass('TC.control.WorkLayerManager').forEach(function (ctl) {\r\n ctl.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-open';\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (!button) {\r\n const layer = map.getLayer(layerId);\r\n if (layer.type === TC.Consts.layerType.WMS || layer.type === TC.Consts.layerType.WFS) {\r\n const text = self.getLocaleString('query.tooltipMagnifBtn');\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.iconText = '\\ue916';\r\n button.classList.add(className);\r\n button.dataset.layerId = layerId;\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n button.classList.add(loadingCssClass);\r\n layer.getWFSCapabilities().then((WFSCapabilities) => {\r\n //check si tiene GetFeature Disponible\r\n if (!WFSCapabilities.Operations.GetFeature) {\r\n button.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n //check si las capas hijas están en capabilties WFS\r\n var layers = layer.getDisgregatedLayerNames ? layer.getDisgregatedLayerNames() : layer.featureType;\r\n layers = layers.filter(function (l) {\r\n return Object.prototype.hasOwnProperty.call(WFSCapabilities.FeatureTypes, l.substring(l.indexOf(\":\") + 1));\r\n });\r\n if (!layers.length) {\r\n button.classList.add(hiddenCssClass);\r\n return;\r\n }\r\n }).catch(() => button.classList.add(hiddenCssClass))\r\n .finally(() => button.classList.remove(loadingCssClass));\r\n }\r\n }\r\n }\r\n return button;\r\n },\r\n updateEvents: [],\r\n actionFn: function () {\r\n const button = this;\r\n if (button.classList.contains('tc-unavailable') || button.classList.contains('tc-loading')) {\r\n return;\r\n }\r\n const layer = self.map.getLayer(button.dataset.layerId);\r\n self.renderModalDialog(layer);\r\n }\r\n });\r\n });\r\n });\r\n\r\n self.getShareDialog().then(function () {\r\n resolve(self);\r\n }).catch(function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n });\r\n };\r\n\r\n const _onFeaturesUpdate = function (e) {\r\n const ctl = e.layer.owner;\r\n if (ctl && e.layer === ctl.resultsLayer) {\r\n if (e.newData && e.newData.totalFeatures === 0) {\r\n ctl.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.remove(loadingCssClass);\r\n _showMessage.call(ctl, getLocaleString(\"query.msgNoResults\"), TC.Consts.msgType.INFO);\r\n return;\r\n }\r\n var features = e.layer.features;\r\n if (features.length > 0) {\r\n if (ctl.toShare && ctl.toShare.doZoom) {\r\n ctl._setQueryToSearch({ doZoom: false });\r\n ctl.map.zoomToFeatures(features);\r\n }\r\n const serviceAttrName = 'h3_' + ctl.getLocaleString('service');\r\n const layerAttrName = 'h4_' + ctl.getLocaleString('layer');\r\n const title_separator = ctl.map.getControlsByClass(TC.control.Click).some(c => c.TITLE_SEPARATOR) ?\r\n ctl.map.getControlsByClass(TC.control.Click).find(c => c.TITLE_SEPARATOR).TITLE_SEPARATOR :\r\n ' • ';\r\n\r\n for (var i = 0; i < features.length; i++) {\r\n const path = _currentLayer.getPath(_currentLayerName).slice(1);\r\n if (path) {\r\n const newData = {};\r\n newData[serviceAttrName] = _currentLayer.title;\r\n newData[layerAttrName] = path.join(title_separator);\r\n const allData = TC.Util.extend(newData, features[i].getData());\r\n features[i].clearData();\r\n features[i].setData(allData);\r\n }\r\n }\r\n ctl.showResultsPanel(\r\n features.length > 1 ?\r\n features.reduce(function (vi, va) {\r\n return (vi instanceof Array ? vi : [vi.data]).concat([va.data]);\r\n })\r\n :\r\n [features[0].data],\r\n _currentLayerTitle);\r\n }\r\n\r\n e.layer.map.off(TC.Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n }\r\n };\r\n\r\n const _onBeforeApplyQuery = function (e) {\r\n const ctl = e.layer.owner;\r\n if (ctl && e.layer === ctl.resultsLayer && e.query) {\r\n ctl._setQueryToSearch({ filter: e.query });\r\n }\r\n };\r\n\r\n ctlProto._sendQuery = async function (filter) {\r\n const self = this;\r\n\r\n if (_currentLayer && _currentLayerName && _currentLayerTitle && filter) {\r\n var _url = await _currentLayer.getWFSURL();\r\n await _createResultPanel.apply(self, [_currentLayerTitle]);\r\n _currentLayer.toolProxification.cacheHost.getAction(_url).then(function (cacheHost) {\r\n const url = cacheHost.action(_url);\r\n if (self.resultsLayer && self.resultsLayer.url !== url) {\r\n self.map.removeLayer(self.resultsLayer);\r\n self.resultsLayer = null;\r\n }\r\n if (!self.resultsLayer) {\r\n self.map.on(TC.Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.map\r\n .addLayer({\r\n id: \"WFSQueryResults\",\r\n type: TC.Consts.layerType.WFS,\r\n url: url,\r\n owner: self,\r\n stealth: true,\r\n geometryName: \"the_geom\",\r\n featurePrefix: _currentLayerName.substring(0, _currentLayerName.indexOf(\":\")),\r\n featureType: _currentLayerName.substring(_currentLayerName.indexOf(\":\") + 1),\r\n properties: filter,\r\n outputFormat: TC.Consts.format.JSON,\r\n styles: _getStyles()\r\n })\r\n .then(function (layer) {\r\n self.resultsLayer = layer;\r\n layer.map.on(TC.Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n });\r\n\r\n self.map.on(TC.Consts.event.RESULTSPANELCLOSE, function (e) {\r\n if (e.control !== self.resultsPanel)\r\n return;\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(e.control.div, \"enable\");\r\n }\r\n self.resultsLayer.clearFeatures();\r\n self.resultsLayer.setVisibility(false);\r\n self.clearFilters();\r\n self.map.off(TC.Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.map.off(TC.Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n delete self.toShare;\r\n });\r\n }\r\n else {\r\n self.map.off(TC.Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.map.on(TC.Consts.event.BEFOREAPPLYQUERY, _onBeforeApplyQuery);\r\n self.resultsLayer.setVisibility(false);\r\n self.resultsLayer.clearFeatures();\r\n //borro el evento featureUpdate por si hago una búsqueda sin cerra el panel previamente\r\n self.map.off(TC.Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.map.on(TC.Consts.event.LAYERUPDATE, _onFeaturesUpdate);\r\n self.resultsLayer.url = url;\r\n self.resultsLayer.featurePrefix = _currentLayerName.substring(0, _currentLayerName.indexOf(\":\"));\r\n self.resultsLayer.featureType = _currentLayerName.substring(_currentLayerName.indexOf(\":\") + 1);\r\n self.resultsLayer.properties = filter;\r\n self.resultsLayer.setVisibility(true);\r\n self.resultsLayer.refresh();\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctlProto.sendQuery = async function () {\r\n const self = this;\r\n if (!self.validateQuery()) {\r\n _showMessage.call(self, getLocaleString(\"query.msgNoQueryFilter\"));\r\n return;\r\n }\r\n self.modalDialog.getElementsByClassName(\"tc-modal-body\")[0].classList.add(loadingCssClass);\r\n\r\n let filter;\r\n if (self.filters.length > 1) {\r\n const condition = self.modalDialog.querySelector(\".tc-ctl-wfsquery-logOpRadio:checked\").value;\r\n filter = TC.filter[TC.Consts.logicalOperator[condition]].apply(null, self.filters);\r\n }\r\n else {\r\n filter = self.filters[0];\r\n }\r\n\r\n self._sendQuery.call(self, filter);\r\n };\r\n\r\n ctlProto._setQueryToSearch = function (options) {\r\n const self = this;\r\n if (Object.keys(options).length === 1 && Object.prototype.hasOwnProperty.call(options, \"doZoom\")) {\r\n self.toShare = TC.Util.extend(self.toShare, { doZoom: options.doZoom });\r\n } else if (options.filter || self.resultsLayer && self.resultsLayer.properties instanceof TC.filter.Filter) {\r\n self.toShare = TC.Util.extend(self.toShare, {\r\n wms: {\r\n url: _currentLayer.url, names: _currentLayer.names\r\n },\r\n title: _currentLayerTitle,\r\n name: _currentLayerName,\r\n filter: options.filter ? options.filter : self.resultsLayer.properties.getText(),\r\n doZoom: Object.prototype.hasOwnProperty.call(options, 'doZoom') ? options.doZoom : true\r\n });\r\n }\r\n };\r\n\r\n ctlProto._getQueryToSearch = function () {\r\n const self = this;\r\n return self.toShare;\r\n };\r\n\r\n ctlProto.exportState = function () {\r\n const self = this;\r\n if (self.toShare) {\r\n return {\r\n id: self.id,\r\n queryResult: JSON.stringify(self.toShare)\r\n };\r\n }\r\n //else if (self.exportsState && self.resultsLayer) {\r\n // return {\r\n // id: self.id,\r\n // layer: self.resultsLayer.exportState({\r\n // exportStyles: false\r\n // })\r\n // };\r\n //}\r\n return null;\r\n };\r\n\r\n ctlProto.importState = function (state) {\r\n const self = this;\r\n\r\n if (state.queryResult) {\r\n let wait = self.map.getLoadingIndicator().addWait();\r\n self.map.loaded(function () {\r\n let sharedQueryToSearch = JSON.parse(state.queryResult);\r\n if (sharedQueryToSearch.wms && sharedQueryToSearch.filter) {\r\n let wmsLayer = self.map.workLayers.filter(l => l.url && l.url === sharedQueryToSearch.wms.url &&\r\n l.names.join() === sharedQueryToSearch.wms.names.join());\r\n if (wmsLayer.length > 0) {\r\n _currentLayer = wmsLayer[0];\r\n _currentLayerName = sharedQueryToSearch.name;\r\n _currentLayerTitle = sharedQueryToSearch.title;\r\n\r\n self._setQueryToSearch({ doZoom: sharedQueryToSearch.doZoom });\r\n\r\n _currentLayer.describeFeatureType(_currentLayerName).then(function (data) {\r\n _manageDescribeFeature(data, self, false);\r\n self._sendQuery(sharedQueryToSearch.filter);\r\n // registramos el estado compartido por si se comparte de nuevo sin hacer uso del control\r\n self._setQueryToSearch({ filter: sharedQueryToSearch.filter, doZoom: sharedQueryToSearch.doZoom });\r\n\r\n self.map.getLoadingIndicator().removeWait(wait);\r\n });\r\n }\r\n } else {\r\n alert('shared query error');\r\n }\r\n });\r\n }\r\n //else if (self.resultsLayer) {\r\n // self.resultsLayer.then(function () {\r\n // self.resultsLayer.importState(state.layer).then(function () {\r\n // self.resultsLayer.features.forEach(function (f) {\r\n // f.setStyle(null); // Los estilos vienen dados exclusivamente por la capa, borramos estilos propios de la feature\r\n // });\r\n // });\r\n // });\r\n //}\r\n };\r\n\r\n ctlProto.validateQuery = function () {\r\n return this.filters.length > 0;\r\n };\r\n\r\n ctlProto.showResultsPanel = function (data, layername) {\r\n const self = this;\r\n self.deletedFeatures = [];\r\n //en funcion del número de elementos cargo un título en singular o plural\r\n\r\n self.resultsPanel.div.querySelector(\".prpanel-title-text\").innerText = self.resultsPanel.getLocaleString(data.length > 1 ? 'query.titleResultPaneMany' : 'query.titleResultPanelOne', { \"numero\": data.length, \"layerName\": layername });\r\n\r\n self.resultsPanel.div.classList.add(\"tc-ctl-wfsquery-results\");\r\n\r\n if (self.modalDialog) {\r\n self.modalDialog.parentElement.removeChild(self.modalDialog);\r\n }\r\n\r\n const dataTypes = _getDataTypes();\r\n\r\n self.resultsPanel.openTable({\r\n data: data,\r\n css: {\r\n trClass: \"trClass\",\r\n tdClass: \"tdClass\",\r\n thClass: \"thClass\"\r\n },\r\n sort: true,\r\n callback: function (tabla) {\r\n\r\n self.resultsPanel.maximize();\r\n console.log(\"render del panel de resultados\");\r\n var col = tabla.querySelectorAll(\".table>tbody>tr\");\r\n var j = 1;\r\n for (var key in data[0]) {\r\n if (Object.prototype.hasOwnProperty.call(dataTypes, key)) {\r\n const dataType = dataTypes[key].type;\r\n if (dataType && !(dataType instanceof Object)) {\r\n if (dataType.indexOf(\"int\") >= 0 ||\r\n dataType.indexOf(\"float\") >= 0 ||\r\n dataType.indexOf(\"double\") >= 0 ||\r\n dataType.indexOf(\"long\") >= 0 ||\r\n dataType.indexOf(\"decimal\") >= 0) {\r\n var tdNumeric = tabla.querySelectorAll(\"td:nth-child(\" + j + \")\");\r\n for (var k = 0; k < tdNumeric.length; k++) {\r\n tdNumeric[k].classList.add(\"tc-numeric\");\r\n }\r\n }\r\n }\r\n if (dataType && dataType instanceof Object) {\r\n console.log(\"aki lo que sea\");\r\n }\r\n j++;\r\n }\r\n }\r\n\r\n for (var i = 0; i < col.length; i++) {\r\n col[i].addEventListener(\"click\", function (e) {\r\n e.stopPropagation();\r\n if (this.classList.contains(TC.Consts.classes.DISABLED)) return;\r\n var index = this.dataset.index;\r\n if (index != undefined)\r\n self.resultsLayer.map.zoomToFeatures([self.resultsLayer.features[index]]);\r\n });\r\n col[i].addEventListener(\"mouseenter\", function () {\r\n if (this.classList.contains(TC.Consts.classes.DISABLED)) return;\r\n var index = this.dataset.index;\r\n if (index == undefined) return;\r\n var feat = self.resultsLayer.features[index];\r\n if (feat && feat.geometry) {\r\n //feat.select();\r\n _select.call(self, feat);\r\n }\r\n var celdasHoja = this.querySelectorAll(\"td.value div\");\r\n if (celdasHoja.length > 0) {\r\n celdasHoja.forEach(function (celda) {\r\n if (celda.offsetWidth < celda.scrollWidth)\r\n celda.title = celda.innerText;\r\n });\r\n }\r\n else\r\n this.querySelectorAll(\"td\").forEach(function (td) {\r\n if (td.offsetWidth < td.scrollWidth)\r\n td.title = td.innerText;\r\n });\r\n\r\n });\r\n col[i].addEventListener(\"mouseleave\", function () {\r\n var index = this.dataset.index;\r\n if (index == undefined) return;\r\n var feat = self.resultsLayer.features[index];\r\n if (feat && feat.geometry) {\r\n //feat.unselect();\r\n _unselect(feat);\r\n //esto es porque el unselect no devulve al estilo por defecto\r\n //feat.setStyle(TC.Cfg.styles[feat.STYLETYPE]);\r\n }\r\n });\r\n }\r\n tabla.querySelectorAll(\".complexAttr label,.complexAttr input\").forEach(function (label) {\r\n label.addEventListener(\"click\", function (e) {\r\n e.stopPropagation();\r\n });\r\n });\r\n tabla.querySelectorAll(\".complexAttr input\").forEach(function (chkBox) {\r\n chkBox.addEventListener(\"change\", function (_e) {\r\n if (this.checked) {\r\n this.nextElementSibling.querySelectorAll(\"td.value div\").forEach(function (div) {\r\n if (div.offsetWidth < div.scrollWidth)\r\n div.title = div.innerText;\r\n });\r\n }\r\n });\r\n });\r\n\r\n TC.control.FeatureInfoCommons.addSpecialAttributeEventListeners(tabla);\r\n tabla.querySelectorAll(\"td > img, td > video, td > audio, td > iframe\").forEach((e) => e.parentNode.classList.add(\"tc-multimedia\"));\r\n tabla.querySelectorAll(\"video\").forEach((v) => {\r\n v.addEventListener(TC.Consts.event.CLICK, function (e) {\r\n e.stopPropagation(); // No queremos zoom si pulsamos en un enlace\r\n }, { passive: true });\r\n });\r\n //URI:Si hay features eliminadas las marcamos como tal\r\n if (self.deletedFeatures.length > 0) {\r\n self.deletedFeatures.sort().forEach((f) => {\r\n const tr = self.resultsPanel.div.querySelector(\"table tbody tr[data-index='\" + f + \"']\");\r\n delete tr.dataset.index;\r\n tr.removeAttribute(\"title\");\r\n tr.classList.add(TC.Consts.classes.DISABLED);\r\n });\r\n //rellenamos los huecos de data-index\r\n Array.from(self.resultsPanel.div.querySelectorAll(\"table tbody tr:not(.\" + TC.Consts.classes.DISABLED + \")\")).forEach((notDeleted) => {\r\n const index = parseInt(notDeleted.dataset.index, 10);\r\n notDeleted.dataset.index = index - self.deletedFeatures.filter((x) => x < index).length;\r\n });\r\n\r\n }\r\n ////se deshabilita el swipe para que se pueda hacer scroll horizontal del panel de resultados\r\n if (TC.browserFeatures.touch()) {\r\n TC.Util.swipe(self.resultsPanel.div, 'disable');\r\n }\r\n }\r\n });\r\n\r\n };\r\n\r\n ctlProto.showGeometryPanel = async function (mode) {\r\n const self = this;\r\n TC.Util.closeModal();\r\n if (!self.geometryPanel) {\r\n const ctlOptions = {\r\n titles: {\r\n main: self.getLocaleString('query.spatialFilter')\r\n }\r\n };\r\n const ctlContainer = self.map.getControlsByClass(TC.control.ControlContainer)[0];\r\n if (ctlContainer) {\r\n ctlOptions.position = ctlContainer.POSITION.RIGHT;\r\n self.geometryPanel = await ctlContainer.addControl('resultsPanel', ctlOptions);\r\n }\r\n else {\r\n self.geometryPanel = await self.map.addControl('resultsPanel', ctlOptions);\r\n }\r\n self.map\r\n .on(TC.Consts.event.RESULTSPANELCLOSE, function onResultsPanelClose(e) {\r\n if (e.control === self.geometryPanel) {\r\n setTimeout(() => self.drawControl.cancel(), 500); // timeout para evitar una llamada indeseada a GFI.\r\n TC.Util.showModal(self.modalDialog, {\r\n closeCallback: () => self.clearFilters()\r\n });\r\n }\r\n });\r\n const html = await self.getRenderedHtml(self.CLASS + '-geom');\r\n self.geometryPanel.open(html);\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-btn-ok`).addEventListener(TC.Consts.event.CLICK, function () {\r\n self.geometryPanel.close();\r\n }, { passive: true });\r\n if (!self.drawControl) {\r\n self.drawControl = await self.map.addControl('draw', {\r\n div: self.geometryPanel.getTableContainer().querySelector(`.${self.CLASS}-geom-draw`),\r\n styles: self.styles\r\n });\r\n self.drawControl.on(TC.Consts.event.DRAWEND, function (e) {\r\n e.feature.showsPopup = false;\r\n self.geometryPanel.close();\r\n\r\n const op = self.modalDialog.querySelector(`input[name=\"${self.id}-condition\"]:checked`).value;\r\n let filter;\r\n switch (op) {\r\n case 'intersects':\r\n filter = new TC.filter.Intersects(null, e.feature, self.map.crs);\r\n break;\r\n default:\r\n filter = new TC.filter.Within(null, e.feature, self.map.crs);\r\n }\r\n filter._abbr = op;\r\n switch (e.target.mode) {\r\n case 'polygon':\r\n filter._valueToShow = self.getLocaleString('polygon');\r\n break;\r\n case 'line':\r\n filter._valueToShow = self.getLocaleString('line');\r\n break;\r\n case 'rectangle':\r\n filter._valueToShow = self.getLocaleString('box');\r\n break;\r\n }\r\n self.filters.push(filter);\r\n _renderFilterConditions(self);\r\n TC.Util.showModal(self.modalDialog, {\r\n closeCallback: () => self.clearFilters()\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n self.geometryPanel.open();\r\n }\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-draw`).classList.toggle(TC.Consts.classes.HIDDEN, !mode);\r\n self.geometryPanel.div.querySelector(`.${self.CLASS}-geom-btn`).classList.toggle(TC.Consts.classes.HIDDEN, !!mode);\r\n if (mode) {\r\n self.drawControl.setMode(mode, true);\r\n }\r\n };\r\n\r\n const _manageDescribeFeature = function (data, ctl, renderForm) {\r\n\r\n _internalGetDataTypes = function () {\r\n return data;\r\n };\r\n\r\n //let objFiltered = {};\r\n //for (var i in data) {\r\n // if (!TC.Util.isGeometry(data[i].type)) {\r\n // objFiltered[i] = data[i];\r\n // }\r\n //}\r\n //data = objFiltered;\r\n for (var key in data) {\r\n const value = data[key];\r\n if (TC.Util.isGeometry(value.type)) {\r\n value.isGeometry = true;\r\n }\r\n }\r\n\r\n if (renderForm) {\r\n ctl.clearFilters();\r\n ctlProto.getRenderedHtml(ctlProto.CLASS + \"-form\",\r\n {\r\n operators: filterByOperation,\r\n attributes: data,\r\n controlId: ctl.id\r\n }, function (html) {\r\n const dialog = ctl.modalDialog;\r\n const form = ctl.getForm();\r\n empty(form);\r\n form.insertAdjacentHTML('beforeend', html);\r\n modalBody.classList.remove(loadingCssClass);\r\n var combo = form.getElementsByClassName(\"tc-combo\");\r\n if (combo.length === 0)\r\n dialog.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].setAttribute(\"disabled\", \"\");\r\n else {\r\n dialog.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].removeAttribute(\"disabled\");\r\n combo[0].addEventListener(\"change\", function () {\r\n _changeAttributeEvent.apply(this, [form, data]);\r\n });\r\n form.querySelectorAll(`input[name=\"${ctl.id}-condition\"]`).forEach(ipt => {\r\n ipt.addEventListener('change', async function (e) {\r\n form.querySelector(`.${ctlProto.CLASS}-geomtype-line-btn`).disabled = e.target.value === 'within';\r\n const valueField = modalBody.querySelector(\".tc-ctl-wfsquery-value input\");\r\n valueField.disabled = false;\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-text\") && this.value === \"empty\") {\r\n valueField.value = \"\";\r\n valueField.disabled = true;\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n }\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-date\") && this.value === \"null\") {\r\n valueField.value = \"\";\r\n valueField.disabled = true;\r\n }\r\n if (valueField.value.trim() !== \"\") {\r\n if (this.parentElement.classList.contains(\"tc-ctl-wfsquery-text\") && this.value !== \"empty\") {\r\n var evt = document.createEvent('HTMLEvents');\r\n evt.initEvent(\"keyup\", false, true);\r\n valueField.dispatchEvent(evt);\r\n }\r\n }\r\n });\r\n });\r\n\r\n form.querySelector(\".tc-button\").addEventListener(TC.Consts.event.CLICK, function () {\r\n var valueField = form.querySelector('input.tc-textbox');\r\n TC.UI.autocomplete.call(valueField, \"clear\");\r\n if (inputMaskNumber)\r\n inputMaskNumber.masked.remove();\r\n if (!_validate.call(ctl, form)) {\r\n return;\r\n }\r\n var field = [].reduce.call(form.querySelectorAll('.tc-combo'), function (vi, va) {\r\n return vi + (vi ? \"/\" : \"\") + va.value;\r\n }, '');\r\n const checkedOp = form.querySelector('.tc-ctl-wfsquery input[type=\"radio\"]:checked');\r\n var op = checkedOp.value;\r\n\r\n var value = _getValue(valueField);\r\n let valueToShow = _getValueToShow(valueField);\r\n switch (true) {\r\n case type.indexOf(\"int\") >= 0:\r\n valueToShow = parseInt(value, 10);\r\n break;\r\n case type.indexOf(\"float\") >= 0:\r\n case type.indexOf(\"double\") >= 0:\r\n case type.indexOf(\"long\") >= 0:\r\n case type.indexOf(\"decimal\") >= 0:\r\n valueToShow = parseFloat(value, 10);\r\n break;\r\n case type.indexOf(\"string\") >= 0 && op !== \"empty\":\r\n valueToShow = '\"' + valueToShow + '\"';\r\n break;\r\n case type.indexOf(\"date\") >= 0 && op === \"null\":\r\n valueToShow = '';\r\n break;\r\n }\r\n\r\n //se añade asterisco al principio y/o final del valor para las busquedas: \"empieza por\", \"termina en\" o \"contiene\"\r\n var f;\r\n if (type.indexOf(\"dateTime\") >= 0 || type.indexOf(\"date\") >= 0) {\r\n if (value) {\r\n const from = new Date(value + \"T00:00:00\").toISOString();\r\n const to = new Date(value + \"T23:59:59\").toISOString();\r\n if (op === \"nbtw\") {\r\n //el not bettween es un caso es especial por que concatena un filtro not y otro between\r\n f = new TC.filter.not(TC.filter.between(field, from, to));\r\n }\r\n else {\r\n f = new filterByOperation[op].Ctor(field, from, to);\r\n }\r\n }\r\n else {\r\n f = new filterByOperation[op].Ctor(field);\r\n }\r\n\r\n }\r\n else {\r\n f = new filterByOperation[op].Ctor(\r\n field,\r\n (op === \"ends\" || op === \"contains\" ? '*' : '') +\r\n value +\r\n (op === \"starts\" || op === \"contains\" ? '*' : ''));\r\n }\r\n f.matchCase = false;\r\n f._abbr = op;\r\n f._valueToShow = valueToShow;\r\n ctl.filters.push(f);\r\n\r\n _renderFilterConditions(ctl);\r\n valueField.value = \"\";\r\n }, { passive: true });\r\n\r\n const onGeomClick = function (e) {\r\n ctl.showGeometryPanel(e.target.value);\r\n };\r\n form.querySelectorAll(\"button[name='geometry']\").forEach(btn => btn.addEventListener(TC.Consts.event.CLICK, onGeomClick, { passive: true }));\r\n }\r\n });\r\n }\r\n };\r\n\r\n const _renderQueryForm = function (args) {\r\n const self = args[0], layer = args[1], dialog = args[2], capabilities = args[3];\r\n self.modalDialog = dialog;\r\n _currentLayer = layer;\r\n _currentLayercapabilities = capabilities;\r\n _currentLayerURL = capabilities.Operations.DescribeFeatureType.DCP.HTTP.Get.href;\r\n if (new URL(_currentLayerURL).host === document.location.host) {\r\n _currentLayerURL = _currentLayerURL.substring(_currentLayerURL.indexOf(\":\") + 1);\r\n }\r\n\r\n //analizamos si es una o varias capas, si es una agrupación la disgregamos\r\n var layers = layer.getDisgregatedLayerNames ? layer.getDisgregatedLayerNames() : layer.featureType;\r\n //quitamos aquellas que no estén disponibles en el WFS\r\n layers = layers.filter(function (l) {\r\n return Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, l.substring(l.indexOf(\":\") + 1));\r\n });\r\n if (layers.length > 1) {\r\n modalBody.classList.remove(loadingCssClass);\r\n //bindeamos el onchange de combo\r\n dialog.getElementsByClassName(\"tc-combo\")[0].addEventListener(\"change\", function () {\r\n if (!this.value) {\r\n var form = self.getForm();\r\n empty(form);\r\n for (var i = 0; i < form.children.length; i++) form.removeChild(form.children[i]);\r\n self.clearFilters();\r\n return;\r\n }\r\n dialog.querySelector(\".tc-modal-body .tc-ctl-wfsquery-message\", dialog).classList.add(hiddenCssClass);\r\n _currentLayerTitle = this.options[this.selectedIndex].text;\r\n modalBody.classList.add(loadingCssClass);\r\n _currentLayerName = this.value;\r\n _currentLayer.describeFeatureType(this.value).then(function (data) {\r\n _manageDescribeFeature(data, self, true);\r\n }, function (err) {\r\n var tbody = dialog.getElementsByClassName(\"tc-modal-body\")[0];\r\n tbody.classList.remove(loadingCssClass);\r\n if (!err)\r\n tbody.insertAdjacentHTML('beforeend', \"
                    \" + getLocaleString(\"query.LayerNotAvailable\") + \"
                    \");\r\n else\r\n tbody.insertAdjacentHTML('beforeend', \"
                    \" + err + \"
                    \");\r\n });\r\n });\r\n }\r\n else if (layers.length === 1) {\r\n //comprabamos que la capa existe en el capabilities\r\n var layerCapabilities = capabilities.FeatureTypes[layers[0].substring(layers[0].indexOf(\":\") + 1)];\r\n if (layerCapabilities) {\r\n _currentLayerTitle = capabilities.FeatureTypes[layers[0].substring(layers[0].indexOf(\":\") + 1)].Title;\r\n _currentLayerName = layers[0];\r\n _currentLayer.describeFeatureType(layers[0]).then(function (data) {\r\n _manageDescribeFeature(data, self, true);\r\n }, function (err) {\r\n var tbody = dialog.getElementsByClassName(\"tc-modal-body\")[0];\r\n tbody.classList.remove(loadingCssClass);\r\n if (!err)\r\n tbody.insertAdjacentHTML('beforeend', \"
                    \" + getLocaleString(\"query.LayerNotAvailable\") + \"
                    \");\r\n else\r\n tbody.insertAdjacentHTML('beforeend', \"
                    \" + err + \"
                    \");\r\n\r\n });\r\n }\r\n else {\r\n var tbody = dialog.getElementsByClassName(\"tc-modal-body\")[0];\r\n tbody.classList.remove(loadingCssClass);\r\n tbody.insertAdjacentHTML('beforeend', \"
                    \" + getLocaleString(\"query.LayerNotAvailable\") + \"
                    \");\r\n //TC.Util.closeModal();\r\n //layer.map.toast(\"Mal\", { type: TC.Consts.msgType.WARNING });\r\n }\r\n\r\n }\r\n else {\r\n TC.Util.closeModal();\r\n layer.map.toast(TC.Util.getLocaleString(layer.map.options.locale, \"query.LayerNotAvailable\"), { type: TC.Consts.msgType.ERROR });\r\n }\r\n };\r\n\r\n const _renderModalDialog = function (layer, layerName, capabilities, callback) {\r\n const self = this;\r\n let layers;\r\n if (layer.getDisgregatedLayerNames) {\r\n layers = [];\r\n layer.getDisgregatedLayerNames().forEach(function (value, _index) {\r\n var path = layer.getPath(value);\r\n //quitamos aquellas que no estén disponibles en el WFS\r\n if (Object.prototype.hasOwnProperty.call(capabilities.FeatureTypes, value.substring(value.indexOf(\":\") + 1)))\r\n layers.push({ name: value, title: path[path.length - 1] });\r\n });\r\n layers.sort(function (a, b) {\r\n if (a.title < b.title) return -1;\r\n if (a.title > b.title) return 1;\r\n return 0;\r\n });\r\n }\r\n else {\r\n layers = layer.featureType;\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS + \"-dialog\",\r\n {\r\n layerName: getLocaleString(\"query.titleDialog\", { \"layerName\": layerName }),\r\n layers: layers\r\n }, function (html) {\r\n // Borramos diálogos previos\r\n document.body.querySelectorAll(`.${self.CLASS}-dialog`).forEach(elm => elm.remove());\r\n\r\n var d = document.createElement(\"div\");\r\n d.insertAdjacentHTML('beforeEnd', html);\r\n var modal = null;\r\n if (d.childNodes.length > 0) {\r\n modal = d.firstChild;\r\n document.body.appendChild(modal);\r\n }\r\n modalBody = modal.getElementsByClassName(\"tc-modal-body\")[0];\r\n modalBody.classList.add(loadingCssClass);\r\n\r\n TC.Util.showModal(modal, {\r\n closeCallback: () => self.clearFilters()\r\n });\r\n //IE me hace la puñeta con los estilos, no me fuciona el calc el el max-height así que lo calculo cada vez que muestro el dialogo\r\n if (TC.Util.detectIE()) {\r\n var coef = 1;\r\n switch (true) {\r\n case document.body.clientWidth > 768 && document.body.clientWidth < document.body.clientHeight:\r\n case document.body.clientWidth > 1024:\r\n case document.body.clientWidth > 1140:\r\n coef = 0.7;\r\n break;\r\n }\r\n modalBody.style.maxHeight = document.body.clientHeight * coef - modalBody.nextElementSibling.clientHeight - modalBody.previousElementSibling.clientHeight;\r\n }\r\n self.modalDialog = modal;\r\n modal.getElementsByClassName(\"tc-button tc-ctl-wlm-btn-launch\")[0].addEventListener(\"click\", function () {\r\n self.sendQuery();\r\n });\r\n if (callback) callback(modal);\r\n });\r\n };\r\n\r\n ctlProto.renderModalDialog = function (layer) {\r\n const self = this;\r\n let title;\r\n let capabilitiesPromise;\r\n if (layer.type === TC.Consts.layerType.WMS) {\r\n const path = layer.getPath();\r\n title = path[path.length - 1];\r\n capabilitiesPromise = layer.getWFSCapabilities();\r\n }\r\n else if (layer.type === TC.Consts.layerType.WFS) {\r\n title = layer.title;\r\n capabilitiesPromise = layer.getCapabilitiesPromise();\r\n }\r\n else {\r\n return;\r\n }\r\n let renderDialogPromise = new Promise(function (resolve, _reject) {\r\n capabilitiesPromise.then(function (capabilities) {\r\n _renderModalDialog.apply(self, [\r\n layer,\r\n title,\r\n capabilities,\r\n function (modal) {\r\n resolve(modal);\r\n }]);\r\n });\r\n });\r\n\r\n Promise.all([self, layer, renderDialogPromise, capabilitiesPromise]).then(_renderQueryForm);\r\n };\r\n\r\n ctlProto.removeFilter = function (filter) {\r\n const self = this;\r\n let idx = filter;\r\n if (filter instanceof TC.filter.Filter) {\r\n idx = self.filters.indexOf(filter);\r\n }\r\n if (idx >= 0 && idx < self.filters.length) {\r\n const removedFilter = self.filters.splice(idx, 1)[0];\r\n if (removedFilter instanceof TC.filter.Spatial) {\r\n removedFilter.geometry.layer.removeFeature(removedFilter.geometry);\r\n }\r\n _renderFilterConditions(self);\r\n }\r\n };\r\n\r\n ctlProto.clearFilters = function () {\r\n const self = this;\r\n self.filters\r\n .filter(f => f instanceof TC.filter.Spatial)\r\n .forEach(f => f.geometry.layer.removeFeature(f.geometry));\r\n self.filters.length = 0;\r\n };\r\n\r\n ctlProto.getForm = function () {\r\n const self = this;\r\n return self.modalDialog && self.modalDialog.querySelector('.tc-modal-form');\r\n };\r\n\r\n})();\r\n\r\nconst WFSQuery = TC.control.WFSQuery;\r\nexport default WFSQuery;","import TC from '../../TC';\r\nimport BasicMap from '../Map';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport i18n from '../i18n';\r\nimport Button from '../../SITNA/ui/Button';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\nTC.i18n = TC.i18n || i18n;\r\n\r\nclass WebComponentControl extends HTMLElement {\r\n template;\r\n control;\r\n #onBySelectorMap = new WeakMap();\r\n static CLASS = 'tc-ctl';\r\n\r\n constructor() {\r\n super();\r\n const self = this;\r\n\r\n self.map = null;\r\n self.isActive = false;\r\n self.isDisabled = false;\r\n\r\n var len = arguments.length;\r\n\r\n self.options = Util.extend({}, len > 1 ? arguments[1] : arguments[0]);\r\n\r\n const divOption = self.options.div || arguments[0];\r\n if (divOption) {\r\n const parentElement = Util.getDiv(divOption);\r\n self.div = parentElement;\r\n }\r\n else {\r\n self.div = self.parentElement;\r\n }\r\n\r\n self.template = self.options.template || self.template;\r\n self.exportsState = false;\r\n }\r\n\r\n connectedCallback() {\r\n const self = this;\r\n self.classList.add(WebComponentControl.CLASS, self.CLASS);\r\n if (self.map instanceof BasicMap) {\r\n return;\r\n }\r\n const mapOption = self.getAttribute('for');\r\n let map;\r\n if (mapOption) {\r\n const mapElement = document.getElementById(mapOption);\r\n if (mapElement) {\r\n map = BasicMap.get(mapElement);\r\n if (map) {\r\n map.addControl(self);\r\n }\r\n else {\r\n const observer = new MutationObserver(function (mutationList, observer) {\r\n for (const mutation of mutationList) {\r\n if (mutation.type === 'childList') {\r\n map = BasicMap.get(mapElement);\r\n if (map) {\r\n map.addControl(self);\r\n observer.disconnect();\r\n }\r\n }\r\n }\r\n });\r\n observer.observe(mapElement, { childList: true });\r\n }\r\n }\r\n }\r\n else {\r\n let element = self;\r\n do {\r\n element = element.parentNode;\r\n }\r\n while (element && !element.classList.contains(TC.Consts.classes.MAP));\r\n map = BasicMap.get(element);\r\n if (map) {\r\n map.addControl(self);\r\n }\r\n else {\r\n self.renderPromise();\r\n }\r\n }\r\n }\r\n\r\n show() {\r\n this.style.display = '';\r\n }\r\n\r\n hide() {\r\n this.style.display = 'none';\r\n }\r\n\r\n render(callback) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.renderData(null, function () {\r\n self.addUIEventListeners();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }));\r\n }\r\n\r\n _set1stRenderPromise(promise) {\r\n const self = this;\r\n if (!self._firstRender) {\r\n self._firstRender = promise;\r\n }\r\n return promise;\r\n }\r\n\r\n renderData(data, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n if (self.map) {\r\n self.trigger(TC.Consts.event.BEFORECONTROLRENDER, { dataObject: data });\r\n }\r\n self.classList.toggle(TC.Consts.classes.DISABLED, self.isDisabled);\r\n\r\n let template;\r\n if (typeof self.template === 'object' && !self.template.compiler) {\r\n template = self.template[self.CLASS];\r\n }\r\n else {\r\n template = self.template;\r\n self.template = {};\r\n self.template[self.CLASS] = template;\r\n }\r\n\r\n self.getRenderedHtml(self.CLASS, data)\r\n .then(function (html) {\r\n self.innerHTML = html;\r\n if (!self.parentElement && self.div) {\r\n self.div.appendChild(self);\r\n }\r\n if (self.map) {\r\n self.trigger(TC.Consts.event.CONTROLRENDER);\r\n }\r\n if (TC.Util.isFunction(callback)) {\r\n callback();\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n getRenderedHtml(templateId, data, callback) {\r\n const self = this;\r\n return new Promise(function (resolve, _reject) {\r\n\r\n const endFn = function (template) {\r\n if (typeof template === 'undefined') {\r\n resolve('');\r\n return;\r\n }\r\n const html = template(data);\r\n if (TC.Util.isFunction(callback)) {\r\n callback(html);\r\n }\r\n resolve(html);\r\n };\r\n\r\n const template = self.template[templateId];\r\n if (typeof template !== 'function') {\r\n self.#processTemplates({ locale: self.map && self.map.options.locale, className: self.CLASS }).then(function () {\r\n endFn(self.template[templateId]);\r\n });\r\n }\r\n else {\r\n endFn(template);\r\n }\r\n });\r\n }\r\n\r\n #processTemplates(options) {\r\n const self = this;\r\n options = options || {};\r\n return new Promise(function (resolve, _reject) {\r\n const templates = self.template;\r\n let mustCompile = false;\r\n for (var key in templates) {\r\n const template = templates[key];\r\n if (typeof template === 'string') {\r\n mustCompile = true;\r\n }\r\n }\r\n\r\n const callback = function () {\r\n const templatePromises = [];\r\n for (var key in templates) {\r\n const templateName = key;\r\n let template = templates[templateName];\r\n if (typeof template === 'string') {\r\n templatePromises.push(new Promise(function (res, rej) {\r\n TC.ajax({\r\n url: template,\r\n method: 'GET',\r\n responseType: 'text'\r\n })\r\n .then(function (response) {\r\n templates[templateName] = template = TC._hbs.compile(response.data); // TODO: add optimization options\r\n res(template);\r\n })\r\n .catch(function (err) {\r\n console.log(\"Error fetching template: \" + err);\r\n rej(err);\r\n });\r\n }));\r\n }\r\n else {\r\n if (typeof template === 'object') {\r\n templates[key] = template = TC._hbs.template(template);\r\n }\r\n }\r\n }\r\n\r\n Promise.all(templatePromises).then(function () {\r\n for (var key in templates) {\r\n const t = templates[key];\r\n if (t && key !== options.className) {\r\n TC._hbs.registerPartial(key, templates[key]);\r\n }\r\n }\r\n resolve();\r\n });\r\n };\r\n\r\n if (mustCompile) {\r\n TC.loadJSInOrder(\r\n !TC._hbs || !TC._hbs.compile,\r\n [\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_FULL,\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_HELPERS\r\n ],\r\n callback\r\n );\r\n }\r\n else {\r\n TC.loadJSInOrder(\r\n !TC._hbs,\r\n [\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_RUNTIME,\r\n TC.apiLocation + TC.Consts.url.TEMPLATING_HELPERS\r\n ],\r\n callback\r\n );\r\n }\r\n });\r\n }\r\n\r\n register(map) {\r\n const self = this;\r\n self.id = self.options.id || TC.getUID({\r\n prefix: self.CLASS.substr('tc-ctl'.length + 1) + '-'\r\n });\r\n return new Promise(function (resolve, _reject) {\r\n self.map = map;\r\n Promise.resolve(self.render()).then(function () {\r\n if (!self.div.parentElement) {\r\n map.div.appendChild(self);\r\n self.div = map.div;\r\n }\r\n if (self.options.active) {\r\n self.activate();\r\n }\r\n resolve(self);\r\n });\r\n });\r\n }\r\n\r\n activate() {\r\n const self = this;\r\n if (self.map && self.map.activeControl && self.map.activeControl !== self) {\r\n self.map.previousActiveControl = self.map.activeControl;\r\n self.map.activeControl.deactivate();\r\n }\r\n self.isActive = true;\r\n if (self.map) {\r\n self.map.activeControl = self;\r\n self.map.trigger(TC.Consts.event.CONTROLACTIVATE, { control: self });\r\n self.trigger(TC.Consts.event.CONTROLACTIVATE, { control: self });\r\n }\r\n }\r\n\r\n deactivate(stopChain) {\r\n if (arguments.length === 0) {\r\n stopChain = false;\r\n }\r\n\r\n const self = this;\r\n self.isActive = false;\r\n if (self.map) {\r\n self.map.activeControl = null;\r\n\r\n if (!stopChain) {\r\n //determinar cuál es el control predeterminado para reactivarlo\r\n //salvo que sea yo mismo, claro\r\n var nextControl = self.map.getDefaultControl();\r\n if (nextControl === self) nextControl = null;\r\n else if (self.map.previousActiveControl === self) // GLS: Validamos antes de activar que el control activo anterior sea distinto al control actual\r\n nextControl = null;\r\n else if (!nextControl) {\r\n nextControl = self.map.previousActiveControl;\r\n }\r\n\r\n if (nextControl)\r\n nextControl.activate();\r\n }\r\n self.map.trigger(TC.Consts.event.CONTROLDEACTIVATE, { control: self });\r\n self.trigger(TC.Consts.event.CONTROLDEACTIVATE, { control: self });\r\n }\r\n }\r\n\r\n enable() {\r\n const self = this;\r\n self.isDisabled = false;\r\n self.classList.remove(TC.Consts.classes.DISABLED);\r\n delete self.dataset.tcMessage;\r\n if (self.containerControl && self.containerControl.onControlEnable) {\r\n self.containerControl.onControlEnable(self);\r\n }\r\n }\r\n\r\n disable(options) {\r\n const self = this;\r\n options = options || {};\r\n self.isDisabled = true;\r\n self.classList.add(TC.Consts.classes.DISABLED);\r\n let message = self.getLocaleString('disabledControl');\r\n if (options.reason) {\r\n message = `${message} - ${options.reason}`;\r\n }\r\n self.dataset.tcMessage = message;\r\n if (self.containerControl && self.containerControl.onControlDisable) {\r\n self.containerControl.onControlDisable(self);\r\n }\r\n }\r\n\r\n renderPromise() {\r\n const self = this;\r\n return self._firstRender || new Promise(function (resolve, _reject) {\r\n self.one(TC.Consts.event.CONTROLRENDER, function () {\r\n resolve(self);\r\n });\r\n });\r\n }\r\n\r\n addUIEventListener(selector, event, listener) {\r\n const self = this;\r\n const elements = selector ? self.querySelectorAll(selector) : [self];\r\n elements.forEach(function (elm) {\r\n elm.addEventListener(event, listener);\r\n });\r\n }\r\n\r\n addUIEventListeners() {\r\n }\r\n\r\n isExclusive() {\r\n return false;\r\n }\r\n\r\n getLocaleString(key, texts) {\r\n const self = this;\r\n const locale = self.map ? self.map.options.locale : TC.Cfg.locale;\r\n return Util.getLocaleString(locale, key, texts);\r\n }\r\n\r\n getUID() {\r\n const self = this;\r\n return TC.getUID({\r\n prefix: self.id + '-'\r\n });\r\n }\r\n\r\n exportState() {\r\n const self = this;\r\n if (self.exportsState) {\r\n return {};\r\n }\r\n return null;\r\n }\r\n\r\n importState(_state) {\r\n }\r\n\r\n getDownloadDialog() {\r\n const self = this;\r\n self._downloadDialog = self._downloadDialog || self.map.getControlsByClass('TC.control.FeatureDownloadDialog')[0];\r\n if (self._downloadDialog) {\r\n self._downloadDialog.caller = self;\r\n return Promise.resolve(self._downloadDialog);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n self.map.addControl('FeatureDownloadDialog').then(ctl => {\r\n self._downloadDialog = ctl;\r\n self._downloadDialog.caller = self;\r\n resolve(ctl);\r\n });\r\n });\r\n }\r\n\r\n getElevationTool() {\r\n const self = this;\r\n if (!self.displayElevation && !self.options.displayElevation) {\r\n return Promise.resolve(null);\r\n }\r\n if (self.elevation) {\r\n return Promise.resolve(self.elevation);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n TC.loadJS(\r\n !TC.tool || !TC.tool.Elevation,\r\n TC.apiLocation + 'TC/tool/Elevation',\r\n function () {\r\n if (typeof self.options.displayElevation === 'boolean') {\r\n if (self.map) {\r\n self.map.getElevationTool().then(function (mapElevation) {\r\n if (mapElevation) {\r\n self.elevation = mapElevation;\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n }\r\n resolve(self.elevation);\r\n });\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation();\r\n resolve(self.elevation);\r\n }\r\n }\r\n else {\r\n if (self.map) {\r\n self.map.getElevationTool().then(function (mapElevation) {\r\n if (mapElevation) {\r\n self.elevation = new TC.tool.Elevation(TC.Util.extend(true, {}, mapElevation.options, self.options.displayElevation));\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n }\r\n resolve(self.elevation);\r\n });\r\n }\r\n else {\r\n self.elevation = new TC.tool.Elevation(self.options.displayElevation);\r\n resolve(self.elevation);\r\n }\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n #getNativeListener(evt, callback) {\r\n const result = function (evt) {\r\n const cbParameter = {\r\n type: evt.type,\r\n target: this,\r\n currentTarget: this\r\n };\r\n if (evt.detail) {\r\n Object.keys(evt.detail).forEach(function (key) {\r\n if (!(key in cbParameter)) {\r\n cbParameter[key] = evt.detail[key];\r\n }\r\n });\r\n }\r\n return callback.call(this, cbParameter);\r\n }.bind(this);\r\n const stack = this._listeners[evt] = this._listeners[evt] || new Map();\r\n stack.set(callback, result);\r\n return result;\r\n }\r\n\r\n #onInternal(events, callback, options) {\r\n const self = this;\r\n events.split(' ').forEach(function (evt) {\r\n self.addEventListener(evt, self.#getNativeListener(evt, callback), options);\r\n });\r\n return self;\r\n }\r\n\r\n on(events, callback) {\r\n const self = this;\r\n return self.#onInternal(events, callback);\r\n }\r\n\r\n one(events, callback) {\r\n return self.#onInternal(events, callback, { once: true });\r\n }\r\n\r\n off(events, callback) {\r\n const self = this;\r\n const eventList = events.split(' ');\r\n if (callback) {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack && stack.has(callback)) {\r\n self.removeEventListener(evt, stack.get(callback));\r\n }\r\n });\r\n }\r\n else {\r\n eventList.forEach(function (evt) {\r\n const stack = self._listeners[evt];\r\n if (stack) {\r\n stack.forEach(function (cb) {\r\n self.removeEventListener(evt, cb);\r\n });\r\n stack.clear();\r\n }\r\n });\r\n }\r\n return self;\r\n }\r\n\r\n trigger(type, options) {\r\n const self = this;\r\n let ceOptions;\r\n if (options) {\r\n ceOptions = {\r\n detail: options\r\n };\r\n }\r\n const event = new CustomEvent(type, ceOptions);\r\n self.dispatchEvent(event);\r\n }\r\n\r\n listenerBySelector(selector, callback) {\r\n const self = this;\r\n // Crea una estructura a partir de un mapa cuyas claves son los elementos.\r\n // Los valores son objetos cuyas claves son tipos de eventos\r\n // y cuyos valores son objetos que tienen como claves los selectores\r\n // y cuyos valores son las funciones de callback.\r\n // Se crea una función que va buscando la primera correspondencia con un selector.\r\n // En cuanto la encuentra, ejecuta el callback y deja de procesar.\r\n return function (e) {\r\n const element = this;\r\n const eventType = e.type;\r\n var eventTypes = self.#onBySelectorMap.get(element);\r\n if (!eventTypes) {\r\n eventTypes = {};\r\n self.#onBySelectorMap.set(element, eventTypes);\r\n }\r\n var selectors = eventTypes[eventType];\r\n if (!selectors) {\r\n eventTypes[eventType] = selectors = {};\r\n }\r\n if (!selectors[selector]) {\r\n selectors[selector] = callback;\r\n }\r\n // Para cada evento en cada elemento hay que llamar una sola vez al callback que toque.\r\n // Así que si se ejecuta un callback, prohibimos al resto de los listeners resolverse.\r\n if (!e._listenerBySelectorCalled) {\r\n var matches = false;\r\n var elm = e.target;\r\n var result;\r\n while (elm && elm !== element) {\r\n for (selector in selectors) {\r\n if (elm.matches && elm.matches(selector)) {\r\n matches = true;\r\n result = selectors[selector].call(element, e);\r\n e._listenerBySelectorCalled = true;\r\n }\r\n }\r\n if (matches) {\r\n return result;\r\n }\r\n elm = elm.parentNode;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static async create(type, options) {\r\n const ctorName = type.substr(0, 1).toUpperCase() + type.substr(1);\r\n if (!TC.control[ctorName]) {\r\n const module = await import('./' + ctorName);\r\n TC.control[ctorName] = module.default;\r\n }\r\n return new TC.control[ctorName](null, options);\r\n }\r\n}\r\n\r\ncustomElements.define('sitna-control', WebComponentControl);\r\nTC.control.WebComponentControl = WebComponentControl;\r\nexport default WebComponentControl;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\nimport TOC from './TOC';\r\nimport WebComponentControl from './WebComponentControl';\r\nimport Button from '../../SITNA/ui/Button';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\nimport itemToolContainer from './itemToolContainer';\r\n\r\nTC.Consts = Consts;\r\nTC.control = TC.control || {};\r\n\r\nTC.Consts.classes.DRAG = TC.Consts.classes.DRAG || 'tc-drag';\r\nTC.Consts.classes.DRAGEND = TC.Consts.classes.DRAGEND || 'tc-dragend';\r\nTC.Consts.event.TOOLSOPEN = TC.Consts.event.TOOLSOPEN || 'toolsopen.tc';\r\n\r\n//const fileOriginCompare = async function (l1, l2) {\r\n// if (l1._fileHandle && l2._fileHandle) {\r\n// return l1._fileHandle == l2._fileHandle;\r\n// //const aaa = (await l1._fileHandle.isSameEntry(l2._fileHandle));\r\n// //return aaa;\r\n// }\r\n\r\n// else\r\n// return l1._timeStamp === l2._timeStamp\r\n//};\r\n\r\nclass WorkLayerManager extends TOC {\r\n CLASS = 'tc-ctl-wlm';\r\n CLICKEVENT = 'click';\r\n\r\n constructor() {\r\n super(...arguments);\r\n const self = this;\r\n self.div.classList.remove(super.CLASS);\r\n self.div.classList.add(self.CLASS);\r\n\r\n self.template = {};\r\n self.template[self.CLASS] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-wlm-elm\"),depth0,{\"name\":\"tc-ctl-wlm-elm\",\"data\":data,\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"loadedLayers\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":4},\"end\":{\"line\":1,\"column\":27}}})) + \"

                    \\r\\n
                    \" + alias2(lookupProperty(helpers,\"i18n\").call(alias1,\"noData\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":30},\"end\":{\"line\":2,\"column\":47}}})) + \"
                    \\r\\n
                    \\r\\n
                      \" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"workLayers\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":57}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                    \";},\"usePartial\":true,\"useData\":true}\r\n self.template[self.CLASS + '-elm'] = {\"1\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0));},\"3\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(4, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":89},\"end\":{\"line\":3,\"column\":126}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":126},\"end\":{\"line\":3,\"column\":196}}})) != null ? stack1 : \"\");},\"4\":function(container,depth0,helpers,partials,data) { return \" • \";},\"6\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"unless\").call(depth0 != null ? depth0 : (container.nullContext || {}),(data && lookupProperty(data,\"first\")),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":140},\"end\":{\"line\":3,\"column\":179}}})) != null ? stack1 : \"\") + container.escapeExpression(container.lambda(depth0, depth0));},\"7\":function(container,depth0,helpers,partials,data) { return \" › \";},\"9\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":244},\"end\":{\"line\":3,\"column\":314}}})) != null ? stack1 : \"\") + \"\";},\"11\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"13\":function(container,depth0,helpers,partials,data) { return \" checked \";},\"15\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"\";},\"17\":function(container,depth0,helpers,partials,data) { return \" disabled\";},\"19\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"text=\\\"\" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"removeLayerFromMap\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":180},\"end\":{\"line\":9,\"column\":209}}})) + \"\\\" \";},\"21\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n

                    \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"abstract\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":17,\"column\":20},\"end\":{\"line\":17,\"column\":39}}})) + \"

                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"abstract\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":18,\"column\":16},\"end\":{\"line\":20,\"column\":25}}})) != null ? stack1 : \"\") + \"
                    \\r\\n\";},\"22\":function(container,depth0,helpers,partials,data) { var stack1; return \"
                    \"    + ((stack1 = container.lambda(depth0, depth0)) != null ? stack1 : \"\")    + \"
                    \\r\\n\";},\"24\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                      \\r\\n \" + ((stack1 = container.lambda((depth0 != null ? lookupProperty(depth0,\"customLegend\") : depth0), depth0)) != null ? stack1 : \"\") + \"\\r\\n
                    \\r\\n\";},\"26\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"legend\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(27, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":28,\"column\":16},\"end\":{\"line\":37,\"column\":23}}})) != null ? stack1 : \"\");},\"27\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n

                    \" + alias1(lookupProperty(helpers,\"i18n\").call(alias2,\"content\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":24},\"end\":{\"line\":30,\"column\":42}}})) + \"

                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias2,(depth0 != null ? lookupProperty(depth0,\"legend\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(28, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":31,\"column\":20},\"end\":{\"line\":35,\"column\":29}}})) != null ? stack1 : \"\") + \"
                    \\r\\n\";},\"28\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(29, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":32,\"column\":24},\"end\":{\"line\":34,\"column\":33}}})) != null ? stack1 : \"\");},\"29\":function(container,depth0,helpers,partials,data) { var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"

                    \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"title\") : depth0), depth0)) + \"

                    \\r\\n\";},\"31\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \\r\\n

                    \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"metadata\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":41,\"column\":20},\"end\":{\"line\":41,\"column\":39}}})) + \"

                    \\r\\n
                      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"metadata\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(32, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":43,\"column\":20},\"end\":{\"line\":51,\"column\":29}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                    \\r\\n\";},\"32\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  • \\r\\n
                      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{\"name\":\"each\",\"hash\":{},\"fn\":container.program(33, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":46,\"column\":24},\"end\":{\"line\":48,\"column\":33}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                  • \\r\\n\";},\"33\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  • \" + alias2(alias1((depth0 != null ? lookupProperty(depth0,\"formatDescription\") : depth0), depth0)) + \"
                  • \\r\\n\";},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  • \\r\\n
                    \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"path\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":50},\"end\":{\"line\":2,\"column\":78}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                    \" + ((stack1 = lookupProperty(helpers,\"each\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"path\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.program(1, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":224},\"end\":{\"line\":3,\"column\":347}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                    \\r\\n
                    \\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"hasInfo\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(11, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":6,\"column\":47},\"end\":{\"line\":6,\"column\":221}}})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n \" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"hasExtent\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(15, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":47},\"end\":{\"line\":8,\"column\":203}}})) != null ? stack1 : \"\") + \"\\r\\n \\r\\n \\r\\n
                    \\r\\n \\r\\n
                    \\r\\n
                    \\r\\n\" + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,\"abstract\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(21, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":15,\"column\":12},\"end\":{\"line\":22,\"column\":19}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,(depth0 != null ? lookupProperty(depth0,\"customLegend\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(24, data, 0),\"inverse\":container.program(26, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":12},\"end\":{\"line\":38,\"column\":19}}})) != null ? stack1 : \"\") + ((stack1 = lookupProperty(helpers,\"if\").call(alias3,((stack1 = (depth0 != null ? lookupProperty(depth0,\"metadata\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(31, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":39,\"column\":12},\"end\":{\"line\":54,\"column\":19}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                    \\r\\n
                  • \";},\"useData\":true}\r\n self.template[self.CLASS + '-type-sgl'] = {\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return container.escapeExpression(lookupProperty(helpers,\"i18n\").call(depth0 != null ? depth0 : (container.nullContext || {}),\"singleLayer\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":1,\"column\":22}}}));},\"useData\":true}\r\n self.template[self.CLASS + '-type-grp'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-wlm-type-grp-node\"),depth0,{\"name\":\"tc-ctl-wlm-type-grp-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                    \" + container.escapeExpression(lookupProperty(helpers,\"i18n\").call(alias1,\"groupLayerThatContains\",{\"name\":\"i18n\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":5},\"end\":{\"line\":1,\"column\":38}}})) + \":
                    \\r\\n
                      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"Layer\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":4},\"end\":{\"line\":5,\"column\":13}}})) != null ? stack1 : \"\") + \"
                    \";},\"usePartial\":true,\"useData\":true}\r\n self.template[self.CLASS + '-type-grp-node'] = {\"1\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return ((stack1 = container.invokePartial(lookupProperty(partials,\"tc-ctl-wlm-type-grp-node\"),depth0,{\"name\":\"tc-ctl-wlm-type-grp-node\",\"data\":data,\"indent\":\" \",\"helpers\":helpers,\"partials\":partials,\"decorators\":container.decorators})) != null ? stack1 : \"\");},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) { var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { return parent[propertyName]; } return undefined }; return \"
                  • \\r\\n \" + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,\"Title\") : depth0), depth0)) + \"\\r\\n
                      \\r\\n\" + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"Layer\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":6,\"column\":17}}})) != null ? stack1 : \"\") + \"
                    \\r\\n
                  • \";},\"usePartial\":true,\"useData\":true}\r\n\r\n self.layers = [];\r\n\r\n self._uiElementSelector = `ul > li.${self.CLASS}-elm`;\r\n self._toolContainerSelector = `.${self.CLASS}-tools`;\r\n\r\n self.addItemTool({\r\n renderFn: function (container, layerId) {\r\n const className = self.CLASS + '-btn-dl';\r\n\r\n let button = container.querySelector('sitna-button.' + className);\r\n if (!button) {\r\n const layer = self.map.getLayer(layerId);\r\n if (TC.layer.Vector && layer instanceof TC.layer.Vector) {\r\n const text = self.getLocaleString('downloadFeatures');\r\n button = new Button();\r\n button.variant = Button.variant.MINIMAL;\r\n button.text = text;\r\n button.icon = Button.action.DOWNLOAD_ALL;\r\n button.setAttribute('title', text);\r\n button.dataset.layerId = layerId;\r\n }\r\n }\r\n return button;\r\n },\r\n actionFn: function () {\r\n const button = this;\r\n var li = button;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const layer = self.map.getLayer(button.dataset.layerId);\r\n self.getDownloadDialog().then(function (control) {\r\n const title = layer.title || '';\r\n const options = {\r\n title: `${title} - ${self.getLocaleString('downloadFeatures')}`,\r\n fileName: /\\.[a-z0-9]+$/i.test(title) ? title.substr(0, title.lastIndexOf('.')) : title,\r\n elevation: self.map.elevation && self.map.elevation.options\r\n };\r\n control.open(layer.features, options);\r\n });\r\n }\r\n });\r\n }\r\n\r\n render(callback, options) {\r\n const self = this;\r\n return self._set1stRenderPromise(self.map ?\r\n self.renderData(options ? TC.Util.extend(self.map.getLayerTree(), options) : self.map.getLayerTree(), function () {\r\n self.addUIEventListeners();\r\n import('sortablejs').then(function (module) {\r\n const Sortable = module.default;\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return !layer.stealth;\r\n })\r\n .forEach(function (layer) {\r\n self.updateLayerTree(layer);\r\n });\r\n\r\n\r\n const ul = self.div.querySelector('ul');\r\n self._sortable = Sortable.create(ul, {\r\n handle: '.' + self.CLASS + '-dd',\r\n animation: 150,\r\n onSort: function (e) {\r\n self.#moveLayer(e.item, e.oldIndex, e.newIndex);\r\n }\r\n });\r\n\r\n ul.addEventListener('keydown', TC.EventTarget.listenerBySelector('li', function (e) {\r\n // Para mover capas con el teclado.\r\n var elm = e.target;\r\n while (elm.tagName !== 'LI') {\r\n elm = elm.parentElement;\r\n if (!elm) {\r\n return;\r\n }\r\n }\r\n const swap = function (oldIdx, newIdx) {\r\n const sortableItems = self._sortable.toArray();\r\n const buffer = sortableItems[oldIdx];\r\n sortableItems[oldIdx] = sortableItems[newIdx];\r\n sortableItems[newIdx] = buffer;\r\n self._sortable.sort(sortableItems);\r\n self.#moveLayer(elm, oldIdx, newIdx);\r\n };\r\n const listItems = self.getLayerUIElements();\r\n const elmIdx = listItems.indexOf(elm);\r\n switch (true) {\r\n case /Up$/.test(e.key):\r\n if (elmIdx > 0) {\r\n swap(elmIdx, elmIdx - 1);\r\n elm.focus();\r\n e.stopPropagation();\r\n }\r\n break;\r\n case /Down$/.test(e.key):\r\n if (elmIdx < listItems.length - 1) {\r\n swap(elmIdx, elmIdx + 1);\r\n elm.focus();\r\n e.stopPropagation();\r\n }\r\n break;\r\n case /Enter$/.test(e.key):\r\n elm.blur();\r\n e.stopPropagation();\r\n break;\r\n default:\r\n break;\r\n }\r\n }));\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n );\r\n }) :\r\n Promise.reject(Error('Cannot render: control has no map')));\r\n }\r\n\r\n async register(map) {\r\n const self = this;\r\n await super.register(map);\r\n\r\n map.loaded(function () {\r\n self.updateScale();\r\n });\r\n\r\n map\r\n .on(TC.Consts.event.LAYEROPACITY, function (e) {\r\n const li = self.#findLayerElement(e.layer);\r\n if (li) {\r\n li.querySelector('input[type=range]').value = Math.round(e.opacity * 100);\r\n }\r\n })\r\n .on(TC.Consts.event.FEATURESIMPORT, function (e) {\r\n var fileName = e.fileName;\r\n if (e.features && e.features.length > 0) { // GLS: Escuchamos al evento FEATURESIMPORT para poder desplegar el control de capas cargadas\r\n // Ignoramos los GPX (se supone que los gestionará Geolocation)\r\n var pattern = '.' + TC.Consts.format.GPX.toLowerCase();\r\n if (e.fileName.toLowerCase().indexOf(pattern) === e.fileName.length - pattern.length) {\r\n return;\r\n }\r\n\r\n map.one(TC.Consts.event.LAYERADD, function (e) {\r\n if (e && e.layer && e.layer.title === fileName) {\r\n // Desplegamos el control capas cargadas\r\n if (self.map && self.map.layout && self.map.layout.accordion) {\r\n if (self.div.classList.contains(TC.Consts.classes.COLLAPSED)) {\r\n self.map.controls\r\n .filter(function (ctl) {\r\n // Todos los otros controles que no cuelgan de otro control\r\n return ctl !== self && !ctl.containerControl;\r\n })\r\n .forEach(function (ctl) {\r\n let element;\r\n if (ctl instanceof WebComponentControl) {\r\n element = ctl;\r\n }\r\n else {\r\n element = ctl.div;\r\n }\r\n element.classList.add(TC.Consts.classes.COLLAPSED);\r\n });\r\n }\r\n }\r\n\r\n // abrimos el panel de herramientas\r\n self.map.trigger(TC.Consts.event.TOOLSOPEN);\r\n\r\n self.div.classList.remove(TC.Consts.classes.COLLAPSED);\r\n }\r\n });\r\n }\r\n });\r\n return self;\r\n }\r\n\r\n onExternalServiceAdded(_e) {\r\n // Este control no tiene que aceptar servicios externos directamente\r\n }\r\n\r\n addUIEventListeners() {\r\n const self = this;\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`sitna-toggle.${self.CLASS}-cb-visibility`, function (e) {\r\n // al estar en ipad el evento pasa a ser touchstart en la constante: TC.Consts.event.CLICK, los checkbox no funcionan bien con este evento\r\n const checkbox = e.target;\r\n var li = checkbox;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && !li.matches('li.' + self.CLASS + '-elm'));\r\n\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n layer.setVisibility(checkbox.checked);\r\n e.stopPropagation();\r\n }));\r\n\r\n const inputRangeListener = function (e) {\r\n const range = e.target;\r\n var li = range;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n layer.setOpacity(range.value / 100);\r\n };\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector('input[type=range]', inputRangeListener));\r\n self.div.addEventListener('input', TC.EventTarget.listenerBySelector('input[type=range]', inputRangeListener));\r\n\r\n self.div.addEventListener('change', TC.EventTarget.listenerBySelector(`.${self.CLASS}-cb-info`, function (e) {\r\n const checkbox = e.target;\r\n var li = checkbox;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const info = li.querySelector('.' + self.CLASS + '-info');\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n // Cargamos la imagen de la leyenda\r\n info.querySelectorAll('.' + self.CLASS + '-legend img').forEach(function (img) {\r\n self.styleLegendImage(img, layer);\r\n });\r\n info.classList.toggle(TC.Consts.classes.HIDDEN, !checkbox.checked);\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector(`.${self.CLASS}-btn-del:not(:disabled)`, function (e) {\r\n var li = e.target;\r\n do {\r\n li = li.parentElement;\r\n }\r\n while (li && li.tagName !== 'LI');\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n self.map.removeLayer(layer);\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector('.' + self.CLASS + '-del-all', function (e) {\r\n TC.confirm(self.getLocaleString('layersRemove.confirm'), function () {\r\n self.getLayerUIElements()\r\n .map(function (li) {\r\n return self.map.getLayer(li.dataset.layerId);\r\n })\r\n .forEach(function (layer) {\r\n self.map.removeLayer(layer);\r\n });\r\n });\r\n e.stopPropagation();\r\n }));\r\n\r\n self.div.addEventListener(self.CLICKEVENT, TC.EventTarget.listenerBySelector(`.${self.CLASS}-btn-more`, function (e) {\r\n const button = e.target;\r\n const container = button.parentElement;\r\n const isExpanded = container.classList.toggle('tc-expanded');\r\n button.title = isExpanded ? '' : self.getLocaleString('otherTools');\r\n button.iconText = isExpanded ? '\\u2bc7' : '\\u2022\\u2022\\u2022';\r\n }));\r\n }\r\n\r\n updateLayerVisibility(layer) {\r\n const self = this;\r\n const li = self.#findLayerElement(layer);\r\n if (li) {\r\n const visible = layer.getVisibility();\r\n li.querySelector(`sitna-toggle.${self.CLASS}-cb-visibility`).checked = visible;\r\n }\r\n }\r\n\r\n updateLayerTree(layer) {\r\n const self = this;\r\n\r\n var getLegendImgByPost = function (layer) {\r\n return new Promise(function (resolve, _reject) {\r\n if (layer && layer.options.method && layer.options.method === \"POST\") {\r\n layer.getLegendGraphicImage()\r\n .then(function (src) {\r\n resolve(src);\r\n })\r\n .catch(function (err) { TC.error(err); });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n };\r\n\r\n if (!layer.isBase && !layer.options.stealth) {\r\n TC.control.MapContents.prototype.updateLayerTree.call(self, layer);\r\n\r\n var alreadyExists = false;\r\n for (var i = 0, len = self.layers.length; i < len; i++) {\r\n if (layer === self.layers[i]) {\r\n alreadyExists = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!alreadyExists) {\r\n self.layers.push(layer);\r\n\r\n var domReadyPromise;\r\n const layerTitle = layer.title || layer.wrap.getServiceTitle && layer.wrap.getServiceTitle();\r\n layer._title = layerTitle;\r\n var layerData = {\r\n title: layer.options.hideTitle ? '' : layerTitle,\r\n hide: layer.renderOptions && layer.renderOptions.hide ? true : false,\r\n opacity: layer.renderOptions && layer.renderOptions.opacity ? layer.renderOptions.opacity * 100 : 100,\r\n customLegend: layer.customLegend,\r\n unremovable: layer.unremovable,\r\n id: layer.id\r\n };\r\n var isRaster = layer.isRaster();\r\n if (isRaster) {\r\n layerData.hasExtent = !!layer.getExtent();\r\n layerData.layerNames = layer.layerNames;\r\n const path = layer.names.map(n => layer.getPath(n));\r\n path.forEach(p => p.shift());\r\n layerData.path = path;\r\n layerData.legend = [];\r\n layerData.abstract = [];\r\n layerData.metadata = [];\r\n layer.names.forEach(function (name) {\r\n var info = layer.getInfo(name);\r\n layerData.legend.push(info.legend);\r\n layerData.abstract.push(info.abstract);\r\n layerData.metadata.push(info.metadata);\r\n });\r\n\r\n const info = layer.getInfo();\r\n layerData.hasInfo = Object.prototype.hasOwnProperty.call(info, 'abstract') ||\r\n Object.prototype.hasOwnProperty.call(info, 'legend') ||\r\n Object.prototype.hasOwnProperty.call(info, 'metadata');\r\n }\r\n else {\r\n layerData.hasExtent = true;\r\n layerData.hasInfo = false;\r\n }\r\n\r\n getLegendImgByPost(layer).then(function (_src) {\r\n\r\n self.getRenderedHtml(self.CLASS + '-elm', layerData).then(function (out) {\r\n const parser = new DOMParser();\r\n const li = parser.parseFromString(out, 'text/html').body.firstChild;\r\n var layerNode;\r\n var isGroup = false;\r\n var i;\r\n if (isRaster) {\r\n isGroup = layer.names.length > 1;\r\n if (!isGroup) {\r\n const name = layer.names[0];\r\n const layerNodes = layer.wrap.getAllLayerNodes();\r\n for (i = 0; i < layerNodes.length; i++) {\r\n var node = layerNodes[i];\r\n if (layer.wrap.getName(node) === name) {\r\n layerNode = node;\r\n if (layer.wrap.getLayerNodes(node).length > 0) {\r\n isGroup = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const typeElm = li.querySelector('.' + self.CLASS + '-type');\r\n const className = isGroup ? self.CLASS + '-type-grp' : self.CLASS + '-type-sgl';\r\n typeElm.classList.add(className);\r\n\r\n const zoomBtn = li.querySelector(`.${self.CLASS}-btn-zoom`);\r\n if (zoomBtn) {\r\n zoomBtn.addEventListener(TC.Consts.event.CLICK, function (_e) {\r\n self.map.zoomToLayer(li.dataset.layerId, { animate: true });\r\n }, { passive: true });\r\n }\r\n\r\n if (layerNode) {\r\n layer.wrap.normalizeLayerNode(layerNode);\r\n\r\n self.getRenderedHtml(className, layerNode).then(function (out) {\r\n var tip;\r\n\r\n typeElm.addEventListener('mouseover', function (_e) {\r\n const mapDiv = self.map.div;\r\n const typeElmRect = typeElm.getBoundingClientRect();\r\n tip = document.createElement('div');\r\n tip.classList.add(self.CLASS + '-tip');\r\n tip.innerHTML = out;\r\n tip.style.top = typeElmRect.top - mapDiv.offsetTop + 'px';\r\n tip.style.right = mapDiv.offsetWidth - (typeElmRect.left - mapDiv.offsetLeft) + 'px';\r\n mapDiv.appendChild(tip);\r\n });\r\n typeElm.addEventListener('mouseout', function (_e) {\r\n tip.parentElement.removeChild(tip);\r\n });\r\n });\r\n }\r\n const ul = self.div.querySelector('ul');\r\n li.dataset.layerId = layer.id;\r\n\r\n const lis = self.getLayerUIElements();\r\n const layerList = self.map.workLayers\r\n .filter(function (l) {\r\n return !l.stealth;\r\n });\r\n const layerIdx = layerList.indexOf(layer);\r\n\r\n self.getItemTools().forEach(tool => self.addItemToolUI(li, tool));\r\n\r\n var inserted = false;\r\n for (i = 0; i < lis.length; i++) {\r\n const referenceLi = lis[i];\r\n const referenceLayerIdx = layerList.indexOf(self.map.getLayer(referenceLi.dataset.layerId));\r\n if (referenceLayerIdx < layerIdx) {\r\n referenceLi.insertAdjacentElement('beforebegin', li);\r\n inserted = true;\r\n break;\r\n }\r\n }\r\n if (!inserted) {\r\n ul.appendChild(li);\r\n }\r\n\r\n if (domReadyPromise) domReadyPromise(li);\r\n self.updateScale();\r\n });\r\n });\r\n\r\n var elligibleLayersNum = self.#getElligibleLayersNumber();\r\n const numElm = self.div.querySelector('.' + self.CLASS + '-n');\r\n const emptyElm = self.div.querySelector('.' + self.CLASS + '-empty');\r\n const contentElm = self.div.querySelector('.' + self.CLASS + '-content');\r\n numElm.textContent = elligibleLayersNum;\r\n if (elligibleLayersNum > 0) {\r\n numElm.classList.add(TC.Consts.classes.VISIBLE);\r\n emptyElm.classList.add(TC.Consts.classes.HIDDEN);\r\n contentElm.classList.remove(TC.Consts.classes.HIDDEN);\r\n }\r\n else {\r\n numElm.classList.remove(TC.Consts.classes.VISIBLE);\r\n emptyElm.classList.remove(TC.Consts.classes.HIDDEN);\r\n contentElm.classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n\r\n const deleteAllElm = self.div.querySelector('.' + self.CLASS + '-del-all');\r\n deleteAllElm.classList.toggle(TC.Consts.classes.HIDDEN, !self.#shouldBeDelAllVisible());\r\n }\r\n else {\r\n let layerTitle = layer.title || layer.wrap.getServiceTitle && layer.wrap.getServiceTitle();\r\n //comprobar si hay capas con títulos repetidos \r\n const regExpConstr = function () {\r\n return new RegExp(layer.id.replace(/([\\w]*-\\d)(-\\d)*/gi, \"$1-\\\\d\"), \"gi\");\r\n };\r\n //filtramos las capas por aquellas que sean hermanas es decir file-1-[numero_fichero]-[numero capa] y busco la posición de la capa actual\r\n //en el array filtrado\r\n const index = (self.layers.filter((l) => l.title === layer.title).reduce((vi, va) => {\r\n const layerIdRoot = regExpConstr().exec(va.id) ? regExpConstr().exec(va.id)[0]:va.id;\r\n return vi.indexOf(layerIdRoot) >= 0 ? vi : vi.concat(layerIdRoot);\r\n }, []).findIndex((l) => l === /^[\\w]*-\\d-\\d/gi.exec(layer.id) || [layer.id][0]));\r\n //Si la posición es mayor que 0, añado el ordinal al titulo de capa\r\n if (index > 0)\r\n layer._title = layerTitle = layerTitle + \" (\" + (index + 1) + \")\";\r\n const prevLi = self.div.querySelector(\"ul li[data-layer-id='\" + layer.id + \"']\");\r\n if (layer.features && layer.features.length) {\r\n if (layer.features[0].getPath().length) {\r\n prevLi.querySelector(\".tc-ctl-wlm-lyr\").innerHTML = layerTitle;\r\n prevLi.querySelector(\".tc-ctl-wlm-lyr\").title = layerTitle;\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").innerHTML = layer.features[0].getPath().join(' › ');\r\n }\r\n else {\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").innerHTML = layerTitle;\r\n prevLi.querySelector(\".tc-ctl-wlm-path\").title = layerTitle;\r\n }\r\n\r\n } \r\n }\r\n }\r\n }\r\n\r\n updateScale() {\r\n const self = this;\r\n self.getLayerUIElements().forEach(function (li) {\r\n var layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer && layer.names) {\r\n var isVisible = false;\r\n for (var i = 0; i < layer.names.length; i++) {\r\n if (layer.isVisibleByScale(layer.names[i])) {\r\n isVisible = true;\r\n break;\r\n }\r\n }\r\n li.classList.toggle(self.CLASS + '-elm-notvisible', !isVisible);\r\n }\r\n });\r\n }\r\n\r\n update() {\r\n const self = this;\r\n\r\n self.getLayerUIElements().forEach(function (li) {\r\n const layer = self.map.getLayer(li.dataset.layerId);\r\n if (layer) {\r\n li.querySelector(`sitna-toggle.${self.CLASS}-cb-visibility`).checked = layer.getVisibility();\r\n layer.tree = null;\r\n }\r\n });\r\n\r\n self.updateScale();\r\n }\r\n\r\n updateLayerOrder(_layer, _oldIdx, _newIdx) {\r\n const self = this;\r\n self.map.workLayers\r\n .filter(function (layer) {\r\n return !layer.stealth;\r\n })\r\n .forEach(function (layer) {\r\n const li = self.#findLayerElement(layer);\r\n if (li) {\r\n li.parentElement.firstChild.insertAdjacentElement('beforebegin', li);\r\n }\r\n });\r\n }\r\n\r\n removeLayer(layer) {\r\n const self = this;\r\n const idx = self.layers.indexOf(layer);\r\n if (idx >= 0) {\r\n self.layers.splice(idx, 1);\r\n }\r\n self.getLayerUIElements().forEach(function (li) {\r\n if (li.dataset.layerId === layer.id) {\r\n li.parentElement.removeChild(li);\r\n }\r\n });\r\n const contentElm = self.div.querySelector('.' + self.CLASS + '-content');\r\n const emptyElm = self.div.querySelector('.' + self.CLASS + '-empty');\r\n const numberElm = self.div.querySelector('.' + self.CLASS + '-n');\r\n var nChildren = self.#getElligibleLayersNumber();\r\n numberElm.textContent = nChildren;\r\n if (nChildren > 0) {\r\n contentElm.classList.remove(TC.Consts.classes.HIDDEN);\r\n emptyElm.classList.add(TC.Consts.classes.HIDDEN);\r\n numberElm.classList.add(TC.Consts.classes.VISIBLE);\r\n }\r\n else {\r\n if (self.#shouldBeDelAllVisible()) {\r\n self.div.querySelector('.' + self.CLASS + '-del-all').classList.add(TC.Consts.classes.HIDDEN);\r\n }\r\n contentElm.classList.add(TC.Consts.classes.HIDDEN);\r\n emptyElm.classList.remove(TC.Consts.classes.HIDDEN);\r\n numberElm.classList.remove(TC.Consts.classes.VISIBLE);\r\n }\r\n }\r\n\r\n getLayerUIElements() {\r\n const self = this;\r\n return Array.from(self.div.querySelectorAll(`ul > li.${self.CLASS}-elm`));\r\n }\r\n\r\n #findLayerElement(layer) {\r\n this.getLayerUIElements().find(li => li.dataset.layerId === layer.id);\r\n };\r\n\r\n #shouldBeDelAllVisible = function () {\r\n return !this.layers.some(layer => layer.unremovable);\r\n };\r\n\r\n #getElligibleLayersNumber() {\r\n return this.layers.length;\r\n }\r\n\r\n #moveLayer = function (listItem, oldIndex, newIndex, callback) {\r\n const self = this;\r\n const layerItems = self.getLayerUIElements();\r\n var targetItem;\r\n if (newIndex > oldIndex) {\r\n targetItem = layerItems[newIndex - 1];\r\n }\r\n else if (newIndex < oldIndex) {\r\n targetItem = layerItems[newIndex + 1];\r\n }\r\n else {\r\n return;\r\n }\r\n const sourceLayer = self.map.getLayer(listItem.dataset.layerId);\r\n const targetLayer = self.map.getLayer(targetItem.dataset.layerId);\r\n const newIdx = self.map.layers.indexOf(targetLayer);\r\n if (newIdx >= 1 && newIdx < self.map.layers.length) {\r\n self.map.insertLayer(sourceLayer, newIdx, callback);\r\n }\r\n };\r\n}\r\n\r\nTC.mix(WorkLayerManager, itemToolContainer);\r\n\r\nexport default WorkLayerManager;","import TC from '../../TC';\r\nimport Util from '../Util';\r\n\r\nTC.Util = Util;\r\nTC.control = TC.control || {};\r\n\r\n// Mixin\r\nTC.control.infoShare = {\r\n\r\n getDiv: function (divElement) {\r\n const self = this;\r\n return divElement ? divElement : self._dialogDiv;\r\n },\r\n\r\n getShareDialog: function (divElement) {\r\n const self = this;\r\n const dialogDiv = self.getDiv(divElement);\r\n if (self._shareCtl) {\r\n return Promise.resolve(self._shareCtl);\r\n }\r\n return new Promise(function (resolve, _reject) {\r\n self.map.addControl('share', {\r\n id: self.getUID(),\r\n div: dialogDiv.querySelector('.tc-modal-body .' + self.CLASS + '-share-dialog-ctl'),\r\n includeControls: false\r\n }).then(ctl => {\r\n self._shareCtl = ctl;\r\n self._shareCtl.caller = self;\r\n self._shareCtl.extraParams = null;\r\n resolve(ctl);\r\n });\r\n });\r\n },\r\n\r\n onShowShareDialog: async function () {\r\n const self = this;\r\n self.toShare = self.toShare || {};\r\n self.toShare.doZoom = true;\r\n // para gestionar el zoom a la feature al compartir desde el control o el general, ya que la capa que contiene la feature no cambia por lo que no salta.\r\n self.map.trigger(TC.Consts.event.MAPCHANGE);\r\n const shareCtl = self._shareCtl;\r\n const shareDiv = shareCtl.div;\r\n const link = await shareCtl.generateLink();\r\n const input = shareDiv.querySelector(\".tc-url input[type=text]\");\r\n input.value = link;\r\n delete input.dataset.update;\r\n delete input.dataset.shortened;\r\n shareDiv.querySelector(\".tc-iframe input[type=text]\").value = await shareCtl.generateIframe(link);\r\n },\r\n\r\n showShareDialog: function (divElement) {\r\n const self = this;\r\n const dialogDiv = self.getDiv(divElement);\r\n const shareDialog = dialogDiv.querySelector('.' + self.CLASS + '-share-dialog');\r\n TC.Util.showModal(shareDialog, {\r\n openCallback: function () {\r\n self.onShowShareDialog(shareDialog).then(function () {\r\n self.map.trigger(TC.Consts.event.DIALOG, { control: self._shareCtl, action: \"share\" });\r\n });\r\n },\r\n closeCallback: function () {\r\n self.onCloseShareDialog();\r\n }\r\n });\r\n },\r\n\r\n onCloseShareDialog: function () {\r\n const self = this;\r\n self.toShare = self.toShare || {};\r\n self.toShare.doZoom = false;\r\n // para gestionar el zoom a la feature al compartir desde el control o el general, ya que la capa que contiene la feature no cambia por lo que no salta.\r\n self.map.trigger(TC.Consts.event.MAPCHANGE);\r\n }\r\n\r\n};\r\n\r\nconst infoShare = TC.control.infoShare;\r\nexport default infoShare;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Consts from '../Consts';\r\nimport Toggle from '../../SITNA/ui/Toggle';\r\n\r\nTC.Util = Util;\r\nTC.control = TC.control || {};\r\n\r\n// Mixin\r\nconst itemToolContainer = {\r\n\r\n _uiElementSelector: `ul > li`,\r\n _toolContainerSelector: '.tc-item-tools',\r\n isItemToolContainer: true,\r\n\r\n getItemTools: function () {\r\n const self = this;\r\n if (!self.itemTools) {\r\n self.itemTools = [];\r\n }\r\n return self.itemTools;\r\n },\r\n\r\n getItemUIElements: function (selector) {\r\n const self = this;\r\n if (selector) {\r\n self._uiElementSelector = selector;\r\n }\r\n return Array.from(self.div.querySelectorAll(self._uiElementSelector));\r\n },\r\n\r\n getToolContainer: function (itemElement) {\r\n const self = this;\r\n return itemElement.querySelector(self._toolContainerSelector);\r\n },\r\n\r\n addItemToolUI: function(elm, tool) {\r\n const self = this;\r\n if (Util.isFunction(tool.renderFn)) {\r\n const container = self.getToolContainer(elm);\r\n const button = tool.renderFn(container, elm.dataset.layerId);\r\n if (button) {\r\n const lastButton = container.querySelector(`.tc-item-tool-last`);\r\n if (lastButton) {\r\n lastButton.insertAdjacentElement('beforebegin', button);\r\n }\r\n else {\r\n container.appendChild(button);\r\n }\r\n if (Util.isFunction(tool.actionFn)) {\r\n const eventName = (button instanceof Toggle) ? 'change' : Consts.event.CLICK;\r\n button.addEventListener(eventName, function (_e) {\r\n tool.actionFn.call(button);\r\n }, { passive: true });\r\n }\r\n if (Util.isFunction(tool.updateFn) && tool.updateEvents) {\r\n self.map.on(tool.updateEvents.join(' '), function (e) {\r\n if (!e.layer || e.layer.id === button.dataset.layerId) {\r\n tool.updateFn.call(button, e);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n addItemTool: function(options) {\r\n const self = this;\r\n self.getItemTools().push(options);\r\n self.getItemUIElements().forEach(function (elm) {\r\n self.addItemToolUI(elm, options);\r\n });\r\n }\r\n\r\n};\r\n\r\nTC.control.itemToolContainer = itemToolContainer;\r\nexport default itemToolContainer;","import TC from '../../TC';\r\nimport Consts from '../Consts';\r\n\r\n\r\n// Mixin\r\nconst layerOwner = {\r\n\r\n getLayers: function () {\r\n const self = this;\r\n if (!self.layers) {\r\n self.layers = [];\r\n }\r\n return self.layers;\r\n },\r\n\r\n registerLayerAdd: function () {\r\n const self = this;\r\n self.map.on(Consts.event.LAYERADD, function (e) {\r\n const match = self.getIdCount(e.layer.id);\r\n if (match) {\r\n TC.setUIDStart(match + 1, { prefix: self.id + '-' });\r\n e.layer.owner = self;\r\n }\r\n });\r\n },\r\n\r\n getIdCount: function (id) {\r\n const self = this;\r\n const regEx = new RegExp(`^${self.id}(-(\\\\d+))*$`);\r\n const match = id.match(regEx);\r\n if (match) {\r\n return parseInt(match[1]);\r\n }\r\n return 0;\r\n }\r\n\r\n};\r\n\r\nexport default layerOwner;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nimport Point from './Point';\r\nimport i18n from '../i18n';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\nTC.feature.Point = Point;\r\nTC.i18n = TC.i18n || i18n;\r\n\r\n/**\r\n *

                    Opciones de estilo de marcador (punto de mapa con icono). Esta clase no tiene constructor.

                    \r\n * @class TC.cfg.MarkerStyleOptions\r\n * @static\r\n */\r\n/**\r\n * URL de la imagen del icono del marcador.\r\n * @property url\r\n * @type string\r\n */\r\n/**\r\n * Clase CSS de la que obtener el icono del marcador, extrayendo la URL de la imagen del atributo background-image asociado a la clase.\r\n * @property cssClass\r\n * @type string\r\n * @default \"tc-marker1\"\r\n */\r\n/**\r\n * Lista de nombres de clase CSS a utilizar para los iconos de los marcadores. La API extraerá la URL de las imágenes del atributo background-image asociado a la clase.\r\n * @property classes\r\n * @type array\r\n * @default [\"tc-marker1\", \"tc-marker2\", \"tc-marker3\", \"tc-marker4\", \"tc-marker5\"]\r\n */\r\n/**\r\n * Posicionamiento relativo del icono respecto al punto del mapa, representado por un array de dos números entre 0 y 1, siendo [0, 0] la esquina superior izquierda del icono.\r\n * @property anchor\r\n * @type array\r\n * @default [.5, 1]\r\n */\r\n/**\r\n * Anchura en píxeles del icono.\r\n * @property width\r\n * @type number\r\n * @default 32\r\n */\r\n/**\r\n * Altura en píxeles del icono.\r\n * @property height\r\n * @type number\r\n * @default 32\r\n */\r\n/**\r\n * Nombre del grupo en el que incluir el marcador. Los grupos de marcadores son entidades para facilitar la organización de estos: \r\n * por un lado, un grupo se mostrará en la tabla de contenidos y en la leyenda, por otro, si no se especifica explícitamente un icono para el marcador, \r\n * todos los marcadores del mismo grupo tendrán el mismo icono. La asignación de icono a grupo se hará rotando entre los elementos de la propiedad \r\n * {{#crossLink \"TC.cfg.MarkerStyleOptions/classes:property\"}}{{/crossLink}}.\r\n * @property group\r\n * @type string\r\n * @default 32\r\n */\r\n\r\n/*\r\n * Map marker, with icon\r\n * Parameters: coords, 2 element array of numbers or OpenLayers vector; options, object\r\n * available options: url, cssClass, group, width, height, anchor\r\n */\r\nTC.feature.Marker = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n var locale = self.layer && self.layer.map ? self.layer.map.options.locale: TC.Cfg.locale;\r\n self.title = self.options.title || TC.i18n[locale][TC.Consts.MARKER];\r\n self.wrap.createMarker(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.Marker, TC.feature.Point);\r\n\r\nTC.feature.Marker.prototype.STYLETYPE = 'marker';\r\n\r\nTC.feature.Marker.prototype.CLASSNAME = 'TC.feature.Marker';\r\n\r\nconst Marker = TC.feature.Marker;\r\nexport default Marker;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nimport MultiPoint from './MultiPoint';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\nTC.feature.MultiPoint = MultiPoint;\r\n\r\nTC.feature.MultiMarker = function (coords, options) {\r\n var self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createMultiMarker(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.MultiMarker, TC.feature.MultiPoint);\r\n\r\nTC.feature.MultiMarker.prototype.STYLETYPE = 'marker';\r\n\r\nTC.feature.MultiMarker.prototype.CLASSNAME = 'TC.feature.MultiMarker';\r\n\r\nTC.feature.MultiMarker.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords)) {\r\n if(!Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new Error('Coordinates not valid for multimarker');\r\n }\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.MultiMarker.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n return coords;\r\n};\r\n\r\nconst MultiMarker = TC.feature.MultiMarker;\r\nexport default MultiMarker;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\nTC.feature.MultiPoint = function (coords, options) {\r\n var self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createMultiPoint(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.MultiPoint, TC.Feature);\r\n\r\nTC.feature.MultiPoint.prototype.STYLETYPE = TC.Consts.geom.POINT;\r\n\r\nTC.feature.MultiPoint.prototype.CLASSNAME = 'TC.feature.MultiPoint';\r\n\r\nTC.feature.MultiPoint.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords)) {\r\n if(!Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new Error('Coordinates not valid for multipoint');\r\n }\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.MultiPoint.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n return coords;\r\n};\r\n\r\nconst MultiPoint = TC.feature.MultiPoint;\r\nexport default MultiPoint;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\n/*\r\n * MultiPolygon\r\n * Parameters: coords, array of array of array of 2 element arrays of numbers; options, object\r\n */\r\nTC.feature.MultiPolygon = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createMultiPolygon(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.MultiPolygon, TC.Feature);\r\n\r\nTC.feature.MultiPolygon.prototype.STYLETYPE = TC.Consts.geom.POLYGON;\r\n\r\nTC.feature.MultiPolygon.prototype.CLASSNAME = 'TC.feature.MultiPolygon';\r\n\r\nTC.feature.MultiPolygon.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n if (options.pointArray) {\r\n return [].concat.apply([], [].concat.apply([], coords));\r\n }\r\n return coords;\r\n};\r\n\r\nTC.feature.MultiPolygon.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && Array.isArray(coords[0])) {\r\n if (!Array.isArray(coords[0][0])) {\r\n coords = [[coords]];\r\n }\r\n else if (!Array.isArray(coords[0][0][0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new Error('Coordinates not valid for multipolygon');\r\n }\r\n coords.forEach(function (polygon) {\r\n polygon.forEach(function (ring) {\r\n const startPoint = ring[0];\r\n const endPoint = ring[ring.length - 1];\r\n if (startPoint[0] !== endPoint[0] || startPoint[1] !== endPoint[1]) {\r\n ring[ring.length] = startPoint;\r\n }\r\n });\r\n });\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.MultiPolygon.prototype.getLength = function (options) {\r\n return this.wrap.getLength(options);\r\n};\r\n\r\nconst MultiPolygon = TC.feature.MultiPolygon;\r\nexport default MultiPolygon;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\n/*\r\n * Polyline\r\n * Parameters: coords, array of 2 element arrays of numbers; options, object\r\n */\r\nTC.feature.MultiPolyline = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createMultiPolyline(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.MultiPolyline, TC.Feature);\r\n\r\nTC.feature.MultiPolyline.prototype.STYLETYPE = \"line\";\r\n\r\nTC.feature.MultiPolyline.prototype.CLASSNAME = 'TC.feature.MultiPolyline';\r\n\r\nTC.feature.MultiPolyline.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n if (options.pointArray) {\r\n return [].concat.apply([], coords);\r\n }\r\n return coords;\r\n};\r\n\r\nTC.feature.MultiPolyline.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && Array.isArray(coords[0]) && !Array.isArray(coords[0][0])) {\r\n coords = [coords];\r\n }\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.MultiPolyline.prototype.getLength = function (options) {\r\n return this.wrap.getLength(options);\r\n};\r\n\r\nconst MultiPolyline = TC.feature.MultiPolyline;\r\nexport default MultiPolyline;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\n/**\r\n *

                    Opciones de estilo de punto. Esta clase no tiene constructor.

                    \r\n * @class TC.cfg.PointStyleOptions\r\n * @static\r\n */\r\n/**\r\n * Radio en píxeles del símbolo del punto.\r\n * @property radius\r\n * @type number\r\n * @default 8\r\n */\r\n/**\r\n * Color de relleno del símbolo del punto. Cadena en formato #rgb, #rrggbb, rgb(r,g,b) o rgba(r,g,b,a).\r\n * @property fillColor\r\n * @type string\r\n */\r\n/**\r\n * Opacidad de relleno del símbolo del punto. Número entre 0 (transparente) y 1 (opaco).\r\n * @property fillOpacity\r\n * @type number\r\n */\r\n/**\r\n * Color de línea del símbolo del punto. Cadena en formato #rgb, #rrggbb, rgb(r,g,b) o rgba(r,g,b,a).\r\n * @property strokeColor\r\n * @type string\r\n */\r\n/**\r\n * Ancho de línea en píxeles del símbolo del punto.\r\n * @property strokeWidth\r\n * @type number\r\n * @default 2\r\n */\r\n/**\r\n * Nombre del grupo en el que incluir el punto. Los grupos de puntos son entidades para facilitar la organización de estos, \r\n * ya que un grupo se mostrará en la tabla de contenidos y en la leyenda.\r\n * @property group\r\n * @type string\r\n * @default 32\r\n */\r\n\r\n/*\r\n * Map marker, with icon\r\n * Parameters: coords, 2 element array of numbers or OpenLayers vector; options, object\r\n * available options: url, cssClass, group, width, height, anchor\r\n */\r\nTC.feature.Point = function (coords, options) {\r\n var self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.feature = coords;\r\n self.wrap.createPoint(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.Point, TC.Feature);\r\n\r\nTC.feature.Point.prototype.STYLETYPE = TC.Consts.geom.POINT;\r\n\r\nTC.feature.Point.prototype.CLASSNAME = 'TC.feature.Point';\r\n\r\nTC.feature.Point.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n if (options.pointArray) {\r\n return [coords];\r\n }\r\n return coords;\r\n};\r\n\r\nconst Point = TC.feature.Point;\r\nexport default Point;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\n/*\r\n * Polygon\r\n * Parameters: coords, array of array of 2 element arrays of numbers; options, object\r\n */\r\nTC.feature.Polygon = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createPolygon(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.Polygon, TC.Feature);\r\n\r\nTC.feature.Polygon.prototype.STYLETYPE = TC.Consts.geom.POLYGON;\r\n\r\nTC.feature.Polygon.prototype.CLASSNAME = 'TC.feature.Polygon';\r\n\r\nTC.feature.Polygon.prototype.getCoords = function (options) {\r\n options = options || {};\r\n const coords = TC.Feature.prototype.getCoords.call(this, options);\r\n if (options.pointArray) {\r\n return [].concat.apply([], coords);\r\n }\r\n return coords;\r\n};\r\n\r\nTC.feature.Polygon.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && Array.isArray(coords[0])) {\r\n if (!Array.isArray(coords[0][0])) {\r\n coords = [coords];\r\n }\r\n }\r\n else {\r\n throw new Error('Coordinates not valid for polygon');\r\n }\r\n coords.forEach(function (ring) {\r\n const startPoint = ring[0];\r\n const endPoint = ring[ring.length - 1];\r\n if (startPoint[0] !== endPoint[0] || startPoint[1] !== endPoint[1]) {\r\n ring[ring.length] = startPoint;\r\n }\r\n });\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.Polygon.prototype.getLength = function (options) {\r\n return this.wrap.getLength(options);\r\n};\r\n\r\nTC.feature.Polygon.prototype.getArea = function (options) {\r\n return this.wrap.getArea(options);\r\n};\r\n\r\nconst Polygon = TC.feature.Polygon;\r\nexport default Polygon;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\n/*\r\n * Polyline\r\n * Parameters: coords, array of 2 element arrays of numbers; options, object\r\n */\r\nTC.feature.Polyline = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createPolyline(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.Polyline, TC.Feature);\r\n\r\nTC.feature.Polyline.prototype.STYLETYPE = \"line\";\r\n\r\nTC.feature.Polyline.prototype.CLASSNAME = 'TC.feature.Polyline';\r\n\r\nTC.feature.Polyline.prototype.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords) && !Array.isArray(coords[0])) {\r\n coords = [coords];\r\n }\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n};\r\n\r\nTC.feature.Polyline.prototype.getLength = function (options) {\r\n return this.wrap.getLength(options);\r\n};\r\n\r\nconst Polyline = TC.feature.Polyline;\r\nexport default Polyline;","import TC from '../TC';\r\nTC.filter = {};\r\n\r\nTC.filter.Filter = function (tagName) {\r\n this.tagName_ = tagName;\r\n \r\n this._defaultNSURL = \"http://www.opengis.net/ogc\";\r\n this._defaultPrefixNS = this._wfsPrefixNS = \"ogc\";\r\n this._fieldTitle = \"PropertyName\";\r\n\r\n this._defaultNSURL = this._wfsNSURL = \"http://www.opengis.net/ogc\";\r\n this._wfs2prefixNS = \"fes\";\r\n this._wfs2NSURL = \"http://www.opengis.net/fes/2.0\";\r\n this._wfs2FieldTitle = \"ValueReference\";\r\n this._escapeAttrName = \"escape\";\r\n this._wfs2EscapeAttrName = \"escapeChar\";\r\n};\r\n\r\nTC.filter.Filter.prototype.getTagName = function () {\r\n return this.tagName_;\r\n};\r\nTC.filter.Filter.prototype.setTagName = function (text) { \r\n return this.tagName_;\r\n};\r\n\r\nTC.filter.Filter.prototype.writeFilterCondition_ = function () {\r\n\r\n //return '<{prefix}:{tag}>{childs}'.format({prefix:\"ogc\",tag:filter.getTagName(),childs:\"\"});\r\n var filter = this;\r\n return '<{prefix}:Filter xmlns:{prefix}=\\\"{NSURL}\" xmlns:gml=\\\"http://www.opengis.net/gml{gmlversion}\">{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n NSURL: this._defaultNSURL,\r\n tag: filter.getTagName(),\r\n inner: this.writeInnerCondition_(filter),\r\n gmlVersion: (this._defaultNSURL === this._wfs2NSURL ? '/3.2' : '')\r\n });\r\n\r\n /*ol.xml.pushSerializeAndPop(item,\r\n ol.format.WFS.GETFEATURE_SERIALIZERS_,\r\n ol.xml.makeSimpleNodeFactory(filter.getTagName()),\r\n [filter], objectStack);*/\r\n}\r\nTC.filter.Filter.prototype.writeInnerCondition_ = function (filter) {\r\n if (filter != this) {\r\n filter._defaultNSURL = this._defaultNSURL;\r\n filter._defaultPrefixNS = this._defaultPrefixNS;\r\n filter._fieldTitle = this._fieldTitle;\r\n }\r\n\r\n if (filter instanceof TC.filter.LogicalNary) {\r\n return filter.write()\r\n }\r\n else if (filter instanceof TC.filter.ComparisonBinary) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Comparison) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Spatial) {\r\n return filter.write();\r\n }\r\n else if (filter instanceof TC.filter.Function) {\r\n return filter.write();\r\n }\r\n else\r\n return filter.write();\r\n};\r\nTC.filter.Filter.prototype.writeInnerArrayCondition_ = function (filters) {\r\n const parent = this;\r\n return parent.conditions.reduce(function (vi, va, index) {\r\n return (vi instanceof TC.filter.Filter ? parent.writeInnerCondition_(vi) : vi) + parent.writeInnerCondition_(va);\r\n });\r\n}\r\n\r\nTC.filter.Filter.prototype.getText = function (wfsVersion) { \r\n if (wfsVersion && parseFloat(wfsVersion,10) >= 2) {\r\n this._defaultPrefixNS = this._wfs2prefixNS;\r\n this._defaultNSURL = this._wfs2NSURL;\r\n this._fieldTitle = this._wfs2FieldTitle;\r\n this._escapeAttrName = this._wfs2EscapeAttrName;\r\n }\r\n return this.writeFilterCondition_();\r\n};\r\n\r\nTC.filter.Filter.prototype.readText = function (text) {\r\n if (text.indexOf(this._wfs2prefixNS) > -1 && \r\n text.indexOf(this._wfs2NSURL) > -1 &&\r\n text.indexOf(this._wfs2FieldTitle) > -1 &&\r\n text.indexOf(this._wfs2EscapeAttrName) > -1) {\r\n this._defaultPrefixNS = this._wfs2prefixNS;\r\n this._defaultNSURL = this._wfs2NSURL;\r\n this._fieldTitle = this._wfs2FieldTitle;\r\n this._escapeAttrName = this._wfs2EscapeAttrName;\r\n }\r\n\r\n return this.readFilterCondition_(text); \r\n};\r\n\r\nTC.filter.Filter.prototype.readFilterCondition_ = function (text) {\r\n this.setTagName(text);\r\n return this.readInnerCondition_(text); \r\n}\r\nTC.filter.Filter.prototype.readInnerCondition_ = function (text) {\r\n //if (filter != this) { \r\n // filter._fieldTitle = this._fieldTitle;\r\n //}\r\n\r\n //if (filter instanceof TC.filter.LogicalNary) {\r\n // return filter.write()\r\n //}\r\n //else if (filter instanceof TC.filter.ComparisonBinary) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Comparison) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Spatial) {\r\n // return filter.write();\r\n //}\r\n //else if (filter instanceof TC.filter.Function) {\r\n // return filter.write();\r\n //}\r\n //else\r\n return filter.read(text);\r\n};\r\n\r\nTC.filter.and = function (conditions) {\r\n var params = [null].concat(Array.prototype.slice.call(arguments));\r\n return new (Function.prototype.bind.apply(TC.filter.And, params))();\r\n};\r\n\r\nTC.filter.or = function (conditions) {\r\n var params = [null].concat(Array.prototype.slice.call(arguments));\r\n return new (Function.prototype.bind.apply(TC.filter.Or, params))();\r\n};\r\n\r\nTC.filter.not = function (condition) {\r\n return new TC.filter.Not(condition);\r\n};\r\n\r\n\r\nTC.filter.intersects = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Intersects(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Intersects(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\n\r\nTC.filter.within = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Within(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Within(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\n\r\nTC.filter.equalTo = function (propertyName, expression, opt_matchCase) {\r\n return new TC.filter.EqualTo(propertyName, expression, opt_matchCase);\r\n};\r\n\r\nTC.filter.notEqualTo = function (propertyName, expression, opt_matchCase) {\r\n return new TC.filter.NotEqualTo(propertyName, expression, opt_matchCase);\r\n};\r\n\r\nTC.filter.lessThan = function (propertyName, expression) {\r\n return new TC.filter.LessThan(propertyName, expression);\r\n};\r\n\r\nTC.filter.lessThanOrEqualTo = function (propertyName, expression) {\r\n return new TC.filter.LessThanOrEqualTo(propertyName, expression);\r\n};\r\n\r\nTC.filter.greaterThan = function (propertyName, expression) {\r\n return new TC.filter.GreaterThan(propertyName, expression);\r\n};\r\n\r\nTC.filter.greaterThanOrEqualTo = function (propertyName, expression) {\r\n return new TC.filter.GreaterThanOrEqualTo(propertyName, expression);\r\n};\r\n\r\nTC.filter.isNull = function (propertyName) {\r\n return new TC.filter.IsNull(propertyName);\r\n};\r\n\r\nTC.filter.between = function (propertyName, lowerBoundary, upperBoundary) {\r\n return new TC.filter.IsBetween(propertyName, lowerBoundary, upperBoundary);\r\n};\r\n\r\nTC.filter[\"function\"] = function (functionName, params) {\r\n return new TC.filter.Function(functionName, params);\r\n};\r\n\r\nTC.filter.like = function (propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\r\n return new TC.filter.IsLike(propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase);\r\n};\r\n\r\nTC.filter.LogicalNary = function (tagName, conditions) {\r\n\r\n TC.filter.Filter.call(this, tagName);\r\n\r\n this.conditions = Array.prototype.slice.call(arguments, 1);\r\n};\r\nTC.inherit(TC.filter.LogicalNary, TC.filter.Filter);\r\n\r\nTC.filter.And = function (conditions) {\r\n var params = ['And'].concat(Array.prototype.slice.call(arguments));\r\n TC.filter.LogicalNary.apply(this, params);\r\n};\r\nTC.inherit(TC.filter.And, TC.filter.LogicalNary);\r\n\r\nTC.filter.Or = function (conditions) {\r\n var params = ['Or'].concat(Array.prototype.slice.call(arguments));\r\n TC.filter.LogicalNary.apply(this, params);\r\n};\r\nTC.inherit(TC.filter.Or, TC.filter.LogicalNary);\r\n\r\nTC.filter.LogicalNary.prototype.write = function () {\r\n return '<{prefix}:{tag}>{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: this.writeInnerArrayCondition_()\r\n });\r\n}\r\n\r\nTC.filter.Not = function (condition) {\r\n this.condition = condition;\r\n TC.filter.Filter.call(this, 'Not');\r\n \r\n};\r\nTC.inherit(TC.filter.Not, TC.filter.Filter);\r\n\r\nTC.filter.Filter.prototype.write=function () {\r\n return '<{prefix}:{tag}>{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: this.writeInnerCondition_(this.condition)\r\n });\r\n}\r\n\r\nTC.filter.Comparison = function (tagName, propertyName) {\r\n\r\n TC.filter.Filter.call(this, tagName);\r\n\r\n this.propertyName = propertyName;\r\n};\r\nTC.inherit(TC.filter.Comparison, TC.filter.Filter);\r\n\r\nTC.filter.Comparison.prototype.write = function () {\r\n var values = '';\r\n //isbetween\r\n if (this.lowerBoundary && this.upperBoundary)\r\n values = '<{prefix}:LowerBoundary><{prefix}:Literal>{LowerBoundary}<{prefix}:UpperBoundary><{prefix}:Literal>{UpperBoundary}'.format({\r\n prefix:this._defaultPrefixNS,\r\n LowerBoundary: this.lowerBoundary,\r\n UpperBoundary: this.upperBoundary\r\n });\r\n if (this.pattern)\r\n values = '<{prefix}:Literal>'.format({\r\n prefix: this._defaultPrefixNS,\r\n Pattern: this.pattern\r\n });\r\n if (this.params)\r\n if (Array.isArray(this.params))\r\n values = this.params.reduce(function (a, b, i) {\r\n var fmt = function (text) {\r\n return '<{prefix}:Literal>'.format({ prefix: this._defaultPrefixNS, value: text });\r\n }\r\n return (i > 0 ? a : fmt(a)) + fmt(b);\r\n });\r\n else\r\n values = '<{prefix}:Literal>'.format({ prefix: this._defaultPrefixNS, value: this.params });\r\n\r\n return '<{prefix}:{tag}{matchCase}{escape}{singleChar}{wildCard}><{prefix}:{fieldTitle}>{name}{values}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n matchCase: (typeof (this.matchCase) !== \"undefined\" ? \" matchCase=\\\"\" + this.matchCase + \"\\\"\" : \"\"),\r\n escape: (typeof (this.escapeChar) !== \"undefined\" ? (\" \" + this._escapeAttrName +\"=\\\"\" + this.escapeChar + \"\\\"\") : \"\"),\r\n singleChar: (typeof (this.singleChar) !== \"undefined\" ? \" singleChar=\\\"\" + this.singleChar + \"\\\"\" : \"\"),\r\n wildCard: (typeof (this.wildCard) !== \"undefined\" ? \" wildCard=\\\"\" + this.wildCard + \"\\\"\" : \"\"),\r\n name: this.propertyName,\r\n values: values,\r\n fieldTitle: this._fieldTitle\r\n });\r\n}\r\n\r\nTC.filter.ComparisonBinary = function (\r\n tagName, propertyName, expression, opt_matchCase) {\r\n\r\n TC.filter.Comparison.call(this, tagName, propertyName);\r\n\r\n this.expression = expression;\r\n\r\n this.matchCase = opt_matchCase;\r\n};\r\nTC.inherit(TC.filter.ComparisonBinary, TC.filter.Comparison);\r\n\r\nTC.filter.ComparisonBinary.prototype.write = function () {\r\n var _str = '<{prefix}:{tag}{matchCase}>' + (this.propertyName instanceof TC.filter.Filter ? '{name}' : '<{prefix}:{fieldTitle}>{name}') + '<{prefix}:Literal>';\r\n return _str.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n matchCase: (typeof (this.matchCase) !== \"undefined\" ? \" matchCase=\\\"\" + this.matchCase + \"\\\"\" : \"\"),\r\n //escape:(typeof(this.escapeChar)!==\"undefined\"? \" escape=\\\"\" + this.escapeChar+ \"\\\"\":\"\"),\r\n //singleChar:(typeof(this.singleChar)!==\"undefined\"? \" singleChar=\\\"\" + this.singleChar+ \"\\\"\":\"\"),\r\n //wildCard:(typeof(this.wildCard)!==\"undefined\"? \" wildCard=\\\"\" + this.wildCard+ \"\\\"\":\"\"),\r\n name: this.propertyName instanceof TC.filter.Filter ? this.propertyName.write() : this.propertyName,\r\n value: this.expression,\r\n fieldTitle: this._fieldTitle\r\n });\r\n}\r\nTC.filter.EqualTo = function (propertyName, expression, opt_matchCase) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsEqualTo', propertyName, expression, opt_matchCase);\r\n};\r\nTC.inherit(TC.filter.EqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.GreaterThan = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThan', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.GreaterThan, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.GreaterThanOrEqualTo = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThanOrEqualTo', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.GreaterThanOrEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.LessThan = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsLessThan', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.LessThan, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.LessThanOrEqualTo = function (propertyName, expression) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsLessThanOrEqualTo', propertyName, expression);\r\n};\r\nTC.inherit(TC.filter.LessThanOrEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.NotEqualTo = function (propertyName, expression, opt_matchCase) {\r\n TC.filter.ComparisonBinary.call(this, 'PropertyIsNotEqualTo', propertyName, expression, opt_matchCase);\r\n};\r\nTC.inherit(TC.filter.NotEqualTo, TC.filter.ComparisonBinary);\r\n\r\nTC.filter.IsLike = function (propertyName, pattern,\r\n opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {\r\n TC.filter.Comparison.call(this, 'PropertyIsLike', propertyName);\r\n\r\n this.pattern = pattern;\r\n\r\n this.wildCard = (opt_wildCard !== undefined) ? opt_wildCard : '*';\r\n\r\n this.singleChar = (opt_singleChar !== undefined) ? opt_singleChar : '.';\r\n\r\n this.escapeChar = (opt_escapeChar !== undefined) ? opt_escapeChar : '!';\r\n\r\n this.matchCase = opt_matchCase;\r\n};\r\nTC.inherit(TC.filter.IsLike, TC.filter.Comparison);\r\n\r\nTC.filter.IsNull = function (propertyName) {\r\n TC.filter.Comparison.call(this, 'PropertyIsNull', propertyName);\r\n};\r\nTC.inherit(TC.filter.IsNull, TC.filter.Comparison);\r\n\r\nTC.filter.IsBetween = function (propertyName, lowerBoundary, upperBoundary) {\r\n TC.filter.Comparison.call(this, 'PropertyIsBetween', propertyName);\r\n this.lowerBoundary = lowerBoundary;\r\n this.upperBoundary = upperBoundary;\r\n};\r\nTC.inherit(TC.filter.IsBetween, TC.filter.Comparison);\r\n\r\nTC.filter.Function = function (functionName, params) {\r\n TC.filter.Filter.call(this, functionName);\r\n this.params = params\r\n};\r\nTC.inherit(TC.filter.Function, TC.filter.Filter);\r\n\r\nTC.filter.Function.prototype.write = function () {\r\n var values = '';\r\n if (this.params) {\r\n var _paramsToText = function (param, prefix) {\r\n if (typeof (param) === \"string\") {\r\n return '<{prefix}:Literal>'.format({ prefix: prefix, value: param });\r\n }\r\n if (typeof (param) === \"object\") {\r\n var _text = '';\r\n for (var attr in param) {\r\n _text = _text + '<{prefix}:{key}>{value}'.format({ prefix: prefix, value: param[attr], key: attr })\r\n }\r\n return _text;\r\n }\r\n }\r\n if (Array.isArray(this.params)) {\r\n var prefix = this._defaultPrefixNS;\r\n values = this.params.reduce(function (a, b, i) {\r\n var fmt = function (param) {\r\n return _paramsToText(param, prefix);\r\n }\r\n return (i > 1 ? a : fmt(a)) + fmt(b);\r\n });\r\n }\r\n else\r\n values = _paramsToText(this.params, this._defaultPrefixNS);\r\n }\r\n return '<{prefix}:Function name=\"{tag}\">{inner}'.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n inner: values\r\n });\r\n};\r\n\r\nTC.filter.Spatial = function (tagName, geometryName, geometry, opt_srsName) {\r\n TC.filter.Filter.call(this, tagName);\r\n this.geometryName = geometryName;\r\n this.geometry = geometry;\r\n this.srsName = opt_srsName;\r\n this.wrap = new TC.wrap.Filter(this);\r\n};\r\n\r\nTC.wrap.Filter = function (filter) {\r\n this.parent = filter;\r\n};\r\n\r\nTC.wrap.Filter.prototype.getAxisOrientation = function () {\r\n // Establecemos el srsName a EPSG:xxxx o urn:x-ogc:def:crs:EPSG:xxxx dependiendo del orden de eje de coordenadas del CRS.\r\n // Esto se debe a que GeoServer hace asunciones en el orden de los ejes dependiendo del formato de srsName que se use.\r\n // Más información: https://docs.geoserver.org/latest/en/user/services/wfs/basics.html#wfs-basics-axis\r\n var srsName = this.parent.srsName;\r\n if (srsName) {\r\n const match = srsName.match(/\\d{4,6}$/);\r\n if (match) {\r\n const code = match[0];\r\n const def = ol.proj.get(srsName);\r\n if (def) {\r\n return ((def.axisOrientation_ === 'neu' ? 'urn:x-ogc:def:crs:EPSG:' : 'EPSG:') + code);\r\n }\r\n }\r\n }\r\n return srsName;\r\n};\r\n\r\nTC.inherit(TC.filter.Spatial, TC.filter.Filter);\r\n\r\nTC.filter.Spatial.prototype.write = function () {\r\n var pattern = null;\r\n if (this.geometryName) {\r\n pattern = '<{prefix}:{tag}><{prefix}:{fieldTitle}>{name}{geometry}';\r\n }\r\n else {\r\n pattern = '<{prefix}:{tag}><{prefix}:{fieldTitle}/>{geometry}';\r\n }\r\n\r\n return pattern.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n name: this.geometryName,\r\n geometry: (this.geometry instanceof TC.filter.Function ? this.writeInnerCondition_(this.geometry) : this.geometry.wrap.toGML(undefined, this.wrap.getAxisOrientation())),\r\n fieldTitle: this._fieldTitle\r\n });\r\n};\r\n\r\nTC.filter.bbox = function () {\r\n if (Object.prototype.toString.call(arguments[0]) !== \"[object String]\")\r\n return new TC.filter.Bbox(null, arguments[0], arguments[1]);\r\n else\r\n return new TC.filter.Bbox(arguments[0], arguments[1], arguments[2]);\r\n};\r\n\r\nTC.filter.Bbox = function (geometryName, extent, opt_srsName) {\r\n TC.filter.Filter.call(this, 'BBOX');\r\n this.geometryName = geometryName;\r\n this.extent = extent;\r\n this.srsName = opt_srsName;\r\n};\r\nTC.inherit(TC.filter.Bbox, TC.filter.Spatial);\r\n\r\nTC.filter.Bbox.prototype.write = function () {\r\n var bbox = '{lowerCorner}{upperCorner}'\r\n\t.format({\r\n\t srsName: (typeof (this.srsName) !== \"undefined\" ? \" srsName=\\\"\" + this.srsName + \"\\\"\" : \"\"),\r\n\t lowerCorner: (this.extent[0] + ' ' + this.extent[1]),\r\n\t upperCorner: (this.extent[2] + ' ' + this.extent[3])\r\n\t});\r\n var pattern = null;\r\n if (this.geometryName)\r\n pattern='<{prefix}:{tag}><{prefix}:{fieldTitle}>{name}{BBOX}';\r\n else\r\n pattern='<{prefix}:{tag}><{prefix}:{fieldTitle}/>{BBOX}';\r\n return pattern.format({\r\n prefix: this._defaultPrefixNS,\r\n tag: this.getTagName(),\r\n fieldTitle: this._fieldTitle,\r\n name: this.geometryName,\r\n BBOX: bbox\r\n });\r\n};\r\n\r\nTC.filter.Intersects = function (geometryName, geometry, opt_srsName) {\r\n TC.filter.Spatial.call(this, 'Intersects', geometryName, geometry, opt_srsName);\r\n};\r\nTC.inherit(TC.filter.Intersects, TC.filter.Spatial);\r\n\r\nTC.filter.Within = function (geometryName, geometry, opt_srsName) {\r\n TC.filter.Spatial.call(this, 'Within', geometryName, geometry, opt_srsName);\r\n};\r\nTC.inherit(TC.filter.Within, TC.filter.Spatial);\r\n\r\nconst filter = TC.filter;\r\nexport default filter;","import TC from '../TC';\r\nimport Consts from './Consts';\r\nconst i18n = {};\r\ni18n.loadResources = function (condition, path, locale) {\r\n var result;\r\n if (condition) {\r\n result = new Promise(function (resolve, reject) {\r\n TC.ajax({\r\n url: path + locale + '.json',\r\n method: 'GET',\r\n responseType: Consts.mimeType.JSON\r\n })\r\n .then(function (response) {\r\n const data = response.data;\r\n i18n[locale] = i18n[locale] || {};\r\n Object.assign(i18n[locale], data);\r\n i18n.currentLocale = i18n[locale];\r\n i18n.currentLocaleKey = locale;\r\n resolve();\r\n })\r\n .catch(function (err) {\r\n reject(err);\r\n });\r\n });\r\n } else {\r\n i18n.currentLocale = i18n[locale];\r\n result = Promise.resolve();\r\n }\r\n return result;\r\n};\r\n\r\nexport default i18n;","import TC from '../../TC';\r\nimport Feature from '../Feature';\r\nTC.Feature = Feature;\r\nTC.feature = TC.feature || {};\r\n\r\nTC.feature.Circle = function (coords, options) {\r\n const self = this;\r\n\r\n TC.Feature.apply(self, arguments);\r\n\r\n if (!self.wrap.isNative(coords)) {\r\n self.wrap.createCircle(coords, options);\r\n }\r\n};\r\n\r\nTC.inherit(TC.feature.Circle, TC.Feature);\r\n\r\n(function () {\r\n var featProto = TC.feature.Circle.prototype;\r\n\r\n featProto.STYLETYPE = TC.Consts.geom.POLYGON;\r\n\r\n featProto.CLASSNAME = 'TC.feature.Circle';\r\n\r\n featProto.getCoords = function () {\r\n return this.wrap.getGeometry();\r\n\r\n };\r\n\r\n featProto.setCoords = function (coords) {\r\n const self = this;\r\n if (Array.isArray(coords) &&\r\n Array.isArray(coords[0]) && \r\n !Array.isArray(coords[0][0]) && !Array.isArray(coords[0][1]) && \r\n !Array.isArray(coords[1])) {\r\n return TC.Feature.prototype.setCoords.call(self, coords);\r\n }\r\n else {\r\n throw new Error('Coordinates not valid for circle');\r\n }\r\n };\r\n\r\n})();\r\n\r\nconst Circle = TC.feature.Circle;\r\nexport default Circle;","import TC from '../../TC';\r\nimport Util from '../Util';\r\nimport Layer from '../Layer';\r\nimport Point from '../feature/Point';\r\nimport Marker from '../feature/Marker';\r\nimport Polyline from '../feature/Polyline';\r\nimport Polygon from '../feature/Polygon';\r\nimport MultiPoint from '../feature/MultiPoint';\r\nimport MultiMarker from '../feature/MultiMarker';\r\nimport MultiPolyline from '../feature/MultiPolyline';\r\nimport MultiPolygon from '../feature/MultiPolygon';\r\nimport Circle from '../feature/Circle';\r\n\r\nTC.Layer = Layer;\r\nTC.Util = Util;\r\nTC.layer = TC.layer || {};\r\nTC.feature = TC.feature || {};\r\nTC.feature.Point = Point;\r\nTC.feature.Marker = Marker;\r\nTC.feature.Polyline = Polyline;\r\nTC.feature.Polygon = Polygon;\r\nTC.feature.MultiPoint = MultiPoint;\r\nTC.feature.MultiMarker = MultiMarker;\r\nTC.feature.MultiPolyline = MultiPolyline;\r\nTC.feature.MultiPolygon = MultiPolygon;\r\nTC.feature.Circle = Circle;\r\n\r\n(function () {\r\n\r\n var capabilitiesPromises = {};\r\n\r\n /**\r\n * Opciones de capa vectorial.\r\n * Esta clase no tiene constructor.\r\n * @class TC.cfg.VectorOptions\r\n * @extend TC.cfg.LayerOptions\r\n * @static\r\n */\r\n /**\r\n * Tipo de capa.\r\n * @property type\r\n * @type TC.consts.LayerType\r\n * @default TC.Consts.layerType.VECTOR\r\n */\r\n /**\r\n * URL del servicio WFS o del documento que define la capa.\r\n * @property url\r\n * @type string|undefined\r\n */\r\n\r\n /**\r\n * Capa de tipo vectorial, como la de un WFS o un KML.\r\n * @class TC.layer.Vector\r\n * @extends TC.Layer\r\n * @constructor\r\n * @param {TC.Cfg.layer} [options] Objeto de opciones de configuración de la capa.\r\n */\r\n TC.layer.Vector = function () {\r\n var self = this;\r\n\r\n //esta promise se resolverá cuando el capabilities esté descargado y parseado\r\n //se utiliza para saber cuándo está listo el capabilities en los casos en los que se instancia el layer pero no se añade al mapa\r\n //porque la forma habitual de detectar esto es por los eventos del mapa (que en esos casos no saltarán)\r\n self._capabilitiesPromise = null;\r\n self.capabilities = null;\r\n\r\n TC.Layer.apply(self, arguments);\r\n\r\n self.type = self.options.type || TC.Consts.layerType.VECTOR;\r\n /**\r\n * Lista de entidades geográficas que hay en la capa.\r\n * @property features\r\n * @type array\r\n * @default []\r\n */\r\n self.features = [];\r\n /**\r\n * Lista de entidades geográficas seleccionadas en la capa.\r\n * @property selectedFeatures\r\n * @type array\r\n * @default []\r\n */\r\n self.selectedFeatures = [];\r\n\r\n const getFileExtension = function (url) {\r\n url = url || '';\r\n var idx = url.indexOf('?');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n else {\r\n idx = url.indexOf('#');\r\n if (idx >= 0) {\r\n url = url.substr(0, idx);\r\n }\r\n }\r\n return url.substr(url.lastIndexOf('.')).toLowerCase();\r\n };\r\n\r\n const getFormatFromMimeType = function (mimeType) {\r\n switch (mimeType) {\r\n case TC.Consts.mimeType.KML:\r\n return TC.Consts.format.KML;\r\n case TC.Consts.mimeType.GPX:\r\n return TC.Consts.format.GPX;\r\n case TC.Consts.mimeType.JSON:\r\n case TC.Consts.mimeType.GEOJSON:\r\n return TC.Consts.format.GEOJSON;\r\n case TC.Consts.mimeType.GML:\r\n return TC.Consts.format.GML;\r\n default:\r\n return null;\r\n }\r\n };\r\n /**\r\n * URL del servicio o documento al que pertenenece la capa.\r\n * @property url\r\n * @type string\r\n */\r\n const extension = getFileExtension(self.url);\r\n const format = getFormatFromMimeType(self.options.format) || TC.Util.getFormatFromFileExtension(extension);\r\n if (format || self.type === TC.Consts.layerType.KML) {\r\n if (format === TC.Consts.format.KML) {\r\n self.type = TC.Consts.layerType.KML;\r\n }\r\n\r\n var getFileName = function (url) {\r\n url = url || '';\r\n var result = url;\r\n var regexp = new RegExp('([\\\\w|\\\\-|\\\\.]+\\\\' + extension + ')', 'i');\r\n for (var i = 0; i < 3; i++) {\r\n url = decodeURIComponent(url);\r\n var match = regexp.exec(url);\r\n if (match.length > 1) {\r\n result = match[1];\r\n break;\r\n }\r\n\r\n }\r\n return result;\r\n };\r\n self.title = self.options.title || getFileName(self.url);\r\n }\r\n\r\n self.wrap = new TC.wrap.layer.Vector(self);\r\n\r\n self.wrap._promise = new Promise((resolve, _reject) => {\r\n var ollyr = null;\r\n ollyr = self.wrap.createVectorLayer();\r\n self.wrap.setLayer(ollyr);\r\n resolve(ollyr);\r\n });//Promise.resolve(ollyr);\r\n\r\n };\r\n\r\n TC.inherit(TC.layer.Vector, TC.Layer);\r\n\r\n (function () {\r\n var layerProto = TC.layer.Vector.prototype;\r\n\r\n const getMergedLegendImage = function (images) {\r\n let offset = 0;\r\n const margin = 2;\r\n const svgs = images\r\n .map(str => str.replace('data:image/svg+xml,', ''))\r\n .map(str => decodeURIComponent(str));\r\n const widths = svgs.map(str => parseFloat(str.match(/ width=\"([\\d\\.]*)\"/)[1]));\r\n const heights = svgs.map(str => parseFloat(str.match(/ height=\"([\\d\\.]*)\"/)[1]));\r\n const width = widths.reduce((acc, cur) => acc + cur + margin, 0);\r\n const height = Math.max.apply(Math, heights);\r\n const offsetSvgs = svgs\r\n .map((str, idx) => {\r\n const result = str.replace('${offsetSvgs.join('')}`);\r\n };\r\n\r\n /*\r\n * getTree: returns service layer tree { name, title, children }\r\n */\r\n layerProto.getTree = function () {\r\n const self = this;\r\n let result = null;\r\n if (!self.options.stealth) {\r\n result = {\r\n children: []\r\n };\r\n self.features.forEach(f => {\r\n const path = f.getPath();\r\n if (path.length) {\r\n const node = TC.Util.addArrayToTree(path, result);\r\n if (node) {\r\n node.legend = f.getLegend();\r\n if (f._visibilityState === TC.Consts.visibility.NOT_VISIBLE) {\r\n if (!Object.prototype.hasOwnProperty.call(node, \"visibilityState\")) {\r\n node.visibilityState = TC.Consts.visibility.NOT_VISIBLE;\r\n }\r\n }\r\n else {\r\n node.visibilityState = TC.Consts.visibility.VISIBLE;\r\n }\r\n }\r\n }\r\n });\r\n if (self.styles || self.cluster) {\r\n const legendImages = [];\r\n if (self.cluster) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(\r\n TC.Util.extend({}, self.cluster.styles.point, { radius: TC.Cfg.styles.point.radius + 2, offset: [0, 6] }),\r\n { geometryType: TC.Consts.geom.POINT }\r\n ));\r\n }\r\n if (self.styles.point) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.point, { geometryType: TC.Consts.geom.POINT }));\r\n }\r\n if (self.styles.line) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.line, { geometryType: TC.Consts.geom.POLYLINE }));\r\n }\r\n if (self.styles.polygon) {\r\n legendImages.push(TC.Util.getLegendImageFromStyle(self.styles.polygon, { geometryType: TC.Consts.geom.POLYGON }));\r\n }\r\n result.legend = {\r\n src: getMergedLegendImage(legendImages)\r\n };\r\n }\r\n result.name = self.name || result.name;\r\n result.customLegend = self.options.customLegend; //Atributo para pasar una plantilla HTML diferente a la por defecto (LegendNode.html)\r\n result.title = self.title || result.title;\r\n result.uid = self.id;\r\n }\r\n return result;\r\n };\r\n\r\n var addFeatureInternal = function (layer, multipleFeatureFunction, coord, options) {\r\n return new Promise(function (resolve, _reject) {\r\n multipleFeatureFunction.call(layer, [coord], options).then(function (features) {\r\n resolve(features[0]);\r\n if (layer.map) {\r\n layer.map.trigger(TC.Consts.event.FEATUREADD, { layer: layer, feature: features[0] });\r\n }\r\n });\r\n });\r\n };\r\n\r\n var addFeaturesInternal = function (layer, coordsArray, constructorName, styleType, options) {\r\n var opts = TC.Util.extend(true, {}, options);\r\n return new Promise(function (resolve, _reject) {\r\n let FeatureConstructor;\r\n if (constructorName) {\r\n FeatureConstructor = TC.feature[constructorName];\r\n }\r\n else {\r\n FeatureConstructor = TC.Feature;\r\n }\r\n var features = new Array(coordsArray.length);\r\n var nativeFeatures = [];\r\n for (var i = 0, len = coordsArray.length; i < len; i++) {\r\n var coords = coordsArray[i];\r\n var feature;\r\n const isNative = TC.wrap.Feature.prototype.isNative(coords);\r\n if (coords instanceof FeatureConstructor || \"TC.feature.\" + constructorName === coords.CLASSNAME) {\r\n feature = coords;\r\n }\r\n else {\r\n if (isNative) {\r\n feature = coords._wrap && coords._wrap.parent;\r\n }\r\n if (!feature) {\r\n opts.layer = layer;\r\n const layerStyle = layer.styles && layer.styles[styleType];\r\n if (TC.Util.hasStyleOptions(opts) || !layerStyle) {\r\n // Si las opciones tienen estilos, o la capa no los tiene, creamos un objeto de estilos para la feature\r\n const externalStyles = TC.Util.extend(true, {}, TC.Cfg.styles, layer.map ? layer.map.options.styles : null);\r\n TC.Util.extend(true, opts, externalStyles[styleType], layerStyle || {}, options);\r\n }\r\n feature = new FeatureConstructor(coords, opts);\r\n }\r\n }\r\n feature.layer = layer;\r\n features[i] = feature;\r\n layer.features.push(feature);\r\n if (!isNative) {\r\n nativeFeatures.push(feature.wrap.feature);\r\n }\r\n if (feature.options.showPopup) {\r\n feature.showInfo();\r\n }\r\n // Este evento mata el rendimiento\r\n //self.map.trigger(TC.Consts.event.FEATUREADD, { layer: self, feature: marker });\r\n }\r\n if (nativeFeatures.length) {\r\n layer.wrap.addFeatures(nativeFeatures);\r\n }\r\n resolve(features);\r\n });\r\n };\r\n\r\n /*\r\n * Añade un punto a la capa.\r\n * @method addPoint\r\n * @async\r\n * @param {array|TC.feature.Point|ol.geom.Point|OpenLayers.Geometry.Point} coord Si es un array, contiene dos números (la coordenada del punto).\r\n * @param {TC.cfg.PointStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.feature.Point\r\n */\r\n layerProto.addPoint = function (coord, options) {\r\n return addFeatureInternal(this, this.addPoints, coord, options);\r\n };\r\n\r\n /*\r\n * Añade una lista de puntos a la capa.\r\n * @method addPoints\r\n * @async\r\n * @param {array} coordsArray Los elementos de esta lista son cualquiera de los que acepta el método {{#crossLink \"TC.layer.Vector/addPoint:method\"}}{{/crossLink}}.\r\n * @param {TC.cfg.PointStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un array de objetos de la clase TC.feature.Point\r\n */\r\n layerProto.addPoints = function (coordsArray, options) {\r\n return addFeaturesInternal(this, coordsArray, 'Point', TC.Consts.geom.POINT, options);\r\n };\r\n\r\n layerProto.addMultiPoint = function (coords, options) {\r\n return addFeatureInternal(this, this.addMultiPoints, coords, options);\r\n };\r\n\r\n\r\n layerProto.addMultiPoints = function (coordsArray, options) {\r\n return addFeaturesInternal(this, coordsArray, 'MultiPoint', \"point\", options);\r\n };\r\n\r\n /*\r\n * Añade un marcador a la capa.\r\n * @method addMarker\r\n * @async\r\n * @param {array|TC.feature.Marker|ol.geom.Point|OpenLayers.Geometry.Point} coord Si es un array, contiene dos números (la coordenada del punto).\r\n * @param {TC.cfg.MarkerStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.feature.Marker\r\n */\r\n layerProto.addMarker = function (coord, options) {\r\n return addFeatureInternal(this, this.addMarkers, coord, options);\r\n };\r\n\r\n /*\r\n * Añade una lista de marcadores a la capa.\r\n * @method addMarkers\r\n * @async\r\n * @param {array} coordsArray Los elementos de esta lista son cualquiera de los que acepta el método {{#crossLink \"TC.layer.Vector/addMarker:method\"}}{{/crossLink}}.\r\n * @param {TC.cfg.MarkerStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un array de objetos de la clase TC.feature.Marker\r\n */\r\n layerProto.addMarkers = function (coordsArray, options) {\r\n return addFeaturesInternal(this, coordsArray, 'Marker', 'marker', options);\r\n };\r\n\r\n layerProto.addMultiMarker = function (coords, options) {\r\n return addFeatureInternal(this, this.addMultiMarkers, coords, options);\r\n };\r\n\r\n\r\n layerProto.addMultiMarkers = function (coordsArray, options) {\r\n return addFeaturesInternal(this, coordsArray, 'MultiMarker', \"marker\", options);\r\n };\r\n\r\n /*\r\n * Añade una polilínea a la capa.\r\n * @method addPolyline\r\n * @async\r\n * @param {array|TC.feature.Polyline|ol.geom.MultiLineString|OpenLayers.Geometry.LineString} coords Si es un array, contiene arrays de dos números (coordenadas de puntos).\r\n * @param {TC.cfg.PolylineOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.feature.Polyline\r\n */\r\n layerProto.addPolyline = function (coords, options) {\r\n return addFeatureInternal(this, this.addPolylines, coords, options);\r\n };\r\n\r\n\r\n /*\r\n * Añade una lista de polilíneas a la capa.\r\n * @method addPolylines\r\n * @async\r\n * @param {array} coordsArray Los elementos de esta lista son cualquiera de los que acepta el método {{#crossLink \"TC.layer.Vector/addPolyline:method\"}}{{/crossLink}}.\r\n * @param {TC.cfg.PolylineOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un array de objetos de la clase TC.feature.Polyline\r\n */\r\n layerProto.addPolylines = function (coordsArray, options) {\r\n //URI: El tipo de estilo se especifica LINE pero realmente deberia ser TC.Const.Style.LINE\r\n return addFeaturesInternal(this, coordsArray, 'Polyline', \"line\", options);\r\n };\r\n\r\n layerProto.addMultiPolyline = function (coords, options) {\r\n return addFeatureInternal(this, this.addMultiPolylines, coords, options);\r\n };\r\n\r\n\r\n layerProto.addMultiPolylines = function (coordsArray, options) {\r\n //URI: El tipo de estilo se especifica LINE pero realmente deberia ser TC.Const.Style.LINE\r\n return addFeaturesInternal(this, coordsArray, 'MultiPolyline', \"line\", options);\r\n };\r\n\r\n /*\r\n * Añade un polígono a la capa.\r\n * @method addPolygon\r\n * @async\r\n * @param {array|TC.feature.Polygon|ol.geom.Polygon|OpenLayers.Geometry.Polygon} coords Si es un array, contiene arrays de coordenadas, que son a su vez arrays de dos números. El primer\r\n * elemento de ese array es el anillo exterior, los siguientes son anillos interiores.\r\n * @param {TC.cfg.PolygonOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.feature.Polygon\r\n */\r\n layerProto.addPolygon = function (coords, options) {\r\n return addFeatureInternal(this, this.addPolygons, coords, options);\r\n };\r\n\r\n /*\r\n * Añade una lista de polígonos a la capa.\r\n * @method addPolygons\r\n * @async\r\n * @param {array} coordsArray Los elementos de esta lista son cualquiera de los que acepta el método {{#crossLink \"TC.layer.Vector/addPolygon:method\"}}{{/crossLink}}.\r\n * @param {TC.cfg.PolygonOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un array de objetos de la clase TC.feature.Polygon\r\n */\r\n layerProto.addPolygons = function (coordsArray, options) {\r\n //URI: El tipo de style se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return addFeaturesInternal(this, coordsArray, 'Polygon', TC.Consts.geom.POLYGON, options);\r\n };\r\n\r\n layerProto.addMultiPolygon = function (coords, options) {\r\n return addFeatureInternal(this, this.addMultiPolygons, coords, options);\r\n };\r\n\r\n\r\n layerProto.addMultiPolygons = function (coordsArray, options) {\r\n //URI: El tipo de style se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return addFeaturesInternal(this, coordsArray, 'MultiPolygon', TC.Consts.geom.POLYGON, options);\r\n };\r\n\r\n /*\r\n * Añade un círculo a la capa.\r\n * @method addCircle\r\n * @async\r\n * @param {array|TC.feature.Circle|ol.geom.Circle} coord Si es un array, contiene un array de dos números (la coordenada del centro) y un número (el radio).\r\n * @param {TC.cfg.PolygonStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.feature.Circle\r\n */\r\n layerProto.addCircle = function (coord, options) {\r\n return addFeatureInternal(this, this.addCircles, coord, options);\r\n };\r\n\r\n /*\r\n * Añade una lista de círculos a la capa.\r\n * @method addCircles\r\n * @async\r\n * @param {array} coordsArray Los elementos de esta lista son cualquiera de los que acepta el método {{#crossLink \"TC.layer.Vector/addCircle:method\"}}{{/crossLink}}.\r\n * @param {TC.cfg.PolygonStyleOptions} [options]\r\n * @return {jQuery promise} La promesa al resolverse devuelve un array de objetos de la clase TC.feature.Circle\r\n */\r\n layerProto.addCircles = function (coordsArray, options) {\r\n //URI: El tipo de geometria se especifica POLIGON pero realmente deberia ser TC.Const.Style.POLYGON\r\n return addFeaturesInternal(this, coordsArray, 'Circle', TC.Consts.geom.POLYGON, options);\r\n };\r\n /*\r\n * Añade una entidad geográfica a la capa.\r\n * @method addFeature\r\n * @async\r\n * @param {TC.Feature} feature \r\n * @return {jQuery promise} La promesa al resolverse devuelve un objeto de la clase TC.Feature\r\n */\r\n layerProto.addFeature = function (feature) {\r\n const self = this;\r\n var result;\r\n if (TC.feature) {\r\n if (TC.feature.Point && feature instanceof TC.feature.Point || feature.CLASSNAME === \"TC.feature.Point\") {\r\n result = self.addPoint(feature);\r\n }\r\n else if (TC.feature.Polyline && feature instanceof TC.feature.Polyline || feature.CLASSNAME === \"TC.feature.Polyline\") {\r\n result = self.addPolyline(feature);\r\n }\r\n else if (TC.feature.Polygon && feature instanceof TC.feature.Polygon || feature.CLASSNAME === \"TC.feature.Polygon\") {\r\n result = self.addPolygon(feature);\r\n }\r\n else if (TC.feature.MultiPolygon && feature instanceof TC.feature.MultiPolygon || feature.CLASSNAME === \"TC.feature.MultiPolygon\") {\r\n result = self.addMultiPolygon(feature);\r\n }\r\n else if (TC.feature.MultiPolyline && feature instanceof TC.feature.MultiPolyline || feature.CLASSNAME === \"TC.feature.MultiPolyline\") {\r\n result = self.addMultiPolyline(feature);\r\n }\r\n else if (TC.feature.Circle && feature instanceof TC.feature.Circle || feature.CLASSNAME === \"TC.feature.Circle\") {\r\n result = self.addCircle(feature);\r\n }\r\n else {\r\n result = addFeaturesInternal(self, [feature]);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.addFeatures = function (features) {\r\n return addFeaturesInternal(this, features);\r\n };\r\n\r\n /*\r\n * Elimina una entidad geográfica de la capa.\r\n * @method removeFeature\r\n * @param {TC.Feature} feature \r\n */\r\n layerProto.removeFeature = function (feature) {\r\n const self = this;\r\n if (feature.layer && self.features.indexOf(feature) >= 0) {\r\n self.wrap.removeFeature(feature);\r\n feature.layer = null;\r\n }\r\n };\r\n\r\n layerProto.getFeatureById = function (id) {\r\n const self = this;\r\n let result = null;\r\n var olFeat = self.wrap.getFeatureById(id);\r\n if (olFeat) {\r\n result = olFeat._wrap.parent;\r\n }\r\n return result;\r\n };\r\n\r\n /**\r\n * Borra todas las entidades geográficas de la capa.\r\n * @method clearFeatures\r\n */\r\n layerProto.clearFeatures = function () {\r\n var self = this;\r\n if (self.features && self.wrap) {\r\n if (self.map) {\r\n const popups = self.map.getControlsByClass('TC.control.Popup');\r\n popups.forEach(function (pu) {\r\n if (pu.isVisible() && self.features.indexOf(pu.currentFeature) >= 0) {\r\n pu.hide();\r\n }\r\n });\r\n }\r\n self.features.length = 0;\r\n self.wrap.clearFeatures();\r\n }\r\n };\r\n\r\n //layerProto.getGetCapabilitiesUrl = function () {\r\n // const self = this;\r\n // const version = self.options.version || '1.1.0';\r\n // return self.url + '?service=WFS&' + 'version=' + version + '&request=GetCapabilities';\r\n //};\r\n\r\n layerProto.getDescribeFeatureTypeUrl = function (layerNames) {\r\n const self = this;\r\n const version = self.options.version || self.capabilities.version || '1.1.0';\r\n let featureType = layerNames || self.featureType;\r\n featureType = Array.isArray(featureType) ? featureType : [featureType];\r\n return self.url + '?service=WFS&' + 'version=' + version + '&request=DescribeFeatureType&typename=' + featureType.join(',') + '&outputFormat=' + encodeURIComponent(self.capabilities.Operations.DescribeFeatureType.outputFormat);\r\n };\r\n\r\n const _getStoredFeatureTypes = function (layerName, collection) {\r\n if (!(layerName instanceof Array))\r\n layerName = layerName.split(\",\");\r\n return layerName.reduce(function (vi, va) {\r\n var temp = [];\r\n temp[va] = collection[va];\r\n return Object.assign(vi, temp);\r\n }, {});\r\n };\r\n\r\n layerProto.describeFeatureType = function (layerName, callback, error) {\r\n const self = this;\r\n if (!layerName) layerName = self.options.featureType;\r\n const result = new Promise(function (resolve, reject) {\r\n self.getCapabilitiesPromise()\r\n .then(function (capabilities) {\r\n if (!capabilities.Operations.DescribeFeatureType) {\r\n reject(\"No esta disponible el método describeFeatureType\");\r\n return;\r\n }\r\n if (Object.prototype.hasOwnProperty.call(window, 'Worker')) {\r\n const wwGetUrl = async function () {\r\n var wwLocation = TC.apiLocation + 'TC/workers/tc-dft-web-worker.js';\r\n if (TC.Util.isSameOrigin(TC.apiLocation)) {\r\n return wwLocation;\r\n }\r\n else {\r\n const response = await TC.ajax({\r\n url: wwLocation,\r\n method: 'GET',\r\n responseType: 'text'\r\n });\r\n const data = response.data;\r\n var blob = new Blob([data], { type: \"text/javascript\" });\r\n var url = window.URL.createObjectURL(blob);\r\n return url;\r\n }\r\n };\r\n const wwInit = async function () {\r\n if (!self.WebWorkerDFT) {\r\n self.WebWorkerDFT = new Worker(await wwGetUrl());\r\n }\r\n self.WebWorkerDFT.onmessage = async function (e) {\r\n if (!(e.data instanceof Object)) {\r\n var data = await self.toolProxification.fetchXML(e.data);\r\n self.WebWorkerDFT.postMessage({\r\n url: e.data,\r\n response: data.documentElement.outerHTML\r\n });\r\n return;\r\n }\r\n if (e.data.state === 'success') {\r\n let key = Object.keys(e.data.DFTCollection).join(\",\");\r\n if (TC.describeFeatureType[key]) {\r\n if (typeof TC.describeFeatureType[key] === \"function\") {\r\n TC.describeFeatureType[key].call(null, e.data.DFTCollection);\r\n }\r\n }\r\n else {\r\n throw \"No se encuentra la clave \" + key + \" en la colección\";\r\n }\r\n TC.describeFeatureType = Object.assign(TC.describeFeatureType, e.data.DFTCollection);\r\n }\r\n else {\r\n throw \"Ha habido problemas procesando el Describe feature type\";\r\n //reject(\"loquesea\");\r\n }\r\n };\r\n };\r\n const wwProcess = async function (layers, callback) {\r\n var data = await self.toolProxification.fetchXML(self.getDescribeFeatureTypeUrl(layers || self.featureType));\r\n //checkear si excepciones del servidor\r\n if (data.querySelector(\"Exception\") || data.querySelector(\"exception\")) {\r\n throw (data.querySelector(\"Exception\") || data.querySelector(\"exception\")).textContent.trim();\r\n }\r\n self.WebWorkerDFT.postMessage({\r\n layerName: layers,\r\n xml: data.documentElement.outerHTML,\r\n url: TC.apiLocation.indexOf(\"http\") >= 0 ? TC.apiLocation : document.location.protocol + TC.apiLocation\r\n });\r\n TC.describeFeatureType[layers instanceof Array ? layers.join(\",\") : layers] = callback;\r\n };\r\n try {\r\n wwInit();\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n //si no es una array convierto en Array\r\n if (!(layerName instanceof Array)) layerName = layerName.split(\",\");\r\n //si tiene distinto Namespace separo las pediciones describeFeatureType\t\t\t\t\t\t\t\t\t\t\r\n var arrPromises = Object.entries(layerName.reduce(function (vi, va) {\r\n let preffix = va.substring(0, va.indexOf(\":\"));\r\n if (!vi[preffix]) {\r\n let temp = {};\r\n temp[preffix] = [va];\r\n return Object.assign(vi, temp);\r\n } else {\r\n vi[preffix].push(va);\r\n return vi;\r\n }\r\n }, {})).map(function (params) {\r\n var layers = params[1];\r\n return new Promise(async function (resolve, reject) {\r\n if (TC.describeFeatureType[layers]) {\r\n resolve(_getStoredFeatureTypes(layers, TC.describeFeatureType));\r\n return;\r\n }\r\n try {\r\n await wwProcess(layers, function (data) {\r\n resolve(data);\r\n });\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n });\r\n Promise.all(arrPromises).then(function (response) {\r\n let objReturned = response.reduce(function (vi, va) {\r\n return Object.assign(vi, va);\r\n }, {});\r\n\r\n //si solo hay un objeto devuelvo directamente los atributos\tde este\t\t\t\t\r\n resolve(Object.keys(objReturned).length === 1 ? objReturned[Object.keys(objReturned)[0]] : objReturned);\r\n }).catch(reject);\r\n }\r\n else {\r\n reject(\"No esta disponible el WebWorker\");\r\n }\r\n })\r\n .catch(err => reject(err));\r\n });\r\n result.then(\r\n function (data) {\r\n if (TC.Util.isFunction(callback)) {\r\n callback(data);\r\n }\r\n },\r\n function (errorText) {\r\n if (TC.Util.isFunction(error)) {\r\n error(errorText);\r\n }\r\n }\r\n );\r\n return result;\r\n };\r\n\r\n layerProto.import = function (options) {\r\n this.wrap.import(options);\r\n };\r\n var _cache = {};\r\n\r\n layerProto.setNodeVisibility = function (id, visible) {\r\n const self = this;\r\n self.state = TC.Layer.state.LOADING;\r\n self.map.trigger(TC.Consts.event.BEFOREUPDATE);\r\n self.map.trigger(TC.Consts.event.BEFORELAYERUPDATE, { layer: self });\r\n\r\n const node = TC.Layer.prototype.setNodeVisibility.call(self, id, visible);\r\n if (!node.parent) { // Si es el nodo raíz, es la capa entera\r\n self.setVisibility(visible);\r\n }\r\n else {\r\n _cache[id] = visible ? TC.Consts.visibility.VISIBLE : TC.Consts.visibility.NOT_VISIBLE;\r\n\r\n //02/02/2022 URI: Si se pincha en un nodo que tiene hijos se cambian los estos con el valor dado\r\n //salvo que se quiera hace visible un nodo que no esta en la cache.\r\n node.children.forEach((children) => {\r\n // (_cache[children.uid] !== undefined || !visible)\r\n self.setNodeVisibility(children.uid, visible);\r\n });\r\n if (node.parent) {\r\n //si todos los hijos están visible se hace visible el padre\r\n if (_cache[node.parent.uid] === TC.Consts.visibility.NOT_VISIBLE && node.parent.children.length > 0 && node.parent.children.every(c => _cache[c.uid] === undefined || _cache[c.uid] !== TC.Consts.visibility.NOT_VISIBLE)) {\r\n self.setNodeVisibility(node.parent.uid, true);\r\n }\r\n //si todos los hijos estan ocultos se oculta el padre\r\n if (_cache[node.parent.uid] !== TC.Consts.visibility.NOT_VISIBLE && node.parent.children.length > 0 && node.parent.children.every(c => _cache[c.uid] === TC.Consts.visibility.NOT_VISIBLE))\r\n self.setNodeVisibility(node.parent.uid, false);\r\n }\r\n var found = false;\r\n var i;\r\n var f;\r\n for (i = 0; i < self.features.length; i++) {\r\n f = self.features[i];\r\n if (f.id == id) {\r\n found = true;\r\n f.setVisibility(visible);\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n for (i = 0; i < self.features.length; i++) {\r\n f = self.features[i];\r\n if (f._path === undefined) {\r\n f._path = '/' + f.getPath().join('/');\r\n }\r\n //URI: 31/12/2021 Si un KML tiene elementos anidados en 2 o mas folders cambiar la visibilidad de los superiores no afectaba a las features descendientes\r\n if (f._path === id || f._path.startsWith(id)) {\r\n f.setVisibility(visible);\r\n }\r\n }\r\n }\r\n }\r\n self.state = TC.Layer.state.IDLE;\r\n self.map.trigger(TC.Consts.event.LAYERUPDATE, { layer: self });\r\n self.map.trigger(TC.Consts.event.UPDATE);\r\n return node;\r\n };\r\n\r\n layerProto.getNodeVisibility = function (id) {\r\n var self = this;\r\n var result = TC.Layer.prototype.getNodeVisibility.call(self, id);\r\n if (!self.tree) {\r\n self.tree = self.getTree();\r\n }\r\n\r\n var node = self.findNode(id, self.tree);\r\n if (!node) return undefined;\r\n if (node === self.tree) {\r\n result = self.getVisibility() ? TC.Consts.visibility.VISIBLE : TC.Consts.visibility.NOT_VISIBLE;\r\n }\r\n else {\r\n var r = _cache[id];\r\n if (r !== undefined) {\r\n result = r;\r\n const someOppositeState = Object.entries(_cache).some(arr => arr[0] !== id && arr[0].startsWith(id) && arr[1] !== result);\r\n if (someOppositeState)\r\n result = TC.Consts.visibility.HAS_VISIBLE;\r\n }\r\n else {\r\n const someHidden = Object.entries(_cache).some(arr => arr[0] !== id && arr[0].startsWith(id) && !arr[1]);\r\n const everyHidden = node.children.length > 0 && node.children.every(c => _cache[c.uid] !== undefined && _cache[c.uid] === TC.Consts.visibility.NOT_VISIBLE);\r\n if (everyHidden)\r\n result = TC.Consts.visibility.NOT_VISIBLE;\r\n else if (someHidden)\r\n result = TC.Consts.visibility.HAS_VISIBLE;\r\n else\r\n result = TC.Consts.visibility.VISIBLE;\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n layerProto.setModifiable = function (modifiable) {\r\n this.wrap.setModifiable(modifiable);\r\n };\r\n\r\n layerProto.applyEdits = function (inserts, updates, deletes) {\r\n return this.wrap.sendTransaction(inserts, updates, deletes);\r\n };\r\n\r\n layerProto.refresh = function () {\r\n const self = this;\r\n self.clearFeatures();\r\n return self.wrap.reloadSource();\r\n };\r\n\r\n layerProto.getFeaturesInCurrentExtent = function (tolerance) {\r\n var self = this;\r\n\r\n var extent = self.map.getExtent();\r\n return this.getFeaturesInExtent(extent, tolerance);\r\n };\r\n\r\n layerProto.getFeaturesInExtent = function (extent, tolerance) {\r\n return this.wrap.getFeaturesInExtent(extent, tolerance);\r\n };\r\n\r\n layerProto.setProjection = function (options) {\r\n const self = this;\r\n self.wrap.setProjection(options);\r\n if (options.crs && options.oldCrs) {\r\n self.map.trigger(TC.Consts.event.BEFORELAYERUPDATE, { layer: self });\r\n self.features.forEach(function (feat) {\r\n feat.wrap.setGeometry(TC.Util.reproject(feat.geometry, options.oldCrs, options.crs));\r\n feat.geometry = feat.wrap.getGeometry();\r\n });\r\n self.map.trigger(TC.Consts.event.LAYERUPDATE, { layer: self });\r\n }\r\n };\r\n\r\n layerProto.setStyles = function (options) {\r\n const self = this;\r\n self.styles = TC.Util.extend({}, options);\r\n self.wrap.setStyles(options);\r\n };\r\n //URI esta función compara los estilos de las features extrayendo la parte comun para sacarla a los estilos de capa\r\n const compareStyles = function (objTo, objFrom, distinct = true) {\r\n const fnCompare = function (value1, value2, mode) {\r\n return mode ? value1 !== value2 : value1 === value2;\r\n };\r\n for (let key in objFrom) {\r\n //si es un array o un objeto\r\n const objFromValue = objFrom[key];\r\n if (Array.isArray(objFromValue)) {\r\n let toStyle = objTo[key];\r\n if (toStyle) {\r\n toStyle = Array.isArray(toStyle) ? toStyle : [toStyle];\r\n }\r\n else {\r\n toStyle = [];\r\n }\r\n if (Object.prototype.hasOwnProperty.call(objTo, key) && fnCompare(objFromValue.join(), toStyle.join(), distinct)) {\r\n delete objTo[key];\r\n }\r\n }\r\n else if (typeof objFromValue === 'object') {\r\n objTo[key] = compareStyles(objTo[key], objFromValue);\r\n }\r\n else {\r\n if (Object.prototype.hasOwnProperty.call(objTo, key) && fnCompare(objFromValue, objTo[key], distinct)) {\r\n delete objTo[key];\r\n }\r\n }\r\n }\r\n return objTo;\r\n }; \r\n layerProto.exportState = function (options) {\r\n const self = this;\r\n options = options || {};\r\n const lObj = {\r\n id: self.id\r\n };\r\n if (self.map && self.map.crs !== self.map.options.crs) {\r\n lObj.crs = self.map.crs;\r\n }\r\n\r\n // Aplicamos una precisión un dígito mayor que la del mapa, si no, al compartir algunas parcelas se deforman demasiado\r\n var precision = Math.pow(10, (self.map.wrap.isGeo() ? TC.Consts.DEGREE_PRECISION : TC.Consts.METER_PRECISION) + 1);\r\n let commonStyles = null;\r\n const features = options.features || self.features;\r\n lObj.features = features\r\n .map(function (f) {\r\n let fObj = {};\r\n var layerStyle;\r\n switch (true) {\r\n case TC.feature.Marker && f instanceof TC.feature.Marker:\r\n fObj.type = TC.Consts.geom.POINT;\r\n layerStyle = self.options.styles && self.options.styles.marker;\r\n break;\r\n case TC.feature.Point && f instanceof TC.feature.Point:\r\n fObj.type = TC.Consts.geom.POINT;\r\n layerStyle = self.options.styles && self.options.styles.point;\r\n break;\r\n case TC.feature.MultiPoint && f instanceof TC.feature.MultiPoint:\r\n fObj.type = TC.Consts.geom.MULTIPOINT;\r\n break;\r\n case TC.feature.Polyline && f instanceof TC.feature.Polyline:\r\n fObj.type = TC.Consts.geom.POLYLINE;\r\n layerStyle = self.options.styles && self.options.styles.line;\r\n break;\r\n case TC.feature.MultiPolyline && f instanceof TC.feature.MultiPolyline:\r\n fObj.type = TC.Consts.geom.MULTIPOLYLINE;\r\n layerStyle = self.options.styles && self.options.styles.line;\r\n break;\r\n case TC.feature.Polygon && f instanceof TC.feature.Polygon:\r\n fObj.type = TC.Consts.geom.POLYGON;\r\n layerStyle = self.options.styles && self.options.styles.polygon;\r\n break;\r\n case TC.feature.MultiPolygon && f instanceof TC.feature.MultiPolygon:\r\n fObj.type = TC.Consts.geom.MULTIPOLYGON;\r\n layerStyle = self.options.styles && self.options.styles.polygon;\r\n break;\r\n case TC.feature.Circle && f instanceof TC.feature.Circle:\r\n fObj.type = TC.Consts.geom.CIRCLE;\r\n layerStyle = self.options.styles && self.options.styles.polygon;\r\n break;\r\n default:\r\n break;\r\n }\r\n fObj.id = f.id;\r\n fObj.geom = TC.Util.compactGeometry(f.geometry, precision);\r\n fObj.data = f.getData();\r\n fObj.showsPopup = f.showsPopup; \r\n if (options.exportStyles === undefined || options.exportStyles) {\r\n layerStyle = TC.Util.extend({}, layerStyle);\r\n for (var key in layerStyle) {\r\n var val = layerStyle[key];\r\n if (TC.Util.isFunction(val)) {\r\n layerStyle[key] = val(f);\r\n }\r\n }\r\n fObj.style = TC.Util.extend(layerStyle, f.getStyle());\r\n if (!commonStyles) commonStyles = Object.assign({},fObj.style);\r\n else\r\n commonStyles = compareStyles(commonStyles, fObj.style);\r\n }\r\n return fObj;\r\n });\r\n if (!options.features && commonStyles && Object.keys(commonStyles).length) {\r\n //Ahora borramos las propiedades de cada feature que son comunes a todos\r\n lObj.features.forEach(function (feature) {\r\n feature.style = compareStyles(feature.style, commonStyles,false);\r\n });\r\n lObj.style = commonStyles;\r\n }\r\n return lObj;\r\n };\r\n\r\n layerProto.importState = function (obj) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n const promises = new Array(obj.features.length);\r\n obj.features.forEach(function (f, idx) {\r\n let style = TC.Util.extend(obj.style || {}, f.style);\r\n const featureOptions = TC.Util.extend(style , { data: f.data, id: f.id, showsPopup: f.showsPopup });\r\n var addFn;\r\n switch (f.type) {\r\n case TC.Consts.geom.POLYGON:\r\n addFn = self.addPolygon;\r\n break;\r\n case TC.Consts.geom.MULTIPOLYGON:\r\n addFn = self.addMultiPolygon;\r\n break;\r\n case TC.Consts.geom.POLYLINE:\r\n addFn = self.addPolyline;\r\n break;\r\n case TC.Consts.geom.MULTIPOLYLINE:\r\n addFn = self.addMultiPolyline;\r\n break;\r\n case TC.Consts.geom.CIRCLE:\r\n addFn = self.addCircle;\r\n break;\r\n case TC.Consts.geom.MULTIPOINT:\r\n if (f.style && (f.style.url || f.style.className)) {\r\n addFn = self.addMultiMarker;\r\n }\r\n else {\r\n addFn = self.addMultiPoint;\r\n }\r\n break;\r\n case TC.Consts.geom.POINT:\r\n if (style && (style.url || style.className)) {\r\n addFn = self.addMarker;\r\n }\r\n else {\r\n addFn = self.addPoint;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (addFn) {\r\n var geom = TC.Util.explodeGeometry(f.geom);\r\n if (obj.crs && self.map.crs !== obj.crs) {\r\n promises[idx] = new Promise(function (res, rej) {\r\n self.map.one(TC.Consts.event.PROJECTIONCHANGE, function (_e) {\r\n addFn.call(self, geom, featureOptions).then(\r\n function () {\r\n res();\r\n },\r\n function () {\r\n rej(Error('addFn failed'));\r\n }\r\n );\r\n });\r\n });\r\n }\r\n else {\r\n promises[idx] = addFn.call(self, geom, featureOptions);\r\n }\r\n }\r\n });\r\n Promise.all(promises).then(\r\n function () {\r\n resolve();\r\n },\r\n function (err) {\r\n reject(err instanceof Error ? err : Error(err));\r\n });\r\n });\r\n };\r\n\r\n layerProto.clone = function () {\r\n const self = this;\r\n const clone = TC.Layer.prototype.clone.call(self);\r\n self.features.forEach(f => clone.addFeature(f.clone()));\r\n return clone;\r\n };\r\n\r\n layerProto.getGetCapabilitiesUrl = function () {\r\n const self = this;\r\n if (self.type === TC.Consts.layerType.WFS) {\r\n const getUrl = () => self.options.url || self.url;\r\n const _src = !TC.Util.isSecureURL(getUrl()) && TC.Util.isSecureURL(TC.Util.toAbsolutePath(getUrl())) ? self.getBySSL_(getUrl()) : getUrl();\r\n\r\n var params = {};\r\n params.SERVICE = 'WFS';\r\n params.VERSION = '2.0.0';\r\n params.REQUEST = 'GetCapabilities';\r\n\r\n return _src + '?' + TC.Util.getParamString(params);\r\n }\r\n else\r\n return null;\r\n };\r\n\r\n layerProto.getCapabilitiesPromise = function () {\r\n const self = this;\r\n if (self.type === TC.Consts.layerType.WFS) {\r\n return new Promise((resolve, reject) => {\r\n const processedCapabilities = function (capabilities) {\r\n // Si existe el capabilities no machacamos, porque provoca efectos indeseados en la gestión de capas.\r\n // En concreto, se regeneran los UIDs de capas, como consecuencia los controles de la API interpretan como distintas capas que son la misma.\r\n self.capabilities = self.capabilities || capabilities;\r\n TC.capabilitiesWFS[self.options.url || self.url] = TC.capabilitiesWFS[self.options.url || self.url] || capabilities;\r\n TC.capabilitiesWFS[actualUrl] = TC.capabilitiesWFS[actualUrl] || capabilities;\r\n resolve(capabilities);\r\n };\r\n\r\n var actualUrl = (self.options.url || self.url).replace(/https ?:/gi, '');\r\n\r\n if (self.capabilities) {\r\n resolve(self.capabilities);\r\n self._capabilitiesPromise = Promise.resolve(self.capabilities);\r\n }\r\n if (TC.capabilitiesWFS[actualUrl]) {\r\n resolve(TC.capabilitiesWFS[actualUrl]);\r\n self._capabilitiesPromise = Promise.resolve(TC.capabilitiesWFS[actualUrl]);\r\n\r\n }\r\n\r\n self.toolProxification = new TC.tool.Proxification(TC.proxify);\r\n\r\n const cachePromise = capabilitiesPromises[actualUrl];\r\n capabilitiesPromises[actualUrl] = self._capabilitiesPromise = cachePromise || new Promise(function (res, rej) {\r\n const onlinePromise = self.getCapabilitiesOnline();\r\n const storagePromise = self.getCapabilitiesFromStorage();\r\n\r\n onlinePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function (error) {\r\n storagePromise.catch(function () {\r\n rej(error);\r\n });\r\n });\r\n storagePromise\r\n .then(function (capabilities) {\r\n res(capabilities);\r\n })\r\n .catch(function () {\r\n onlinePromise.catch(function (error) {\r\n rej(error);\r\n });\r\n });\r\n });\r\n\r\n capabilitiesPromises[actualUrl].then(function (capabilities) {\r\n processedCapabilities(capabilities);\r\n })\r\n .catch(function (error) {\r\n if (self.map) {\r\n self.map.trigger(TC.Consts.event.LAYERERROR, { layer: self, reason: 'couldNotGetCapabilities' });\r\n }\r\n reject(error);\r\n });\r\n });\r\n }\r\n else {\r\n return Promise.reject(new Error(`Layer \"${self.id}\" does not have capabilities document`));\r\n }\r\n };\r\n\r\n })();\r\n})();\r\n\r\nconst Vector = TC.layer.Vector;\r\nexport default Vector;","/**\n * @module ol/util\n */\n\n/**\n * @return {?} Any return.\n */\nexport function abstract() {\n return /** @type {?} */ (\n (function () {\n throw new Error('Unimplemented abstract method.');\n })()\n );\n}\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nlet uidCounter_ = 0;\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport const VERSION = 'latest';\n","/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n constructor() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n\n /**\n * Clean up.\n */\n dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n }\n\n /**\n * Extension point for disposable objects.\n * @protected\n */\n disposeInternal() {}\n}\n\nexport default Disposable;\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [opt_comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n let mid, cmp;\n const comparator = opt_comparator || numberSafeCompareFunction;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n const n = arr.length;\n if (arr[0] <= target) {\n return 0;\n } else if (target <= arr[n - 1]) {\n return n - 1;\n } else {\n let i;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n } else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n } else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n } else if (arr[i] < target) {\n if (typeof direction === 'function') {\n if (direction(target, arr[i - 1], arr[i]) > 0) {\n return i - 1;\n } else {\n return i;\n }\n } else if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n } else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n const length = arr.length >>> 0;\n let value;\n\n for (let i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n let index;\n const found = !arr.every(function (el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [opt_func] Comparison function.\n * @param {boolean} [opt_strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n const compare = opt_func || numberSafeCompareFunction;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (opt_strict && res === 0));\n });\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n let called = false;\n\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array} */\n let lastArgs;\n\n let lastThis;\n\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true;\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","/**\n * @module ol/has\n */\n\nconst ua =\n typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport const FIREFOX = ua.indexOf('firefox') !== -1;\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.indexOf('macintosh') !== -1;\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO =\n typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport const WORKER_OFFSCREEN_CANVAS =\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport const IMAGE_DECODE =\n typeof Image !== 'undefined' && Image.prototype.decode;\n\n/**\n * @type {boolean}\n */\nexport const PASSIVE_EVENT_LISTENERS = (function () {\n let passive = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n\n window.addEventListener('_', null, options);\n window.removeEventListener('_', null, options);\n } catch (error) {\n // passive not supported\n }\n return passive;\n})();\n","/**\n * @module ol/AssertionError\n */\nimport {VERSION} from './util.js';\n\n/**\n * Error object thrown when an assertion failed. This is an ECMA-262 Error,\n * extended with a `code` property.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.\n */\nclass AssertionError extends Error {\n /**\n * @param {number} code Error code.\n */\n constructor(code) {\n const path = VERSION === 'latest' ? VERSION : 'v' + VERSION.split('-')[0];\n const message =\n 'Assertion failed. See https://openlayers.org/en/' +\n path +\n '/doc/errors/#' +\n code +\n ' for details.';\n\n super(message);\n\n /**\n * Error code. The meaning of the code can be found on\n * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with\n * the version found in the OpenLayers script's header comment if a version\n * other than the latest is used).\n * @type {number}\n * @api\n */\n this.code = code;\n\n /**\n * @type {string}\n */\n this.name = 'AssertionError';\n\n // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40\n this.message = message;\n }\n}\n\nexport default AssertionError;\n","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n","/**\n * @module ol/transform\n */\nimport {WORKER_OFFSCREEN_CANVAS} from './has.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n * the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n const det = determinant(source);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n\n const a = source[0];\n const b = source[1];\n const c = source[2];\n const d = source[3];\n const e = source[4];\n const f = source[5];\n\n target[0] = d / det;\n target[1] = -b / det;\n target[2] = -c / det;\n target[3] = a / det;\n target[4] = (c * f - d * e) / det;\n target[5] = -(a * f - b * e) / det;\n\n return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {HTMLElement}\n * @private\n */\nlet transformStringDiv;\n\n/**\n * A rounded string version of the transform. This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n const transformString = 'matrix(' + mat.join(', ') + ')';\n if (WORKER_OFFSCREEN_CANVAS) {\n return transformString;\n }\n const node =\n transformStringDiv || (transformStringDiv = document.createElement('div'));\n node.style.transform = transformString;\n return node.style.transform;\n}\n","/**\n * @module ol/extent/Corner\n */\n\n/**\n * Extent corner.\n * @enum {string}\n */\nexport default {\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n};\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n","/**\n * @module ol/extent\n */\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\nimport {assert} from './asserts.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [opt_extent] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0] - value;\n opt_extent[1] = extent[1] - value;\n opt_extent[2] = extent[2] + value;\n opt_extent[3] = extent[3] + value;\n return opt_extent;\n } else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n }\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent.slice();\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = minX;\n opt_extent[1] = minY;\n opt_extent[2] = maxX;\n opt_extent[3] = maxY;\n return opt_extent;\n } else {\n return [minX, minY, maxX, maxY];\n }\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, opt_extent);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n opt_extent\n) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./extent/Corner.js\").default} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === Corner.BOTTOM_LEFT) {\n coordinate = getBottomLeft(extent);\n } else if (corner === Corner.BOTTOM_RIGHT) {\n coordinate = getBottomRight(extent);\n } else if (corner === Corner.TOP_LEFT) {\n coordinate = getTopLeft(extent);\n } else if (corner === Corner.TOP_RIGHT) {\n coordinate = getTopRight(extent);\n } else {\n assert(false, 13); // Invalid corner\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [opt_extent] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(\n center,\n resolution,\n rotation,\n size,\n opt_extent\n) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n const x0 = x - xCos + ySin;\n const x1 = x - xCos - ySin;\n const x2 = x + xCos - ySin;\n const x3 = x + xCos + ySin;\n const y0 = y - xSin - yCos;\n const y1 = y - xSin + yCos;\n const y2 = y + xSin + yCos;\n const y3 = y + xSin - yCos;\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n opt_extent\n );\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [opt_extent] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n const intersection = opt_extent ? opt_extent : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [opt_extent] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent;\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [opt_extent] Destination extent.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent, opt_stops) {\n let coordinates = [];\n if (opt_stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < opt_stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / opt_stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / opt_stops,\n extent[2] - (width * i) / opt_stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / opt_stops\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, opt_extent);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport const cosh = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n let cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n } else {\n // … else, use the reference implementation of MDN:\n cosh = function (x) {\n const y = /** @type {Math} */ (Math).exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n})();\n\n/**\n * Return the base 2 logarithm of a given number. The method will use the\n * native `Math.log2` function if it is available, otherwise the base 2\n * logarithm will be calculated via the reference implementation of the\n * Mozilla developer network.\n *\n * @param {number} x X.\n * @return {number} Base 2 logarithm of x.\n */\nexport const log2 = (function () {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n let log2;\n if ('log2' in Math) {\n // The environment supports the native Math.log2 function, use it…\n log2 = Math.log2;\n } else {\n // … else, use the reference implementation of MDN:\n log2 = function (x) {\n return Math.log(x) * Math.LOG2E;\n };\n }\n return log2;\n})();\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n","/**\n * @module ol/color\n */\nimport {assert} from './asserts.js';\nimport {clamp} from './math.js';\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nconst HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nconst NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\\(.*\\)$/i;\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n } else {\n return toString(color);\n }\n}\n\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n const el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n const rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n } else {\n return '';\n }\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport const fromString = (function () {\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n\n /**\n * @const\n * @type {number}\n */\n const MAX_CACHE_SIZE = 1024;\n\n /**\n * @type {Object}\n */\n const cache = {};\n\n /**\n * @type {number}\n */\n let cacheSize = 0;\n\n return (\n /**\n * @param {string} s String.\n * @return {Color} Color.\n */\n function (s) {\n let color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n } else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n }\n );\n})();\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n } else {\n return fromString(color);\n }\n}\n\n/**\n * @param {string} s String.\n * @private\n * @return {Color} Color.\n */\nfunction fromStringInternal_(s) {\n let r, g, b, a, color;\n\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n\n if (HEX_COLOR_RE_.exec(s)) {\n // hex\n const n = s.length - 1; // number of hex digits\n let d; // number of digits per channel\n if (n <= 4) {\n d = 1;\n } else {\n d = 2;\n }\n const hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n } else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n } else if (s.indexOf('rgba(') == 0) {\n // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n } else if (s.indexOf('rgb(') == 0) {\n // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n } else {\n assert(false, 14); // Invalid color\n }\n return color;\n}\n\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n const a = color[3] === undefined ? 1 : Math.round(color[3] * 100) / 100;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n if (NAMED_COLOR_RE_.test(s)) {\n s = fromNamed(s);\n }\n return (\n HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0\n );\n}\n","/**\n * @module ol/style/IconImageCache\n */\nimport {asString} from '../color.js';\n\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache.shared}.\n */\nclass IconImageCache {\n constructor() {\n /**\n * @type {!Object}\n * @private\n */\n this.cache_ = {};\n\n /**\n * @type {number}\n * @private\n */\n this.cacheSize_ = 0;\n\n /**\n * @type {number}\n * @private\n */\n this.maxCacheSize_ = 32;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.cache_ = {};\n this.cacheSize_ = 0;\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.cacheSize_ > this.maxCacheSize_;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n expire() {\n if (this.canExpireCache()) {\n let i = 0;\n for (const key in this.cache_) {\n const iconImage = this.cache_[key];\n if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n delete this.cache_[key];\n --this.cacheSize_;\n }\n }\n }\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {import(\"./IconImage.js\").default} Icon image.\n */\n get(src, crossOrigin, color) {\n const key = getKey(src, crossOrigin, color);\n return key in this.cache_ ? this.cache_[key] : null;\n }\n\n /**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @param {import(\"./IconImage.js\").default} iconImage Icon image.\n */\n set(src, crossOrigin, color, iconImage) {\n const key = getKey(src, crossOrigin, color);\n this.cache_[key] = iconImage;\n ++this.cacheSize_;\n }\n\n /**\n * Set the cache size of the icon cache. Default is `32`. Change this value when\n * your map uses more than 32 different icon images and you are not caching icon\n * styles on the application level.\n * @param {number} maxCacheSize Cache max size.\n * @api\n */\n setSize(maxCacheSize) {\n this.maxCacheSize_ = maxCacheSize;\n this.expire();\n }\n}\n\n/**\n * @param {string} src Src.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"../color.js\").Color} color Color.\n * @return {string} Cache key.\n */\nfunction getKey(src, crossOrigin, color) {\n const colorString = color ? asString(color) : 'null';\n return crossOrigin + ':' + src + ':' + colorString;\n}\n\nexport default IconImageCache;\n\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport const shared = new IconImageCache();\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n /**\n * Stop event propagation.\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\n\nexport default BaseEvent;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n\n/**\n * @typedef {'propertychange'} Types\n */\n","/**\n * @module ol/obj\n */\n\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport const assign =\n typeof Object.assign === 'function'\n ? Object.assign\n : function (target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n const output = Object(target);\n for (let i = 1, ii = arguments.length; i < ii; ++i) {\n const source = arguments[i];\n if (source !== undefined && source !== null) {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (const property in object) {\n delete object[property];\n }\n}\n\n/**\n * Polyfill for Object.values(). Get an array of property values from an object.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} object The object from which to get the values.\n * @return {!Array} The property values.\n * @template K,V\n */\nexport const getValues =\n typeof Object.values === 'function'\n ? Object.values\n : function (object) {\n const values = [];\n for (const property in object) {\n values.push(object[property]);\n }\n return values;\n };\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n let property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport {VOID} from '../functions.js';\nimport {clear} from '../obj.js';\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends Disposable {\n /**\n * @param {*} [opt_target] Default event target for dispatched events.\n */\n constructor(opt_target) {\n super();\n\n /**\n * @private\n * @type {*}\n */\n this.eventTarget_ = opt_target;\n\n /**\n * @private\n * @type {Object}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>}\n */\n this.listeners_ = null;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n addEventListener(type, listener) {\n if (!type || !listener) {\n return;\n }\n const listeners = this.listeners_ || (this.listeners_ = {});\n const listenersForType = listeners[type] || (listeners[type] = []);\n if (listenersForType.indexOf(listener) === -1) {\n listenersForType.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n dispatchEvent(event) {\n const isString = typeof event === 'string';\n const type = isString ? event : event.type;\n const listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n\n const evt = isString ? new Event(event) : /** @type {Event} */ (event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n const dispatching = this.dispatching_ || (this.dispatching_ = {});\n const pendingRemovals =\n this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n let propagate;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (\n listeners[i]\n ).handleEvent(evt);\n } else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (\n listeners[i]\n ).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n let pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n this.listeners_ && clear(this.listeners_);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n getListeners(type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n }\n\n /**\n * @param {string} [opt_type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(opt_type) {\n if (!this.listeners_) {\n return false;\n }\n return opt_type\n ? opt_type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners_ && this.listeners_[type];\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n }\n}\n\nexport default Target;\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [opt_once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n if (opt_this && opt_this !== target) {\n listener = listener.bind(opt_this);\n }\n if (opt_once) {\n const originalListener = listener;\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(this, arguments);\n };\n }\n const eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [opt_this] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n","/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {listen, listenOnce, unlistenByKey} from './events.js';\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends EventTarget {\n constructor() {\n super();\n\n this.on =\n /** @type {ObservableOnSignature} */ (\n this.onInternal\n );\n\n this.once =\n /** @type {ObservableOnSignature} */ (\n this.onceInternal\n );\n\n this.un = /** @type {ObservableOnSignature} */ (this.unInternal);\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onInternal(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n } else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onceInternal(type, listener) {\n let key;\n if (Array.isArray(type)) {\n const len = type.length;\n key = new Array(len);\n for (let i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n } else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n unInternal(type, listener) {\n const key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n } else if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n } else {\n this.removeEventListener(type, listener);\n }\n }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n } else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\n\nexport default Observable;\n","/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport {assign, isEmpty} from './obj.js';\nimport {getUid} from './util.js';\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nexport class ObjectEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nclass BaseObject extends Observable {\n /**\n * @param {Object} [opt_values] An object with key-value pairs.\n */\n constructor(opt_values) {\n super();\n\n /***\n * @type {ObjectOnSignature}\n */\n this.on;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.once;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.un;\n\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(this);\n\n /**\n * @private\n * @type {Object}\n */\n this.values_ = null;\n\n if (opt_values !== undefined) {\n this.setProperties(opt_values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return (this.values_ && Object.keys(this.values_)) || [];\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return (this.values_ && assign({}, this.values_)) || {};\n }\n\n /**\n * @return {boolean} The object has properties.\n */\n hasProperties() {\n return !!this.values_;\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = `change:${key}`;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = ObjectEventType.PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n addChangeListener(key, listener) {\n this.addEventListener(`change:${key}`, listener);\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n removeChangeListener(key, listener) {\n this.removeEventListener(`change:${key}`, listener);\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n set(key, value, opt_silent) {\n const values = this.values_ || (this.values_ = {});\n if (opt_silent) {\n values[key] = value;\n } else {\n const oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [opt_silent] Update without triggering an event.\n * @api\n */\n setProperties(values, opt_silent) {\n for (const key in values) {\n this.set(key, values[key], opt_silent);\n }\n }\n\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n applyProperties(source) {\n if (!source.values_) {\n return;\n }\n assign(this.values_ || (this.values_ = {}), source.values_);\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [opt_silent] Unset without triggering an event.\n * @api\n */\n unset(key, opt_silent) {\n if (this.values_ && key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n\nexport default BaseObject;\n","/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n MAX_ZOOM: 'maxZoom',\n MIN_ZOOM: 'minZoom',\n SOURCE: 'source',\n MAP: 'map',\n};\n","/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport {abstract} from '../util.js';\nimport {assert} from '../asserts.js';\nimport {assign} from '../obj.js';\nimport {clamp} from '../math.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(typeof properties[LayerProperty.OPACITY] === 'number', 64); // Layer opacity must be a number\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [opt_managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(opt_managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: opt_managed === undefined ? true : opt_managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [opt_array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [opt_states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/State.js\").default} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the visibility of the layer (`true` or `false`).\n * @return {boolean} The visibility of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. The default Z-index is 0.\n * @return {number} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [opt_background] Background color.\n */\n setBackground(opt_background) {\n this.background_ = opt_background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 64); // Layer opacity must be a number\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n","/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered before a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#prerender\n * @api\n */\n PRERENDER: 'prerender',\n\n /**\n * Triggered after a layer is rendered.\n * @event module:ol/render/Event~RenderEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered before layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n\n /**\n * Triggered after layers are composed. When dispatched by the map, the event object will not have\n * a `context` set. When dispatched by a layer, the event object will have a `context` set. Only\n * WebGL layers currently dispatch this event.\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * The event object will not have a `context` set.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n","/**\n * @module ol/source/State\n */\n\n/**\n * @enum {string}\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n */\nexport default {\n UNDEFINED: 'undefined',\n LOADING: 'loading',\n READY: 'ready',\n ERROR: 'error',\n};\n","/**\n * @module ol/layer/Layer\n */\nimport BaseLayer from './Base.js';\nimport EventType from '../events/EventType.js';\nimport LayerProperty from './Property.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport {assert} from '../asserts.js';\nimport {assign} from '../obj.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {function(import(\"../PluggableMap.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../PluggableMap.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {import(\"../source/Source.js\").default|undefined} source Source being rendered (only for multi-source layers).\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link import(\"../PluggableMap.js\").default#addLayer map.addLayer()}. Components\n * like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * {@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * Please note that for performance reasons several layers might get rendered to\n * the same HTML element, which will cause {@link import(\"../PluggableMap.js\").default#forEachLayerAtPixel map.forEachLayerAtPixel()} to\n * give false positives. To avoid this, apply different `className` properties to the\n * layers at creation time.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @api\n */\nclass Layer extends BaseLayer {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n const baseOptions = assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /***\n * @type {LayerOnSignature}\n */\n this.on;\n\n /***\n * @type {LayerOnSignature}\n */\n this.once;\n\n /***\n * @type {LayerOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?import(\"../events.js\").EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n /**\n * @private\n * @type {RendererType}\n */\n this.renderer_ = null;\n\n /**\n * @protected\n * @type {boolean}\n */\n this.rendered = false;\n\n // Overwrite default render method with a custom one\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n this.addChangeListener(\n LayerProperty.SOURCE,\n this.handleSourcePropertyChange_\n );\n\n const source = options.source\n ? /** @type {SourceType} */ (options.source)\n : null;\n this.setSource(source);\n }\n\n /**\n * @param {Array} [opt_array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n const array = opt_array ? opt_array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @param {Array} [opt_states] Optional list of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states ? opt_states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {SourceType|null} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n }\n\n /**\n * @return {SourceType|null} The source being rendered.\n */\n getRenderSource() {\n return this.getSource();\n }\n\n /**\n * @return {import(\"../source/State.js\").default} Source state.\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? SourceState.UNDEFINED : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(\n source,\n EventType.CHANGE,\n this.handleSourceChange_,\n this\n );\n }\n this.changed();\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Promise>} Promise that resolves with\n * an array of features.\n */\n getFeatures(pixel) {\n if (!this.renderer_) {\n return new Promise((resolve) => resolve([]));\n }\n return this.renderer_.getFeatures(pixel);\n }\n\n /**\n * @param {import(\"../pixel\").Pixel} pixel Pixel.\n * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n */\n getData(pixel) {\n if (!this.renderer_ || !this.rendered) {\n return null;\n }\n return this.renderer_.getData(pixel);\n }\n\n /**\n * In charge to manage the rendering of the layer. One layer type is\n * bounded with one layer renderer.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @param {HTMLElement} target Target which the renderer may (but need not) use\n * for rendering its content.\n * @return {HTMLElement} The rendered element.\n */\n render(frameState, target) {\n const layerRenderer = this.getRenderer();\n\n if (layerRenderer.prepareFrame(frameState)) {\n this.rendered = true;\n return layerRenderer.renderFrame(frameState, target);\n }\n }\n\n /**\n * Called when a layer is not visible during a map render.\n */\n unrender() {\n this.rendered = false;\n }\n\n /**\n * For use inside the library only.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n */\n setMapInternal(map) {\n if (!map) {\n this.unrender();\n }\n this.set(LayerProperty.MAP, map);\n }\n\n /**\n * For use inside the library only.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n */\n getMapInternal() {\n return this.get(LayerProperty.MAP);\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection, and the callback in\n * {@link module:ol/Map~Map#forEachLayerAtPixel} will receive `null` as layer. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map~Map#addLayer} instead.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(\n map,\n RenderEventType.PRECOMPOSE,\n function (evt) {\n const renderEvent =\n /** @type {import(\"../render/Event.js\").default} */ (evt);\n const layerStatesArray = renderEvent.frameState.layerStatesArray;\n const layerState = this.getLayerState(false);\n // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.\n assert(\n !layerStatesArray.some(function (arrayLayerState) {\n return arrayLayerState.layer === layerState.layer;\n }),\n 67\n );\n layerStatesArray.push(layerState);\n },\n this\n );\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * Set the layer source.\n * @param {SourceType|null} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n\n /**\n * Get the renderer for this layer.\n * @return {RendererType} The layer renderer.\n */\n getRenderer() {\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n return this.renderer_;\n }\n\n /**\n * @return {boolean} The layer has a renderer.\n */\n hasRenderer() {\n return !!this.renderer_;\n }\n\n /**\n * Create a renderer for this layer.\n * @return {RendererType} A layer renderer.\n * @protected\n */\n createRenderer() {\n return null;\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.renderer_) {\n this.renderer_.dispose();\n delete this.renderer_;\n }\n\n this.setSource(null);\n super.disposeInternal();\n }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n if (!layerState.visible) {\n return false;\n }\n const resolution = viewState.resolution;\n if (\n resolution < layerState.minResolution ||\n resolution >= layerState.maxResolution\n ) {\n return false;\n }\n const zoom = viewState.zoom;\n return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n","/**\n * @module ol/coordinate\n */\nimport {getWidth} from './extent.js';\nimport {modulo} from './math.js';\nimport {padNumber} from './string.js';\n\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n\n const x = x0 + (r * dx) / d;\n const y = y0 + (r * dy) / d;\n\n return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along =\n dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n }\n );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const dflPrecision = opt_fractionDigits || 0;\n const precision = Math.pow(10, dflPrecision);\n\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = x - deg * 3600 - min * 60;\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n return (\n deg +\n '\\u00b0 ' +\n padNumber(min, 2) +\n '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) +\n '\\u2033' +\n (normalizedDegrees == 0\n ? ''\n : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0))\n );\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n } else {\n return '';\n }\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return (\n degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits)\n );\n } else {\n return '';\n }\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [opt_fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n const worldWidth = getWidth(projection.getExtent());\n const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [opt_sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, opt_sourceExtentWidth) {\n const projectionExtent = projection.getExtent();\n let worldsAway = 0;\n if (\n projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])\n ) {\n const sourceExtentWidth =\n opt_sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor(\n (coordinate[0] - projectionExtent[0]) / sourceExtentWidth\n );\n }\n return worldsAway;\n}\n","/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {TRUE} from '../functions.js';\nimport {abstract} from '../util.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {getWidth} from '../extent.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {inView} from '../layer/Layer.js';\nimport {wrapX} from '../coordinate.js';\n\n/**\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n * @template T\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1]\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @abstract\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, layerFilter) {\n return abstract();\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../PluggableMap.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n","/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n /**\n * @param {import(\"./EventType.js\").default} type Type.\n * @param {import(\"../transform.js\").Transform} [opt_inversePixelTransform] Transform for\n * CSS pixels to rendered pixels.\n * @param {import(\"../PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n * @param {?(CanvasRenderingContext2D|WebGLRenderingContext)} [opt_context] Context.\n */\n constructor(type, opt_inversePixelTransform, opt_frameState, opt_context) {\n super(type);\n\n /**\n * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n * @type {import(\"../transform.js\").Transform|undefined}\n * @api\n */\n this.inversePixelTransform = opt_inversePixelTransform;\n\n /**\n * An object representing the current render frame state.\n * @type {import(\"../PluggableMap.js\").FrameState|undefined}\n * @api\n */\n this.frameState = opt_frameState;\n\n /**\n * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n * the context will be the 2D rendering context. For WebGL layers, the context will be the WebGL\n * context.\n * @type {CanvasRenderingContext2D|WebGLRenderingContext|undefined}\n * @api\n */\n this.context = opt_context;\n }\n}\n\nexport default RenderEvent;\n","/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(\n [\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n ].join(''),\n 'i'\n);\nconst fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport const getFontParameters = function (fontSpec) {\n const match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n const style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n const value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n\n/**\n * @param {number} opacity Opacity (0..1).\n * @return {string} CSS opacity.\n */\nexport function cssOpacity(opacity) {\n return opacity === 1 ? '' : String(Math.round(opacity * 100) / 100);\n}\n","import {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\n/**\n * @module ol/dom\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [opt_width] Canvas width.\n * @param {number} [opt_height] Canvas height.\n * @param {Array} [opt_canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [opt_Context2DSettings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(\n opt_width,\n opt_height,\n opt_canvasPool,\n opt_Context2DSettings\n) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n let canvas;\n if (opt_canvasPool && opt_canvasPool.length) {\n canvas = opt_canvasPool.shift();\n } else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(opt_width || 300, opt_height || 300);\n } else {\n canvas = document.createElement('canvas');\n }\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (\n canvas.getContext('2d', opt_Context2DSettings)\n );\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove.\n * @return {Node|null} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n const oldChildren = node.childNodes;\n\n for (let i = 0; true; ++i) {\n const oldChild = oldChildren[i];\n const newChild = children[i];\n\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport EventTarget from '../events/Target.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport {clear} from '../obj.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {getFontParameters} from '../css.js';\n\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array} contextInstructions ContextInstructions.\n */\n\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n */\n\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {string} [textAlign] TextAlign.\n * @property {string} textBaseline TextBaseline.\n * @property {string} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array} [padding] Padding.\n */\n\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array} coordinates The array of all coordinates.\n * @property {!Object} [textStates] The text states (decluttering).\n * @property {!Object} [fillStates] The fill states (decluttering).\n * @property {!Object} [strokeStates] The stroke states (decluttering).\n */\n\n/**\n * @typedef {Object} DeclutterImageWithText\n */\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFont = '10px sans-serif';\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultFillStyle = '#000';\n\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport const defaultLineCap = 'round';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultLineDash = [];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineDashOffset = 0;\n\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport const defaultLineJoin = 'round';\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultMiterLimit = 10;\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultStrokeStyle = '#000';\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextAlign = 'center';\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextBaseline = 'middle';\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultPadding = [0, 0, 0, 0];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineWidth = 1;\n\n/**\n * @type {BaseObject}\n */\nexport const checkedFonts = new BaseObject();\n\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache~LRUCache#setSize cache.setSize()}.\n * Deprecated - there is no label cache any more.\n * @type {?}\n * @api\n * @deprecated\n */\nexport const labelCache = new EventTarget();\nlabelCache.setSize = function () {\n console.warn('labelCache is deprecated.'); //eslint-disable-line\n};\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet measureContext = null;\n\n/**\n * @type {string}\n */\nlet measureFont;\n\n/**\n * @type {!Object}\n */\nexport const textHeights = {};\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport const registerFont = (function () {\n const retries = 100;\n const size = '32px ';\n const referenceFonts = ['monospace', 'serif'];\n const len = referenceFonts.length;\n const text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n let interval, referenceWidth;\n\n /**\n * @param {string} fontStyle Css font-style\n * @param {string} fontWeight Css font-weight\n * @param {*} fontFamily Css font-family\n * @return {boolean} Font with style and weight is available\n */\n function isAvailable(fontStyle, fontWeight, fontFamily) {\n let available = true;\n for (let i = 0; i < len; ++i) {\n const referenceFont = referenceFonts[i];\n referenceWidth = measureTextWidth(\n fontStyle + ' ' + fontWeight + ' ' + size + referenceFont,\n text\n );\n if (fontFamily != referenceFont) {\n const width = measureTextWidth(\n fontStyle +\n ' ' +\n fontWeight +\n ' ' +\n size +\n fontFamily +\n ',' +\n referenceFont,\n text\n );\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n return true;\n }\n return false;\n }\n\n function check() {\n let done = true;\n const fonts = checkedFonts.getKeys();\n for (let i = 0, ii = fonts.length; i < ii; ++i) {\n const font = fonts[i];\n if (checkedFonts.get(font) < retries) {\n if (isAvailable.apply(this, font.split('\\n'))) {\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n measureFont = undefined;\n checkedFonts.set(font, retries);\n } else {\n checkedFonts.set(font, checkedFonts.get(font) + 1, true);\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n\n return function (fontSpec) {\n const font = getFontParameters(fontSpec);\n if (!font) {\n return;\n }\n const families = font.families;\n for (let i = 0, ii = families.length; i < ii; ++i) {\n const family = families[i];\n const key = font.style + '\\n' + font.weight + '\\n' + family;\n if (checkedFonts.get(key) === undefined) {\n checkedFonts.set(key, retries, true);\n if (!isAvailable(font.style, font.weight, family)) {\n checkedFonts.set(key, 0, true);\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport const measureTextHeight = (function () {\n /**\n * @type {HTMLDivElement}\n */\n let measureElement;\n return function (fontSpec) {\n let height = textHeights[fontSpec];\n if (height == undefined) {\n if (WORKER_OFFSCREEN_CANVAS) {\n const font = getFontParameters(fontSpec);\n const metrics = measureText(fontSpec, 'Žg');\n const lineHeight = isNaN(Number(font.lineHeight))\n ? 1.2\n : Number(font.lineHeight);\n height =\n lineHeight *\n (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n } else {\n if (!measureElement) {\n measureElement = document.createElement('div');\n measureElement.innerHTML = 'M';\n measureElement.style.minHeight = '0';\n measureElement.style.maxHeight = 'none';\n measureElement.style.height = 'auto';\n measureElement.style.padding = '0';\n measureElement.style.border = 'none';\n measureElement.style.position = 'absolute';\n measureElement.style.display = 'block';\n measureElement.style.left = '-99999px';\n }\n measureElement.style.font = fontSpec;\n document.body.appendChild(measureElement);\n height = measureElement.offsetHeight;\n document.body.removeChild(measureElement);\n }\n textHeights[fontSpec] = height;\n }\n return height;\n };\n})();\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n if (font != measureFont) {\n measureContext.font = font;\n measureFont = measureContext.font;\n }\n return measureContext.measureText(text);\n}\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n return measureText(font, text).width;\n}\n\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n if (text in cache) {\n return cache[text];\n }\n const width = measureTextWidth(font, text);\n cache[text] = width;\n return width;\n}\n\n/**\n * @param {TextState} baseStyle Base style.\n * @param {Array} chunks Text chunks to measure.\n * @return {{width: number, height: number, widths: Array, heights: Array, lineWidths: Array}}} Text metrics.\n */\nexport function getTextDimensions(baseStyle, chunks) {\n const widths = [];\n const heights = [];\n const lineWidths = [];\n let width = 0;\n let lineWidth = 0;\n let height = 0;\n let lineHeight = 0;\n for (let i = 0, ii = chunks.length; i <= ii; i += 2) {\n const text = chunks[i];\n if (text === '\\n' || i === ii) {\n width = Math.max(width, lineWidth);\n lineWidths.push(lineWidth);\n lineWidth = 0;\n height += lineHeight;\n continue;\n }\n const font = chunks[i + 1] || baseStyle.font;\n const currentWidth = measureTextWidth(font, text);\n widths.push(currentWidth);\n lineWidth += currentWidth;\n const currentHeight = measureTextHeight(font);\n heights.push(currentHeight);\n lineHeight = Math.max(lineHeight, currentHeight);\n }\n return {width, height, widths, heights, lineWidths};\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(\n context,\n transform,\n opacity,\n labelOrImage,\n originX,\n originY,\n w,\n h,\n x,\n y,\n scale\n) {\n context.save();\n\n if (opacity !== 1) {\n context.globalAlpha *= opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n\n if (/** @type {*} */ (labelOrImage).contextInstructions) {\n // label\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n } else if (scale[0] < 0 || scale[1] < 0) {\n // flipped image\n context.translate(x, y);\n context.scale(scale[0], scale[1]);\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n 0,\n 0,\n w,\n h\n );\n } else {\n // if image not flipped translate and scale can be avoided\n context.drawImage(\n /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n labelOrImage\n ),\n originX,\n originY,\n w,\n h,\n x,\n y,\n w * scale[0],\n h * scale[1]\n );\n }\n\n context.restore();\n}\n\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n const contextInstructions = label.contextInstructions;\n for (let i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n if (Array.isArray(contextInstructions[i + 1])) {\n context[contextInstructions[i]].apply(\n context,\n contextInstructions[i + 1]\n );\n } else {\n context[contextInstructions[i]] = contextInstructions[i + 1];\n }\n }\n}\n","/**\n * @module ol/renderer/Composite\n */\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport {inView} from '../layer/Layer.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {replaceChildren} from '../dom.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../PluggableMap.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText.bind(map)\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.parentNode.removeChild(this.element_);\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {\n return a.zIndex - b.zIndex;\n });\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n /**\n * @type {Array}\n */\n const declutterLayers = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != SourceState.READY &&\n sourceState != SourceState.UNDEFINED)\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n if ('getDeclutter' in layer) {\n declutterLayers.push(\n /** @type {import(\"../layer/BaseVector.js\").default} */ (layer)\n );\n }\n }\n for (let i = declutterLayers.length - 1; i >= 0; --i) {\n declutterLayers[i].renderDeclutter(frameState);\n }\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {function(import(\"../layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer\n * callback.\n * @param {function(import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @return {T|undefined} Callback result.\n * @template T\n */\n forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, layerFilter) {\n const viewState = frameState.viewState;\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n for (let i = numLayers - 1; i >= 0; --i) {\n const layerState = layerStates[i];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter(layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const data = layerRenderer.getDataAtPixel(\n pixel,\n frameState,\n hitTolerance\n );\n if (data) {\n const result = callback(layer, data);\n if (result) {\n return result;\n }\n }\n }\n }\n return undefined;\n }\n}\n\nexport default CompositeMapRenderer;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n","/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nexport class CollectionEvent extends Event {\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {*} [opt_element] Element.\n * @param {number} [opt_index] The index of the added or removed element.\n */\n constructor(type, opt_element, opt_index) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n this.element = opt_element;\n\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n this.index = opt_index;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n /**\n * @param {Array} [opt_array] Array.\n * @param {Options} [opt_options] Collection options.\n */\n constructor(opt_array, opt_options) {\n super();\n\n /***\n * @type {CollectionOnSignature}\n */\n this.on;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.once;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.un;\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = opt_array ? opt_array : [];\n\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n\n this.updateLength_();\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return this.get(Property.LENGTH);\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n );\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n );\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n );\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n );\n } else {\n for (let j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [opt_except] Optional index to ignore.\n */\n assertUnique_(elem, opt_except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n }\n}\n\nexport default Collection;\n","/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport SourceState from '../source/State.js';\nimport {assert} from '../asserts.js';\nimport {assign, clear} from '../obj.js';\nimport {getIntersection} from '../extent.js';\nimport {getUid} from '../util.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} EventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {EventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|import(\"../Collection.js\").default} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [opt_options] Layer options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n const baseOptions = /** @type {Options} */ (assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(typeof (/** @type {?} */ (layers).getArray) === 'function', 43); // Expected `layers` to be an array or a `Collection`\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this)\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this)\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = /** @type {import(\"./Base.js\").default} */ (\n collectionEvent.element\n );\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = /** @type {import(\"./Base.js\").default} */ (\n collectionEvent.element\n );\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!import(\"../Collection.js\").default} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!import(\"../Collection.js\").default} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!import(\"../Collection.js\").default} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [opt_array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(opt_array) {\n const array = opt_array !== undefined ? opt_array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If opt_states is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [opt_states] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states !== undefined ? opt_states : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!opt_states && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/State.js\").default} Source state.\n */\n getSourceState() {\n return SourceState.READY;\n }\n}\n\nexport default LayerGroup;\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n constructor(type, map, opt_frameState) {\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {import(\"./PluggableMap.js\").default}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./PluggableMap.js\").FrameState}\n * @api\n */\n this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n }\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nclass MapBrowserEvent extends MapEvent {\n /**\n * @param {string} type Event type.\n * @param {import(\"./PluggableMap.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [opt_dragging] Is the map currently being dragged?\n * @param {?import(\"./PluggableMap.js\").FrameState} [opt_frameState] Frame state.\n */\n constructor(type, map, originalEvent, opt_dragging, opt_frameState) {\n super(type, map, opt_frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n this.originalEvent = originalEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n */\n this.pixel_ = null;\n\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n */\n this.coordinate_ = null;\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n }\n\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get pixel() {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n }\n set pixel(pixel) {\n this.pixel_ = pixel;\n }\n\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get coordinate() {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n }\n set coordinate(coordinate) {\n this.coordinate_ = coordinate;\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n */\n preventDefault() {\n super.preventDefault();\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n */\n stopPropagation() {\n super.stopPropagation();\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n }\n}\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n","/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {VOID} from './functions.js';\nimport {listen, unlistenByKey} from './events.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./PluggableMap.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./PluggableMap.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {any}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {number}\n * @private\n */\n this.activePointers_ = 0;\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayEvent_,\n this\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(\n /** @this {MapBrowserEventHandler} */\n function () {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n }.bind(this),\n 250\n );\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[event.pointerId];\n } else if (event.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedTouches_[event.pointerId] = true;\n }\n this.activePointers_ = Object.keys(this.trackedTouches_).length;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_ === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_ === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent\n );\n this.dispatchEvent(newEvent);\n\n // Store a copy of the down event\n this.down_ = /** @type {PointerEvent} */ ({});\n for (const property in pointerEvent) {\n const value = pointerEvent[property];\n this.down_[property] = typeof value === 'function' ? VOID : value;\n }\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this\n )\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this\n )\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointer event. Note that this requires that the type\n * string for the MapBrowserEvent matches the PointerEvent type.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(pointerEvent.type, this.map_, pointerEvent, dragging)\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'} Types\n */\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\n\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n }\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n let state, tile, tileKey;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n tile = /** @type {import(\"./Tile.js\").default} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./PluggableMap.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n","/**\n * @module ol/geom/GeometryType\n */\n\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nexport default {\n POINT: 'Point',\n LINE_STRING: 'LineString',\n LINEAR_RING: 'LinearRing',\n POLYGON: 'Polygon',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection',\n CIRCLE: 'Circle',\n};\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nconst Units = {\n /**\n * Radians\n * @api\n */\n RADIANS: 'radians',\n /**\n * Degrees\n * @api\n */\n DEGREES: 'degrees',\n /**\n * Feet\n * @api\n */\n FEET: 'ft',\n /**\n * Meters\n * @api\n */\n METERS: 'm',\n /**\n * Pixels\n * @api\n */\n PIXELS: 'pixels',\n /**\n * Tile Pixels\n * @api\n */\n TILE_PIXELS: 'tile-pixels',\n /**\n * US Feet\n * @api\n */\n USFEET: 'us-ft',\n};\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object}\n */\nconst unitByCode = {\n '9001': Units.METERS,\n '9002': Units.FEET,\n '9003': Units.USFEET,\n '9101': Units.RADIANS,\n '9102': Units.DEGREES,\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object}\n * @api\n */\nexport const METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.RADIANS] = 6370997 / (2 * Math.PI);\nMETERS_PER_UNIT[Units.DEGREES] = (2 * Math.PI * 6370997) / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\n\nexport default Units;\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n","/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n","/**\n * @module ol/tilegrid/common\n */\n\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport const DEFAULT_MAX_ZOOM = 42;\n\n/**\n * Default tile size.\n * @type {number}\n */\nexport const DEFAULT_TILE_SIZE = 256;\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").default|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, import(\"../coordinate.js\").Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution getPointResolution()} function will be used.\n */\n\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj.get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4.register} function.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").default}\n */\n this.units_ = /** @type {import(\"./Units.js\").default} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, import(\"../coordinate.js\").Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").default} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, import(\"../coordinate.js\").Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\nimport {cosh} from '../math.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: Units.METERS,\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\nimport Units from './Units.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [opt_axisOrientation] Axis orientation.\n */\n constructor(code, opt_axisOrientation) {\n super({\n code: code,\n units: Units.DEGREES,\n extent: EXTENT,\n axisOrientation: opt_axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n let transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n","/**\n * @module ol/sphere\n */\nimport GeometryType from './geom/GeometryType.js';\nimport {toDegrees, toRadians} from './math.js';\n\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the geometry. By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius. By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport const DEFAULT_RADIUS = 6371008.8;\n\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, opt_radius) {\n const radius = opt_radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lat2 = toRadians(c2[1]);\n const deltaLatBy2 = (lat2 - lat1) / 2;\n const deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n const a =\n Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n Math.sin(deltaLonBy2) *\n Math.sin(deltaLonBy2) *\n Math.cos(lat1) *\n Math.cos(lat2);\n return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n let length = 0;\n for (let i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n length += getDistance(coordinates[i], coordinates[i + 1], radius);\n }\n return length;\n}\n\n/**\n * Get the spherical length of a geometry. This length is the sum of the\n * great circle distances between coordinates. For polygons, the length is\n * the sum of all rings. For points, the length is zero. For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the\n * length calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, opt_options) {\n const options = opt_options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let length = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT: {\n break;\n }\n case GeometryType.LINE_STRING:\n case GeometryType.LINEAR_RING: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n length = getLengthInternal(coordinates, radius);\n break;\n }\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n length += getLengthInternal(coordinates[i], radius);\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n for (j = 0, jj = coords.length; j < jj; ++j) {\n length += getLengthInternal(coords[j], radius);\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n length += getLength(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return length;\n}\n\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n let area = 0;\n const len = coordinates.length;\n let x1 = coordinates[len - 1][0];\n let y1 = coordinates[len - 1][1];\n for (let i = 0; i < len; i++) {\n const x2 = coordinates[i][0];\n const y2 = coordinates[i][1];\n area +=\n toRadians(x2 - x1) *\n (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n x1 = x2;\n y1 = y2;\n }\n return (area * radius * radius) / 2.0;\n}\n\n/**\n * Get the spherical area of a geometry. This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [opt_options] Options for the area\n * calculation. By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, opt_options) {\n const options = opt_options || {};\n const radius = options.radius || DEFAULT_RADIUS;\n const projection = options.projection || 'EPSG:3857';\n const type = geometry.getType();\n if (type !== GeometryType.GEOMETRY_COLLECTION) {\n geometry = geometry.clone().transform(projection, 'EPSG:4326');\n }\n let area = 0;\n let coordinates, coords, i, ii, j, jj;\n switch (type) {\n case GeometryType.POINT:\n case GeometryType.MULTI_POINT:\n case GeometryType.LINE_STRING:\n case GeometryType.MULTI_LINE_STRING:\n case GeometryType.LINEAR_RING: {\n break;\n }\n case GeometryType.POLYGON: {\n coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (\n geometry\n ).getCoordinates();\n area = Math.abs(getAreaInternal(coordinates[0], radius));\n for (i = 1, ii = coordinates.length; i < ii; ++i) {\n area -= Math.abs(getAreaInternal(coordinates[i], radius));\n }\n break;\n }\n case GeometryType.MULTI_POLYGON: {\n coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometry\n ).getCoordinates();\n for (i = 0, ii = coordinates.length; i < ii; ++i) {\n coords = coordinates[i];\n area += Math.abs(getAreaInternal(coords[0], radius));\n for (j = 1, jj = coords.length; j < jj; ++j) {\n area -= Math.abs(getAreaInternal(coords[j], radius));\n }\n }\n break;\n }\n case GeometryType.GEOMETRY_COLLECTION: {\n const geometries =\n /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries();\n for (i = 0, ii = geometries.length; i < ii; ++i) {\n area += getArea(geometries[i], opt_options);\n }\n break;\n }\n default: {\n throw new Error('Unsupported geometry type: ' + type);\n }\n }\n return area;\n}\n\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n * point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number} [opt_radius] The sphere radius to use. Defaults to the Earth's\n * mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, opt_radius) {\n const radius = opt_radius || DEFAULT_RADIUS;\n const lat1 = toRadians(c1[1]);\n const lon1 = toRadians(c1[0]);\n const dByR = distance / radius;\n const lat = Math.asin(\n Math.sin(lat1) * Math.cos(dByR) +\n Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)\n );\n const lon =\n lon1 +\n Math.atan2(\n Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),\n Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)\n );\n return [toDegrees(lon), toDegrees(lat)];\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport Projection from './proj/Projection.js';\nimport Units, {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {getDistance} from './sphere.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array, Array=, number=): Array} TransformFunction\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [opt_disable = true] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(opt_disable) {\n const hide = opt_disable === undefined ? true : opt_disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n let output;\n if (opt_output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n output = opt_output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array} [opt_output] Output array of coordinate values.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n if (opt_output !== undefined && input !== opt_output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n input = opt_output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n return typeof projectionLike === 'string'\n ? getProj(/** @type {string} */ (projectionLike))\n : /** @type {Projection} */ (projectionLike) || null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").default} [opt_units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (opt_units && opt_units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[opt_units];\n }\n }\n } else {\n const units = projection.getUnits();\n if ((units == Units.DEGREES && !opt_units) || opt_units == Units.DEGREES) {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326')\n );\n if (toEPSG4326 === identityTransform && units !== Units.DEGREES) {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = opt_units\n ? METERS_PER_UNIT[opt_units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n } else if (typeof projection === 'string') {\n return get(projection);\n } else {\n return /** @type {Projection} */ (projection);\n }\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array} [opt_output] Output.\n * @param {number} [opt_dimension] Dimension.\n * @return {Array} Output.\n */\n function (input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension !== undefined ? opt_dimension : 2;\n const output = opt_output !== undefined ? opt_output : new Array(length);\n for (let i = 0; i < length; i += dimension) {\n const point = coordTransform([input[i], input[i + 1]]);\n output[i] = point[0];\n output[i + 1] = point[1];\n for (let j = dimension - 1; j >= 2; --j) {\n output[i + j] = input[i + j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward)\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse)\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [opt_projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n opt_projection !== undefined ? opt_projection : 'EPSG:3857'\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [opt_projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n const lonLat = transform(\n coordinate,\n opt_projection !== undefined ? opt_projection : 'EPSG:3857',\n 'EPSG:4326'\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n } else {\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} sourceProjection Source Projection object.\n * @param {Projection} destinationProjection Destination Projection\n * object.\n * @return {TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(\n sourceProjection,\n destinationProjection\n) {\n const sourceCode = sourceProjection.getCode();\n const destinationCode = destinationProjection.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [opt_stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, opt_stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, opt_stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * Note that this method is not yet a part of the stable API. Support for user\n * projections is not yet complete and should be considered experimental.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods. This includes all API\n * methods except for those interacting with tile grids.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n // eslint-disable-next-line no-console\n console.warn(\n 'Call useGeographic() ol/proj once to work with [longitude, latitude] coordinates.'\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(sourceProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[sourceUnits]) / METERS_PER_UNIT[userUnits]\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceUnits = get(destProjection).getUnits();\n const userUnits = userProjection.getUnits();\n return sourceUnits && userUnits\n ? (resolution * METERS_PER_UNIT[userUnits]) / METERS_PER_UNIT[sourceUnits]\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destiation).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destiation).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let sourceX = coord[0];\n let sourceY = coord[1];\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n sourceX = sourceX - worldsAway * sourceExtentWidth;\n }\n sourceX = clamp(sourceX, sourceExtent[0], sourceExtent[2]);\n sourceY = clamp(sourceY, sourceExtent[1], sourceExtent[3]);\n transformed = transform([sourceX, sourceY]);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326\n );\n}\n\naddCommon();\n","/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @param {Array} [opt_centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, opt_isMoving, opt_centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = opt_centerShift ? opt_centerShift[0] : 0;\n const shiftY = opt_centerShift ? opt_centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (opt_isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n","/**\n * @module ol/resolutionconstraint\n */\nimport {clamp} from './math.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {linearFindNearest} from './array.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [opt_minResolution] Minimum resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n opt_minResolution,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n const minResolution =\n opt_minResolution !== undefined ? opt_minResolution : 0;\n\n // during interacting or animating, allow intermediary values\n if (opt_isMoving) {\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [opt_smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [opt_maxExtent] Maximum allowed extent.\n * @param {boolean} [opt_showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n opt_smooth,\n opt_maxExtent,\n opt_showFullExtent\n) {\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, opt_isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = opt_maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n opt_maxExtent,\n size,\n opt_showFullExtent\n )\n : maxResolution;\n const smooth = opt_smooth !== undefined ? opt_smooth : true;\n\n if (!smooth || !opt_isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution\n );\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n if (rotation !== undefined) {\n return 0;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n if (rotation !== undefined) {\n return rotation;\n } else {\n return undefined;\n }\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = (2 * Math.PI) / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n rotation = Math.floor(rotation / theta + 0.5) * theta;\n return rotation;\n } else {\n return undefined;\n }\n }\n );\n}\n\n/**\n * @param {number} [opt_tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n const tolerance = opt_tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {boolean} [opt_isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Rotation.\n */\n function (rotation, opt_isMoving) {\n if (opt_isMoving) {\n return rotation;\n }\n\n if (rotation !== undefined) {\n if (Math.abs(rotation) <= tolerance) {\n return 0;\n } else {\n return rotation;\n }\n } else {\n return undefined;\n }\n }\n );\n}\n","/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n } else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n","/**\n * @module ol/geom/GeometryLayout\n */\n\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM',\n};\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n opt_dest\n) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport Units from '../proj/Units.js';\nimport {abstract} from '../util.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createEmpty,\n createOrUpdateEmpty,\n getHeight,\n returnOrUpdate,\n} from '../extent.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from './flat/transform.js';\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n constructor() {\n super();\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = createEmpty();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n this.simplifyTransformedInternal = memoizeOne(function (\n revision,\n squaredTolerance,\n opt_transform\n ) {\n if (!opt_transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n const clone = this.clone();\n clone.applyTransform(opt_transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n });\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [opt_transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, opt_transform) {\n return this.simplifyTransformedInternal(\n this.getRevision(),\n squaredTolerance,\n opt_transform\n );\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n clone() {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n return abstract();\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n }\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, opt_closestPoint) {\n const closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return abstract();\n }\n\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [opt_extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n getExtent(opt_extent) {\n if (this.extentRevision_ != this.getRevision()) {\n const extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, opt_extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n abstract();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n abstract();\n }\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return abstract();\n }\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n */\n getType() {\n return abstract();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n applyTransform(transformFn) {\n abstract();\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {\n return abstract();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n abstract();\n }\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n const sourceProj = getProjection(source);\n const transformFn =\n sourceProj.getUnits() == Units.TILE_PIXELS\n ? function (inCoordinates, outCoordinates, stride) {\n const pixelExtent = sourceProj.getExtent();\n const projectedExtent = sourceProj.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0\n );\n transform2D(\n inCoordinates,\n 0,\n inCoordinates.length,\n stride,\n tmpTransform,\n outCoordinates\n );\n return getTransform(sourceProj, destination)(\n inCoordinates,\n outCoordinates,\n stride\n );\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n\nexport default Geometry;\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport GeometryLayout from './GeometryLayout.js';\nimport {abstract} from '../util.js';\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport {rotate, scale, transform2D, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n constructor() {\n super();\n\n /**\n * @protected\n * @type {import(\"./GeometryLayout.js\").default}\n */\n this.layout = GeometryLayout.XY;\n\n /**\n * @protected\n * @type {number}\n */\n this.stride = 2;\n\n /**\n * @protected\n * @type {Array}\n */\n this.flatCoordinates = null;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromFlatCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n extent\n );\n }\n\n /**\n * @abstract\n * @return {Array<*> | null} Coordinates.\n */\n getCoordinates() {\n return abstract();\n }\n\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n getFirstCoordinate() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getFlatCoordinates() {\n return this.flatCoordinates;\n }\n\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n getLastCoordinate() {\n return this.flatCoordinates.slice(\n this.flatCoordinates.length - this.stride\n );\n }\n\n /**\n * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.\n * @return {import(\"./GeometryLayout.js\").default} Layout.\n * @api\n */\n getLayout() {\n return this.layout;\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (\n squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)\n ) {\n return this;\n }\n\n const simplifiedGeometry =\n this.getSimplifiedGeometryInternal(squaredTolerance);\n const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n } else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n return this;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride;\n }\n\n /**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n setFlatCoordinates(layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n }\n\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n setCoordinates(coordinates, opt_layout) {\n abstract();\n }\n\n /**\n * @param {import(\"./GeometryLayout.js\").default|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n setLayout(layout, coordinates, nesting) {\n /** @type {number} */\n let stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n } else {\n for (let i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = GeometryLayout.XY;\n this.stride = 2;\n return;\n } else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n rotate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n angle,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [opt_sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n let sy = opt_sy;\n if (sy === undefined) {\n sy = sx;\n }\n let anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n scale(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n sx,\n sy,\n anchor,\n flatCoordinates\n );\n this.changed();\n }\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n translate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n deltaX,\n deltaY,\n flatCoordinates\n );\n this.changed();\n }\n }\n}\n\n/**\n * @param {number} stride Stride.\n * @return {import(\"./GeometryLayout.js\").default} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n let layout;\n if (stride == 2) {\n layout = GeometryLayout.XY;\n } else if (stride == 3) {\n layout = GeometryLayout.XYZ;\n } else if (stride == 4) {\n layout = GeometryLayout.XYZM;\n }\n return /** @type {import(\"./GeometryLayout.js\").default} */ (layout);\n}\n\n/**\n * @param {import(\"./GeometryLayout.js\").default} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n let stride;\n if (layout == GeometryLayout.XY) {\n stride = 2;\n } else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n stride = 3;\n } else if (layout == GeometryLayout.XYZM) {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n const flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n } else {\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n transform,\n opt_dest\n );\n }\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(\n flatCoordinates,\n offset1,\n offset2,\n stride,\n x,\n y,\n closestPoint\n) {\n const x1 = flatCoordinates[offset1];\n const y1 = flatCoordinates[offset1 + 1];\n const dx = flatCoordinates[offset2] - x1;\n const dy = flatCoordinates[offset2 + 1] - y1;\n let offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n } else {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n } else if (t > 0) {\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(\n flatCoordinates[offset1 + i],\n flatCoordinates[offset2 + i],\n t\n );\n }\n closestPoint.length = stride;\n return;\n } else {\n offset = offset1;\n }\n }\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n const squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n ends,\n stride,\n max\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n endss,\n stride,\n max\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n if (offset == end) {\n return minSquaredDistance;\n }\n let i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[offset],\n flatCoordinates[offset + 1]\n );\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n let index = offset + stride;\n while (index < end) {\n assignClosest(\n flatCoordinates,\n index - stride,\n index,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n } else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(\n ((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0,\n 1\n );\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(\n flatCoordinates,\n end - stride,\n offset,\n stride,\n x,\n y,\n tmpPoint\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n minSquaredDistance = assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = end;\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [opt_tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(\n flatCoordinates,\n offset,\n endss,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n opt_tmpPoint\n) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint\n );\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n","/**\n * @module ol/geom/flat/deflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(\n flatCoordinates,\n offset,\n coordinates,\n stride\n) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n const coordinate = coordinates[i];\n for (let j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array} [opt_ends] Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatess,\n stride,\n opt_ends\n) {\n const ends = opt_ends ? opt_ends : [];\n let i = 0;\n for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n const end = deflateCoordinates(\n flatCoordinates,\n offset,\n coordinatess[j],\n stride\n );\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>} [opt_endss] Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss,\n stride,\n opt_endss\n) {\n const endss = opt_endss ? opt_endss : [];\n let i = 0;\n for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n const ends = deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss[j],\n stride,\n endss[i]\n );\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [opt_simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n opt_simplifiedFlatCoordinates\n) {\n const simplifiedFlatCoordinates =\n opt_simplifiedFlatCoordinates !== undefined\n ? opt_simplifiedFlatCoordinates\n : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/geom/flat/inflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array} [opt_coordinates] Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n opt_coordinates\n) {\n const coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>} [opt_coordinatess] Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_coordinatess\n) {\n const coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n let i = 0;\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n const end = ends[j];\n coordinatess[i++] = inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinatess[i]\n );\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array>>} [opt_coordinatesss]\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_coordinatesss\n) {\n const coordinatesss =\n opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n let i = 0;\n for (let j = 0, jj = endss.length; j < jj; ++j) {\n const ends = endss[j];\n coordinatesss[i++] = inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatesss[i]\n );\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n","/**\n * @module ol/geom/flat/area\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n let twiceArea = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n twiceArea += y1 * x2 - x1 * y2;\n x1 = x2;\n y1 = y2;\n }\n return twiceArea / 2;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n let area = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n let area = 0;\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n","/**\n * @module ol/geom/LinearRing\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {douglasPeucker} from './flat/simplify.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {linearRing as linearRingArea} from './flat/area.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n */\n clone() {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n maxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingArea(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride\n );\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0\n );\n return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n getType() {\n return GeometryType.LINEAR_RING;\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return false;\n }\n\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Point\n */\nimport GeometryType from './GeometryType.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {containsXY, createOrUpdateFromCoordinate} from '../extent.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n this.setCoordinates(coordinates, opt_layout);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n */\n clone() {\n const point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[0],\n flatCoordinates[1]\n );\n if (squaredDistance < minSquaredDistance) {\n const stride = this.stride;\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n */\n getCoordinates() {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n getType() {\n return GeometryType.POINT;\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n }\n\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride\n );\n this.changed();\n }\n}\n\nexport default Point;\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1]\n );\n }\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {linearRingsContainsXY} from './contains.js';\nimport {numberSafeCompareFunction} from '../../array.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [opt_dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n opt_dest\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (opt_dest) {\n opt_dest.push(pointX, y, maxSegmentLength);\n return opt_dest;\n } else {\n return [pointX, y, maxSegmentLength];\n }\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters\n) {\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/geom/flat/segments\n */\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n let ret;\n offset += stride;\n for (; offset < end; offset += stride) {\n ret = callback(\n flatCoordinates.slice(offset - stride, offset),\n flatCoordinates.slice(offset, offset + stride)\n );\n if (ret) {\n return ret;\n }\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {\n containsExtent,\n createEmpty,\n extendFlatCoordinates,\n intersects,\n intersectsSegment,\n} from '../../extent.js';\nimport {forEach as forEachSegment} from './segments.js';\nimport {linearRingContainsExtent, linearRingContainsXY} from './contains.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n const coordinatesExtent = extendFlatCoordinates(\n createEmpty(),\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(\n flatCoordinates,\n offset,\n end,\n stride,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n }\n );\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n if (\n intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)\n ) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(\n flatCoordinates,\n offset,\n end,\n stride,\n extent\n) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[3]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[1]\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[3]\n )\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent\n) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsExtent(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n if (\n !intersectsLineString(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent\n )\n ) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n extent\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)\n ) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (let i = 0; i < stride; ++i) {\n const tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_right\n) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n !linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)\n ) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n opt_right\n) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [opt_right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n opt_right\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n opt_right\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to contruct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n if (!linearRingIsClockwise(flatCoordinates, offset, end, 2)) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/Polygon\n */\nimport GeometryLayout from './GeometryLayout.js';\nimport GeometryType from './GeometryType.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {closestSquaredDistanceXY, getCenter} from '../extent.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {getInteriorPointOfArray} from './flat/interiorpoint.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {intersectsLinearRingArray} from './flat/intersectsextent.js';\nimport {linearRingsAreOriented, orientLinearRings} from './flat/orient.js';\nimport {linearRings as linearRingsArea} from './flat/area.js';\nimport {linearRingsContainsXY} from './flat/contains.js';\nimport {modulo} from '../math.js';\nimport {quantizeArray} from './flat/simplify.js';\nimport {offset as sphereOffset} from '../sphere.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n /**\n * @param {!Array>|!Array} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `opt_layout` and `opt_ends` are also accepted.)\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @param {Array} [opt_ends] Ends (for internal use with flat coordinates).\n */\n constructor(coordinates, opt_layout, opt_ends) {\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointRevision_ = -1;\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.flatInteriorPoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (opt_layout !== undefined && opt_ends) {\n this.setFlatCoordinates(\n opt_layout,\n /** @type {Array} */ (coordinates)\n );\n this.ends_ = opt_ends;\n } else {\n this.setCoordinates(\n /** @type {Array>} */ (\n coordinates\n ),\n opt_layout\n );\n }\n }\n\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n appendLinearRing(linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n */\n clone() {\n const polygon = new Polygon(\n this.flatCoordinates.slice(),\n this.layout,\n this.ends_.slice()\n );\n polygon.applyProperties(this);\n return polygon;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n arrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n 0\n )\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance\n );\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n return linearRingsContainsXY(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n x,\n y\n );\n }\n\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingsArea(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride\n );\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean} [opt_right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @api\n */\n getCoordinates(opt_right) {\n let flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, opt_right);\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * @return {Array} Interior point.\n */\n getFlatInteriorPoint() {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n flatCenter,\n 0\n );\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\n }\n\n /**\n * Return an interior point of the polygon.\n * @return {Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoint() {\n return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\n }\n\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n getLinearRingCount() {\n return this.ends_.length;\n }\n\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {LinearRing|null} Linear ring.\n * @api\n */\n getLinearRing(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(\n this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1],\n this.ends_[index]\n ),\n this.layout\n );\n }\n\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n getLinearRings() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const linearRings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const linearRing = new LinearRing(\n flatCoordinates.slice(offset, end),\n layout\n );\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(\n this.orientedFlatCoordinates_,\n 0,\n this.ends_,\n this.stride\n );\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds\n );\n return new Polygon(\n simplifiedFlatCoordinates,\n GeometryLayout.XY,\n simplifiedEnds\n );\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./GeometryType.js\").default} Geometry type.\n * @api\n */\n getType() {\n return GeometryType.POLYGON;\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLinearRingArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n extent\n );\n }\n\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {import(\"./GeometryLayout.js\").default} [opt_layout] Layout.\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.ends_\n );\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\nexport default Polygon;\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices in meters.\n * @param {number} [opt_n] Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number} [opt_sphereRadius] Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, opt_n, opt_sphereRadius) {\n const n = opt_n ? opt_n : 32;\n /** @type {Array} */\n const flatCoordinates = [];\n for (let i = 0; i < n; ++i) {\n extend(\n flatCoordinates,\n sphereOffset(center, radius, (2 * Math.PI * i) / n, opt_sphereRadius)\n );\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const flatCoordinates = [\n minX,\n minY,\n minX,\n maxY,\n maxX,\n maxY,\n maxX,\n minY,\n minX,\n minY,\n ];\n return new Polygon(flatCoordinates, GeometryLayout.XY, [\n flatCoordinates.length,\n ]);\n}\n\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number} [opt_sides] Number of sides of the polygon. Default is 32.\n * @param {number} [opt_angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, opt_sides, opt_angle) {\n const sides = opt_sides ? opt_sides : 32;\n const stride = circle.getStride();\n const layout = circle.getLayout();\n const center = circle.getCenter();\n const arrayLength = stride * (sides + 1);\n const flatCoordinates = new Array(arrayLength);\n for (let i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (let j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n const ends = [flatCoordinates.length];\n const polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), opt_angle);\n return polygon;\n}\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number} [opt_angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, opt_angle) {\n const flatCoordinates = polygon.getFlatCoordinates();\n const stride = polygon.getStride();\n const sides = flatCoordinates.length / stride - 1;\n const startAngle = opt_angle ? opt_angle : 0;\n for (let i = 0; i <= sides; ++i) {\n const offset = i * stride;\n const angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n }\n polygon.changed();\n}\n","/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport GeometryType from './geom/GeometryType.js';\nimport Units from './proj/Units.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {VOID} from './functions.js';\nimport {\n add as addCoordinate,\n equals as coordinatesEqual,\n equals,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {assert} from './asserts.js';\nimport {assign} from './obj.js';\nimport {none as centerNone, createExtent} from './centerconstraint.js';\nimport {clamp, modulo} from './math.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {linearFindNearest} from './array.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to fit\n * the extent into. Default is the current size of the first map in the DOM that\n * uses this view, or `[100, 100]` if no such map is found.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center.\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `opt_anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [opt_options] View options.\n */\n constructor(opt_options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n const options = assign({}, opt_options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n if (options.projection) {\n disableCoordinateWarning();\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenter();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection()\n );\n }\n if (options.anchor) {\n options = assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection()\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this)\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(opt_rotation) {\n const size = this.viewportSize_;\n if (opt_rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(opt_rotation)) +\n Math.abs(h * Math.sin(opt_rotation)),\n Math.abs(w * Math.sin(opt_rotation)) +\n Math.abs(h * Math.cos(opt_rotation)),\n ];\n } else {\n return size;\n }\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [opt_size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(opt_size) {\n this.viewportSize_ = Array.isArray(opt_size)\n ? opt_size.slice()\n : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [opt_hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(opt_hints) {\n if (opt_hints !== undefined) {\n opt_hints[0] = this.hints_[0];\n opt_hints[1] = this.hints_[1];\n return opt_hints;\n } else {\n return this.hints_.slice();\n }\n }\n\n /**\n * Calculate the extent for the current view state and the passed size.\n * The size is the pixel dimensions of the box into which the calculated extent\n * should fit. In most cases you want to get the extent of the entire map,\n * that is `map.getSize()`.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided, the size\n * of the map that uses this view will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(opt_size) {\n const extent = this.calculateExtentInternal(opt_size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(opt_size) {\n const size = opt_size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 1); // The view center is not defined\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 2); // The view resolution is not defined\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 3); // The view rotation is not defined\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, opt_size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n opt_size\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [opt_size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, opt_size) {\n const size = opt_size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(opt_power) {\n const power = opt_power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [opt_power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(opt_power) {\n const logPower = Math.log(opt_power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [opt_rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(opt_rotation) {\n let size = this.getViewportSize_(opt_rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n } else {\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [opt_options] Options.\n * @api\n */\n fit(geometryOrExtent, opt_options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 24\n ); // Invalid extent or geometry provided as `geometry`\n if (Array.isArray(geometryOrExtent)) {\n assert(!isEmpty(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === GeometryType.CIRCLE) {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection()\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, opt_options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [opt_options] Options.\n */\n fitInternal(geometry, opt_options) {\n const options = opt_options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation()\n )\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, opt_anchor) {\n const anchor =\n opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, opt_anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving\n );\n\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, opt_anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, opt_anchor) {\n if (opt_anchor) {\n opt_anchor = fromUserCoordinate(opt_anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, opt_anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The rotation center.\n */\n adjustRotationInternal(delta, opt_anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving\n );\n if (opt_anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [opt_doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [opt_forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(opt_doNotCancelAnims, opt_forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || opt_forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !opt_doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [opt_duration] The animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor) {\n const duration = opt_duration !== undefined ? opt_duration : 200;\n const direction = opt_resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size\n )\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n const anchor =\n opt_anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n * @api\n */\n endInteraction(opt_duration, opt_resolutionDirection, opt_anchor) {\n const anchor =\n opt_anchor && fromUserCoordinate(opt_anchor, this.getProjection());\n this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [opt_duration] Animation duration in ms.\n * @param {number} [opt_resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [opt_anchor] The origin of the transformation.\n */\n endInteractionInternal(opt_duration, opt_resolutionDirection, opt_anchor) {\n this.setHint(ViewHint.INTERACTING, -1);\n\n this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [opt_targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, opt_targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n opt_targetResolution || this.getResolution(),\n size\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, opt_direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, opt_direction)\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [opt_direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, opt_direction) {\n const direction = opt_direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT[Units.DEGREES]) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor)\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n } else if (constrainRotation === false) {\n return rotationNone;\n } else if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n } else {\n return rotationNone;\n }\n } else {\n return disable;\n }\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n","/**\n * @module ol/size\n */\n\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [opt_size] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n } else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n } else {\n opt_size[0] = size;\n opt_size[1] = size;\n }\n return opt_size;\n }\n}\n","/**\n * @module ol/PluggableMap\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport EventType from './events/EventType.js';\nimport Layer from './layer/Layer.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {TRUE} from './functions.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {assert} from './asserts.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport {getUid} from './util.js';\nimport {hasArea} from './size.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {removeNode} from './dom.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {import(\"rbush\").default} declutterTree DeclutterTree.\n * @property {null|import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} PluggableMapOnSignature\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {PluggableMap} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass PluggableMap extends BaseObject {\n /**\n * @param {MapOptions} options Map options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.on;\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.once;\n\n /***\n * @type {PluggableMapOnSignature}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderComplete_;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {*}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = /** @this {PluggableMap} */ function () {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || new Collection();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions = optionsInternal.interactions || new Collection();\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this)\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(this);\n }.bind(this)\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n this.addOverlayInternal_(\n /** @type {import(\"./Overlay.js\").default} */ (event.element)\n );\n }.bind(this)\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n function (event) {\n const overlay = /** @type {import(\"./Overlay.js\").default} */ (\n event.element\n );\n const id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }.bind(this)\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n * @this {PluggableMap}\n */\n function (control) {\n control.setMap(this);\n }.bind(this)\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n * @this {PluggableMap}\n */\n function (interaction) {\n interaction.setMap(this);\n }.bind(this)\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * @abstract\n * @return {import(\"./renderer/Map.js\").default} The map renderer\n */\n createRenderer() {\n throw new Error('Use a map type that has a createRenderer method');\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteraction()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n */\n disposeInternal() {\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const hitTolerance =\n opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n const layerFilter =\n opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n const checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, opt_options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n opt_options\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Please the `layer.getData()` method for {@link module:ol/layer/Tile~TileLayer#getData tile layers} or\n * {@link module:ol/layer/Image~ImageLayer#getData image layers} instead of using this method.\n *\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n *\n * Note: In maps with more than one layer, this method will typically return pixel data\n * representing the composed image of all layers visible at the given pixel – because layers\n * will generally share the same rendering context. To force layers to render separately, and\n * to get pixel data representing only one layer at a time, you can assign each layer a unique\n * `className` in its constructor.\n *\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(this: S, import(\"./layer/Layer.js\").default, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer~Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {AtPixelOptions} [opt_options] Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n * @deprecated\n */\n forEachLayerAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n const options = opt_options || {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(\n pixel,\n this.frameState_,\n hitTolerance,\n callback,\n layerFilter\n );\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [opt_options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, opt_options) {\n if (!this.frameState_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const layerFilter =\n opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n const hitTolerance =\n opt_options.hitTolerance !== undefined ? opt_options.hitTolerance : 0;\n const checkWrapped = opt_options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewportPosition = this.viewport_.getBoundingClientRect();\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n const target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string'\n ? document.getElementById(target)\n : target;\n } else {\n return null;\n }\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection()\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.pixelToCoordinateTransform,\n pixel.slice()\n );\n }\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layer = layerStatesArray[i].layer;\n if (!layer.getRenderer().ready) {\n return true;\n }\n const source = /** @type {import(\"./layer/Layer.js\").default} */ (\n layer\n ).getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection()\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2)\n );\n }\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [opt_type] Type.\n */\n handleBrowserEvent(browserEvent, opt_type) {\n const type = opt_type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !(rootNode === doc ? doc.documentElement : rootNode).contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (\n frameState &&\n this.hasListener(RenderEventType.RENDERCOMPLETE) &&\n !frameState.animate &&\n this.renderComplete_\n ) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState\n );\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n removeNode(this.viewport_);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const targetElement = this.getTargetElement();\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = this.createRenderer();\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this)\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false\n );\n\n const defaultView = this.getOwnerDocument().defaultView;\n const keyboardEventTarget = !this.keyboardEventTarget_\n ? targetElement\n : this.keyboardEventTarget_;\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this\n ),\n listen(defaultView, EventType.RESIZE, this.updateSize, this),\n ];\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_();\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutterTree: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size\n );\n }\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState)\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState)\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady();\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n // eslint-disable-next-line\n console.warn(\n \"No map visible because the map container's width or height are 0.\"\n );\n }\n }\n }\n\n this.setSize(size);\n this.updateViewportSize_();\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @private\n */\n updateViewportSize_() {\n const view = this.getView();\n if (view) {\n let size = undefined;\n const computedStyle = getComputedStyle(this.viewport_);\n if (computedStyle.width && computedStyle.height) {\n size = [\n parseInt(computedStyle.width, 10),\n parseInt(computedStyle.height, 10),\n ];\n }\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({layers: /** @type {Collection} */ (options.layers)});\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 47\n ); // Expected `controls` to be an array or an `import(\"./Collection.js\").Collection`\n controls = /** @type {Collection} */ (options.controls);\n }\n }\n\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 48\n ); // Expected `interactions` to be an array or an `import(\"./Collection.js\").Collection`\n interactions = /** @type {Collection} */ (options.interactions);\n }\n }\n\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 49\n ); // Expected `overlays` to be an array or an `import(\"./Collection.js\").Collection`\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default PluggableMap;\n","/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport {VOID} from '../functions.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {removeNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n */\n disposeInternal() {\n removeNode(this.element);\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_\n ? this.target_\n : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this)\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n","/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {equals} from '../array.js';\nimport {inView} from '../layer/Layer.js';\nimport {removeChildren, replaceNode} from '../dom.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [opt_options] Attribution options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n const lookup = {};\n\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n const visibleAttributions = [];\n\n let collapsible = true;\n const layerStatesArray = frameState.layerStatesArray;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n if (!inView(layerState, frameState.viewState)) {\n continue;\n }\n\n const source = /** @type {import(\"../layer/Layer.js\").default} */ (\n layerState.layer\n ).getSource();\n if (!source) {\n continue;\n }\n\n const attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n\n const attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n\n collapsible =\n collapsible && source.getAttributionsCollapsible() !== false;\n\n if (Array.isArray(attributions)) {\n for (let j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n } else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n if (!this.overrideCollapsible_) {\n this.setCollapsible(collapsible);\n }\n return visibleAttributions;\n }\n\n /**\n * @private\n * @param {?import(\"../PluggableMap.js\").FrameState} frameState Frame state.\n */\n updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = this.collectSourceAttributions_(frameState);\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n","/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [opt_options] Rotate options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [opt_options] Zoom options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport {easeOut, linear} from '../easing.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} InteractionOnSignature\n */\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n /**\n * @param {InteractionOptions} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n /***\n * @type {InteractionOnSignature}\n */\n this.on;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.once;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.un;\n\n if (opt_options && opt_options.handleEvent) {\n this.handleEvent = opt_options.handleEvent;\n }\n\n /**\n * @private\n * @type {import(\"../PluggableMap.js\").default|null}\n */\n this.map_ = null;\n\n this.setActive(true);\n }\n\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n getActive() {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n }\n\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../PluggableMap.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n return true;\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(active) {\n this.set(InteractionProperty.ACTIVE, active);\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../PluggableMap.js\").default|null} map Map.\n */\n setMap(map) {\n this.map_ = map;\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [opt_duration] Duration.\n */\nexport function pan(view, delta, opt_duration) {\n const currentCenter = view.getCenterInternal();\n if (currentCenter) {\n const center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [opt_anchor] Anchor coordinate in the user projection.\n * @param {number} [opt_duration] Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n const currentZoom = view.getZoom();\n\n if (currentZoom === undefined) {\n return;\n }\n\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n const newResolution = view.getResolutionForZoom(newZoom);\n\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: opt_anchor,\n duration: opt_duration !== undefined ? opt_duration : 250,\n easing: easeOut,\n });\n}\n\nexport default Interaction;\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {getValues} from '../obj.js';\n\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nclass PointerInteraction extends Interaction {\n /**\n * @param {Options} [opt_options] Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options)\n );\n\n if (options.handleDownEvent) {\n this.handleDownEvent = options.handleDownEvent;\n }\n\n if (options.handleDragEvent) {\n this.handleDragEvent = options.handleDragEvent;\n }\n\n if (options.handleMoveEvent) {\n this.handleMoveEvent = options.handleMoveEvent;\n }\n\n if (options.handleUpEvent) {\n this.handleUpEvent = options.handleUpEvent;\n }\n\n if (options.stopDown) {\n this.stopDown = options.stopDown;\n }\n\n /**\n * @type {boolean}\n * @protected\n */\n this.handlingDownUpSequence = false;\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedPointers_ = {};\n\n /**\n * @type {Array}\n * @protected\n */\n this.targetPointers = [];\n }\n\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n getPointerCount() {\n return this.targetPointers.length;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleDownEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleDragEvent(mapBrowserEvent) {}\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n\n let stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n const handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n } else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n const handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n }\n\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleMoveEvent(mapBrowserEvent) {}\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleUpEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n stopDown(handled) {\n return handled;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n updateTrackedPointers_(mapBrowserEvent) {\n if (isPointerDraggingEvent(mapBrowserEvent)) {\n const event = mapBrowserEvent.originalEvent;\n\n const id = event.pointerId.toString();\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n delete this.trackedPointers_[id];\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedPointers_[id] = event;\n } else if (id in this.trackedPointers_) {\n // update only when there was a pointerdown event for this pointer\n this.trackedPointers_[id] = event;\n }\n this.targetPointers = getValues(this.trackedPointers_);\n }\n }\n}\n\n/**\n * @param {Array} pointerEvents List of events.\n * @return {import(\"../pixel.js\").Pixel} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n const length = pointerEvents.length;\n let clientX = 0;\n let clientY = 0;\n for (let i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return [clientX / length, clientY / length];\n}\n\n/**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} Whether the event is a pointerdown, pointerdrag\n * or pointerup event.\n */\nfunction isPointerDraggingEvent(mapBrowserEvent) {\n const type = mapBrowserEvent.type;\n return (\n type === MapBrowserEventType.POINTERDOWN ||\n type === MapBrowserEventType.POINTERDRAG ||\n type === MapBrowserEventType.POINTERUP\n );\n}\n\nexport default PointerInteraction;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
                    `.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const activeElement = event.map.getOwnerDocument().activeElement;\n return targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n return event.map.getTargetElement().hasAttribute('tabindex')\n ? focus(event)\n : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not a ``-,\n * `